Skip to main content

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 (not directive-only), they are treated as “inline hints” and do not persist session settings.
    • In directive-only messages (the message contains only directives), they persist to the session and reply with an acknowledgement.
    • Directives are only applied for authorized senders. If commands.allowFrom is set, it is the only allowlist used; otherwise authorization comes from channel allowlists/pairing plus commands.useAccessGroups. Unauthorized senders see directives treated as plain text.
There are also a few inline shortcuts (allowlisted/authorized senders only): /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: {
    native: "auto",
    nativeSkills: "auto",
    text: true,
    bash: false,
    bashForegroundMs: 2000,
    config: false,
    debug: false,
    restart: false,
    allowFrom: {
      "*": ["user1"],
      discord: ["user:123"],
    },
    useAccessGroups: true,
  },
}
  • commands.text (default true) enables parsing /... in chat messages.
    • On surfaces without native commands (WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams), text commands still work even if you set this to false.
  • 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.
    • Set channels.discord.commands.native, channels.telegram.commands.native, or channels.slack.commands.native to override per provider (bool or "auto").
    • false clears 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).
    • Set channels.discord.commands.nativeSkills, channels.telegram.commands.nativeSkills, or channels.slack.commands.nativeSkills to override per provider (bool or "auto").
  • commands.bash (default false) enables ! <cmd> to run host shell commands (/bash <cmd> is an alias; requires tools.elevated allowlists).
  • commands.bashForegroundMs (default 2000) controls how long bash waits before switching to background mode (0 backgrounds immediately).
  • commands.config (default false) enables /config (reads/writes ~/.fased/fased.json).
  • commands.debug (default false) 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 and commands.useAccessGroups are ignored). Use "*" for a global default; provider-specific keys override it.
  • commands.useAccessGroups (default true) enforces allowlists/policies for commands when commands.allowFrom is 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”; detail shows 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> (create 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., and /task new remind me every Friday to review open tasks.
    • Advanced 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.
  • /task edit <id> ... (edit schedule, prompt/name, delivery, objective, success, model, memory, skill, budget, and stop policy for a scheduled task owned by the current Agent/session)
    • 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, and /task edit <id> stop after success.
  • /task list|show <id>|runs <id>|last <id>|run-show <runId>|run <id>|pause <id>|resume <id>|cancel <id> (inspect, show details, inspect recent runs, show the latest run, force-run, pause, resume, or cancel 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 runs or /task last, not task ids.
    • /task list shows 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-source mirrors the Agent > Tasks and run-detail source recovery buttons.
    • fased task sources list|add|show|enable|disable|forget manages trusted source memory used by task repair and future source planning.
  • /subagents list|kill|log|info|send|steer|spawn (inspect, control, or spawn sub-agent runs for the current session)
  • /acp spawn|cancel|steer|close|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|sessions (inspect and control 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> (steer a running sub-agent immediately: in-run when possible, otherwise abort current work and restart on the steer message)
  • /tell <id|#> <message> (alias for /steer)
  • /config show|get|set|unset (persist config to disk, owner-only; requires commands.config: true)
  • /debug show|set|unset|reset (runtime overrides, owner-only; requires commands.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 /tts still works.
  • /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)
  • /reset or /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; when on, sends a separate message prefixed Reasoning:; stream = Telegram draft only)
  • /elevated on|off|ask|full (alias: /elev; full skips exec approvals)
  • /exec host=<sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id> (send /exec to show current)
  • /model <name> (alias: /models; or /<alias> from agents.defaults.models.*.alias)
  • /queue <mode> (plus options like debounce:2s cap:25 drop:summarize; send /queue to see current settings)
  • /bash <command> (host-only; alias for ! <command>; requires commands.bash: true + tools.elevated allowlists)
Text-only:
  • /compact [instructions] (see /concepts/compaction)
  • ! <command> (host-only; one at a time; use !poll + !stop for long-running jobs)
  • !poll (check output / status; accepts optional sessionId; /bash poll also works)
  • !stop (stop the running bash job; accepts optional sessionId; /bash stop also works)
Notes:
  • 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 (fuzzy match); if no match, the text is treated as the message body.
  • For full provider usage breakdown, use fased status --usage.
  • /allowlist add|remove requires commands.config=true and honors channel configWrites.
  • /usage controls the per-response usage footer; /usage cost prints a local cost summary from Fased session logs.
  • /restart is enabled by default; set commands.restart: false to disable it.
  • Discord-only native command: /vc join|leave|status controls voice channels (requires channels.discord.voice and native commands; not available as text).
  • Discord thread-binding commands (/focus, /unfocus, /agents, /session idle, /session max-age) require effective thread bindings to be enabled (session.threadBindings.enabled and/or channels.discord.threadBindings.enabled).
  • ACP command reference and runtime behavior: ACP Agents.
  • /verbose is meant for debugging and extra visibility; keep it off in normal use.
  • Tool failure summaries are still shown when relevant, but detailed failure text is only included when /verbose is on or full.
  • /reasoning (and /verbose) are 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 /status triggers a status reply, and the remaining text continues through the normal flow.
  • Currently: /help, /commands, /status, /whoami (/id).
  • Unauthorized command-only messages are silently ignored, and inline /... tokens are treated as plain text.
  • Skill commands: user-invocable skills are exposed as slash commands. Names are sanitized to a-z0-9_ (max 32 chars); collisions get numeric suffixes (e.g. _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: tool to 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 you omit required args). 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 /status for 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 status is about models/auth/endpoints, not usage.

Model selection (/model)

/model is implemented as a directive. Examples:
/model
/model list
/model 3
/model provider/model
/model opus@anthropic:default
/model status
Notes:
  • /model and /model list show a compact, numbered picker (model family + available providers).
  • On Discord, /model and /models open 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 status shows the detailed view, including configured provider endpoint (baseUrl) and API mode (api) when available.

Debug overrides

/debug lets you set runtime-only config overrides (memory, not disk). Owner-only. Disabled by default; enable with commands.debug: true. Examples:
/debug show
/debug set messages.responsePrefix="[fased]"
/debug set channels.whatsapp.allowFrom=["+1555","+4477"]
/debug unset messages.responsePrefix
/debug reset
Notes:
  • Overrides apply immediately to new config reads, but do not write to ~/.fased/fased.json.
  • Use /debug reset to 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 show
/config show messages.responsePrefix
/config get messages.responsePrefix
/config set messages.responsePrefix="[fased]"
/config unset messages.responsePrefix
Notes:
  • Config is validated before write; invalid changes are rejected.
  • /config updates 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 via channels.slack.slashCommand.sessionPrefix)
    • Telegram: telegram:slash:<userId> (targets the chat session via CommandTargetSessionKey)
  • /stop targets the active chat session so it can abort the current run.
  • Slack: channels.slack.slashCommand is still supported for a single /fased-style command. If you enable commands.native, you must create one Slack slash command per built-in command (same names as /help). Command argument menus for Slack are delivered as ephemeral Block Kit buttons.
    • Slack native exception: register /agentstatus (not /status) because Slack reserves /status. Text /status still works in Slack messages.