helm は何をしますか?
1つのタスクのためのライブボード。人間はブラウザで開いたままにし、あなた(エージェント)は安価なhelm呼び出しで作業中に更新します。短命なローカルサーバーが変更をその場でページにストリーム配信します。人間はいつでも舵を取れます——目標やステアリングを編集し、あなたは次のチェックポイントでそれに従います。
2つのルール
- 必ず
helmだけを呼び出すこと。HTML、サーバー、state.jsonを手動で書いたり編集したりしないこと。 各helm呼び出しはわずか数トークンであり、それが要点です——作業中にボードを正直に保つのが安価で済みます。スタイル付きページを再出力すると10倍のコストがかかり、目的が損なわれます。 - すべてのチェックポイントで人間のステアリングを再読すること(計画ステップ間、取り返しのつかないことをする前)には
helm goalを使用します。人間はページを通じてステアリングを操作し、あなたは見なければ見えません。目標やステアリングが変更された場合は、新しいバージョンに従い、そのことをeventで伝えてください。
ヘルパー
helmはビルド済みで依存関係のないNodeスクリプトdist/helm.mjsとして提供されます(生のnodeで動作——npm install不要、インストール時のビルド不要)。パスを一度取得して再利用します:
HELM="<this-skill-dir>/dist/helm.mjs" # 例: ~/.claude/skills/helm/dist/helm.mjs
このパスで呼び出します——"$HELM" …はshebang経由で動作するか、node "$HELM" …を使用します。Kubernetesを使用している場合は、helmというエイリアスを作らないでください(それは別のhelmです)。init後、ボードはカレントワーキングディレクトリから上位に向かって自動検出されるため、以降の呼び出しで--dirは不要です。
ワークフロー
-
一度だけInit。監視する価値のあるタスクの開始時に実行します。人間が最初の瞬間からステアリングできるよう目標を指定します:
"$HELM" init --title "認証をJWTに移行" --agent "Claude Code" --model claude-opus-4-8 \ --goal "セッションをCookieからステートレスJWTに移行し、誰も失わない"これでサーバーが起動し、ブラウザが開きます。ユーザーにボードが起動し、いつでも目標/ステアリングを編集できることを伝えてください。
-
計画を提示して作業の全体像を示し、それを進めていきます。
step Nは以前のステップを完了済みとし、Nを現在のアクティビティに設定し、進捗を更新します——1回の呼び出しですべてが動きます:"$HELM" plan "ユーザーのバックアップ" "RS256発行/検証を追加" "セッションの移行" "切り替え" "リグレッションチェック" "$HELM" step 2 -
作業を逐次説明——小さく、頻繁に、正直に。各呼び出しは1回だけです:
"$HELM" event ok "usersテーブルをbackups/users.sqlにバックアップ" "$HELM" event warn "3つのセッションがレガシーCookie形式を使用しており、手動移行が必要" # 落とし穴もここに "$HELM" decide "HS256ではなくRS256を採用。サービスは公開鍵のみで検証可能" "$HELM" decide "まずステージングにデフォルト、本番は人間の承認待ち" --assumption # 未確認の前提にフラグ -
チェックポイント——人間のステアリングを読み、それに従います:
"$HELM" goal # GOAL + STEERINGを出力。人間が編集した場合、その行にその旨が表示される——それに従う方向が変わった場合は適応し、それを記録します:
"$HELM" event info "ステアリング変更→ステージングのみ実施"。 -
実際のブロッカーが発生したら即座に表面化し、回答が得られたら解決します:
"$HELM" ask "最初にステージングDBと本番DBのどちらを移行しますか?" # 真の人間参加型の質問のみ "$HELM" status "本番の判断をお待ちしています" --state blocked # blocked/newの質問は人間に通知 "$HELM" resolve 1 -
完了:
"$HELM" done "すべてのセッションを移行、テストグリーン"。ボードは表示可能なまま維持され、誰も見なくなったらサーバーは自動終了します。"$HELM" stopで即座に終了。"$HELM" openで再開。
頻繁に小さく更新してください。ステータス変更、完了ステップ、落とし穴、決定、新しいアーティファクト——それぞれが1回の呼び出しです。ボードは、分単位で現実を追跡する場合にのみその価値を発揮します。
コマンド
| コマンド | 説明 |
|---|---|
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 | 計画ステップを設定するか、1つ追加します。 |
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(2カラム、ラベンダーのライト+ダーク)。
ビルド方法(開発時のみ、実行には不要):src/*.ts(作成されたTypeScript、データモデル用の共有types.ts)、build.mjs(esbuild)、package.json。src/編集後はnpm run buildを実行します。譲れないルールについてはDEVRULES.mdを参照してください。