编程智能体实战
用 Open Coder 自主重构一个 Go 模块 — 从委托到交付全流程
本教程将带你体验 Open Coder 编程子智能体的完整自主编程流程——从一句话委托需求,到自主规划、可视化终端监控、三层自动审批、心跳汇报,最终交付成果。
前置条件
- Crab Claw 已安装并完成初始配置
- 至少配置了一个模型提供商(推荐 Claude Sonnet 或 GPT-4)
- 有一个 Go/Node/Python 项目可供操作
第一步:启用自主模式
编辑 ~/.crabclaw/crabclaw.json,开启自主编程模式:
{
"subAgents": {
"openCoder": {
"autonomousMode": true
}
}
}{
"subAgents": {
"openCoder": {
"autonomousMode": true
}
}
}重启 Gateway 使配置生效:
crabclaw gateway stop && crabclaw gateway startcrabclaw gateway stop && crabclaw gateway start第二步:委托编程任务
在聊天中用自然语言描述需求:
> 帮我把 internal/auth 模块从 session-based 重构为 JWT,要求向后兼容旧接口> 帮我把 internal/auth 模块从 session-based 重构为 JWT,要求向后兼容旧接口系统自动执行:
- 意图分析 → 识别为
task_write级编程任务 - 匹配蓝图 → 选择
coder蓝图模板 - 创建子智能体 →
spawn_coder_agent启动独立 LLM 会话 - 弹出可视化终端 → 自动打开 Bubble Tea TUI 监控窗口
第三步:观察自主规划
Open Coder 启动后会先分析项目,然后提交执行计划:
[可视化终端]
┌─ 计划面板 ──────────────────────────────────┐
│ Plan v1 (initial) — 等待审批 │
│ │
│ 1. 分析 internal/auth 现有代码结构 │
│ 2. 创建 jwt.go — JWT 签发/验证模块 │
│ 3. 重构 middleware.go — 双模式兼容 │
│ 4. 更新 handler.go — 迁移 session 到 JWT │
│ 5. 添加 auth_test.go — 单元测试 │
│ 6. 运行 go test ./internal/auth/... │
│ │
│ 状态: L1 规则引擎 → 自动批准 ✓ │
└──────────────────────────────────────────────┘[可视化终端]
┌─ 计划面板 ──────────────────────────────────┐
│ Plan v1 (initial) — 等待审批 │
│ │
│ 1. 分析 internal/auth 现有代码结构 │
│ 2. 创建 jwt.go — JWT 签发/验证模块 │
│ 3. 重构 middleware.go — 双模式兼容 │
│ 4. 更新 handler.go — 迁移 session 到 JWT │
│ 5. 添加 auth_test.go — 单元测试 │
│ 6. 运行 go test ./internal/auth/... │
│ │
│ 状态: L1 规则引擎 → 自动批准 ✓ │
└──────────────────────────────────────────────┘三层决策过程
- L1 规则引擎:文件读写、代码编辑、测试运行 → 自动批准(<1ms)
- 如果计划包含
npm install等边界操作 → L2 LLM 评估(1-3s) - 如果包含
rm -rf等危险操作 → L3 人类确认(终端/消息频道弹窗)
第四步:监控执行进度
Open Coder 在执行过程中通过心跳实时汇报:
[可视化终端]
┌─ 进度面板 ──────────────────────────────────┐
│ ████████░░░░░░░░ 50% Step 3/6 │
│ │
│ ✅ Step 1: 分析代码结构 (12 files scanned) │
│ ✅ Step 2: 创建 jwt.go (NewToken, Validate) │
│ 🔄 Step 3: 重构 middleware.go │
│ 心跳: "正在处理双模式兼容逻辑,session │
│ 检测优先,JWT fallback..." │
│ ⏳ Step 4-6: 待执行 │
└──────────────────────────────────────────────┘
┌─ Diff 面板 ─────────────────────────────────┐
│ internal/auth/middleware.go │
│ @@ -15,8 +15,22 @@ │
│ - func AuthMiddleware() gin.HandlerFunc { │
│ + func AuthMiddleware(mode string) ... { │
│ + if mode == "jwt" || mode == "dual" { │
│ + token := extractBearerToken(c) │
│ + claims, err := ValidateJWT(token) │
│ ... │
└──────────────────────────────────────────────┘[可视化终端]
┌─ 进度面板 ──────────────────────────────────┐
│ ████████░░░░░░░░ 50% Step 3/6 │
│ │
│ ✅ Step 1: 分析代码结构 (12 files scanned) │
│ ✅ Step 2: 创建 jwt.go (NewToken, Validate) │
│ 🔄 Step 3: 重构 middleware.go │
│ 心跳: "正在处理双模式兼容逻辑,session │
│ 检测优先,JWT fallback..." │
│ ⏳ Step 4-6: 待执行 │
└──────────────────────────────────────────────┘
┌─ Diff 面板 ─────────────────────────────────┐
│ internal/auth/middleware.go │
│ @@ -15,8 +15,22 @@ │
│ - func AuthMiddleware() gin.HandlerFunc { │
│ + func AuthMiddleware(mode string) ... { │
│ + if mode == "jwt" || mode == "dual" { │
│ + token := extractBearerToken(c) │
│ + claims, err := ValidateJWT(token) │
│ ... │
└──────────────────────────────────────────────┘第五步:中途修订(可选)
如果 Open Coder 发现需要调整计划:
[终端] Plan v2 (revision) — 自动评估中
新增: 7. 更新 go.mod 添加 jwt-go 依赖
L2 LLM 评估 → 合理 → 批准 ✓[终端] Plan v2 (revision) — 自动评估中
新增: 7. 更新 go.mod 添加 jwt-go 依赖
L2 LLM 评估 → 合理 → 批准 ✓revision 计划只评估新增部分(delta),比首次更宽容。
第六步:接收交付成果
任务完成后,Open Coder 返回结构化结果:
[聊天窗口]
✅ 编程任务完成
变更文件:
+ internal/auth/jwt.go (新建, 87 行)
~ internal/auth/middleware.go (修改, +22 -8)
~ internal/auth/handler.go (修改, +15 -12)
+ internal/auth/auth_test.go (新建, 64 行)
测试结果: 12/12 PASS
go test ./internal/auth/... → ok (0.45s)
总结:
- JWT 签发使用 HS256 算法,密钥从环境变量读取
- middleware 支持 dual 模式,优先 JWT,回退 session
- 旧 /api/v1/* 接口保持 session 兼容
- 新 /api/v2/* 接口默认 JWT[聊天窗口]
✅ 编程任务完成
变更文件:
+ internal/auth/jwt.go (新建, 87 行)
~ internal/auth/middleware.go (修改, +22 -8)
~ internal/auth/handler.go (修改, +15 -12)
+ internal/auth/auth_test.go (新建, 64 行)
测试结果: 12/12 PASS
go test ./internal/auth/... → ok (0.45s)
总结:
- JWT 签发使用 HS256 算法,密钥从环境变量读取
- middleware 支持 dual 模式,优先 JWT,回退 session
- 旧 /api/v1/* 接口保持 session 兼容
- 新 /api/v2/* 接口默认 JWT理解完整流程
用户: "重构 auth 模块"
│
├─ 主系统 → spawn_coder_agent
│ └─ DelegationContract (工具白名单 + token 预算)
│
├─ Open Coder 独立 LLM Session
│ ├─ propose_plan (v1, initial)
│ │ └─ L1 规则引擎 → 自动批准
│ │
│ ├─ 执行步骤 1-6
│ │ ├─ report_heartbeat × N (实时进度)
│ │ ├─ 上下文压缩 (如需)
│ │ └─ propose_plan (v2, revision, 如需)
│ │
│ └─ ThoughtResult 返回
│
└─ 主系统质量审核 → 交付给用户用户: "重构 auth 模块"
│
├─ 主系统 → spawn_coder_agent
│ └─ DelegationContract (工具白名单 + token 预算)
│
├─ Open Coder 独立 LLM Session
│ ├─ propose_plan (v1, initial)
│ │ └─ L1 规则引擎 → 自动批准
│ │
│ ├─ 执行步骤 1-6
│ │ ├─ report_heartbeat × N (实时进度)
│ │ ├─ 上下文压缩 (如需)
│ │ └─ propose_plan (v2, revision, 如需)
│ │
│ └─ ThoughtResult 返回
│
└─ 主系统质量审核 → 交付给用户常用编程任务示例
> 帮我给这个项目添加 Docker 支持
> 重构 utils 包,把重复的错误处理提取成公共函数
> 这个 API 有 SQL 注入风险,帮我修复
> 帮我写一套完整的 CRUD 测试
> 分析这个项目的技术架构,生成架构文档> 帮我给这个项目添加 Docker 支持
> 重构 utils 包,把重复的错误处理提取成公共函数
> 这个 API 有 SQL 注入风险,帮我修复
> 帮我写一套完整的 CRUD 测试
> 分析这个项目的技术架构,生成架构文档进阶:软件著作权申请
Open Coder 还能帮你自动申请软件著作权:
> 帮我准备这个项目的软件著作权申请材料> 帮我准备这个项目的软件著作权申请材料智能体自动完成:代码统计 → 技术栈分析 → 撰写说明书 → 源代码裁剪 → PDF 生成 → 浏览器自动填表。
详见 编程子智能体 的"软件著作权一键申请"章节。
常见问题
计划被 L3 人类审批拦截?
- 检查计划中是否包含危险操作(
rm -rf、git push --force等) - 在终端或消息频道中确认或拒绝
心跳超时告警?
- Open Coder 超过 300s 无心跳会触发告警
- 可能是 LLM API 调用延迟,等待即可
- 持续超时则检查模型配置
可视化终端没有弹出?
- 确认
autonomousMode: true已配置 - 手动启动:
crabclaw coder-terminal --session=<ID>