斜杠命令
命令由 Gateway 处理。大多数命令必须作为以 / 开头的独立消息发送。
主机专用的 bash 聊天命令使用 ! <cmd>(/bash <cmd> 是别名)。
有两个相关的系统:
- 命令:独立的
/...消息。 - 指令:
/think、/fast、/verbose、/reasoning、/elevated、/exec、/model、/queue。- 指令在模型看到消息前被剥离。
- 在普通聊天消息中(不是纯指令消息),它们被当作”内联提示”,不会持久化会话设置。
- 在纯指令消息中(消息仅包含指令),它们会持久化到会话并回复确认。
- 指令仅对授权发送者生效。如果设置了
commands.allowFrom,它是唯一使用的白名单;否则授权来自渠道白名单/配对加上commands.useAccessGroups。未授权发送者的指令被当作纯文本。
还有几个内联快捷方式(仅限白名单/授权发送者):/help、/commands、/status、/whoami(/id)。
它们立即执行,在模型看到消息前被剥离,剩余文本继续正常流程。
配置
{
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(默认true)启用解析聊天消息中的/...。- 在没有原生命令支持的平台(WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams)上,即使你设为
false,文本命令仍然有效。
- 在没有原生命令支持的平台(WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams)上,即使你设为
commands.native(默认"auto")注册原生命令。- Auto:Discord/Telegram 开启;Slack 关闭(直到你添加斜杠命令);不支持原生命令的提供商忽略。
- 通过
channels.discord.commands.native、channels.telegram.commands.native或channels.slack.commands.native按提供商覆盖(布尔值或"auto")。 false在 Discord/Telegram 启动时清除之前注册的命令。Slack 命令在 Slack 应用中管理,不会自动移除。
commands.nativeSkills(默认"auto")在支持的平台上原生注册 Skill 命令。- Auto:Discord/Telegram 开启;Slack 关闭(Slack 需要为每个 Skill 创建一个斜杠命令)。
- 通过
channels.discord.commands.nativeSkills、channels.telegram.commands.nativeSkills或channels.slack.commands.nativeSkills按提供商覆盖(布尔值或"auto")。
commands.bash(默认false)启用! <cmd>运行主机 shell 命令(/bash <cmd>是别名;需要tools.elevated白名单)。commands.bashForegroundMs(默认2000)控制 bash 切换到后台模式前的等待时间(0立即后台)。commands.config(默认false)启用/config(读写openclaw.json)。commands.debug(默认false)启用/debug(仅运行时覆盖)。commands.allowFrom(可选)为命令授权设置按提供商白名单。配置后,它是命令和指令的唯一授权来源(渠道白名单/配对和commands.useAccessGroups被忽略)。使用"*"作为全局默认;提供商特定 key 会覆盖它。commands.useAccessGroups(默认true)在未设置commands.allowFrom时对命令执行白名单/策略。
命令列表
文本 + 原生(启用时):
/help/commands/skill <name> [input](按名称运行 Skill)/status(显示当前状态;在可用时包含当前模型提供商的使用量/配额)/allowlist(列出/添加/移除白名单条目)/approve <id> allow-once|allow-always|deny(处理 exec 审批提示)/context [list|detail|json](查看”上下文”信息;detail显示每个文件 + 工具 + Skill + 系统提示词的大小)/export-session [path](别名:/export)(将当前会话导出为包含完整系统提示词的 HTML)/whoami(显示你的发送者 id;别名:/id)/session idle <duration|off>(管理焦点线程绑定的不活跃自动解绑)/session max-age <duration|off>(管理焦点线程绑定的硬性最大时限自动解绑)/subagents list|kill|log|info|send|steer|spawn(查看、控制或生成当前会话的子 Agent 运行)/acp spawn|cancel|steer|close|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|sessions(查看和控制 ACP 运行时会话)/agents(列出当前会话的线程绑定 Agent)/focus <target>(Discord:将此线程或新线程绑定到会话/子 Agent 目标)/unfocus(Discord:移除当前线程绑定)/kill <id|#|all>(立即中止当前会话的一个或所有运行中的子 Agent;无确认消息)/steer <id|#> <message>(立即引导运行中的子 Agent:运行中时直接操作,否则中止当前工作并用 steer 消息重启)/tell <id|#> <message>(/steer的别名)/config show|get|set|unset(持久化配置到磁盘,仅所有者;需要commands.config: true)/debug show|set|unset|reset(仅运行时覆盖,仅所有者;需要commands.debug: true)/usage off|tokens|full|cost(按回复的使用量页脚或本地成本摘要)/tts off|always|inbound|tagged|status|provider|limit|summary|audio(控制 TTS;参见 /tts)- Discord:原生命令是
/voice(Discord 保留了/tts);文本/tts仍然有效。
- Discord:原生命令是
/stop/restart/dock-telegram(别名:/dock_telegram)(切换回复到 Telegram)/dock-discord(别名:/dock_discord)(切换回复到 Discord)/dock-slack(别名:/dock_slack)(切换回复到 Slack)/activation mention|always(仅群组)/send on|off|inherit(仅所有者)/reset或/new [model](可选模型提示;剩余文本透传)/think <off|minimal|low|medium|high|xhigh>(按模型/提供商的动态选项;别名:/thinking、/t)/fast status|on|off(省略参数显示当前生效的 fast-mode 状态)/verbose on|full|off(别名:/v)/reasoning on|off|stream(别名:/reason;开启时发送前缀为Reasoning:的单独消息;stream= 仅 Telegram 草稿)/elevated on|off|ask|full(别名:/elev;full跳过 exec 审批)/exec host=<sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>(发送/exec查看当前设置)/model <name>(别名:/models;或agents.defaults.models.*.alias中的/<alias>)/queue <mode>(加上选项如debounce:2s cap:25 drop:summarize;发送/queue查看当前设置)/bash <command>(仅主机;! <command>的别名;需要commands.bash: true+tools.elevated白名单)
仅文本:
/compact [instructions](参见 /concepts/compaction)! <command>(仅主机;一次一个;长时间任务用!poll+!stop)!poll(检查输出/状态;接受可选sessionId;/bash poll也行)!stop(停止运行中的 bash 任务;接受可选sessionId;/bash stop也行)
说明:
- 命令接受命令和参数之间的可选
:(例如/think: high、/send: on、/help:)。 /new <model>接受模型别名、provider/model或提供商名称(模糊匹配);无匹配时文本被当作消息正文。- 完整的提供商使用量明细,使用
openclaw status --usage。 /allowlist add|remove需要commands.config=true并遵循渠道configWrites。- 在多账户渠道中,指定配置目标的
/allowlist --account <id>和/config set channels.<provider>.accounts.<id>...也遵循目标账户的configWrites。 /usage控制按回复的使用量页脚;/usage cost从 OpenClaw 会话日志打印本地成本摘要。/restart默认启用;设置commands.restart: false可禁用。- Discord 专用原生命令:
/vc join|leave|status控制语音频道(需要channels.discord.voice和原生命令;不支持文本方式)。 - Discord 线程绑定命令(
/focus、/unfocus、/agents、/session idle、/session max-age)需要启用有效的线程绑定(session.threadBindings.enabled和/或channels.discord.threadBindings.enabled)。 - ACP 命令参考和运行时行为:ACP Agents。
/verbose用于调试和增加可见性;正常使用时请保持关闭。/fast on|off持久化为会话覆盖。使用 Sessions UI 的inherit选项可清除,回退到配置默认值。- 工具失败摘要在相关时仍会显示,但详细失败文本只在
/verbose为on或full时包含。 /reasoning(和/verbose)在群组环境中有风险:可能暴露你不打算公开的内部推理或工具输出。建议保持关闭,尤其在群聊中。- 快速路径:来自白名单发送者的纯命令消息会立即处理(绕过队列 + 模型)。
- 群组提及门控:来自白名单发送者的纯命令消息绕过提及要求。
- 内联快捷方式(仅限白名单发送者): 某些命令嵌入在普通消息中也能工作,并在模型看到剩余文本前被剥离。
- 示例:
hey /status触发状态回复,剩余文本继续正常流程。
- 示例:
- 当前支持:
/help、/commands、/status、/whoami(/id)。 - 未授权的纯命令消息被静默忽略,内联的
/...token 被当作纯文本。 - Skill 命令:
user-invocable的 Skills 作为斜杠命令暴露。名称被标准化为a-z0-9_(最多 32 字符);冲突时加数字后缀(如_2)。/skill <name> [input]按名称运行 Skill(在原生命令数量限制无法为每个 Skill 创建命令时很有用)。- 默认情况下,Skill 命令作为普通请求转发给模型。
- Skills 可以声明
command-dispatch: tool将命令直接路由到工具(确定性,无需模型)。 - 示例:
/prose(OpenProse 插件)— 参见 OpenProse。
- 原生命令参数:Discord 对动态选项使用自动完成(省略必需参数时用按钮菜单)。Telegram 和 Slack 在命令支持选项且你省略参数时显示按钮菜单。
使用量展示(什么显示在哪里)
- 提供商使用量/配额(示例:“Claude 80% left”)在启用使用量跟踪时显示在
/status中。 - 按回复的 token/成本 通过
/usage off|tokens|full控制(附加到普通回复后)。 /model status关于模型/认证/端点,不是使用量。
模型选择(/model)
/model 实现为指令。
示例:
/model
/model list
/model 3
/model openai/gpt-5.2
/model opus@anthropic:default
/model status
说明:
/model和/model list显示紧凑的编号选择器(模型系列 + 可用提供商)。- 在 Discord 上,
/model和/models打开带有提供商和模型下拉菜单加提交步骤的交互式选择器。 /model <#>从选择器中选择(尽可能优先当前提供商)。/model status显示详细视图,包括可用时的配置提供商端点(baseUrl)和 API 模式(api)。
调试覆盖
/debug 允许设置仅运行时的配置覆盖(内存中,不写磁盘)。仅所有者可用。默认禁用;通过 commands.debug: true 启用。
示例:
/debug show
/debug set messages.responsePrefix="[openclaw]"
/debug set channels.whatsapp.allowFrom=["+1555","+4477"]
/debug unset messages.responsePrefix
/debug reset
说明:
- 覆盖立即对新的配置读取生效,但不会写入
openclaw.json。 - 使用
/debug reset清除所有覆盖并恢复磁盘配置。
配置更新
/config 写入磁盘配置(openclaw.json)。仅所有者可用。默认禁用;通过 commands.config: true 启用。
示例:
/config show
/config show messages.responsePrefix
/config get messages.responsePrefix
/config set messages.responsePrefix="[openclaw]"
/config unset messages.responsePrefix
说明:
- 写入前会校验配置;无效更改会被拒绝。
/config的更新跨重启持久化。
平台差异说明
- 文本命令 在普通聊天会话中运行(DM 共享
main,群组有自己的会话)。 - 原生命令 使用隔离的会话:
- Discord:
agent:<agentId>:discord:slash:<userId> - Slack:
agent:<agentId>:slack:slash:<userId>(前缀可通过channels.slack.slashCommand.sessionPrefix配置) - Telegram:
telegram:slash:<userId>(通过CommandTargetSessionKey指向聊天会话)
- Discord:
/stop指向活跃聊天会话,所以它可以中止当前运行。- Slack:仍支持
channels.slack.slashCommand来配置单个/openclaw风格命令。如果启用commands.native,你必须为每个内置命令创建一个 Slack 斜杠命令(与/help同名)。Slack 的命令参数菜单以临时 Block Kit 按钮形式投递。- Slack 原生例外:注册
/agentstatus(而非/status),因为 Slack 保留了/status。文本/status在 Slack 消息中仍然有效。
- Slack 原生例外:注册