总体评价及核心总结

Claude Code不仅仅是一个简单的聊天机器人,它是一个“AI软件工程师”工具,能够直接在用户的本地计算机(终端)上读取文件、修改代码和执行命令。

该系统的设计遵循以下三个核心原则:

  • 安全性:阻止危险的系统命令(如:删除文件)并严格验证权限
  • 性能:API流式传输、并行执行、缓存和自动内存优化
  • 可扩展性:通过45个以上的内置工具和MCP(Model Context Protocol)进行外部集成

整体结构

+---------------------+
|   用户在终端中输入   |
+---------+-----------+
        |
        v
+---------------------+     阶段1:启动
|     main.tsx        |     - 认证(OAuth / API key / Bedrock / Vertex)
|  (初始化)         |     - 模型选择
|                     |     - 加载设置和功能门
+---------+-----------+     - 收集Git状态和CLAUDE.md
        |
        v
+---------------------+     阶段2:查询循环
|     query.ts        |     - 向Claude API发送消息(流式传输)
|   (核心引擎)      |<-+  - 按令牌接收响应
|                     |  |  - 检测响应中的tool_use块
+---------+-----------+  |
        |              |
        v              |
+---------------------+  |  阶段3:工具执行
|   工具管道          |  |  - 验证输入(Zod schema)
|  (45+内置工具      |  |  - 检查权限(规则+分类器)
|   + MCP)           |  |  - 执行工具(Bash,读取,编辑,...)
+---------+-----------+  |  - 将结果返回给API
        |              |
        +--------------+  (循环直至无更多tool_use)
        |
        v
+---------------------+     阶段4:显示
|   Ink TUI (React)   |     - 渲染消息、差异、进度
|  终端显示           |     - 显示工具结果
+---------------------+     - 等待下一个用户输入

四阶段核心操作循环(Core Engine)

程序的核心是以query.ts为中心的过程,直到工具使用结束无限循环。

启动及初始化:进行认证,选择模型,收集Git状态和项目指南(CLAUDE.md)

对话循环:将用户请求和上下文发送到API,流式接收响应(当达到令牌限制时,自动总结/压缩先前对话)

工具执行:AI判断工具(读取文件、执行Bash等)后进行权限验证并执行。安全工具最多可并行运行10个,危险工具逐个顺序执行。

结果显示:通过自制的基于React的终端UI(Ink)视觉呈现进度和结果

主要系统及功能

多执行模式:除了常规的交互式(REPL)模式,还支持无UI的无头(Headless)模式,协调器(Coordinator)模式,连接web环境(claude.ai)和本地的桥接(Bridge)模式等多种环境。

工具和权限系统: * 工具:通过Bash、FileEdit、Grep、Agent(雇用子代理)等45种工具与外部世界互动。

安全网:通过详细的权限模式(用户确认,AI自动分类,计划等)和多重验证管道,防止危险的shell命令执行。

记忆及状态管理: * 内存系统:即使对话结束,用户的偏好、项目规则等也会以markdown文件形式存储在磁盘中,以便在下一次会话中保持记忆。

状态不变性:为防止不可预测的错误,所有全局状态均通过创建副本而非直接修改来管理(不可变性)。

技能和插件:不仅仅是工具,提供诸如“代码审查”、“创建PR”等复杂的工作模板,以/命令形式呈现,并可通过MCP服务器结合成插件形式扩展。

架构特点

集中在单个文件(main.tsx)的构建提高了初始启动速度,并应用了异步优化以便在流式响应的同时执行工具。此外,在发生网络错误或上下文超出错误时,具备强大的恢复能力,在向用户暴露错误之前,通过内部总结或重试进行自我恢复。

整体流程

端到端数据流
=====================

用户在终端中运行“claude”
    |
    v
main.tsx
+-- 认证(OAuth / API key / Bedrock / Vertex)
+-- 模型解析(Opus for Max,Sonnet for others)
+-- 加载设置和功能门
+-- 收集上下文(Git状态和CLAUDE.md)[记忆化]
+-- 构建工具池(内置+ MCP)
+-- 启动REPL(或无头QueryEngine)
    |
    v
用户输入:“修复auth.ts中的错误”
    |
    v
标准化API消息
    |
    v
query() 生成器循环 <-----------------------------------------+
|                                                                  |
+-- [预处理]截取/微压缩/自动压缩(如需要)                         |
+-- [API调用]从Claude API流式响应                                  |
+-- [错误?]保留并恢复(413 -> 压缩,max_tok -> 重试)           |
+-- [工具使用?]                                                   |
|     是 --> 权限检查 --> 执行工具 --> 收集结果                    |
|             (管道:验证 -> 钩子 -> 规则 -> 分类器) -+
|     否  --> 显示最终响应
|
+-- 记录转录到磁盘
+-- 跟踪成本(每个模型:输入/输出/缓存令牌)
+-- 等待下一个用户输入