helm
一个实时的单任务看板。人类在浏览器中保持其打开;您在干活时通过廉价的 helm 调用来更新它;一个短命的本地服务器将变化流式传输到页面。人类可以随时接管——编辑目标 / 指导方向——而您在下一个检查点遵循之。
两个规则
- 永远只调用
helm。绝不要手写或编辑 HTML、服务器或 state.json。 每次helm调用只消耗少量 token,这恰恰是关键点:保持看板诚实地随着工作更新而保持低成本。重新生成一个样式化的页面会多花费 10 倍成本,彻底违背初衷。 - 在每次检查点重新读取人类的指导(计划步骤之间、在执行任何不可逆操作之前),使用
helm goal。人类通过页面操纵方向;您只有主动查看才能看到。如果目标或指导发生了变化,遵循新版本并通过event说明。
助手程序
helm 以构建好、无依赖的 Node 脚本形式发布在 dist/helm.mjs(它能在裸机上运行 node ——无需 npm install,无需在安装时构建)。获取其路径一次并重复使用:
HELM="<此技能目录>/dist/helm.mjs" # 例如 ~/.claude/skills/helm/dist/helm.mjs
通过此路径调用 —— "$HELM" … 可通过其 shebang 工作,或使用 node "$HELM" …。不要将其别名为裸 helm(如果您使用 Kubernetes 的话 —— 那是另一个 helm)。init 之后,看板会自动通过从当前工作目录向上查找找到,因此后续调用无需 --dir。
工作流程
-
初始化一次,在值得观察的任务开始时。赋予其目标,这样人类从一开始就能进行操纵:
"$HELM" init --title "将认证迁移到 JWT" --agent "Claude Code" --model claude-opus-4-8 \ --goal "将会话从 cookie 迁移到无状态 JWT,不丢失任何用户"这将启动服务器并打开浏览器。告知用户看板已启动,他们可以随时在其中编辑目标 / 指导方向。
-
规划步骤,以便人类看到工作的整体形状,然后逐步推进。
step N将前一步标记为完成,使 N 成为当前活动,并更新进度 —— 一次调用完成所有更新:"$HELM" plan "备份用户" "添加 RS256 签发/验证" "迁移会话" "切换" "回归测试" "$HELM" step 2 -
随进展叙述 —— 小而频繁、诚实。每次调用一个:
"$HELM" event ok "用户表已备份到 backups/users.sql" "$HELM" event warn "有3个会话使用旧版 cookie 形状,需要手动迁移" # 陷阱也放在这里 "$HELM" decide "选择 RS256 而非 HS256,以便服务仅用公钥验证" "$HELM" decide "优先使用暂存环境,生产环境等待人类确认" --assumption # 标记未确认的假设 -
检查点 —— 读取人类的指导并遵循:
"$HELM" goal # 打印目标 + 指导;如果人类编辑过,此行会说明——遵循之如果方向改变了,适应并记录:
"$HELM" event info "指导方向改变 → 只做暂存环境"。 -
一旦出现真正的阻塞项就立即公开;得到答复后解决之:
"$HELM" ask "先迁移暂存数据库还是生产数据库?" # 仅限真正需要人工介入的问题 "$HELM" status "等待您对生产数据库的决策" --state blocked # blocked/new 问题会通知人类 "$HELM" resolve 1 -
完成:
"$HELM" done "所有会话已迁移,测试通过"。看板仍可查看,然后在无人查看时服务器自动退出。"$HELM" stop立即结束;"$HELM" open重新打开。
频繁且小规模地更新。状态变更、完成一步、一个陷阱、一项决策、一个新工件——每次调用一个。只有每分钟跟踪现实情况,看板才值得存在。
命令
| 命令 | 作用 |
|---|---|
helm init --title T [--subtitle S] [--agent A] [--model M] [--goal G] [--theme light|dark] [--no-open] | 创建看板,启动其服务器,打开它。 |
helm status TEXT [--state running|blocked|waiting|done] [--phase P] [--pct N] | 设置当前活动(NOW)行。blocked 会通知人类。 |
helm plan A B C … · helm plan --add TEXT | 设置计划步骤,或追加一个。 |
helm step N [--text NOW] | 前进到步骤 N:前一步标记为完成,N 变为活动,NOW + 进度更新。 |
helm event KIND TEXT | 附加一条时间线条目。KIND ∈ ok fail warn info run。陷阱/死胡同 → warn/fail。 |
helm decide TEXT [--assumption] | 记录一项决策;--assumption 将其标记为未确认(以便人类可以纠正)。 |
helm ask QUESTION · helm resolve N | 添加 / 移除一个“需要您输入”项(通知人类)。 |
helm goal · helm goal --set TEXT | 读取人类的目标 + 指导(在检查点执行此操作),或设置目标。 |
helm link LABEL URL · helm image PATH [--label L] · helm data LABEL VALUE | 附加一个工件(链接 / 图片 / 统计数据)。 |
helm meta [--title …] [--subtitle …] [--theme …] [--agent …] [--model …] | 后来编辑标头字段。 |
helm done [TEXT] · helm stop · helm open | 完成 · 立即停止服务器 · 重新打开看板。 |
约定(自动处理或需您遵守)
ask仅用于真正的决策。 绝不要填入已解决的或反问式的问题。如果不需要人类介入,就保持空白——安静的看板才是诚实的看板。--state控制实时脉冲、颜色和通知。 在活动时使用running;当您卡住或等待人类时使用blocked/waiting(这些会通过桌面通知 + 标签页标题中的 🔴 计数来提醒他们);结束时使用done。- 决策与假设。 对于您已承诺的选择使用普通
decide;对于您假设但未确认的事情使用--assumption。假设标签正是人类能及早发现您走偏的地方,所以要诚实标记。 - 来源页脚和活动图例会自动渲染——不要手动构建。
- 该进程是短命的。 任务完成且无人查看时会自动退出,并且永远不会自行重启。如果在页面关闭期间有更新,它们仍会被保存;
helm open显示最新状态。
文件
运行时部分(已提交,无依赖——dist/):
dist/helm.mjs— 您用于每次更新的 CLI。dist/server.mjs— 短命的本地服务器:提供 UI,通过 SSE 流式传输状态,接受指导写回,无人查看时自动退出。dist/board.html— 看板 UI(双栏,薰衣草浅色 + 深色主题),由服务器提供。
构建方式(仅开发,无需运行):src/*.ts(类型化的 TypeScript 源码,共享一个 types.ts 用于数据模型),build.mjs(esbuild),package.json。编辑 src/ 后,运行 npm run build。查看 DEVRULES.md 了解不可协商的规则。