Discord commands
The SupaCloud Discord control bot accepts slash-prefixed message bodies in any
channel or DM where the bot is present. The bot boots only when
DISCORD_BOT_TOKEN is set and is entirely separate from the per-workspace
Discord notify/trigger resource.
Ids: every listing shows the first 8 characters of an id, and every command
that takes an id (/task, /logs, /cancel, /follow, /intervene, …)
accepts that short form — a unique prefix resolves, an ambiguous one lists the
candidates with a longer prefix each. Detail replies print the full id as a code
span (Discord has no copy button; select it to copy).
Commands
Section titled “Commands”| Command | Description |
|---|---|
/help |
Show the list of available commands. |
/status |
Active tasks. |
/task <id> |
Task details. |
/run <project> <agent> <prompt> |
Launch a task. |
/tasks |
Open a button-driven recent-task picker (tap a task for detail, then act). |
/issues [project] |
Open the Project → Issue → Agent → Launch wizard (button-driven). |
/intervene <id> <msg> |
Send a message to a running task. |
/approvals |
List EVERY pending human decision gate in one inbox — the interactive tool/question/visual/model-class gates and the workflow human-gates together (ADR 0045; #1197). There is no filter argument: tool, workflow and all were retired and are now refused by name, not silently ignored. Workflow gates carry inline Approve/Reject buttons. |
/skills [approve|reject <id>] |
List the open induced-skill proposals, or approve/reject one by id. Deciding is workspace-admin only (ADR 0045). |
/usage |
Per-provider subscription-saturation windows for the active workspace (admin/owner only) (ADR 0045). |
/budget |
The $-budget status (cap, spend, remaining) — a member read (ADR 0045). |
/autonomy [0-100] |
Show the resolved effective autonomy (level, named stop, policy preview). Setting from chat is not yet available — use the web settings or the Management API (ADR 0045). |
/approval_mode <project> [none|pr_draft] |
Show or set a project’s PR-review approval mode. Setting is workspace-admin only (ADR 0045). human_gate is retired for this command and is refused by name — a merge-side gate now lives on the automation’s per-stage gate flags. |
/schedule list|add|pause|resume|delete |
Manage schedules. |
/link <code> |
Link your Discord identity to your SupaCloud account. |
Account linking
Section titled “Account linking”Run /link <code> in a DM with the bot. The link code is a short-lived
bearer secret; sending it in a guild channel would expose it in shared history.
The bot rejects /link calls made outside a DM and asks you to retry in a DM.
To obtain a link code, open Settings in the SupaCloud web UI, go to the
Telegram section, and click Generate link token. The same one-time link
token works for both the Telegram and Discord bots
(POST /api/settings/telegram-link-token); there is no separate Discord token
page.
Once linked, SupaCloud remembers your Discord identity against your account. The same account record backs both the Discord and Telegram control bots — you only need to link once per platform.
Button-driven flows
Section titled “Button-driven flows”Two commands open interactive button flows rather than returning plain text:
/tasks— presents the five most recent active tasks as buttons. Tap a task to see its detail, then choose an action./issues [project]— chains a wizard: Project → Issue → Agent → Launch. Omitprojectto be prompted for it first. Button interactions are handled as DiscordINTERACTION_CREATEevents and edit the source message in place.
Live mode
Section titled “Live mode”Launching a task from Discord — a direct /run, the /run wizard, or the
/issues wizard — enters live mode automatically on the launching channel.
Each task step updates a single message edited in place: the agent’s answer, a
rolling list of the tools it runs, and its current thinking, all coalesced (with
tool-line deduplication) so the channel stays readable. An Unfollow button sits
under the confirmation so you can leave the stream in one press, and any plain
(non-command) message you send while following is forwarded to the task as an
intervention. The message finalises and live mode stops automatically when the task
completes. Following is per-surface: a task you start from Discord streams in
Discord only.
Task TL;DR notifications
Section titled “Task TL;DR notifications”When a task finishes, a short TL;DR is pushed to the task owner’s linked Discord account. It carries a status glyph, the task title, a one-line result and a direct link to the task:
- a task that succeeded reports what it produced — its result summary, or the agent’s last message when the summary has not been written yet;
- a task that failed leads with the failure class — provider overloaded, usage limit reached, context window exceeded, auth / configuration error, or a plain error — followed by the error text itself, never a bare “failed”.
Both outcomes close with a narrow operational footer naming the model that ran,
what it cost and the token counts — gpt-5.6-luna · $0.42 · 12.3k→4.1k tok. A value
the server does not know simply drops its segment; a missing figure is never shown
as $0.00.
The result line is clamped to about two sentences and passes the secret-redaction wall first, so nothing an agent printed can leak a key or token into chat. With no linked Discord account there is nothing to push.
The TL;DR lands in your direct message with the bot. If you launched the task in that same DM with live mode, the live message already carries the final block, so the TL;DR is not sent on top of it — you get one terminal message, not two. A task launched in a guild channel is different: the live block belongs to the channel and the TL;DR still reaches your DM, because those are two separate places.
The per-account toggle in the chat-account settings turns these post-task messages off. It covers more than its name suggests, on purpose: the TL;DR above and the harness-memory note below, because both are messages sent because a task ended.
Harness-memory notes
Section titled “Harness-memory notes”Discord has no live event feed of its own, so one more task-end signal arrives as a direct message: when an agent captured its harness memory at the end of a run, you get a short note naming the harness and the files it wrote. Telegram shows the same information inside its live message and the web UI in the event log, which is why this note is a Discord DM and exists nowhere else.
Only the capture direction is announced. Restoring memory at the start of a run is not something you asked to be paged about, and workflow step tasks stay silent — one signal per task you launched, never one per autodev node.
It is governed by the same per-account toggle as the TL;DR above.
See also
Section titled “See also”- Web terminal commands — the equivalent command
set for the
/cliterminal. - Launch a task from an issue — the cross-interface issue→task recipe.