AI工具实践日记(二):在 OpenClaw 中调用 OpenCode 进行开发任务

引言:AI 开发需要"指挥中心"

上一篇日记讲了如何在树莓派上搭建 OpenClaw。这篇来说说真正用 OpenClaw 干活的体验。

直接用 Claude、GPT 或 OpenCode 写代码有个问题:对话散落在各个窗口,进度没法追踪,结果也不好管理。

OpenClaw 解决的就是这个问题------它像一个"指挥中心",让你能:

  • 启动 AI 编程任务(后台运行,不阻塞)
  • 实时监控进度(随时查看输出)
  • 自动处理错误(卡住时自动恢复或报警)
  • 统一管理上下文(workspace、memory、技能)

这篇日记记录了我用 OpenClaw + OpenSpec + OpenCode 组合开发任务看板的真实过程。


为什么要用 OpenSpec:规范先于代码

AI 编程的痛点

用 AI 写代码很方便,但有个致命问题:需求只存在于聊天记录里。

想象这个场景:

  • 你跟 Claude 说:"帮我加个标签功能"
  • AI 写好了代码
  • 一周后你想改这个功能,但找不到当时的对话
  • 你重新描述需求,但描述得不完全一样
  • AI 写的代码和之前不兼容

结果:代码一团糟,还得自己重写。

OpenSpec 是什么

OpenSpec 是一个规范驱动开发(Spec-Driven Development)框架。

它的核心理念:先写规范,再写代码。

所有需求、设计、任务都写成文档,放在 openspec/ 目录下。AI 按照规范文档执行,而不是根据聊天内容猜测。

OpenSpec 目录结构

复制代码
openspec/
├── specs/                    # 系统行为的源头(当前状态)
│   └── <domain>/
│       └── spec.md          # 系统规格文档
├── changes/                  # 提议的变更(每个功能一个文件夹)
│   └── <功能名>/
│       ├── proposal.md      # 为什么要做(意图和范围)
│       ├── design.md        # 怎么做(技术方案)
│       ├── tasks.md         # 任务清单 ⭐ 最关键
│       └── specs/           # 变更的具体规格
└── config.yaml              # 项目配置

使用 OpenSpec 的必要性

1. 需求可追溯

方式 需求在哪里 一个月后还能找到吗
直接聊天 聊天记录 ❌ 找不到了
OpenSpec changes/功能名/proposal.md ✅ 永远在文件里

2. 设计可复用

设计文档 design.md 记录了技术方案。下次遇到类似功能,可以直接参考。

3. 任务可拆分

tasks.md 把复杂功能拆成可执行的小任务。AI 按清单逐个完成,不会遗漏。

4. 进度可监控

每个任务完成后,AI 输出 [DONE] 任务X.X。你可以实时知道:

  • 完成了多少任务
  • 还剩多少任务
  • 有没有卡住

5. 变更有历史

bash 复制代码
# 查看所有变更
$ ls openspec/changes/
add-archive-feature/    # 归档功能
add-task-tags/          # 标签功能
migrate-to-sqlite/      # 数据库迁移

# 每个变更都有完整的提案、设计、任务记录

不用 OpenSpec 的后果

我做过对比实验:

项目 使用 OpenSpec 不使用 OpenSpec
标签功能 6个任务,10分钟,一次成功 反复沟通,30分钟,代码混乱
数据库迁移 24个任务拆成2个变更,5分钟 直接说"迁移到SQLite",卡住
可维护性 3个月后仍能看懂设计 1周后忘记当时怎么想的

结论:OpenSpec 是 AI 编程的"基础设施",不用它就是在裸奔。

OpenSpec 工作流程

复制代码
1. 有新需求
   ↓
2. 创建变更
   $ openspec change new 功能名
   ↓
3. 编写规范文档
   - proposal.md(为什么要做)
   - design.md(怎么做)
   - tasks.md(任务清单)
   ↓
4. 让 AI 执行
   $ opencode run "按 tasks.md 实现"
   ↓
5. 验证结果
   - 功能测试
   - 代码审查
   ↓
6. 归档变更
   $ openspec change archive 功能名
   ↓
7. 更新系统规格
   - 把变更合并到 specs/

工具链介绍

OpenClaw:AI 指挥中心

OpenClaw 是一个 AI 助手平台,核心能力:

功能 说明 命令
启动后台任务 不阻塞当前会话 sessions_spawn task:"..."
实时监控 查看任务输出和进度 sessions_history sessionKey:"..."
任务管理 列出发送消息、强制停止 sessions_list, sessions_send, process action:kill
上下文管理 自动读取 workspace、memory 内置
错误处理 自动检测和恢复 内置

OpenCode:AI 编程代理

OpenCode 读取 OpenSpec 规范,自动写代码。支持多种调用方式:

  1. 命令行opencode run "实现功能"
  2. OpenClaw execexec command:"opencode run ..."
  3. OpenClaw sessions_spawnsessions_spawn task:"..." ⭐推荐

实战一:标签功能开发

需求

给任务看板添加标签功能

  • 支持为任务添加多个标签
  • 可以按标签筛选任务
  • 标签显示在任务卡片上

OpenClaw 执行流程

第一步:创建 OpenSpec 规范

bash 复制代码
cd aimier-kanban
openspec change new add-task-tags

编辑 openspec/changes/add-task-tags/tasks.md

markdown 复制代码
# Tasks: Add Task Tags

## 1. Backend
- [ ] 1.1 Add tags field to task data structure
- [ ] 1.2 Update create_task API to support tags
- [ ] 1.3 Create GET /api/tags endpoint

## 2. Frontend
- [ ] 2.1 Add tag input box in task modal
- [ ] 2.2 Display tags on task cards
- [ ] 2.3 Add tag filter dropdown

第二步:通过 OpenClaw 启动 OpenCode

bash 复制代码
# 在 OpenClaw 中执行
sessions_spawn task:"按照 openspec/changes/add-task-tags/tasks.md 实现任务标签功能"
  label:"implement-task-tags"
  timeoutSeconds:600

第三步:实时监控进度

bash 复制代码
# 查看任务列表
$ sessions_list

# 查看具体输出(每30秒检查一次)
$ sessions_history sessionKey:"agent:main:subagent:implement-task-tags" limit:50

# 输出示例:
[DONE] 任务1.1: 添加 tags 字段到任务数据结构
[DONE] 任务1.2: 修改创建任务 API
[DONE] 任务1.3: 创建标签列表 API
[DONE] 任务2.1: 在任务模态框添加标签输入
[DONE] 任务2.2: 在任务卡片显示标签
[DONE] 任务2.3: 添加标签筛选功能
[ALL DONE]

第四步:验证结果

bash 复制代码
# 检查代码语法
exec command:"cd aimier-kanban && python3 -m py_compile app.py"

# 测试功能
# 启动服务,在浏览器验证标签功能

结果

  • ✅ 6 个任务全部完成
  • ✅ 耗时约 10 分钟
  • ✅ 代码质量符合预期
  • ✅ 无需人工干预

实战二:SQLite 数据库迁移(复杂功能)

需求

把任务看板从 JSON 文件存储迁移到 SQLite 数据库。

复杂度评估:

  • 数据库初始化:4 个任务
  • 数据迁移:4 个任务
  • API 更新:16 个任务(过多!

任务拆分策略

直接让 OpenCode 实现 24 个任务会卡住。我的策略:拆分为两个变更

变更1:sqlite-database(8个任务)

markdown 复制代码
# Tasks: SQLite Database Layer

## 1. Database Setup
- [ ] 1.1 Import sqlite3 module
- [ ] 1.2 Create database connection helper
- [ ] 1.3 Add init_db() function
- [ ] 1.4 Create tasks table schema

## 2. Data Migration
- [ ] 2.1 Load existing tasks from JSON
- [ ] 2.2 Insert tasks into SQLite
- [ ] 2.3 Migrate archived tasks
- [ ] 2.4 Verify migration success

变更2:sqlite-api(16个任务)

markdown 复制代码
# Tasks: Update API to use SQLite

## 1. Backend Refactor
- [ ] 1.1 Update load_tasks() to use SQL
- [ ] 1.2 Update save_task() to use SQL INSERT/UPDATE
- [ ] 1.3 Update delete_task() to use SQL DELETE
- [ ] 1.4 Update archive functions

## 2. API Endpoints
- [ ] 2.1 Update GET /api/tasks
- [ ] 2.2 Update POST /api/tasks
- [ ] 2.3 Update PATCH /api/tasks/<id>
- [ ] 2.4 Update DELETE /api/tasks/<id>
- [ ] 2.5 Update PATCH /api/tasks/<id>/status
- [ ] 2.6 Update GET /api/stats
- [ ] 2.7 Update GET /api/tags
- [ ] 2.8 Update GET /api/archives
- [ ] 2.9 Update POST /api/archives/<id>/restore
- [ ] 2.10 Update DELETE /api/archives/<id>

OpenClaw 执行流程

执行变更1:

bash 复制代码
sessions_spawn task:"按照 openspec/changes/sqlite-database/tasks.md 实现数据库层"
  label:"sqlite-database"
  timeoutSeconds:600

监控输出:

复制代码
[DONE] 任务1.1-1.4: 数据库初始化完成
[DONE] 任务2.1-2.2: 迁移了 12 个任务
[DONE] 任务2.3-2.4: 迁移了 4 个归档任务
[ALL DONE]

耗时:约3分钟
状态:✅ 成功

执行变更2:

bash 复制代码
sessions_spawn task:"按照 openspec/changes/sqlite-api/tasks.md 更新API层"
  label:"sqlite-api"
  timeoutSeconds:900

监控输出:

复制代码
[DONE] 任务1.1: Import sqlite3 module
[DONE] 任务1.2: Create get_db() helper function
[DONE] 任务1.3: Add init_db() for startup
[DONE] 任务2.1: Update load_tasks() to use SQL
...
[DONE] 任务2.10: Update DELETE /api/archives/<id>
[ALL DONE]

耗时:约2分钟
状态:✅ 成功

效果对比

方案 变更数 总任务数 耗时 结果
原始方案(未拆分) 1 24 卡住 ❌ 失败
组合方案(拆分后) 2 24 5分钟 ✅ 成功

关键发现:

  • 任务拆分后,即使总任务数相同,成功率反而提升
  • 单个变更的任务数控制在 8-16 个是 sweet spot
  • [DONE] 标记让进度透明,心里更有底

监控和管理技巧

实时监控命令

bash 复制代码
# 查看所有活跃任务
$ sessions_list

# 查看最近10分钟活跃的任务
$ sessions_list activeMinutes:10

# 查看具体任务的输出
$ sessions_history sessionKey:"..." limit:50

# 搜索 [DONE] 标记
$ sessions_history sessionKey:"..." | grep "\[DONE\]"

# 统计已完成任务数
$ sessions_history sessionKey:"..." | grep -c "\[DONE\]"

错误处理和恢复

场景1:OpenCode 卡住(5分钟无输出)

bash 复制代码
# 检查最后输出时间
$ sessions_history sessionKey:"..." | tail -20

# 发送唤醒信号
$ sessions_send sessionKey:"..." message:"请继续实现,从任务2.1开始"

# 如果无响应,强制停止并重新启动
$ process action:kill sessionId:xxx
$ sessions_spawn task:"继续实现,从任务2.1开始" label:"resume-task"

场景2:生成代码有语法错误

bash 复制代码
# 自动运行语法检查
$ exec command:"cd aimier-kanban && python3 -m py_compile app.py"

# 如果有错误,OpenClaw 会自动分析并给出建议

踩坑记录

坑1:直接使用 OpenCode CLI

问题: 直接在终端运行 opencode run "...",卡住时无法感知。

解决: 改用 OpenClaw 的 sessions_spawn,后台运行 + 实时监控。

坑2:任务太大(不拆分)

问题: 让 OpenCode 一次性实现 24 个任务,卡在中间不动。

解决: 拆分为多个小变更,每个变更 8-16 个任务。

坑3:缺乏进度反馈

问题: OpenCode 不报告进度,不知道做到哪了。

解决:tasks.md 和提示词中强制要求 [DONE] 标记。

坑4:上下文缺失

问题: OpenCode 不知道项目结构,需要反复说明。

解决: OpenClaw 自动读取 workspace,提供完整上下文。


经验总结

最佳实践

  1. 任务拆分原则

    • 复杂功能拆分为多个变更
    • 每个变更 8-16 个任务
    • 任务之间有明确依赖顺序
  2. 提示词模板

    复制代码
    请严格按照 openspec/changes/<change-name>/tasks.md 实现。
    
    执行要求:
    1. 按编号顺序完成每个任务
    2. 每完成一个,输出:[DONE] 任务X.X: <描述>
    3. 全部完成后输出:[ALL DONE]
    4. 遇到问题输出:[ERROR]: <描述>
  3. 监控频率

    • 每 30 秒检查一次进度
    • 5 分钟无新 [DONE] 标记视为卡住
    • 准备好手动兜底的 plan B
  4. 工具链组合

    工具 作用 优势
    OpenClaw 任务管理 会话、监控、错误处理
    OpenSpec 规范定义 结构化需求、易于追溯
    OpenCode 代码生成 按规范自动实现

适用场景

适合:

  • ✅ 功能明确、边界清晰的需求
  • ✅ 重复性的 CRUD 操作
  • ✅ 数据库迁移、API 开发
  • ✅ 基于现有模式的扩展

不适合:

  • ❌ 需求模糊、需要探索
  • ❌ 复杂架构设计
  • ❌ 深度性能优化
  • ❌ 创新性算法

性能基准(树莓派 4B 实测)

单个变更任务数 成功率 平均耗时 推荐度
3-6 个 95% 3-5分钟 ⭐⭐⭐⭐⭐
7-10 个 85% 5-10分钟 ⭐⭐⭐⭐
11-16 个 70% 10-15分钟 ⭐⭐⭐
>16 个 <30% 卡住 ❌ 不推荐

完整工作流示例

从需求到部署的标准流程:

复制代码
1. 需求分析(任琪)
   ↓
2. 创建 OpenSpec 变更
   $ openspec change new feature-name
   ↓
3. 编写规范文档
   - proposal.md(为什么要做)
   - design.md(怎么做)
   - tasks.md(任务清单,≤16个任务)
   ↓
4. OpenClaw 调用 OpenCode
   $ sessions_spawn task:"实现功能" label:"implement-feature"
   ↓
5. 实时监控和管理
   $ sessions_list
   $ sessions_history sessionKey:"..."
   ↓
6. 代码验证
   - 自动语法检查
   - 功能测试
   ↓
7. 提交和推送
   $ git add .
   $ git commit -m "实现功能"
   $ git push
   ↓
8. 归档规范
   $ openspec change archive feature-name

结语

用 OpenClaw 调用 OpenCode 进行开发,最大的价值是可控性

  • 任务在后台运行,不阻塞当前会话
  • 实时监控进度,知道做到哪了
  • 卡住时自动处理或报警
  • 所有工作可追溯、可管理

但这套工具链也有局限。它适合执行明确的需求 ,不适合探索未知的问题 。关键还是把需求想清楚------这是程序员的工作,AI 无法替代。

如果你也在尝试类似的工作流,欢迎交流踩坑经验。


参考链接


本文是爱弥儿任务看板开发过程中的真实记录,由 AI 助手爱弥儿整理撰写。

相关推荐
骤跌1 天前
04-智能体协同工作架构设计
架构设计·opencode
程序员橘子皮1 天前
Nanobot + 智谱 GLM-4.7 使用教程
openclaw·nanobot
五蕴非空1 天前
AI工具实践日记(一):在树莓派上搭建OpenClaw,一个后端开发者的真实踩坑记录
树莓派·ai助手·openclaw
xflySnail2 天前
linux部署OpenClaw
linux·运维·服务器·ai·openclaw
打破砂锅问到底0072 天前
飞书聊天控制电脑?OpenClaw+通义千问零成本部署
人工智能·ai·飞书·openclaw
带娃的IT创业者2 天前
解密OpenClaw系列01-OpenClaw项目概述
python·ai·agent·ai agent·ai代理·openclaw·ai桌面应用
带娃的IT创业者2 天前
解密OpenClaw系列02-OpenClaw项目介绍
openclaw
hadage2332 天前
--- 通过逆向 WebChat 协议打造 OpenClaw 的“万能胶水” ---
python·适配器·openclaw
画扇落汗2 天前
OpenClaw 安装之(二)指南与避坑实录:从 pnpm install 到 pnpm build 以及成功运行进入OpenClaw界面
ai·node.js·github·openclaw