avatar
蕭富云モバイルアプリ開発者 · Android & Flutter

計画はチケットに書く — Plan / Forge / Review をマーカー・プロトコルでつなぐ

2026-06-25 · 11 min read

補足: 本記事は AI(Claude)が私の最初のメモと着想をもとに仕上げたものです。

最近、自分の AI エージェントの回し方を整理していて、ずっと見て見ぬふりをしていた問いに気づいた。エージェントの状態は、いったいどこに置かれているのか?

たいていの場合、それはチャットウィンドウの中にある。デスクトップ app で会話を開き、機能について話し合うと、エージェントが計画を立て、コードを書き、バグを直す——その作業の文脈すべてが、あの流れていくメッセージの列に乗っている。自然に聞こえるが、その列は意外なほど脆い。

チャットウィンドウは RAM であって、ディスクではない

デスクトップチャットには、生まれつきの制約が三つある。

つまりチャットウィンドウは RAM だ——速くて便利だが、電源が落ちれば消える。それなのに私たちは、ワークフロー全体の状態を RAM に置いている。地に足のついた居場所も、他人が読める場所も、セッションを越えて生き残るものも、何もないままに。

状態を issue tracker へ持ち上げる

私の解決策は、突き詰めれば単純だ。エージェントの状態をチャットに残さず、issue tracker のコメントスレッドへ持ち上げる。

すべての計画、すべての問い、すべての裁定が、チケット上の一つのコメントになる。私は自分の Claude Code 設定(skadi という名前)に、こう一つだけ掟を定めた。「スレッドこそが記録。横道はなし。」チャットはエージェントと話す場所、チケットは状態が実際に置かれる場所だ。

YouTrack でも Jira でも、あなたの使うものなら何でもいい——チームはもともとその場所を信頼している。履歴があり、権限があり、通知があり、誰もが見られる。エージェントのワークフローをそこに結びつければ、永続性・監査可能性・セッションをまたぐ継続性・複数人での協働が、ただで手に入る。

ここから先は三つの段階——計画(plan)、鍛造(forge)、レビュー(review)。それぞれが小さなマーカーを、段階と段階のあいだ、そして人と機械のあいだの契約として使う。

Plan — 計画をコメントとして書く

最初の段階は計画だ。/council を走らせると、サブエージェント(私は Erestor と呼んでいる)が送り出される。チケット全体を読み、計画を草案し、そのままコメントとして投稿する。先頭に [PLAN] のタグを付けて。

そして止まり、私の裁定を待つ。読み終えたら、[APPROVE](承認、進め)か [REJECT](差し戻し)で返す。

ここで肝心なのは、承認そのものがコメントであって、チャットの一行ではないということ。今日草案させて、明日になってから承認しに戻ってもいい。Erestor は読み、草案し、問うだけ——私の代わりに決めることはない。skadi の言葉でいえば「Erestor は謀り、Elrond が決める」。あらゆる可否の関門は人の手に残り、その関門はチケットに書き込まれて、会話とともに流れ去ったりしない。

Forge — PR に自分でチケットへ戻らせる

計画が承認されたら、第二の段階は鍛造だ。/celebrimbor を走らせると、最初にするのはそのスレッドを読みに行くこと——[PLAN] とその [APPROVE] を見つけ、計画が草案され、かつ承認されたことを確かめる。

それから計画を実装し、ドラフトの PR/MR を開き、PR の URL をチケットへ戻して投稿する。[FORGED] のタグを付けて。

この一歩こそ、私にとってこの設計の眼目を言い表している。鍛造段階の入力は、それ自身がスレッドから読み取ったものだ——計画を立てたときのチャットは、もう必要としない。 計画と鍛造は、まったく別のセッションでも、別の人でもかまわない。skadi はこう記す。「スレッドは依然として記録。PR の URL は [FORGED] としてチケットへ戻り、謀議と鍛造は歩調を合わせ続ける。」

Review — これもスレッドに乗せる

第三の段階はレビューだ。道具は二つある。

これらもまた、チケットと PR に乗る。レビューは誰かの頭の中に閉じた判断ではなく、読み返せて辿り直せる記録になる。

マーカーは、コメントで書かれた状態機械だ

マーカーを並べてみると、それが一つの状態機械であることが分かる。

[PLAN]  →  [APPROVE]  →  [FORGED]  →  [METTA]
 計画草案      人が承認     PR を開く      マージ済み

(あいだに小さなマーカーもある。[REJECT] で差し戻し、[SKELETON] で先に骨組み、[BASE: branch] で基底ブランチを指定。)

マーカーそのものは平易な言葉だ。トールキン『指輪物語』の裂け谷(リヴェンデル)の会議から借りているのは、/council/celebrimbor といったコマンド名のほう——味付けであって主菜ではない。本質はこうだ。どのセッションも、どの段階も、そのスレッドを読むだけで「いまこの作業がどこまで来たか」を再構築できる。 状態は誰の頭の中にもなく、閉じれば消えるウィンドウの中にもなく、チケットの上に、白地に黒で記されている。

持ち上げた先に、何が解ける

状態がチームのもともと信頼する基盤に乗ると、チャットウィンドウに閉じ込められていたものがほどけていく。非同期(今日計画し、明日承認し、明後日鍛造する)、セッションをまたぐ(新しいマシンでも新しい会話でもそのまま続く)、複数人(チームメイトが読めて、レビューできる)、監査可能(どの一歩も痕跡を残す)。スイーパー(skadi では /glorfindel/rhovanion)に全チケットを定期的に巡回させ、マーカーから先へ作業を押し進めさせることさえできる——引き継ぐ者が必要とするものは、すべてすでにチケットの上にあるのだから。

正直な但し書き

一つはっきりさせておくと、この方法はいまのところ小さなタスクでしか検証していない——範囲が明確で、一つ二つのファイルで片づく類のものだ。大きなタスクになると摩擦が一気に増える。計画そのものの精度が足りず、鍛造段階がそれをなぞると逸れていく。大きな仕事にもこれを効かせるには、まだ欠けている一片がある——計画の内容の精度を磨き上げる、何らかの仕組みだ。それは次の一歩で、いまはまだそこに届いていない。

いまの立ち位置

というわけで、これがいまの私の進め方だ。エージェントの状態をチャットに残さない。 チームがもともと信頼する基盤——issue tracker——へ持ち上げ、小さなマーカー・プロトコルを、段階と段階のあいだ、人と機械のあいだの契約にする。チャットは RAM、チケットはディスク。計画をチケットに書けば、状態はようやく、地に足のついた、他人が読めて、セッションを越えて生き残る居場所を得る。