chips について
pstack chipsのワークフローで、プロジェクトの周辺タスクを共有台帳で管理するスキルです。タスクの巡回、提案、開始、取り下げに加え、カード、依存関係、セッションの追跡規則を扱います。
主な機能
- 01未完了タスク台帳の確認と更新
- 02発見事項を新規タスクとして提案
- 03カード化されたタスクの開始と取り下げ
- 04タスクの依存関係とセッションの追跡
- 05着手可能・進行中・待機中の作業を報告
活用シーン
- 01プロジェクトの未完了タスク一覧を更新
- 02作業中に見つけた後続事項を記録
- 03提案カードからタスクを開始
- 04ブロック中または着手可能な周辺作業を特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ udecode/ dotai --skill chipsインストール後、Claude Code で/chipsを入力して読み込まれたか確認します。
詳細
チップ
チップとは、プロジェクトで推奨されるタスク、実行の対象外のサイド作業、または実行の1時間という予算に収まらない計測作業で、オーナーが新しいセッションで開始できます。プロジェクトごとに1つの台帳の行として記録され、提案ツール内のカードはその行を表示したものにすぎません。ルールは .agents/pstack/rules/chips.md で、sync-pstack がこれをすべてのプロジェクトに反映します。このセッションで台帳に初めて書き込む前に、必ず全文を読んでください。ただし、カードから開始したセッションでは、そのタスクの行に必要な情報はカードのブリーフに記載されています。このスキルは各モードを実行するもので、独自のルールを追加することはありません。
以下の各コマンドは node .agents/pstack/decisions-check.mjs <command> です。プロジェクトのチェックアウトから実行してください。カードのセッションが専用のワークツリーで開始されている場合は、ブリーフに出力されたパスがその場所を示します。このセッションの ID は、ランタイムのセッションツール(Claude Code デスクトップの get_session に self を指定する場合など)から取得し、すべてのボード読み取りに --session <id> を渡してください。セッションツールがないランタイムでは、これを付けずにボードを読み取ります。
| モード | 用途 |
|---|---|
一括確認、引数なしの /chips、/chips all、または /chips codex | このセッションで未完了のタスクを最新の状態にし、開始できるタスクをカードにしてボードを報告します。all は、稼働中のセッションに割り当てられていないタスクも対象とし、codex は提示する各カードで Codex への引き継ぎを強制します |
| 提案 | 調査結果を追加します。新しい作業を台帳に登録する唯一の方法です |
| 開始 | カードで開かれたタスクを、そのカードのセッションで開始します |
| 破棄 | タスクを破棄するというオーナーの意向を記録します |
pstack もこれらのモードを呼び出します。pstack のステップで追跡対象の issue、フォローアップ、または振り返り用の Backlog 項目を登録する場合や、範囲外の修正を独立した PR として提出する場合は、リードが代わりに Offer を実行します。引き継ぎのたび、コンパクションのたび、そして終了時に、リードは簡易的な一括確認を実行します。これはステップ 3 を省略します。「次は何?」のように、サイド作業の未完了チップについて尋ねられた場合は、ステップ 1 のクリーンアップを行わずにステップ 1 と 6 を実行し、何も書き込みません。
一括確認
chips --session <id>とchips staleを実行します。stale レポートには、未完了タスクごとに、経過期間、提案後に削除された、または存在しなくなった書き込み対象のパス、その提案以降に対象パスで行われたコミット、クローズ済み PR による待機状況、カードが表示されます。古い可能性が最も高いものから並びます。 その後、chips.md の Cleanup に従って、完了したタスクのカードセッションをクリーンアップします。アーカイブ済みのセッションも含むすべてのセッションをセッションツールで一覧表示し、Claude Code デスクトップのlist_sessionsでinclude_archivedを指定し、セッション数を超えるlimitを設定するなどして、その一覧を実行ディレクトリに JSON 配列として保存します。その後、chips cleanup --sessions <file> --session <id>を実行します。Archive の下に一覧表示された各セッションをセッションツールでアーカイブし、一覧をもう一度保存して、chips cleanupを再実行し、表示されたscan.mjs --removeコマンドを実行します。ステップ 6 用に、最初の実行の Report 行を保持します。chips.md の Owner に従い、/chips allで、最後に保存した一覧を使ってchips all --session <id> --sessions <file>を実行し、ボードをもう一度読み込みます。以降はそのボードを使用します。セッションツールのないランタイムでは、この手順を省略します。- Do リストに示されたパスと、chips.md の Sweep に記載された今回の実行分の行をまとめて、1 回の
append --from <file>バッチで適用します。- Withdrawal パス:指定された各カードで dismiss ツールを呼び出し、各項目の指示に従ってツールのレポートで決まった行を記録します。
- Ledger パス:指定された各行を記録します。
- Card パス:ステップ 5 で処理します。
- 確認項目:セッションツールで各セッションを検索します。ツールがそのセッションをアーカイブ済みまたは存在しないと報告した場合は、カード項目の
card:を指定してuncardedを記録します。開始済みタスクの行にセッションが指定されていない場合は、項目の指示に従ってセッションを見つけ、session:を指定してstartedを記録します。ツールが開始済みタスクのセッションをアーカイブ済みと報告した場合は、ツールで最後のレポートを読み、コミットに変更が含まれている場合、またはレポートにセッションが変更を反映したと記載されている場合はlandedを記録し、レポートに指定があればpatch:を付けます。レポートでパッチが返されているものの適用されていない場合は、chips.md の Landing に従ってパッチを反映し、patch:を指定してlandedを記録します。レポートでパッチが返されず、このチェックアウトにもセッション独自のワークツリーにも、タスクのパスに未コミットの編集がない場合に限り、dismissed stoppedを記録します。それ以外の場合、またはツールでセッションが見つからない場合、タスクはstartedのままとし、ステップ 6 にその理由を記載します。chips --session <id>を再実行し、Do リストにカードパスまたは適用できるものが何も表示されなくなるまで繰り返します。appendがバッチを拒否した場合は、そのメッセージに従って拒否された行を修正または削除し、残りを append します。
- 古いレポートにある各タスクについて、概要、記載された事実、コードを照らし合わせて判断し、行を一括で append します:
- ツリーにすでに修正が含まれている場合は、コミットを示して
dismissed doneを記録します。 - 提示されてから対象が削除されている場合は、
dismissed supersededを記録します。パスが移動しただけの場合は、新しいwrites:を指定してupdatedを記録します。 - 存在しないパスとは、提示された名前が間違っているパス、またはタスクが作成するパスです。
git ls-filesで実際のパスを見つけて、それを指定してupdatedを記録するか、タスクが作成するパスはそのままにします。カード化されたタスクのupdatedで削除できるのはパスだけなので、セッションではstarted行に実際のパスを記載します。 - 待機中の PR がマージされずにクローズされている場合は、現在の waits を指定して
updatedを記録します。 - 2 つのオープンタスクが同じ問いに答える場合は、トピックの移動を記録し、chips.md の Sweep が示す
dismissed dupを記録します。優先するタスクにカードがあるか、開始済みの場合は、もう一方にwaits: task:<keeper>を指定します。 - 開始済みのタスクについては、その変更を含むコミットがある場合に
landedを記録します。残りはステップ 2 のチェック項目がセッションから確定するため、そのセッションがまだ実行中かどうかを担当者に尋ねないでください。 - レポートでタスクが薄い可能性があるとされている場合は、プラン内でその指摘を見つけ、提示されている名前を記録または実行し、
folded行として記録します。このセッションがそのタスクのカードを持っている場合は、先に取り下げます。別のセッションが持っている場合は、そのカードがキューから外れた後に指摘を折りたたみます。指摘を保持しているソースがない場合は、タスクをそのままにします。薄いままにするタスクはステップ 6 で示します。 - カードを持ち、Ready 行に別のオープンタスクとパスを共有すると記載されている各タスクについて、依存関係をステップ 5 と同様に判断します。依存関係が必要な場合は、カード化されたタスクが取り込む、待機先と
task:<その ID>を指定したupdatedを記録します。 - カードを持つ各タスクについて、ステップ 5 と同様に chips.md の Title ルールに照らして工数を確認し、異なる場合は正しい
effort:を指定したupdatedを記録します。カード化されたタスクはこれを取り込みます。
- ツリーにすでに修正が含まれている場合は、コミットを示して
- ステップ 3 で変更した内容について、ステップ 2 を繰り返します。
- カードパス:各カードの前に、そのタスクが別のオープンタスクの成果を必要とするかどうかを判断します。まず Ready 行にパスを共有すると記載された各タスクを確認し、次に、その作業が前提としているオープンな設計上の問いを確認します。成果が必要な場合は、カードを出す代わりに、待機先と
task:<その ID>を指定してupdatedを記録します。また、概要に記載された工数を chips.md の Title ルールに照らして確認し、原因とその所在が指摘に記載された(xhigh)の修正にはeffort: high、原因が特定されていないバグや遅延にはeffort: xhighを指定してupdatedを記録します。その後、suggest ツールの直近の結果に保留中のカードが 20 件未満表示されている間に、同じターン内で各カードに Do リストの名前を提示します。プロンプトにはchips brief <id>の出力をそのまま使い、工数には概要に記載された値を使います。その後、card:とsession:、さらに/chips codexではcodex: alwaysを指定してcardedを記録します。suggest ツールがないランタイムでは、chips.md の Limits に従って、プランの## Open workにある各 Ready タスクを代わりに提示します。各カードの前に、タスクのwrites:がアクティブなプランに触れるかどうか確認します。Status:がstatus.mjsで始まる語、たとえば building で始まるプランはアクティブです。そのプランのファイルは、プラン自体、意思決定ログ、および対象ファイル<plans>/topics/<topic>.mdです。トピックはTopic:行、または.agents/pstack.jsonでpageTopic.fieldが指定するフロントマターリストの最初の項目です。そのセッションはこれらのファイルを書き換えており、chipsが認識するのは台帳のタスクだけなので、カードの代わりに、そのタスクの待機先とrun:<そのプラン>を指定したupdatedを記録します。 - まず、クリーンアップの Report 行、Sweep がクリーンアップした各タスクとそのコミットへのリンク、
scan.mjs --removeが残した各 worktree とその理由を報告します。次に、この Sweep が記録した各行を平易な言葉で 1 行ずつ報告し、続いて、開始可能なタスクとカードの有無を報告します。20 件のカード制限によりカード化されなかった各 Ready タスクの横にはstart <id>を記載します。開始済みのタスク、オープンのままである理由、およびそのタスクを閉じるdrop <id>も報告します。何を待っているか、その待機先ごとにまとめて報告し、レビューが必要な迅速な作業も報告します。タスクが、担当者がまだコミットしていない完了済み作業を待っている場合は、開始可能なタスクの一覧の前に、そのコミットを促す報告をします。該当する各完了済みタスクの名前と、そのコミットによって解放される待機中タスクの数を記載します。次の作業の波はその後に始まります。各タスクは ID とタイトルで示します。記載する各コミットは、そのコミットへの GitHub リンクhttps://github.com/<owner>/<repo>/commit/<sha>として記載し、owner と repository はチェックアウトのoriginリモートから読み取ります。レポートで担当者に何も尋ねません。セッションのレポートまたはプランに担当者への問いがある場合は、リードが解決します。その問いを規定するルールに基づいて回答し、そのプランに決定行とセッションへのメッセージを添えたlookDefaults 行として記録します。該当するルールがない場合は、リードがdecideタスクとして提示します。担当者が異議を申し立てた場合は、リードがタスクを再度提示します。 - タスクが開始済みまたはカード化されている間、またバックグラウンドコマンドの終了時にランタイムがリードを再呼び出しする場合は、chips.md の Waves に従って、バックグラウンドで
chips wait --session <id>を実行します。開始済みセッションを示して終了したら、session ツールでそのセッションを調べます。カードの工数のまま、または suggest ツールが工数を取得しなかった場合に chips.md が示すあなたの工数のまま実行中であれば、chips waitが出力する、その概要の工数まで下げます。工数の引き下げが適用されるのは次のターンからなので、タスクを続けるよう指示するメッセージをキューに入れ、現在のターンを停止します。その後、この Sweep を再実行します。
提案
- まず
chips --session <id>を実行し、トピックまたはタイトルが調査結果に関連する各オープンタスクについて、chips brief <id>で概要を確認します。 - chips.md の「Offer」に従って行を選びます。
- 調査結果が、提案済みタスクの質問に該当し、そのタスクがカードを持っていない場合、そのタスクに
folded行を記録し、調査結果が追加する内容を記載します。 - 開始済みタスク、またはカードを持つタスクの質問に該当する場合、そのトピックに新しいタスクを提案し、
waits: task:<id>を指定します。カードが取り下げられると、chipsはそのタスクをカード付きのタスクに統合します。 - それ以外の場合は、
chips idで取得した ID、簡潔な命令形のタイトル、chips.md の「Title」の規則に該当する場合のみ(xhigh)、およびwrites:、topic:、kind:、waits:、owns:、session:を指定して新しいタスクを提案します。session:にはこのセッションの ID を指定し、このセッションのタスクであることを示します。chips.md の「Owner」の規則に従います。waits:には、Sweep の手順 5 で確認した、このタスクが書き込むファイルを対象とする各アクティブなプランのrun:<plan>を含めます。調査結果が既存の質問への回答になる場合は、ボードに記載されたトピックを再利用します。新しいトピックには、領域ではなく、1 人のオーナーの質問を指定します。
- 調査結果が、提案済みタスクの質問に該当し、そのタスクがカードを持っていない場合、そのタスクに
append <plans>/suggested-tasks.decisions.tsv chip "<id> <title>" "<finding>" "<tokens>" <result>で追記します。appendが行を拒否した場合、メッセージに記載されたルートに従います。- 次の Sweep までカードには手を付けないでください。
開始
カードから開始したセッション、またはオーナーの「start 」でリードが開始したセッションは、何かを書き込む前に、chips.md の「Sweep」に従って次の手順を実行します。
chips brief <id>を実行し、カードのプロンプトではなく、その出力に基づいて作業します。chipsを実行します。タスクが Ready でも Started でもない場合、何を待っているのかをオーナーに伝えて終了します。- 追加のパスがあれば
writes:に記載し、このセッションの ID がランタイムのセッションツールから取得できる場合はsession:に記載して、startedを記録します。その後、chips brief <id>をもう一度実行します。この行が記録されるまでにタスクが変わる可能性があるためです。セッションツールが、このセッションを概要のEffort:より上位として示す場合は、最初の返信でその旨をオーナーに伝えます。セッション自身の Effort は引き下げられないためです。 - タスクに記載されていないパスへ書き込む前に、そのパスを含めた別の
started行を記録します。別の開始済みタスクがチェックアウトの外でそのパスを書き込んでいるためにappendがその行を拒否した場合、そのパスには手を加えず、オーナーに伝えます。 - 作業が完了したら、概要の「Landing」の段落と chips.md の「Landing」に従って反映し、
patch:を指定してlandedを記録します。上書きせずに実行ディレクトリをチェックアウトにマージし、クリーンアップスキャンの--landedチェックが通った後、最後のコマンドとしてワークツリーを削除します。レビュータスクのセッションは、レビューした各タスクに対して、まずreviewedを記録します。
取り下げ
- タスクが開始済みの場合は、
dismissed stoppedを記録します。 - このセッションが提案したカードをタスクが持っている場合、そのカードで dismiss ツールを呼び出します。ツールがオーナーがタスクを開始したと報告した場合は、
startedを記録してオーナーに伝えます。それ以外の場合は、uncardedの代わりに、そのcard:を指定してdismissed declinedを記録し、2 つの間にマージが反映されないようにします。 - 別のセッションがカードを保持している場合は、その
card:を指定してdismissed declinedを記録します。 - タスクがカードを持っていない場合は、
dismissed declinedを記録します。