Slash commands
Commands are handled by the Gateway. Most commands must be sent as a standalone message that starts with/.
The host-only bash chat command uses ! <cmd> (with /bash <cmd> as an alias).
There are two related systems:
- Commands: standalone
/...messages. - Directives:
/think,/verbose,/reasoning,/elevated,/exec,/model,/queue.- Directives are stripped from the message before the model sees it.
- In normal chat messages, they are treated as inline hints and do not persist session settings.
- In directive-only messages, they persist to the session and reply with an acknowledgement.
- Directives are only applied for authorized senders. If
commands.allowFromis set, it is the only allowlist used. Otherwise authorization comes from channel allowlists/pairing pluscommands.useAccessGroups. Unauthorized senders see directives treated as plain text.
/help, /commands, /status, /whoami (/id).
They run immediately, are stripped before the model sees the message, and the
remaining text continues through the normal flow.
Config
commands.text(defaulttrue) enables parsing/...in chat messages.- On surfaces without native commands, text commands still work even if you
set this to
false: WhatsApp, WebChat, Signal, iMessage, Google Chat, and Microsoft Teams.
- On surfaces without native commands, text commands still work even if you
set this to
commands.native(default"auto") registers native commands.- Auto: on for Discord/Telegram; off for Slack until you add slash commands; ignored for providers without native support.
- Override per provider with
channels.discord.commands.native,channels.telegram.commands.native, orchannels.slack.commands.native. Values are boolean or"auto". falseclears previously registered commands on Discord/Telegram at startup. Slack commands are managed in the Slack app and are not removed automatically.
commands.nativeSkills(default"auto") registers skill commands natively when supported.- Auto: on for Discord/Telegram; off for Slack (Slack requires creating a slash command per skill).
- Override per provider with
channels.discord.commands.nativeSkills,channels.telegram.commands.nativeSkills, orchannels.slack.commands.nativeSkills. Values are boolean or"auto".
commands.bash(defaultfalse) enables! <cmd>to run host shell commands./bash <cmd>is an alias and requirestools.elevatedallowlists.commands.bashForegroundMs(default2000) controls how long bash waits before switching to background mode.0backgrounds immediately.commands.config(defaultfalse) enables/config(reads/writes~/.fased/fased.json).commands.debug(defaultfalse) enables/debug(runtime-only overrides).commands.allowFrom(optional) sets a per-provider allowlist for command authorization. When configured, it is the only authorization source for commands and directives. Channel allowlists/pairing andcommands.useAccessGroupsare ignored.- Use
"*"for a global default; provider-specific keys override it. commands.useAccessGroups(defaulttrue) enforces allowlists/policies for commands whencommands.allowFromis not set.
Command list
Text + native (when enabled):/help/commands/skill <name> [input](run a skill by name)/status(show current status; includes provider usage/quota for the current model provider when available)/allowlist(list/add/remove allowlist entries)/approve <id> allow-once|allow-always|deny(resolve exec approval prompts)/context [list|detail|json](explain “context”;detailshows per-file + per-tool + per-skill + system prompt size)/export-session [path](alias:/export) (export current session to HTML with full system prompt)/whoami(show your sender id; alias:/id)/agent list|current|switch <agent>(show or change the Agent route for this channel chat)/session list|new|switch|current(create and move between named sessions for this channel chat)/session idle <duration|off>(manage inactivity auto-unfocus for focused thread bindings)/session max-age <duration|off>(manage hard max-age auto-unfocus for focused thread bindings)/task new every <duration> [<name>:] <prompt>creates a scheduled task for the current Agent/session.- Natural examples:
/task new every 10 minutes Check provider health and send here./task new check docs updates hourly/task new every 30m Service pulse: summarize gateway health./task new remind me every Friday to review open tasks.
- Common policy flags:
--objective <text>,--success <text>--mode agent-turn|skill-only|no-model|auto--memory none|session-summary|pinned|search|agent--skills wallet,search,--tool <name>,--input <json>--model <provider/model>,--escalate <provider/model>--max-tokens <n>,--max-cost <usd>,--max-runs-hour <n>--stop-on-success,--stop-text done,complete--max-successes <n>,--max-total-runs <n>--auto-repair true|false,--auto-stop-optional true|false--max-auto-repairs <n>,--primary-source-approval true|false
- Natural examples:
/task edit <id> ...edits schedule, prompt/name, delivery, objective, success, model, memory, skill, budget, and stop policy for a scheduled task.- Natural examples:
/task edit <id> every 30m/task edit <id> send here/task edit <id> use cheap check/task edit <id> use no model/task edit <id> escalate to openrouter/z-ai/glm-5.1/task edit <id> stop after success
- Natural examples:
/task list|show <id>|runs <id>|last <id>|run-show <runId>|run <id>|pause <id>|resume <id>|cancel <id>inspects, force-runs, pauses, resumes, or cancels scheduled tasks for the current Agent/session./task cancel-run <runId>|retry-run <runId>|clear-stale <runId>controls one queued task run. These use run ids from/task runsor/task last, not task ids./task listshows plan, delivery, next run, and last result./task show <id>shows full task policy, delivery target, run counters, and evaluator state./task runs <id>lists recent runs with status, result source, delivery, duration, and summary/error./task last <id>expands the newest run with source, adapter/model, delivery, usage, evaluator, session key, and/chat?session=...transcript path./task run-show <runId>expands one queue run with checkpoint steps, attempt counts, lease owner/expiry, source/adapter/model, delivery, recommended recovery actions, and transcript path./task resume <id>re-runs task preflight. If access is still missing, it stays blocked and replies with the setup target./task repair <id> configure|add-source|retry|stop-sourcemirrors the Agent > Tasks and run-detail source recovery buttons.fased task sources list|add|show|enable|disable|forgetmanages trusted source memory used by task repair and future source planning.
/subagents list|kill|log|info|send|steer|spawninspects, controls, or spawns sub-agent runs for the current session./acp spawn|cancel|steer|close|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|sessionsinspects and controls ACP runtime sessions./agents(list thread-bound agents for this session)/focus <target>(Discord: bind this thread, or a new thread, to a session/subagent target)/unfocus(Discord: remove the current thread binding)/kill <id|#|all>(immediately abort one or all running sub-agents for this session; no confirmation message)/steer <id|#> <message>steers a running sub-agent immediately. It uses in-run steering when possible; otherwise it aborts current work and restarts on the steer message./tell <id|#> <message>(alias for/steer)/config show|get|set|unset(persist config to disk, owner-only; requirescommands.config: true)/debug show|set|unset|reset(runtime overrides, owner-only; requirescommands.debug: true)/usage off|tokens|full|cost(per-response usage footer or local cost summary)/tts off|always|inbound|tagged|status|provider|limit|summary|audio(control TTS; see /tts)- Discord: native command is
/voice(Discord reserves/tts); text/ttsstill works.
- Discord: native command is
/stop/restart/dock-telegram(alias:/dock_telegram) (switch replies to Telegram)/dock-discord(alias:/dock_discord) (switch replies to Discord)/dock-slack(alias:/dock_slack) (switch replies to Slack)/activation mention|always(groups only)/send on|off|inherit(owner-only)/resetor/new [model](optional model hint; remainder is passed through)/think <off|minimal|low|medium|high|xhigh>(dynamic choices by model/provider; aliases:/thinking,/t)/verbose on|full|off(alias:/v)/reasoning on|off|stream(alias:/reason) sends a separate message prefixedReasoning:when on.streammeans Telegram draft only./elevated on|off|ask|full(alias:/elev;fullskips exec approvals)/exec host=<sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>sets exec routing defaults. Send/execto show current settings./model <name>(alias:/models; or/<alias>fromagents.defaults.models.*.alias)/queue <mode>(plus options likedebounce:2s cap:25 drop:summarize; send/queueto see current settings)/bash <command>(host-only; alias for! <command>; requirescommands.bash: true+tools.elevatedallowlists)
/compact [instructions](see /concepts/compaction)! <command>(host-only; one at a time; use!poll+!stopfor long-running jobs)!poll(check output / status; accepts optionalsessionId;/bash pollalso works)!stop(stop the running bash job; accepts optionalsessionId;/bash stopalso works)
- Commands accept an optional
:between the command and args (e.g./think: high,/send: on,/help:). /new <model>accepts a model alias,provider/model, or a provider name with fuzzy match. If no match is found, the text is treated as the message body.- For full provider usage breakdown, use
fased status --usage. /allowlist add|removerequirescommands.config=trueand honors channelconfigWrites./usagecontrols the per-response usage footer;/usage costprints a local cost summary from Fased session logs./restartis enabled by default; setcommands.restart: falseto disable it.- Discord-only native command:
/vc join|leave|statuscontrols voice channels. Requireschannels.discord.voiceand native commands; not available as text. - Discord thread-binding commands require effective thread bindings to be
enabled:
/focus,/unfocus,/agents,/session idle,/session max-age. Usesession.threadBindings.enabledand/orchannels.discord.threadBindings.enabled. - ACP command reference and runtime behavior: ACP Agents.
/verboseis meant for debugging and extra visibility; keep it off in normal use.- Tool failure summaries are still shown when relevant. Detailed failure text is
only included when
/verboseisonorfull. /reasoningand/verboseare risky in group settings: they may reveal internal reasoning or tool output you did not intend to expose. Prefer leaving them off, especially in group chats.- Fast path: command-only messages from allowlisted senders are handled immediately (bypass queue + model).
- Group mention gating: command-only messages from allowlisted senders bypass mention requirements.
- Inline shortcuts (allowlisted senders only): certain commands also work
when embedded in a normal message and are stripped before the model sees the
remaining text.
- Example:
hey /statustriggers a status reply, and the remaining text continues through the normal flow.
- Example:
- Currently:
/help,/commands,/status,/whoami(/id). - Unauthorized command-only messages are silently ignored, and inline
/...tokens are treated as plain text. - Skill commands:
user-invocableskills are exposed as slash commands. Names are sanitized toa-z0-9_with max 32 chars; collisions get numeric suffixes such as_2./skill <name> [input]runs a skill by name (useful when native command limits prevent per-skill commands).- By default, skill commands are forwarded to the model as a normal request.
- Skills may optionally declare
command-dispatch: toolto route the command directly to a tool (deterministic, no model). - Example:
/prose(OpenProse plugin) — see OpenProse.
- Native command arguments: Discord uses autocomplete for dynamic options and button menus when required args are omitted. Telegram and Slack show a button menu when a command supports choices and you omit the arg.
Usage surfaces (what shows where)
- Provider usage/quota (example: “Claude 80% left”) shows up in
/statusfor the current model provider when usage tracking is enabled. - Per-response tokens/cost is controlled by
/usage off|tokens|full(appended to normal replies). /model statusis about models/auth/endpoints, not usage.
Model selection (/model)
/model is implemented as a directive.
Examples:
/modeland/model listshow a compact, numbered picker (model family + available providers).- On Discord,
/modeland/modelsopen an interactive picker with provider and model dropdowns plus a Submit step. /model <#>selects from that picker (and prefers the current provider when possible)./model statusshows the detailed view, including configured provider endpoint (baseUrl) and API mode (api) when available.
Debug overrides
/debug lets you set runtime-only config overrides. They live in memory,
not on disk. Owner-only. Disabled by default; enable with
commands.debug: true.
Examples:
- Overrides apply immediately to new config reads, but do not write to
~/.fased/fased.json. - Use
/debug resetto clear all overrides and return to the on-disk config.
Config updates
/config writes to your on-disk config (~/.fased/fased.json). Owner-only.
Disabled by default; enable with commands.config: true.
Examples:
- Config is validated before write; invalid changes are rejected.
/configupdates persist across restarts.
Surface notes
- Text commands run in the normal chat session (DMs share
main, groups have their own session). - Native commands use isolated sessions:
- Discord:
agent:<agentId>:discord:slash:<userId> - Slack:
agent:<agentId>:slack:slash:<userId>(prefix configurable viachannels.slack.slashCommand.sessionPrefix) - Telegram:
telegram:slash:<userId>(targets the chat session viaCommandTargetSessionKey)
- Discord:
/stoptargets the active chat session so it can abort the current run.- Slack:
channels.slack.slashCommandis still supported for a single/fased-style command. If you enablecommands.native, create one Slack slash command per built-in command using the same names as/help. Command argument menus are delivered as ephemeral Block Kit buttons.- Slack native exception: register
/agentstatus, not/status, because Slack reserves/status. Text/statusstill works in Slack messages.
- Slack native exception: register