Keen Code
用 Go 编写的极简终端编程智能体,自带哈希行编辑与多供应商切换,帮你把上下文开销压到最低。
- Star 数
- ★ 89
- 最近更新
- 4 天前
- License
- MIT
- 主语言
- Go
- FA 评分
- 53/100 · 缺口较多
30 秒速览
- 可在哪里用
- 通用 · 跨平台ChatGPT · OpenAI API · Claude API
- 开始前需要
- 典型场景
- 习惯在终端里工作的后端或 Go 工程师,想在不离开 shell 的情况下完成读码、改码、跑测试的闭环。
- 主要局限
- 项目高度主观取舍:作者明确回避“非必要”功能,需要更丰富 IDE 级能力或生态插件的用户可能觉得功能偏少。
- 源码审查
- 53/100 · 缺口较多
这个 Agent 能做什么,适合哪些场景?
Keen Code 是一个用 Go 编写的命令行 AI 编程智能体,定位类似 Claude Code 或 Codex CLI,但刻意保持精简、轻量。它主打多供应商切换、10 个内置工具、MCP 外部工具接入、技能系统、子智能体并行委派以及可配置的工具历史保留策略。核心特色是哈希行编辑:read_file 为每行加上 N:HASH| 锚点,edit_file 以原子方式应用多个 ops 并拒绝过期锚点,避免误改漂移内容。会话、记忆、压缩、权限校验和 headless 模式都有明确文档支撑,适合希望自己掌控模型与工作流的工程师。
运行 keen 后在当前目录启动交互式终端会话。它通过 read_file、glob、grep 读取与检索文件,通过 write_file 和 edit_file 写入修改,通过 bash 执行 shell 命令,通过 web_fetch 抓取网页并转成 Markdown,通过 ask_user 向用户确认,通过 delegate_task 把最多 10 个子任务并行交给 .agents/agents/ 中定义的子智能体,通过 call_mcp_tool 调用已连接的 MCP 服务器工具。模型侧支持 Anthropic、OpenAI、Codex(OAuth)、Gemini、DeepSeek、Kimi、GLM、MiniMax、OpenCode Go、Yolo-Auto 与 Amazon Bedrock,可用 /model 切换。会话可持久化与恢复,可用 /compact 压缩上下文;默认跨轮只保留精简的 TurnMemory 摘要,需完整工具输出时用 /tool-history full 开启。权限系统由 FileGuard 把关:工作目录内路径放行,敏感路径需确认,系统路径或 .gitignore 路径直接拒绝。
- 习惯在终端里工作的后端或 Go 工程师,想在不离开 shell 的情况下完成读码、改码、跑测试的闭环。
- 需要按任务切换模型的团队:同一个会话里用 /model 在 Anthropic、OpenAI、Gemini 或 Bedrock 之间换供应商。
- 已有内部工具服务、希望用 MCP 接入并让智能体按需发现工具的平台团队。
- 需要并行拆分大任务的场景:把有界子任务通过 delegate_task 分发给配置了独立模型与权限的子智能体。
- 要把编程智能体嵌入 CI 或脚本流水线的团队,用
keen run "<prompt>"配合--format json做无头调用。 - 对改动正确性敏感、希望编辑基于行哈希锚点原子应用、避免误改漂移内容的开发者。
如何安装或部署这个 Agent?
脚本安装(写入 /usr/local/bin,不可写时退到 $HOME/.local/bin):
curl -fsSL https://raw.githubusercontent.com/mochow13/keen-code/main/scripts/install.sh | bash固定版本:
curl -fsSL https://raw.githubusercontent.com/mochow13/keen-code/main/scripts/install.sh | bash -s -- -v v0.16.1或通过 npm 全局安装:
npm install -g keen-code也可以不全局安装直接运行:
npx keen-code --version安装后检查:
keen --version
which keen如何使用这个 Agent?
在项目目录启动交互会话:
keen使用自定义模型配置与 MCP 配置:
keen --model-config ./model-config.json --mcp-config ./mcp-config.json两者分别替换默认的 ~/.keen/configs.json 和 ~/.keen/mcp/configs.json;文件缺失或非法会导致启动失败而不回退。无头模式:
keen run --format json --model-config ./model-config.json "Explain this project"常用会话内命令包括 /model 切换供应商、/thinking 调整推理强度、/mcp 连接与查看 MCP 服务器、/skills 管理技能、/memory 管理记忆、/compact 压缩上下文、/tool-history full|none 切换工具历史保留、/allow-permission 设置始终放行、/emptyq 清空输入队列。ChatGPT/Codex 选项会打开浏览器登录流程,凭据存到 ~/.keen/auth.json。
这个 Agent 有哪些优点和局限?
- 哈希行编辑机制:read_file 输出 N:HASH| 锚点,edit_file 对同一文件快照原子应用多 op,过期锚点被拒绝,显著降低并发或漂移下的误改风险。
- 多供应商覆盖广,涵盖 Anthropic、OpenAI、Codex OAuth、Gemini、DeepSeek、Kimi、GLM、MiniMax、OpenCode Go、Yolo-Auto 和 Amazon Bedrock,可用 /model 即时切换。
- MCP 服务器接入后会自动生成 mcp:<server> 技能并附带工具表与 JSON Schema,工具发现保持提示词高效,无需额外的 tool-search-tool。
- 跨轮上下文默认只保留精简 TurnMemory 摘要,可用 /tool-history full 换成完整工具输出,把 token 成本交给使用者主动权衡。
- 提供 headless 模式
keen run,支持--format json、--completion-signal和--session,可嵌入脚本或 CI。 - 所有代码由 AI 智能体编写,提示词与规格保存在 .ai-interactions 目录,可作为智能体驱动开发的公开样本研究。
- 项目高度主观取舍:作者明确回避“非必要”功能,需要更丰富 IDE 级能力或生态插件的用户可能觉得功能偏少。
- 默认不保留完整工具输出,旧观察需要重新读文件或重跑搜索,长任务中会产生额外调用与延迟。
- 使用需要自备模型供应商 API 密钥或完成 ChatGPT OAuth 登录,网络不可用的环境无法正常工作。
- 自定义 --model-config / --mcp-config 文件缺失或非法会直接启动失败,没有回退默认配置的容错。
- 作为快速迭代的个人项目,兼容性与破坏性变更风险需自行评估(例如旧 --config 已改名为 --model-config)。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Keen Code 当前 | 53 · 缺口较多 | — | ★ 89 | 4 天前 | Go | ChatGPT · OpenAI API · Claude API |
| zerostack | 57 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 1.7k | 3 天前 | Rust | OpenAI API · Claude API |
| agentty | 44 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 613 | 1 天前 | C++ | OpenAI API · Claude API |
| Oh My Pi | 54 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 38k | 今天 | TypeScript | Codex · OpenAI API · Claude API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
权限系统文档较完整:Guard 对系统目录、.gitignore、$HOME 点文件默认拒绝,写操作一律需批准,危险 bash 命令强制提示,plan 模式剥离写工具,这些体现了最小权限与用户确认(各 2 分)。但 yolo 模式与 /allow-permission 可一键跳过全部提示(含危险命令),且文档未提供撤销/回滚机制,故 external_effects 与 rollback 仅 1 分。敏感数据处理方面,OAuth 令牌以 0600 存于 ~/.keen/auth.json 并做命名空间隔离,但文档自承 OAuth 错误串未做令牌脱敏,扣分至 2。依赖安全仅见 go.mod 与每周 CodeQL 工作流,无依赖锁定审计、SBOM 或漏洞处置说明,给 1 分。来源归属方面 README 提及受 pi-hashline-edit 启发,但整体未系统标注第三方来源,且发布者身份未经验证,给 1 分。
文档内部一致性较好:权限状态、命令表、MCP OAuth 状态机与失败状态描述彼此吻合(2 分)。失败信息设计具体,如 auth_required/auth_failed/disconnected 及恢复建议、--completion-signal 退出码约定(2 分)。但依赖可用性证据薄弱:go.mod 声明 go 1.26.0 与 toolchain go1.26.10,并引用多个未来时间戳的伪版本依赖,静态材料无法确认这些版本真实可获取,且无 vendor 或校验说明,给 1 分。
受众与场景明确(终端编码代理、多提供商、无头模式、子代理),能力边界文档化良好(plan/yolo 模式、adversary 只读工具、/btw 无工具),触发精度有明确规则(斜杠命令、@ 文件提及、队列上限 5、路由阈值)(各 2 分)。环境适配仅覆盖 macOS/Linux 类路径与 /usr/local/bin 安装,未见 Windows 支持说明,且安装脚本为 curl|bash 管道执行,给 1 分。
README 目录结构清晰,docs/ 分主题文档齐全,安装说明含脚本与 npm 两种方式(各 2 分)。但命名稳定性存在破坏性变更:--config 已重命名为 --model-config 且旧名不再接受,文档仅一笔带过迁移,给 1 分。示例丰富但缺少 FAQ 与已知限制专章,known_limitations 仅 1 分。LICENSE 为完整 MIT 文本(2 分)。CHANGELOG 与 ROADMAP 仅在链接中出现,未提供内容证据,versioning_changelog 给 1 分。维护责任方面发布者未经验证,CONTRIBUTING 仅被引用,maintenance_responsibility 给 1 分。
输出可用性有具体设计:hashline 锚点原子编辑、TurnMemory 上下文压缩、--format json 无头输出、/usage 用量统计(2 分)。相对既有编码代理的边际价值体现在上下文效率与技能驱动 MCP 发现(2 分)。成本收益有明确权衡说明(默认精简上下文换取更小 token 成本,/tool-history full 可选),但缺少量化基准,给 2 分。
README 大量声明可追溯到具体文档与代码路径(如 internal/mcp/oauth.go、internal/filesystem/guard.go),claim_traceability 给 1 分,因多数为文档自述而非可核验产物。跨源佐证有限:README、docs 与 go.mod 相互印证部分功能,但无测试文件或 CI 结果内容可供交叉验证,给 1 分。事实与推断分离尚可,文档区分了支持与不支持项(如 OAuth 不支持项列表),但部分性能与安全结论缺乏依据,给 1 分。
- yolo 模式与 /allow-permission 会跳过包括危险 bash 命令在内的全部确认,仅靠 Guard 兜底;生产环境应避免使用。
- 安装方式为 curl | bash 管道执行远程脚本,且发布者身份未经验证,建议先审阅 scripts/install.sh 并校验版本。
- go.mod 声明 go 1.26.0 及多个未来时间戳的伪版本依赖,静态审查无法确认其真实可获取性与安全性。
- 文档自承 OAuth 错误串未按令牌值脱敏,日志或终端输出可能泄露敏感信息。
- --config 到 --model-config 为破坏性重命名,旧脚本会直接启动失败。
- 缺少回滚/撤销机制说明,写操作与危险命令一旦执行无内置恢复路径。