AGENT SKILL

execplan

任务开工前用这个 skill 评估是否需要先写 spec。触发:涉及 ≥3 模块、>30 文件改动、>10 步骤、架构级决策、或用户说「先出方案 / 先写 spec」。生成的 spec 放 workspace/specs/

License 许可
MIT
所属仓库
KarryViber/Orb
最近更新
2026-05-14
Stars
★ 66
Forks
8

01 前言 Front Matter

name
execplan
provenance
user-authored
description
任务开工前用这个 skill 评估是否需要先写 spec。触发:涉及 ≥3 模块、>30 文件改动、>10 步骤、架构级决策、或用户说「先出方案 / 先写 spec」。生成的 spec 放 workspace/specs/

03 SKILL.md 正文

复杂任务(>10 步骤、>30 文件、跨会话恢复、需要 Karry 审阅后 agent 独立推进)前写一份 ExecPlan,让不知道任何上下文的新会话也能接着干完。

基于 OpenAI Codex Exec Plans + Yansu scenario-simulation 改造。

双层触发(与 skill-factory 对称)

即时层:任务开工前的 Gate

每次 worker 收到任务,开工前先评估复杂度(不向用户输出评估过程,只在命中时开口):

命中门槛(满足任一就必须提议):

  • 任务涉及 ≥ 3 个模块 / 文件目录
  • 预估 > 30 个文件改动 或 > 10 个有序步骤
  • 架构级决策(新增存储 / 改 IPC / 增 cron / 改 schema)
  • Karry 明说「先出方案」「先写 spec」「先想清楚」
  • 预估单次 worker 无法完成(需要跨会话推进)

命中时的提议格式(任务回复的开头,而不是夹在中间):

:clipboard: 这个任务建议先写 ExecPlan
*理由*:{触发的具体门槛}
*spec 路径*:`workspace/specs/{kebab-name}.md`
*选项*:
  - `写 spec` — 我先出 ExecPlan 供你审阅再开工
  - `直接干` — 跳过 spec,立即执行
  - `我来写` — 你自己写 spec

用户回复「直接干」或已显式给出简单指令 → 不再追问,正常执行。 用户回复「写 spec」→ 按骨架写完 ExecPlan 并 commit,等 Karry 在 ## 验收场景 段对场景拍板后再进实施 turn。

被动层:现有 spec 的活文档维护

进入 workspace/specs/{name}.md 相关任务时:

  • 每个停顿点必须更新 Progress(勾选 / 拆分 / 时间戳)
  • 发现意外 → Surprises & Discoveries 追加
  • 改方向 → Decision Log 追加
  • milestone 完成 → Outcomes & Retrospective 追加
  • 每次 commit 带对应 spec 引用(spec(xxx): ...)

聚合层:spec 健康度按需巡检

用户说「巡检一下 spec / 看看 spec 状态」时执行:

  • 扫 workspace/specs/*.md,按 Progress 未勾选比例、最后更新时间排序
  • 发现 Progress 停滞 > 7 天且未标完结 → 报告
  • 发现 Outcomes 未填但最后 Progress 显示 100% → 提醒补 retrospective
  • 不自动修改 spec 文件,只做诊断

不设 cron(2026-04-18 决定,遵循简洁原则)。

核心铁律

  1. 自包含:单个文件看完就能干活,不依赖「你之前说过」「见上一版」
  2. 活文档:边做边改 Progress / Decision Log,不是写完就扔
  3. 可验证结果:每个 milestone 描述可观测的行为(跑什么命令、看到什么输出),不是「加了个 struct」
  4. 绝对路径 + 具体命令:文件路径从 repo root 写全,命令写清 cwd
  5. 嵌入知识:需要的背景直接写进来,不要「参见某博客」
  6. 场景先于代码(2026-04-25 起):spec 草稿必带 ## 验收场景 段(≥3 条),Karry 拍板才进实施。借鉴 Yansu,挡前置理解错位

Orb 工作流约定

  • 位置:~/Orb/profiles/<your-profile>/workspace/specs/{task-name}.md
  • 命名:kebab-case,见名知意(dm-routing.md / worker-zombie-cleanup.md)
  • 提交时机:ExecPlan 本身就是一个 commit,后续每个 milestone 完成也要 commit
  • 不要在 ExecPlan 里再嵌套 代码块(用缩进块替代);顶层也不必用 包裹整份文档
  • 必带「执行」段:spec 末尾必须有 ## 执行 段,注明总 turn 预算;大改拆「调研 turn ≤ X」+「实施 turn ≤ Y」两段
  • 必带「验收场景」段(2026-04-25 起):≥3 条 happy/edge/fail 场景,写完发 Slack 等 Karry 拍板后再开工

骨架(必须包含这些段)

# {动作短语标题}

## Purpose / 大图景
做完这个 Karry 能做什么之前做不了的?用户可见行为是什么?

## Progress
- [x] (2026-04-18 11:30 JST) 已完成项
- [ ] 待办项

## Surprises & Discoveries
- 观察: ...
  证据: {日志/测试输出}

## Decision Log
- 决策: 用 A 不用 B
  理由: ...
  日期: 2026-04-18

## Outcomes & Retrospective
(收尾写)

## Context / 当前状态
假设读者零上下文。关键文件写全路径,定义每个术语。

## Plan of Work
散文描述:改哪些文件(全路径)、加什么、为什么。

## 验收场景  ← Karry 拍板 gate
列 ≥3 条具体场景,每条写「输入 → 期望可观测行为」。覆盖至少:
- **Happy path**:典型成功用例
- **Edge case**:边界 / 罕见输入 / 并发 / 部分失败
- **Failure mode**:明确的失败行为(报错文案 / 降级路径 / 不该发生什么)

写完发 Slack 等 Karry 确认。Karry 改场景 = spec 调整;Karry 点头 = 进实施。

## Concrete Steps
具体命令 + cwd + 预期输出片段。

## Validation / Acceptance
跑什么、看到什么——对应「验收场景」每条要可执行验证。

## Idempotence / Recovery
能不能重跑?失败如何回滚?

## Interfaces / Dependencies
涉及的模块、函数签名、IPC 协议。写全限定路径。

## 执行
总预算 ≤ N turn;若是大改,拆「调研 turn ≤ X」+「实施 turn ≤ Y」两次 codex session。

Milestone 原则

每个 milestone 独立可验证、增量交付。写 milestone 时讲故事:目标 → 工作 → 结果 → 证据。

什么时候更新 ExecPlan

  • 每个停顿点:更新 Progress(必要时拆分「已做 X / 剩余 Y」)
  • 发现意外行为:写入 Surprises,附证据
  • 改变方向:写入 Decision Log,说明 why
  • Milestone 完成:写 Outcomes 片段
  • 大改完方向:文档底部加一条 revision note

反模式

  • :x: 方案写一半,Progress 永远停留在 Day 1
  • :x: 步骤抽象到「合理处理 X」「按架构调整」——新会话看不懂
  • :x: 引用「上次那个 spec」但没 checked in
  • :x: 验收写成「代码通过 lint」而不是「用户可看到的行为」
  • :x: 每次停顿都不 commit,丢状态
  • :x: 跳过验收场景评审直接进实施(场景先于代码是硬约束)
  • :x: 验收场景写成「能跑 / work / 不报错」——必须是具体可观测行为

与 Orb 其他 skill 的分工

工具 用途 触发层次
execplan (本文件) 把一次性复杂任务拆成可独立执行的 spec 即时 gate + 周扫
skill-factory 把重复工作流沉淀为可复用 skill 即时提议 + 周聚合
state-assumptions-before-acting 开工前显式化假设 任务进入实施前
commit-lineage commit message 锚定 spec/lesson 每次 commit

04 同仓库更多 Skills

KarryViber
KarryViber/Orb

webapp-testing

Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.

测试与质量前端开发
★ 66
KarryViber
KarryViber/Orb

vendor-doc-actionability

对外合作文档(交付文档 / POC 文档 / Solution Doc / 提案书)必须为每个「需对方执行」的动作写清具体操作入口(URL / 工单系统 / 脚本路径 / 联系人 + 联系方式 / 步骤编号)。Use when 给客户、vendor、合作方写交付文档、POC 文档、Solution Doc、提案书;或检视已有对外文档是否抽象到无法执行。

★ 66
KarryViber
KarryViber/Orb

vendor-api-param-validation

第三方 API / SDK 集成开工前,强制先列参数 checklist 并对照官方文档逐项验证(名称 / 类型 / 必填 / 默认 / 上限),通过后再编码——不是「写完再调通」。Use when 新接 vendor API/SDK(Slack / LongPort / freee / LLM API 等)、既有集成追加新 endpoint 或新字段、用户说「调通某接口」「接入 X」「集成 X」。

开发工程师后端与接口
★ 66
KarryViber
KarryViber/Orb

truth-ladder

状态放行三层阶梯(attempted / observed / confirmed)—— 汇报任务、API、命令、消息或外部动作状态时强制分层,避免把"动作已发起"误写成"结果已达成"。Use when 准备写「任务已完成」「API 返回成功」「exit code 0」「用户已收到」「ok:true」类状态汇报;或在 cron 报告 / Slack 回报 / project status / receipt 中表达完成度时。

开发工程师
★ 66
KarryViber
KarryViber/Orb

thread-object-realignment

长 thread 切题后的对象重定协议——thread 历史 ≥5 条且检测到切题信号时,回复前必做「用户最后显式问题对象 vs 待发回复对象」一致性校验,不一致则改写或反问。Use when Slack thread 历史 ≥5 条且当前用户消息出现切题信号(主题词突变、问句指向新实体、时间线跳跃、出现「另外」「话说」「回到 X」「换个话题」等切题语,或 ≥3 turn 后用户显式问题对象与最近 assistant 回复对象不同)。

★ 66
KarryViber
KarryViber/Orb

theme-factory

Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.

视觉设计
★ 66