Peri 深度拆解:一个 14MB 的 Rust 编程智能体如何「复刻」Claude Code——从 ACP 协议到 99% AI 生成代码的工程哲学
当 Claude Code 统治了 AI 编程工具的叙事,一个中国开发者用 Rust 从零重写了整个 Agent 核心,编译产物只有 14MB,内存占用 50MB,却能无缝兼容 Claude Code 的全部生态——Skills、Hooks、MCP、插件。这不是一个「平替」,这是一个关于「极简工程哲学」的完整实验。
一、背景:为什么我们需要另一个编程 Agent?
2026 年的 AI 编程工具赛道,已经卷到了令人窒息的程度。
Claude Code 凭借终端原生的 Agentic IDE 定义了「沉浸式 Vibe Coding」的范式,但它的硬伤同样明显:绑定 Anthropic 模型、Node.js 运行时开销大、无法在 CI/CD 管道中无头运行、对国产模型的支持几乎为零。
与此同时,开发者社区中弥漫着一种声音:我们想要的是 Agent 的能力,而不是 Agent 的锁定。
正是在这个缝隙中,Peri(全名 Perihelion)出现了。它由开发者 KonghaYao 用 Rust 从零构建,核心理念极其清晰:
- 一个二进制文件,14MB,macOS / Linux / Windows 三平台通吃
- 任何 LLM,Anthropic、DeepSeek、GLM、Qwen,甚至本地模型,随时切换
- 100% 兼容 Claude Code 的生态,Skills、Hooks、MCP、插件直接迁移
- ACP 协议驱动,同一个 Agent 核心可以服务终端、IDE、CI/CD 三种前端
更令人震撼的是:Peri 的代码 99% 由 AI 生成,主要由 DeepSeek 和 GLM-5.2 驱动。这是一个 AI 造 AI、Agent 造 Agent 的闭环实验。
二、核心架构:一个 Agent,三套前端
2.1 ACP 协议:Agent 世界的 LSP
Peri 的架构核心是 Agent Client Protocol(ACP)——一个标准化 Agent 与编辑器/IDE 之间通信的开放协议,类似于 LSP(Language Server Protocol)对语言服务的标准化。
ACP 解决了一个长期存在的痛点:每个 Agent 都要为每个 IDE 写一套集成代码,每个 IDE 也要为每个 Agent 写适配层。ACP 通过 JSON-RPC over stdio(本地)或 HTTP/WebSocket(远程)定义了统一的通信契约,让 Agent 和 IDE 可以独立演进。
graph TD
TUI["peri-tui<br/>终端 (ratatui-kit)"]
IDE["Zed / JetBrains<br/>IDE (ACP client)"]
STDIO["Stdio<br/>Headless / CI / Cloud"]
TUI -->|MpscTransport| ACP
IDE -->|ACP Stdio| ACP
STDIO -->|ACP Stdio| ACP
ACP["peri-acp — ACP Server<br/>session · executor · prompt · commands"]
ACP --> AGENT["peri-agent<br/>ReAct loop · LLM adapter · tools · SQLite storage"]
ACP --> MW["peri-middlewares<br/>20 中间件: FS · HITL · SubAgent · Skills · MCP"]
AGENT -.->|telemetry| LF["langfuse-client"]
MW -.->|渲染| WIDGETS["peri-widgets<br/>Markdown · code blocks · tables"]
一个核心,三套前端,这意味着:
- 终端用户通过
peri-tui(基于 ratatui-kit 的 React 风格 TUI)获得交互体验 - IDE 用户(Zed 已支持,更多 IDE 接入中)通过 ACP 客户端无缝连接
- 无头场景(CI/CD、云部署)通过 Stdio 传输直接驱动 Agent
改一次 Agent 逻辑,所有前端同时受益。这就是协议标准化的力量。
2.2 Crate 拓扑:Rust Workspace 的分层哲学
Peri 的代码库被拆分为 15+ 个 Rust crate,每个 crate 职责单一:
peri-tui → peri-acp → peri-agent
├── peri-middlewares
├── peri-widgets
├── peri-lsp
├── langfuse-client
├── peri-web-pty
└── peri-workflow
- peri-tui:终端 UI 层,基于 ratatui-kit(一个由同一作者开发的 React 风格终端组件框架),支持组件、Hooks、状态原子、路由、
element!宏 - peri-acp:ACP 协议实现,管理会话(session)、提示词(prompt)、事件链(event)、能力协商(caps)、Langfuse 集成
- peri-agent:Agent 核心,实现 ReAct 循环(Reasoning + Acting)、LLM 适配器、工具执行、SQLite 状态存储、自动 Compact(上下文压缩)
- peri-middlewares:20 个中间件,包括文件系统操作(FS)、人机交互(HITL)、子代理(SubAgent)、Skills 加载、MCP 集成、Hooks、自动 Compact、Goal 跟踪、Workflow 编排
- peri-workflow:多 Agent 流水线引擎,支持 Pipeline、并行、顺序三种模式
- peri-web-pty:浏览器终端,一条命令即可启动,基于 xterm.js + split panes
这种分层确保了每个模块可以独立测试、独立演进,同时通过 ACP 协议保持松耦合。
三、七大子代理:从「单兵作战」到「团队协作」
Peri 最具野心的设计之一是其 7 个子代理系统,每个子代理都有专门的职责:
| 子代理 | 职责 | 典型场景 |
|---|---|---|
| coder | 核心编码 | 编写、修改、重构代码 |
| explorer | 代码探索 | 理解大型代码库、查找依赖 |
| plan | 规划拆解 | 将复杂任务分解为子任务 |
| code-reviewer | 代码审查 | 审查代码质量、发现潜在问题 |
| web-researcher | 网络调研 | 搜索文档、查阅 API、查找最佳实践 |
| verification | 验证测试 | 运行测试、检查编译、验证变更 |
| general-purpose | 通用任务 | 处理不属于以上类别的任务 |
关键在于 Fork 模式:当主 Agent 需要深入探索某个子问题时,Fork 会克隆当前上下文到子代理,子代理在后台独立运行,完成后将结果合并回主流程。这就像一个团队中,leader 把任务分配给专家,专家独立完成后提交报告。
// 伪代码:Fork 模式的工作流
let forked_context = agent.fork(current_context.clone());
tokio::spawn(async move {
let result = coder_agent.run(forked_context, subtask).await;
main_agent.merge_result(result).await;
});
3.1 Ultracode Workflow:动态工作流引擎
除了子代理,Peri 还引入了 Ultracode Workflow 概念——将一个任务拆分为 N 个代理,合并结果。工作流模式包括:
- Pipeline(流水线):A → B → C,前一个代理的输出是后一个的输入
- Parallel(并行):同时运行多个代理,最后合并结果
- Sequential(顺序):按序执行,但每个代理有独立的上下文窗口
一条命令即可触发整个工作流,无需手动编排。
3.2 Goal Tracking:跨回合的目标持久化
Peri 的另一个独特设计是 Goal Tracking。传统的 Agent 每次对话都是独立的,而 Peri 允许你声明一个「目标」,Agent 会在多个回合中持续推进,直到目标达成。
> peri --goal "重构 auth 模块,支持 OAuth2 + JWT 双模式"
Agent 会自动拆解目标、规划子任务、执行代码变更、运行测试、验证结果,全程无需人工干预。这本质上是把 Agent 从「问答助手」升级为「自主执行者」。
四、性能工程:Rust 的极致压缩
4.1 为什么选 Rust?
Peri 选择 Rust 不是跟风,而是基于三个精确的工程决策:
- 二进制体积:14MB vs Claude Code 的 Node.js 运行时(数百 MB)。在 CI/CD 管道中,这意味着下载时间从分钟级降到秒级
- 内存占用:~50MB RSS vs Node.js Agent 的 200-500MB。在边缘计算场景中,这个差距是决定性的
- 冷启动:Rust 二进制几乎瞬时启动,不需要加载 JavaScript 引擎、解析模块、初始化 V8
4.2 95-99% 缓存命中率
Peri 的缓存策略极其激进:
- Frozen System Prompt:系统提示词在首次计算后被「冻结」,后续回合直接复用,不重新计算
- Deferred Tool Search:12 个核心工具始终可见,其余工具按需加载。这大幅减少了每次 API 调用的 token 消耗
- Auto Compact:长时间会话自动压缩上下文。在 70% 预算时触发微压缩,85% 时触发全量压缩
Token 消耗 = System Prompt(冻结,0 额外计算)
+ 工具定义(12 核心 + N 按需)
+ 历史上下文(自动 Compact 保持精简)
+ 当前用户输入
4.3 SQLite 存储引擎
Peri 使用 SQLite 作为状态存储,而非文件系统。这带来了:
- 事务性:Agent 的每一步操作都可以回滚
- FTS5 全文搜索:支持对历史对话进行语义搜索
- 跨会话持久化:Goal、上下文、工具调用记录都持久化到数据库
五、99% AI 生成:Agent 造 Agent 的闭环
Peri 的代码仓库中有一个引人注目的事实:99% 的代码由 AI 生成,主要由 DeepSeek 和 GLM-5.2 驱动。
这不是营销噱头,而是一个完整的工程闭环:
| 你发现... | Agent 触发的闭环 |
|---|---|
| Bug 或技术债务 | auto-issue-fixer → systematic-debugging → writing-plans → subagent-driven-development → auto-issue-fixer(归档)→ 更新 CLAUDE.md |
| 需要新功能 | grill-me → writing-plans → subagent-driven-development |
| 代码质量下降 | slop-cleaner → improve-codebase-architecture → writing-plans → subagent-driven-development |
每个修复过程中发现的非显而易见的约束,都会被写回 CLAUDE.md 作为 TRAP——一个 Agent 在后续迭代中必须遵守的硬规则。仓库中的数十个 TRAP 不是人类写的,而是在每个 Bug 现场由 Agent 提取的。
这就是质量如何在没有人类代码审查的情况下复合增长。
<!-- CLAUDE.md 中的 TRAP 示例 -->
## TRAP: ACP 序列化边界
修改 ACP 边界、frozen prompt、事件链、工具可见性或序列化前,
必须先读 `docs/standards/architecture-contracts.md`。
根文件不复制规则正文——信息以契约测试为准。
六、生态兼容:零迁移的平滑过渡
6.1 Claude Code 配置直接复用
Peri 的兼容性不是「部分兼容」,而是「指过去就能用」:
# 你的 Claude Code 配置
~/.claude/
├── settings.json # 直接复用
├── hooks/ # 直接复用
└── skills/ # 直接复用
# Peri 读取同一套配置
peri # 启动后自动识别
Skills、Hooks、MCP 配置、插件——全部零迁移。
6.2 多模型支持
Peri 支持主流 LLM 提供商,且支持在会话中动态切换:
| 提供商 | 模型 | 适用场景 |
|---|---|---|
| Anthropic | Claude Sonnet/Opus | 复杂推理、长上下文 |
| DeepSeek | DeepSeek-V3 | 中文场景、性价比 |
| 智谱 | GLM-5.2 | 国产生态、API 友好 |
| 阿里云 | Qwen | 多模态、中文理解 |
| 本地模型 | 通过 Ollama 等 | 隐私敏感、离线场景 |
6.3 多渠道接入
Peri 不仅是终端工具,还支持多渠道消息接入:
- 终端 TUI:主战场,Streaming Markdown 渲染
- Web Terminal:
peri web一条命令启动浏览器终端 - WeChat / Slack / 飞书:回复在消息线程中,终端保持同步
- LSP 集成:代码智能感知开箱即用
- Langfuse:每次 Agent 交互的完整追踪
七、实战:从安装到深度使用
7.1 快速安装
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/konghayao/peri/main/scripts/install.sh | bash
# Windows PowerShell
irm https://raw.githubusercontent.com/konghayao/peri/main/scripts/install.ps1 | iex
# 启动
peri
首次启动会引导配置模型和 API Key,无需手动编辑配置文件。
7.2 Skill 管理
# 安装 Skill
agm install <skill-name>
# Peri 支持所有 Claude Code 格式的 Skill
# 一个 lockfile 确保可复现性
7.3 Workflow 示例
# 启动一个 Goal 驱动的多代理工作流
peri --goal "为项目添加完整的 CI/CD 管道,包含 lint、test、build、deploy 四个阶段"
# Agent 会自动:
# 1. 探索项目结构(explorer)
# 2. 规划 CI/CD 流程(plan)
# 3. 编写配置文件(coder)
# 4. 审查配置(code-reviewer)
# 5. 验证运行(verification)
# 6. 合并结果(general-purpose)
八、与竞品的定位差异
| 维度 | Claude Code | Cursor | Windsurf | Peri |
|---|---|---|---|---|
| 语言 | Node.js/TypeScript | Electron | Electron | Rust |
| 二进制体积 | ~200MB+ | ~150MB | ~150MB | 14MB |
| 内存占用 | 200-500MB | 300-600MB | 200-400MB | ~50MB |
| 模型绑定 | Anthropic only | 多模型 | 多模型 | Any LLM |
| 协议 | 专有 | 专有 | 专有 | ACP 开放协议 |
| 子代理 | 单代理 | 无 | 无 | 7 子代理 + Fork |
| AI 生成比例 | 低 | 低 | 低 | 99% |
| 无头运行 | 可以 | 不可以 | 不可以 | 原生支持 |
九、技术哲学:极简主义的胜利
Peri 的工程哲学可以总结为一句话:用最少的资源,做最多的事。
这种极简主义体现在三个层面:
9.1 二进制层面
14MB 的二进制意味着什么?在 Docker 容器中,Peri 可以作为 sidecar 注入,几乎不增加镜像体积。在边缘设备上,它可以在资源受限的环境中运行。在 CI/CD 管道中,下载和启动几乎是瞬时的。
9.2 Token 层面
95-99% 的缓存命中率意味着:你为 Agent 付费的每一分钱,都在真正执行任务,而不是在重复计算已经冻结的系统提示词。Deferred Tool Search 进一步确保了只有必要的工具定义被发送给 LLM。
9.3 工程层面
99% 的 AI 生成代码意味着:开发速度不再受限于人类程序员的输入速度。Agent 在发现 Bug 时自动修复、自动归档、自动更新规则——这是一种全新的软件工程范式。
十、总结与展望
Peri 不是一个「Claude Code 的克隆」,而是一个关于「Agent 应该如何存在」的完整回答。
它回答了三个核心问题:
- Agent 应该多快? → Rust 二进制,14MB,50MB 内存,瞬时启动
- Agent 应该多开放? → ACP 开放协议,任何 LLM,零锁定
- Agent 应该多智能? → 7 子代理 + Fork + Goal Tracking + 动态工作流
更重要的是,它证明了一件事:AI 可以自己造 AI。99% 的代码由 AI 生成,质量通过 TRAP 机制在每次迭代中复合增长。这不是未来——这已经在发生。
对于开发者而言,Peri 提供了一个前所未有的选择:一个真正属于社区、属于开源、属于「任何人」的编程 Agent。
参考链接:
- GitHub: https://github.com/KonghaYao/peri
- ACP 协议: https://agentclientprotocol.com
- ratatui-kit: https://github.com/KonghaYao/ratatui-kit
- Langfuse: https://langfuse.com