> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plungeai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# bot-config → scheduler job

> Studio turns the block into one scheduled job: jobtype: workflow, target: <workflow id>, schedule: <cron>, parameters (JSON) { prompt, deliver, local }. The scheduler runs the saved workflow at each tick and delivers taskcomplete's result to every target.


<!-- sources-of-truth: orchestration/scheduler/delivery.ts, orchestration/scheduler/types.ts (CreateJobRequest), apps/ocean-studio/src/components/scheduler/deliveryTypes.ts, apps/ocean-studio/src/worker/lib/botConfig.ts, orchestration/BOT-README.md | last-synced: 2026-09-02 -->

Studio turns the block into one scheduled job: `job_type: workflow`, `target: <workflow id>`,
`schedule: <cron>`, `parameters` (JSON) `{ prompt, deliver, local }`. The scheduler runs the
saved workflow at each tick and delivers `task_complete`'s result to every target.

## Delivery behaviour (delivery.ts)

- Fire-and-forget: a delivery failure never fails the run.
- Length caps per channel: telegram 3800, whatsapp 3800, discord 1900, slack 3800, email
  100000, inapp 2000 characters — keep the bot's output well under the smallest cap you use.
- telegram / whatsapp targets must be paired to the owner: generate a pairing code in Studio
  and send `/pair <code>` from that chat (Telegram additionally requires the user to have
  opened the bot once); discord requires any active pairing. Unpaired targets are skipped.
- email sends from the platform address; a bare email target means the owner's address. Any
  other address delivers only after that address holder confirmed it (a confirmed delivery
  recipient) — otherwise the target is skipped silently.
- slack: a bare target DMs the owner; a `chat_id` / `to` target needs the owner to be a
  connected workspace member.

## Local bots

`local: true` marks the job so the scheduler skips cleanly when the owner's machine is
offline instead of failing. The reasoning loop stays in the cloud; only tool calls reach the
machine through the desktop daemon.

## What the block does NOT do

- Channel *binding* (a chat that forwards every message to the bot) is a chat-side command
  (`/bot <name>` on Telegram/WhatsApp/Discord, `/plunge bind` on Slack), not part of creation.
- Inbound email / webhook triggers are attached later from the bot's ⋮ menu in Studio.
