写一个 Coding Agent Harness and TUI
51 节,从零到一。每一节都是一块积木,叠起来就是一座塔。
今年 7 月,xAI 开源了 grok-build——SpaceXAI 的终端 AI 编程代理,50 多个 crate、三万多行 Rust。
我花了一周读完所有源码。读完之后我想:能不能写一个教程,让读者不读那三万多行,也能理解一个 coding agent harness 是怎么搭起来的?
这个系列就是答案。8 篇文章,51 个小节,从一行 reqwest::Client::new() 到一个功能完备的终端 AI 编程代理。每一节的代码都是可运行的,每个设计决策都标注了 grok-build 对应的源码位置。
你会学到什么
读完这 8 篇文章,你会拥有:
- LLM 客户端:OpenAI 兼容 API,流式输出,对话历史管理
- 工具系统:可扩展的 Tool trait,内置 ReadFile、Bash、WriteFile、EditFile、Grep、Glob
- Agent 循环:多轮工具调用 Turn Loop,Token 保护,自动 Compaction
- TUI 界面:ratatui + crossterm 全屏终端界面,语法高亮,流式渲染
- 通讯协议:JSON-RPC 2.0 + 自研 ACP 协议,前后端分离
- 安全层:权限三模式(YOLO / Auto / Ask),文件沙箱,命令沙箱,审计日志
- 扩展系统:Skills、Subagent、MCP 集成、Memory、Hooks、Scheduler
文章列表
| # | 标题 | 内容 |
|---|---|---|
| 1 | 从零写一个会聊天的程序 | 200 行 Rust,从 reqwest 调 LLM API 到封装流式客户端 |
| 2 | 给它装上手和脚:Tool 系统设计 | Tool trait 抽象层,ReadFile + Bash 实现,ToolRegistry 注册表 |
| 3 | 让 Agent 学会自己用工具 | Turn Loop 核心循环,AgentDefinition + Builder,Token 窗口保护 |
| 4 | 让它会写代码:文件编辑工具链 | search_replace 精确编辑、Grep 搜索、Glob 发现、git diff 追踪 |
| 5 | 给它一双眼睛:TUI 终端界面 | ratatui + crossterm 全屏界面,流式渲染,语法高亮 |
| 6 | 拆分前后端:Agent 通讯协议 | JSON-RPC 2.0 + ACP、Unix Socket Server/Client、Leader 架构 |
| 7 | 安全不是可选项:权限、沙箱与审计 | 三模式审批、文件/命令双重沙箱、审批回调 UI、审计日志 |
| 8 | 从能用到好用:Skills、Subagent、MCP | 可复用技能系统、子任务并发、外部工具协议、跨会话记忆 |
怎么读
每篇文章 6-7 个知识点,每节结构统一:做什么 → 为什么这样设计 → 代码 → 验证。
代码是累积的。第 1 篇的 LlamaClient 在第 3 篇成为 Turn Loop 的核心依赖,第 5 篇的 TUI 在第 6 篇通过协议层连接到 Agent 后端。
配套代码在 tutorial-code/part-01-basics/ 到 part-08-advanced/,每个目录独立 cargo run。
需要什么
- Rust 基础知识(struct、enum、async/await、tokio)
- 一个 OpenAI 兼容的 API key(OpenAI / xAI / DeepSeek / 通义千问均可)
- 一台能跑 Rust 的电脑
grok-build 源码索引
| 本教程内容 | grok-build 对应文件 |
|---|---|
| LLM 客户端 | shell/src/sampling/ |
| Tool trait | xai-tool-runtime/src/tool.rs |
| ToolRegistry | tools/src/bridge.rs |
| ToolDefinition | tools/src/types/definition.rs:9-45 |
| AgentDefinition | agent/src/config.rs |
| AgentBuilder | agent/src/builder.rs |
| 系统提示词 | agent/src/prompt/context.rs |
| Turn Loop | shell/src/session/acp_session_impl/turn.rs |
| Compaction | agent/src/compaction.rs |
| TUI | pager/src/ |
| 事件循环 | pager/src/app/event_loop.rs |
| Scrollback | pager/src/scrollback/blocks/ |
| Leader/Client | shell/src/leader/mod.rs |
| 权限系统 | workspace/src/permission/ |
| Skills | tools/src/implementations/skills/ |
| Subagent | agent/src/prompt/subagent_prompts.rs |
| MCP | shell/src/session/mcp_servers/ |
| Memory | tools/src/types/memory_backend.rs |
| Hooks | shell/src/session/acp_session_impl/hooks_plugins.rs |
