惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Spread Privacy
Spread Privacy
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
L
LINUX DO - 热门话题
T
Threat Research - Cisco Blogs
T
Tenable Blog
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
P
Proofpoint News Feed
A
About on SuperTechFans
P
Privacy International News Feed
月光博客
月光博客
雷峰网
雷峰网
S
Secure Thoughts
博客园 - 叶小钗
博客园 - 聂微东
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Project Zero
Project Zero
The Cloudflare Blog
SecWiki News
SecWiki News
The Hacker News
The Hacker News
V
Vulnerabilities – Threatpost
罗磊的独立博客
A
Arctic Wolf
阮一峰的网络日志
阮一峰的网络日志
Know Your Adversary
Know Your Adversary
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Troy Hunt's Blog
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
小众软件
小众软件
有赞技术团队
有赞技术团队
博客园 - 司徒正美
T
Tailwind CSS Blog
量子位
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
L
Lohrmann on Cybersecurity

博客园 - 五蕴非空

AI工具实践日记(一):在树莓派上搭建OpenClaw,一个后端开发者的真实踩坑记录 .net core XML 解析帮助类 常用工具类 .net Core 同一接口不同实现的依赖注入 - 五蕴非空 大批量数据操作的性能优化方案 .net core 3.1 配置文件立即更新 为.net Core 3.0 WebApi 创建Linux守护进程 asp.net core 3.0 JObject The collection type 'Newtonsoft.Json.Linq.JObject' is not supported .net Core2.2 WebApi通过OAuth2.0实现微信登录 Asp.net导出Excel文件 Ext.Net 使用总结之GridPanel中的选中行 Ext.Net 使用总结之查询条件中的起始日期 Ext.Net 使用总结之GridPanel的删除事件 使用 NuGet 管理项目库 JavaScript 获取客户端计算机硬件及系统信息 程序员技术练级攻略 ThoughtWorks(中国)程序员读书雷达 Sql 分割 键值对字符串 得到某值对应的名称 Ext.net 中日期格式的计算
AI工具实践日记(二):在 OpenClaw 中调用 OpenCode 进行开发任务
五蕴非空 · 2026-02-13 · via 博客园 - 五蕴非空

引言: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. 变更有历史

# 查看所有变更
$ 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 规范

cd aimier-kanban
openspec change new add-task-tags

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

# 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

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

第三步:实时监控进度

# 查看任务列表
$ 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]

第四步:验证结果

# 检查代码语法
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个任务)

# 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个任务)

# 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:

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:

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] 标记让进度透明,心里更有底

监控和管理技巧

实时监控命令

# 查看所有活跃任务
$ 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分钟无输出)

# 检查最后输出时间
$ 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:生成代码有语法错误

# 自动运行语法检查
$ 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 助手爱弥儿整理撰写。