Deploy Your OpenClaw Online Click to Deploy Now

架构概述

claw code 架构采用双层设计:Python 编排层负责管理代理会话、命令路由和 LLM 交互,Rust 性能层负责处理 API 通信、工具执行、终端渲染和安全性。这种分离使高层代理逻辑保持表达力且易于修改,同时将延迟敏感的操作推入编译型、内存安全的代码中。

在最高层面,每次用户交互都经过三个阶段:引导启动(环境发现、配置加载、模式路由)、查询引擎执行(带工具调用和消息压缩的轮次循环)和响应渲染(终端中带语法高亮的流式 markdown)。每个阶段都由两个层中定义明确的模块支持。

 User Terminal (REPL / stdin)
       |
       v
 +------------------------------------------+
 |          Rust CLI Binary                  |
 |  rusty-claude-cli  (crossterm, syntect,   |
 |  pulldown_cmark, braille spinner)         |
 +------------------------------------------+
       |
       v
 +------------------------------------------+
 |         Python Orchestration Layer        |
 |  bootstrap_graph.py  (7 stages)          |
 |  runtime.py  (route_prompt, run_turn)    |
 |  query_engine.py  (max_turns=8, stream)  |
 |  commands.py  |  tools.py  |  models.py  |
 |  context.py   |  session_store.py        |
 |  transcript.py | execution_registry.py   |
 |  tool_pool.py  | parity_audit.py         |
 |  + 50 more modules                       |
 +------------------------------------------+
       |              |              |
       v              v              v
 +-----------+  +-----------+  +-----------+
 | Rust api  |  | Rust      |  | Rust      |
 | crate     |  | runtime   |  | tools     |
 | Anthropic |  | 16 modules|  | 19 specs  |
 | client,   |  | bash,file |  | JSON      |
 | SSE,OAuth |  | ops,mcp,  |  | schemas   |
 | retry     |  | oauth,    |  |           |
 |           |  | session,  |  |           |
 |           |  | prompt,   |  |           |
 |           |  | usage     |  |           |
 +-----------+  +-----------+  +-----------+
       |              |
       v              v
 +-----------+  +---------------+
 | Rust      |  | Rust          |
 | commands  |  | compat-       |
 | 15 slash  |  | harness       |
 | commands  |  | (bridge       |
 |           |  |  layer)       |
 +-----------+  +---------------+
       |
       v
   Anthropic API  (api.anthropic.com)

Python 编排层 (src/)

Python 工作区包含 60 多个模块,组织为职责明确的子系统。每个模块承担单一职责,使代码库易于浏览和独立测试。以下是每个主要子系统的详细分析。

引导图 — bootstrap_graph.py

引导序列是每个 claw-code 会话的入口点。它按顺序运行 7 个阶段,每个阶段都依赖于前一个阶段的成功完成:

  1. 预取 — 在其他任何操作之前预加载参考数据并预热缓存。
  2. 警告处理器 — 附加全局警告过滤器,防止第三方库的弃用消息泄露到用户终端。
  3. CLI 解析器 — 解析命令行参数和标志,尽早确定执行模式。
  4. 设置 + 命令并行加载 — 并发运行环境设置和命令快照加载以加快启动速度。
  5. 延迟初始化 — 初始化依赖于已解析 CLI 状态和已加载配置的组件。
  6. 模式路由 — 将执行路由到六种模式之一:localremotesshteleportdirect-connectdeep-link
  7. 查询引擎提交循环 — 将控制权交给查询引擎进行交互式轮次循环。

查询引擎 — query_engine.py

查询引擎是核心编排中枢。它管理用户、LLM 和工具系统之间的对话循环。关键配置值在 QueryEngineConfig 数据类中定义:

每个轮次产生一个 TurnResultQueryEnginePort 类暴露会话管理、消息压缩和流式接口。流式接口产生六种不同的事件类型:message_startcommand_matchtool_matchpermission_denialmessage_deltamessage_stop。这种事件驱动设计允许终端渲染器在令牌到达时增量绘制输出。

运行时 — runtime.py

运行时模块桥接原始用户输入和查询引擎。它提供 PortRuntime,暴露两个关键方法:

命令 — commands.py

命令清单在启动时从 reference_data/commands_snapshot.json 加载。它暴露 CommandExecution 数据类,包含五个字段:namesource_hintprompthandledmessage。四个公共函数提供命令 API:

工具 — tools.py

工具清单镜像命令系统,但用于工具调用。它从 reference_data/tools_snapshot.json 加载并定义 ToolExecution 数据类。关键函数包括:

核心数据模型 — models.py

models.py 模块定义了在系统各层流转的共享数据类型:

数据类字段用途
Subsystemname, path, file_count, notes表示工作区中发现的子系统
PortingModulename, responsibility, source_hint, status跟踪单个模块的移植进度
PermissionDenial记录工具调用被权限阻止的情况
UsageSummaryinput_tokens, output_tokens(字数代理)用于成本管理的令牌使用跟踪
PortingBacklog汇总所有待处理的移植工作

辅助 Python 模块

除核心子系统外,Python 层还包含数十个专注模块:

Rust 性能层 (rust/)

Rust 工作区组织为 6 个 crate 的 Cargo 工作区。每个 crate 独立编译,支持增量构建和清晰的依赖边界。它们共同为 Python 层调用提供高性能基础。

api Crate — Anthropic API 客户端

api crate 封装了与 Anthropic API 的所有通信。其 AnthropicClient 处理认证、重试和流式传输:

API 常量

DEFAULT_BASE_URL = "https://api.anthropic.com"ANTHROPIC_VERSION = "2023-06-01"DEFAULT_MAX_RETRIES = 2

runtime Crate — 16 个模块

runtime crate 是 Rust 工作区中最大的,包含 16 个模块,涵盖从 bash 执行到 OAuth 流程的所有内容:

bootstrap

引导启动(12 个阶段)

CliEntryMainRuntime,经过 12 个顺序阶段逐步构建执行环境。

conversation

对话运行时

使用 ApiClient + ToolExecutor trait 的核心轮次循环。每轮对话最大迭代次数上限为 16

compact

压缩配置

保留最近 preserve_recent = 4 条消息,max_estimated_tokens = 10000。保持上下文窗口精简而不丢失关键状态。

config

配置(3 个来源)

ConfigSources:用户、项目和本地。在每个层级发现 settings.json 文件,采用级联优先级。

file_ops

文件操作

读取、写入、编辑、glob 和 grep,搜索结果 head_limit 为 250,glob 截断上限为 100

permissions

权限系统

PermissionMode:Allow、Deny 或 Prompt。PermissionPolicy 支持每个工具的权限模式。

prompt

系统提示词构建器

MAX_INSTRUCTION_FILE_CHARS = 4000MAX_TOTAL_INSTRUCTION_CHARS = 12000。发现并组装 CLAUDE.md 文件。

mcp

MCP 集成

使用 mcp__{server}__{tool} 命名规范进行名称规范化。6 种传输类型:Stdio、SSE、HTTP、WebSocket、SDK 和 ClaudeAiProxy。

其他运行时模块包括:

tools Crate — 19 个工具规范

tools crate 定义了 19 个工具规范,每个都有完整的 JSON Schema 用于参数验证。这些 schema 就是 LLM 在决定调用哪个工具时看到的:

工具分类描述
bash执行在沙盒环境中运行 shell 命令
read_file文件 I/O支持 offset/limit 的文件内容读取
write_file文件 I/O写入或覆盖文件内容
edit_file文件 I/O文件内的定向字符串替换
glob_search搜索基于模式的文件发现
grep_search搜索基于 ripgrep 的正则内容搜索
WebFetch网络向外部 URL 发送 HTTP 请求
WebSearch网络网络搜索查询
TodoWrite规划结构化任务列表管理
Skill扩展调用已注册的技能模块
Agent多代理生成子代理进行并行工作
ToolSearch发现按关键词搜索延迟加载的工具
NotebookEdit笔记本编辑 Jupyter 笔记本单元格
Sleep实用工具暂停执行指定时长
SendUserMessage通信向用户发送消息
Config设置读写配置值
StructuredOutput输出返回结构化 JSON 响应
REPL执行交互式语言 REPL 会话
PowerShell执行Windows PowerShell 命令执行

commands Crate — 15 个斜杠命令

commands crate 实现了包含 15 个内置命令的斜杠命令系统。每个命令通过 CommandSource 枚举分类:BuiltinInternalOnlyFeatureGated

// Available slash commands /help — Show help and available commands /status — Display session status and token usage /compact — Trigger manual transcript compaction /model — Switch the active model /permissions — View or modify tool permissions /clear — Clear the conversation transcript /cost — Show accumulated session costs /resume — Resume a previous session /config — View or edit configuration /memory — Manage CLAUDE.md memory files /init — Initialize a new project workspace /exit — Exit the session /diff — Show git diff of session changes /version — Print version information /export — Export conversation transcript

rusty-claude-cli — CLI 二进制文件

rusty-claude-cli crate 是面向用户的二进制文件。默认使用 claude-sonnet-4-20250514 作为模型,并提供丰富的终端体验:

compat-harness Crate

compat-harness crate 作为 Python 编排层和 Rust 性能层之间的兼容性桥梁。它确保数据结构、函数签名和调用约定在语言边界间保持稳定。

数据流:从提示到响应

理解 claw code 架构意味着追踪单个用户提示如何流经整个系统:

  1. 用户在 rusty-claude-cli REPL 中输入提示。
  2. CLI 将输入传递到 Python 层,runtime.py 对其进行分词并调用 route_prompt 来确定它是否匹配斜杠命令或应发送到 LLM。
  3. 如果是斜杠命令,commands crate 直接处理。否则,查询引擎接管。
  4. 查询引擎构建 API 请求——包括系统提示词(由 Rust prompt 模块从发现的 CLAUDE.md 文件构建)、对话历史(由 transcript.py 管理)和可用工具(由 tool_pool.py 过滤,最多 15 个)。
  5. Rust api crate 以启用流式传输的方式将请求发送到 Anthropic 的 API,通过 Python 层返回 SSE 事件。
  6. 如果 LLM 响应包含工具调用,Rust runtime crate 执行它(bash 命令、文件操作等),通过 PermissionPolicy 检查权限。
  7. 工具结果反馈到下一轮。此循环最多持续 8 轮(Python 查询引擎)或 16 次迭代(Rust 对话运行时)。
  8. 当对话累积超过 12 轮时,转录记录将被压缩——Rust 压缩模块保留最近 4 条消息并将预估令牌限制为 10,000。

会话与转录记录管理

Claw-code 通过两个互补机制维护会话状态:

在 Rust 端,session 模块使用 MessageRole(System、User、Assistant、Tool)和 ContentBlock(Text、ToolUse、ToolResult)定义消息 schema。这种共享 schema 确保两个层以相同方式解释对话历史。

Python-TypeScript 一致性审计

由于 claw-code 是 Claude Code 架构的洁净室重写,parity_audit.py 模块持续跟踪实现完整性。它维护 18 个根文件映射31 个目录映射,将 Python 模块映射到其 TypeScript 对应项,便于识别差距和确定移植工作优先级。