📌 项目地址:Hmbown/CodeWhale | ⭐ 35,869 颗星 | 🔧 Rust | 📜 MIT
大多数代理在加权力,它先给你加责任
我试过不少编码代理。它们上来就加工具、加上下文、加自主权——好像只要给模型足够多的东西,它就能搞定一切。CodeWhale 开头的思路不一样,一句话说清:Most coding agents start by adding power. CodeWhale starts by assigning responsibility.
拿到 35869 颗星(Rust 写的),这个项目不是一个模型,而是一层可编程的规则层。它在模型外面圈了一道护栏,让模型必须遵守你定好的优先级。这道护栏叫 Ego + Constitution。
Ego 层:代理必须有个可寻址的身份
README 里说,代理在编辑仓库之前,得有一个“地址”:这个终端、这个用户、这个分支、这个会话。这就是 ego 层。它不是让代理扮演一个人设(比如“你是一个资深架构师”),而是一个责任附着点。所有改动都知道是谁干的、在哪个分支、哪个会话里干的。
我的理解是:你在一台机器上跑码,开了三个终端窗口,每个窗口有不同的分支或任务。CodeWhale 能区分出每个窗口里代理的“实例”,不会混在一起。这是代码层面的隔离,不是模型记忆力能保证的。
Constitution:给冲突的信息源定排序
一个真实的工作区里,有太多东西在同时影响模型的输出:当前用户指令、仓库里的 README、shell 输出、之前任务的历史记忆、前面的代办交接、安全策略、写到一半的代码……这些全部挤在一个模型推理回合里。CodeWhale 用 Constitution 给它们排了顺序:
- Ego 是可寻址的。 代理是当前终端和 workspace 里的一个实例,不是一张模型卡或排行榜分数。
- 证据优于叙述。 工具的输出比模型的猜测更可信。shell 命令返回非零就报告失败,不美化。
- 用户意图至上。 当前请求的优先级高于仓库旧指南、历史记忆和人格覆盖。
- 本地规则显式化。 仓库可以放
.codewhale/constitution.json定义项目级不变量、分支策略、验证规则。 - 运行时策略是代码。 审批门、沙箱、回滚、工具 schema 都写在代码里,不是模型需要记住的建议。
这三条是强制执行的。你换模型——比如从 DeepSeek V4 换到 Ollama 上的 Llama——规则依然生效。因为规则不在模型权重里,在 CodeWhale 的 runtime 里。
安装与配置:两条 cargo 命令
cargo install codewhale-cli --locked
cargo install codewhale-tui --locked
然后跑 codewhale --version 和 codewhale --model auto。首次启动会弹提示让你输入 DeepSeek API key,存在 ~/.co 里。前提是装了 Rust 工具链 1.88+(2024 edition)。目前没有 npm、Homebrew 或 Docker 入口——就 cargo 和 GitHub Releases。
DeepSeek V4 是一等公民,但不绑定。README 列出了其他模型路由:OpenRouter、NVIDIA NIM、小米 MiMo、Arcee、SiliconFlow、Fireworks、Novita、OpenAI 兼容网关、自托管 SGLang/vLLM、Ollama、Hugging Face。每个路由独立配 key 和端地址,你可以在一个会话里切模型不改规则。
运行时功能:五块硬核拼图
1. 审批门:你确认它才动
代理要改文件、跑 shell、操作 git、访问网络、调 MCP 或子代理,必须过你这一关。修改以 diff 展示,你敲 y/n。你可以在审批时打断提问:“为什么删这个函数?” 它逐步输出推理。CodeWhale 确保推理和工具输出不混在一起——这是架构保证,不是模型自觉。
2. side-git 快照与 /restore 回滚
仓库 .git 之外,CodeWhale 独立维护操作快照。你随时可以用 /restore 回滚到任意快照点,不会动到 git 历史。这意味着你可以在实验性修改上随便搞,不满意就回滚。对 refactoring 特别有用——你不想污染 commit log 的试错都可以留在 side-git 里。
3. 实时诊断:编辑后立刻看错误
如果本地装了语言服务器(LSP),CodeWhale 编辑完文件就立刻调用 LSP 拿到诊断结果。你不需要手动保存再跑 linter。这个把编辑器级别的即时反馈带进了终端代理流程里。我试的时候,它改完一行代码就报了一个类型错误,我当场就能驳回。
4. 并发子代理:并行调查和实现
你可以同时派多个子代理。比如一个查 API 文档,另一个写实现代码,然后合并结果。README 提到用于 parallel investigation and implementation。子代理之间各自独立,但受同一个 Constitution 约束。我还没测试大规模并行,但单次派两个子代理跑不同任务,它工作正常。
5. 持久会话、fork、转发
代理会话可以保存、可以 fork、可以传递给其他工具或 GUI。你可以在一个会话里做调研,然后 fork 一个新会话给另一个开发者继续。也支持 relay handoff——把一个仍在运行的任务接力给别的 agent。runtime API 允许编辑器或 GUI 集成。
模型路由:明确独立配置
DeepSeek V4 是默认优先路径,但其他模型只要兼容 OpenAI 接口就能接入。每个模型的路由、参数、API Key 分开配。README 说 DeepSeek is first-class, not exclusive。你可以在运行时切换模型而不改任何规则——规则在 Constitution 里,不在模型里。我试了切到 Ollama 的 Qwen2.5,规则照常执行。
试用体验:诚实的第一印象
我按 README 装完,跑了一个重构函数的任务。最直接的感受是“证据闭环”:shell 命令如果返回非零退出码,代理不会自己编一个解释,而是把原始输出和错误码塞进后续的提示里。调试变得可重复,因为每一步的决策依据都是工具真实输出,不是模型的推测。
审批门在代理要删文件时特别有用。它会停住,展示 diff,等你说 y/n。我在这问“为什么删这个函数?”,然后看它的推理——推理里不会凭空捏造,因为工具输出已经告诉它函数体是什么。我看到过有些代理一味美化结果,CodeWhale 不这样做。不是因为它道德高尚,是 Constitution 写死了“证据优先于叙述”。
适合谁
如果你习惯在终端里用 vim/neovim 写代码,想要一个能理解项目上下文、但又不擅自改东西的代理,CodeWhale 值得试试。它不适合想“一键生成项目”的人,也不适合害怕命令行的人。它的设计前提是:开发者始终控制最终改动,代理只负责提供证据和推理。如果你接受这个前提,它就是目前最诚实的编码代理之一——因为诚实不是模型决定的,是规则决定的。