
enClaw 解决的就是这个问题——它像一个指挥中心让你能启动 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. 需求可追溯方式需求在哪里一个月后还能找到吗直接聊天聊天记录❌ 找不到了OpenSpecchanges/功能名/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/工具链介绍OpenClawAI 指挥中心OpenClaw 是一个 AI 助手平台核心能力功能说明命令启动后台任务不阻塞当前会话sessions_spawn task:...实时监控查看任务输出和进度sessions_history sessionKey:...任务管理列出发送消息、强制停止sessions_list,sessions_send,process action:kill上下文管理自动读取 workspace、memory内置错误处理自动检测和恢复内置OpenCodeAI 编程代理OpenCode 读取 OpenSpec 规范自动写代码。支持多种调用方式命令行opencode run 实现功能OpenClaw execexec command:opencode run ...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 个任务会卡住。我的策略拆分为两个变更。变更1sqlite-database8个任务# 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变更2sqlite-api16个任务# 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/idOpenClaw 执行流程执行变更1sessions_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分钟 状态✅ 成功执行变更2sessions_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分钟 状态✅ 成功效果对比方案变更数总任务数耗时结果原始方案未拆分124卡住❌ 失败组合方案拆分后2245分钟✅ 成功关键发现任务拆分后即使总任务数相同成功率反而提升单个变更的任务数控制在 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\]错误处理和恢复场景1OpenCode 卡住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提供完整上下文。经验总结最佳实践任务拆分原则复杂功能拆分为多个变更每个变更 8-16 个任务任务之间有明确依赖顺序提示词模板请严格按照 openspec/changes/change-name/tasks.md 实现。 执行要求 1. 按编号顺序完成每个任务 2. 每完成一个输出[DONE] 任务X.X: 描述 3. 全部完成后输出[ALL DONE] 4. 遇到问题输出[ERROR]: 描述监控频率每 30 秒检查一次进度5 分钟无新[DONE]标记视为卡住准备好手动兜底的 plan B工具链组合工具作用优势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 无法替代。