Deploy Your OpenClaw Online Click to Deploy Now

Claw Code 命令系统

Claw Code 交互体验的核心是其命令系统——一个结构化的斜杠命令注册表,让开发者控制活跃代理会话的各个方面。与临时文本解析不同,Claw Code 将命令视为具有正式类型定义、来源跟踪和分类元数据的一等实体。这种设计确保命令面可发现、可扩展,并在框架的 Python 和 Rust 层之间保持一致。

Claw Code 中的每个命令都由 CommandManifestEntry 表示——一个冻结的数据类,包含 name(斜杠命令字符串)和 CommandSource 枚举,用于分类命令如何引入系统。三种可能的来源是:Builtin(随核心框架一起发布,始终可用)、InternalOnly(仅在开发或调试构建中可用)和 FeatureGated(需要在运行时启用特定功能标志)。

CommandRegistry 是保存所有已注册 CommandManifestEntry 对象的核心数据结构。它在启动时从硬编码定义和动态加载的插件清单的组合中填充。Python 编排层从 JSON 快照文件镜像此注册表,确保 Python CLI 和 Rust REPL 始终就哪些命令可用及其行为达成一致。这种镜像策略消除了双运行时系统中的常见错误来源——层间命令定义漂移。

除了单独的条目外,命令还通过 CommandGraph 进一步组织——这是一个分类层,将命令分为内置命令(核心会话管理)、插件类(由可选模块贡献的可扩展功能)和技能类(组合多个工具和命令的高阶能力)。这种三层分类驱动帮助输出和命令路由逻辑,确保代理可以根据当前会话上下文智能地建议相关命令。

完整的 Claw Code 斜杠命令参考

Claw Code 提供恰好 15 个斜杠命令。每个命令都有定义的参数签名、恢复兼容标志(恢复已保存会话时是否可以重新执行)以及在代理生命周期中的特定功能。下表提供完整的 Claw Code 命令参考:

命令 参数 可恢复? 描述
/help 显示帮助和可用命令
/status 显示当前会话状态、轮次、使用情况
/compact 压缩对话历史
/model [model] 切换或显示当前 LLM 模型
/permissions [mode] 查看或更改权限模式
/clear [--confirm] 清除对话上下文
/cost 显示令牌使用量和费用明细
/resume <session-path> 恢复之前保存的会话
/config [env|hooks|model] 查看或修改运行时配置
/memory 显示代理记忆状态
/init 重新初始化项目上下文
/diff 显示未提交的文件更改
/version 显示版本信息
/export [file] 将对话导出到文件
/session [list|switch <id>] 管理多个会话

在 15 个命令中,11 个支持恢复——这意味着在恢复已保存的会话时可以自动重新执行。四个不可恢复的命令(/help/model/permissions/resume/session)被排除,因为它们要么产生临时输出,要么修改应明确设置的基本会话参数,要么本身负责恢复机制。

命令详情

/help

打印所有可用斜杠命令的完整列表、参数签名和简短描述。输出从 CommandRegistry 动态生成,因此始终反映当前启用的命令集,包括任何功能门控或插件贡献的条目。这是新用户探索 Claw Code 界面时推荐的第一个命令。

/status

显示当前会话状态摘要,包括已完成的对话轮次数、活跃 LLM 模型、累计令牌使用量以及是否已应用压缩。适用于监控长时间运行的会话和快速了解资源消耗。

/compact

触发对话历史压缩。当会话累积大量轮次时,上下文窗口可能变得饱和。/compact 命令将较旧的对话历史总结为浓缩表示,为新交互释放上下文空间,同时保留代理保持连贯性所需的关键信息。压缩过程逐字保留最近 4 条消息,并将压缩摘要的目标设为最多 10,000 个令牌。

/model

不带参数调用时,显示当前活跃的 LLM 模型标识符。带模型名称调用时(如 /model claude-sonnet-4-20250514),切换后续轮次的活跃模型。模型切换立即生效并反映在 /status 输出中。此命令不可恢复,因为模型可用性可能在会话之间发生变化。

/permissions

控制代理的权限模式,决定代理可以自主执行哪些操作。三种模式是:ReadOnly(代理只能读取文件和显示信息)、WorkspaceWrite(代理可以在项目目录内读写文件)和 DangerFullAccess(代理可以执行任意 shell 命令和修改系统上的任何文件)。默认为 WorkspaceWrite 以确保安全。

/clear

重置对话上下文,从活跃上下文窗口中移除所有之前的消息和工具结果。接受可选的 --confirm 标志以跳过确认提示。与保留摘要的 /compact 不同,/clear 提供完全的全新开始,同时保持相同的会话身份。

/cost

提供当前会话的令牌使用量和预估费用的详细分解。显示输入令牌、输出令牌、缓存读/写令牌以及基于活跃模型定价计算的费用。format_usd 工具以 $X.XXXX 格式(四位小数)输出费用,即使对消耗相对较少令牌的会话也能提供精确度。

/resume

从磁盘加载之前保存的会话并恢复对话状态。需要指向已保存会话文件的 <session-path> 参数。加载后,原始会话中所有兼容恢复的命令将被重新执行以重建代理的上下文。此命令本身不可恢复,因为它是启动恢复过程的机制。

/config

提供运行时配置设置的访问。子命令包括 env(显示环境变量)、hooks(列出已注册的钩子及其触发器)和 model(显示模型配置详情)。不带参数时显示完整的配置摘要。

/memory

显示代理记忆系统的当前状态,包括会话记忆(当前对话)、项目记忆(每项目持久知识)和全局记忆(跨项目模式)。显示记忆利用率、存储的条目和最近访问的记忆段。

/init

通过重新扫描工作目录、重新加载配置文件(包括 CLAUDE.md.claude/ 设置)以及刷新工具注册表来重新初始化项目上下文。在对项目结构或配置文件进行更改后很有用,代理应在不启动新会话的情况下获取这些更改。

/diff

显示当前工作目录中未提交的文件更改,相当于运行 git diffgit status。显示已暂存和未暂存的修改,提供在提交前快速审查代理文件修改的方式。

/version

打印当前 Claw Code 版本字符串,包括构建哈希和活跃运行时(Python、Rust 或混合)。适用于错误报告和确保与文档的兼容性。

/export

将当前对话导出到文件。不带参数时,写入当前目录中的带时间戳文件。带 [file] 参数时,写入指定路径。导出包含所有消息、工具调用和结果,采用适合审查、共享或存档的结构化格式。

/session

管理多个并发会话。/session list 显示所有活跃和已保存的会话及其标识符、轮次计数和最后活跃时间戳。/session switch <id> 切换到不同会话,保留当前会话的状态。此命令不可恢复,因为会话管理本质上是顶级导航操作。

命令图:Claw Code 分类系统

除了扁平注册表外,Claw Code 通过 CommandGraph 组织其命令——一个冻结的数据类,提供整个命令面的结构化分类视图。CommandGraph 是框架理解命令关系、生成文档和驱动 /help 输出的主要机制。

CommandGraph 数据类定义三个字段,每个都是 PortingModule 引用的元组:

# CommandGraph definition (frozen dataclass) @dataclass(frozen=True) class CommandGraph: builtins: tuple[PortingModule, ...] plugin_like: tuple[PortingModule, ...] skill_like: tuple[PortingModule, ...] def flattened(self) -> list[PortingModule]: """Return all modules across all categories.""" return [*self.builtins, *self.plugin_like, *self.skill_like] def as_markdown(self) -> str: """Render the command graph as formatted Markdown.""" sections = [] for label, group in [ ("Builtins", self.builtins), ("Plugin-like", self.plugin_like), ("Skill-like", self.skill_like), ]: sections.append(f"## {label}\n") for mod in group: sections.append(f"- {mod.name}") return "\n".join(sections)

flattened() 方法将所有类别的命令作为单个列表返回,适用于迭代、验证和搜索操作。as_markdown() 方法生成命令图的人类可读 markdown 表示,由 /help 命令和文档生成工具使用以产生一致的输出。

图由 build_command_graph() 工厂函数构建,该函数读取 CommandRegistry,检查每个条目的来源和元数据,并将其分配到适当的类别。此函数在启动时运行一次,生成的图作为不可变的冻结数据类缓存到会话生命周期结束,确保后续查找的零分配开销。

Claw Code CLI 子命令

除了 15 个交互式斜杠命令外,Claw Code Python CLI(main.py)还暴露了 27 个额外的子命令,用于开发、调试和运维任务。这些子命令直接从 shell 调用(如 python main.py summary),而不是从活跃的代理会话中调用。它们与斜杠命令一起构成了 Claw Code 共 42 个不同操作的完整命令面。

summary

生成当前项目状态的高级摘要,包括文件计数、语言分布和检测到的框架。

manifest

以 JSON 格式打印完整的命令清单,列出每个已注册命令的来源、参数和恢复兼容标志。

parity-audit

在 Python 命令注册表和 Rust 命令注册表之间运行一致性检查,报告两个运行时之间命令可用性或行为的任何差异。

setup-report

生成当前安装的诊断报告,包括 Python 版本、Rust 工具链状态、已安装的依赖项和配置文件位置。

command-graph

打印 CommandGraph 分类,显示哪些命令被分类为内置、插件类或技能类,并附带完整元数据。

tool-pool

显示当前工具池——在活跃配置中可供代理使用的工具集,包括任何权限限制和门控状态。

bootstrap-graph

可视化引导依赖图,显示代理启动期间子系统的初始化顺序和依赖模块之间的边。

subsystems

列出所有已注册子系统及其初始化状态、依赖链和用于运维监控的健康指标。

commands

以紧凑表格格式列出所有可用斜杠命令,相当于在活跃会话外运行 /help。适用于脚本编写和文档生成。

tools

列出所有已注册工具及其权限要求、参数 schema 和当前启用/禁用状态。

route

通过提供示例输入字符串并显示分发路由器将选择哪个命令或工具来测试命令路由逻辑。

bootstrap

在不进入交互式 REPL 的情况下运行完整的引导序列,适用于在 CI 环境中验证初始化是否成功完成。

turn-loop

使用提供的提示执行代理循环的单个轮次,返回结果而不进入交互模式。专为程序化代理调用设计。

flush-transcript

将当前会话转录记录写入磁盘,刷新任何尚未持久化到会话文件的缓冲消息。

load-session

加载已保存的会话文件并显示其内容而不进入恢复模式。适用于检查会话状态和调试持久化问题。

remote-mode

以远程模式启动代理,连接到远程计算后端进行模型执行,同时在本地运行 REPL 以降低延迟。

ssh-mode

以 SSH 隧道方式启动代理,允许从另一台机器通过加密通道安全远程访问代理会话。

teleport-mode

将活跃会话传输到不同机器,在网络跳转中保留完整的对话状态、上下文和工具注册。

direct-connect-mode

建立到另一个 Claw Code 实例的直接点对点连接,用于共享上下文的协作多代理操作。

deep-link-mode

从深度链接 URL 启动代理,使用链接参数中编码的上下文、配置和初始提示预填充会话。

show-command

显示特定斜杠命令的详细信息,包括其来源、参数 schema、恢复兼容性和代码库中的实现位置。

show-tool

显示特定工具的详细信息,包括其权限要求、输入/输出 schema 和用于集成测试的使用示例。

exec-command

从 shell 以编程方式执行斜杠命令,绕过交互式 REPL。返回适用于脚本编写和 CI/CD 管道的结构化输出。

exec-tool

使用 JSON 编码的参数直接从 shell 执行工具,将工具结果返回到 stdout。专为测试和自动化工作流设计。

这 27 个子命令——与 15 个交互式斜杠命令结合——使 Claw Code 的总命令面达到 42 个不同操作,涵盖从交互式会话管理到程序化自动化、远程操作模式和全面系统自省的所有功能。

Claw Code 命令执行管道

当用户在 Claw Code REPL 中输入斜杠命令时,它会通过跨越 Python 编排层和 Rust 运行时核心的多阶段执行管道。理解此管道对于扩展命令系统或调试意外命令行为的开发者至关重要。

管道从 CommandExecution 数据类开始,它封装了正在执行的命令的完整生命周期状态:

@dataclass class CommandExecution: name: str # The slash command name (e.g., "compact") source_hint: CommandSource # Origin: Builtin, InternalOnly, FeatureGated prompt: str # The full user input string handled: bool # Whether execution completed successfully message: str # Result message or error description

执行流程经过五个阶段。首先,REPL 输入解析器检测前导 / 字符并提取命令名称和任何尾随参数。其次,查询 CommandRegistry 以验证命令是否存在并检索其 CommandManifestEntry。如果未找到命令,则显示错误消息且不创建 CommandExecution

第三,对于在 Python 层处理的命令,执行通过 execute_command(name, prompt) 直接分发到相应的处理函数。对于需要 Rust 运行时支持的命令——如涉及内存密集型上下文操作的 /compact,或与 Git 子系统交互的 /diff——执行通过进程间调用转发到 Rust CLI 二进制文件(rusty-claude-cli)。Rust REPL 通过其 handle_slash_command 函数处理这些命令,该函数接收当前会话上下文和压缩状态作为参数。

第四,执行完成后,handled 标志设置为 truemessage 字段填充结果。最后,REPL 向用户显示消息并在会话转录记录中记录该命令,以供将来可能的恢复使用。

Command Execution Pipeline
===========================

User Input: "/compact"
     |
     v
[REPL Input Parser] ── detect "/" prefix, extract name + args
     |
     v
[CommandRegistry] ── lookup "compact" -> CommandManifestEntry
     |
     v
[CommandExecution] ── create: name="compact", source=Builtin
     |
     v
[Dispatch Router] ── Python handler or Rust delegation?
     |                    |
     |                    v
     |            [Rust: handle_slash_command()]
     |                    |
     v                    v
[Python Handler]   [Rust Handler]
     |                    |
     v                    v
[Result] ── handled=true, message="Context compacted."
     |
     v
[Session Transcript] ── record for resume compatibility

这种分层分发架构确保性能关键操作保留在 Rust 中,而复杂的编排逻辑保留在 Python 中。仅在必要时跨越进程间边界,最大限度地减少完全可在单个运行时内处理的命令的开销。

会话恢复和 Claw Code 命令持久化

Claw Code 命令系统最强大的功能之一是其恢复能力——将会话保存到磁盘并在以后通过完整上下文重建恢复它的能力。此功能对于跨越多个终端会话、工作日甚至机器的长时间运行的开发任务至关重要。

恢复机制基于 resume_session(path, commands) 函数构建,该函数接受两个参数:指向已保存会话文件的文件路径,以及当前的 CommandRegistry(用于验证已保存会话中的所有命令在当前安装中仍然可用)。此验证步骤防止由版本不匹配或已移除的命令导致的恢复失败。

当会话被恢复时,函数加载序列化的会话状态并遍历之前执行的命令转录记录。对于每个标记为恢复兼容的命令,函数在当前会话上下文中重新执行它。这意味着恢复的会话将重新应用 /compact 以恢复压缩的上下文,重新显示 /status 以验证状态,重新加载 /config 设置,并通过 /init 重新初始化项目上下文——有效地从命令历史中重建代理的完整工作状态。

会话状态本身由 SessionState 数据类跟踪,它记录四个关键字段:

@dataclass class SessionState: turns: int compacted_messages: list[str] last_model: str last_usage: UsageSnapshot def resume_session( path: Path, commands: CommandRegistry ) -> SessionState: """Load a saved session and re-execute resume-compatible commands.""" state = load_session_file(path) for cmd in state.transcript: if cmd.resumable and cmd.name in commands: execute_command(cmd, commands) return state

四个不可恢复的命令被排除是有意为之的:/help 产生没有状态效果的临时显示输出;/model 如果之前选择的模型不再可用可能会失败,或可能产生意外费用;/permissions 可能在恢复时未经用户明确同意而无意中提升权限;/resume 不能恢复自身(它是恢复过程的入口点);/session 在单个会话之上的层级运作。这种 15 个中 11 个可恢复的比率反映了便利性和安全性之间的精心设计平衡。

会话文件存储在可配置目录中(默认为 .claude/sessions/),使用基于 JSON 的序列化格式。每个文件包含完整的 SessionState、带时间戳的命令转录记录,以及包括保存时的工作目录和 Claw Code 版本在内的元数据。这种全面的序列化确保会话可以安全地在机器之间移动或与协作者共享,前提是目标位置有相同的项目上下文可用。

恢复最佳实践

恢复使用特定模型(如 claude-sonnet-4-20250514)保存的会话时,恢复过程不会自动切换到该模型。恢复后使用 /model 明确设置所需的模型。这是设计使然——模型可用性和定价可能在会话之间发生变化,自动切换可能导致意外费用或失败。