mcpField
S
settle-session

settle-session

github.com/yahyabedirhanエージェントワークフロー266 回インストール1 週間前に更新
リポジトリ

settle-session について

呼び出し元の worktree とターミナル環境を維持しながら、エージェントセッションを終了するスキルです。決定事項と未解決事項を記録し、作業を保存・プッシュしたうえで、マージ確認済みのクリーンな worktree のみを解放します。

主な機能

  1. 01worktree、ブランチ、作業の棚卸し
  2. 02決定事項と未解決事項の記録
  3. 03セッション変更のコミットとプッシュ
  4. 04クリーンアップ前のマージ確認
  5. 05保持事項と再開手順の報告

活用シーン

  1. 01別のエージェントへのセッション引き継ぎ
  2. 02完了作業の保存と残作業の記録
  3. 03マージ済み worktree とブランチの安全な整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yahyabedirhan/skills --skill settle-session

インストール後、Claude Code で/settle-sessionを入力して読み込まれたか確認します。

同梱ファイルagents/openai.yaml

詳細

セッションを確定する

確定したセッションでは、作業内容と、別のエージェントが必要とするすべての情報を、課題管理システムまたはプロジェクトのファイルに保存します。呼び出し元のセッションは利用可能な状態に保ち、占有しているワークツリーは、ブランチがマージされた場合も含めて、リースしたままにします。

すべての手順を自分で実行してください。すべてのターミナルのワークスペース、タブ、ペインを開いたままにします。名前を指定したトポロジーを閉じる明示的なリクエストがあれば、その個別のクリーンアップを実行できます。セッションの確定によって、リンクされたトポロジーやグループ化されたトポロジーを閉じることにはなりません。

パラメーター

  • <worktree-tool>:ワークツリーを作成および解放するツールです。例:treehouse、または通常の git worktree。
  • <session-host>:エージェントセッションの実行環境です。例:herdr、Claude Code Desktop、Codex Desktop。

手順

各コミット、プッシュ、削除は、それぞれ個別の呼び出しとして実行してください。拒否された場合に停止するのは、その操作だけです。

  1. 棚卸しを行います。 このセッションが関わったチェックアウトと作業ツリー、およびそれぞれのブランチ、作成したプルリクエストとイシュー、起動したプロセスとエージェント、未解決のスレッドを確認します。呼び出し元のスキルまたはユーザーが指定したブランチと作業ツリーも追加します。クリーンアップ対象を特定する前に、<session-host> を通じて実行中の呼び出し元と現在の階層を確認し、引き継ぎや継承されたコンテキストとの不一致があれば報告します。ワークスペースのチェックアウトメタデータだけでは場所を特定できないため、実際のペインとプロセスの場所を確認します。

  2. 実行中のものをなくします。 このセッションが起動したタスクプロセス(開発サーバー、ウォッチャー、バックグラウンドコマンド、プレビューやブラウザーのタブなど)は、ユーザーが残すことを希望するものを除き、停止します。残したものはそれぞれ報告書に記載します。作業を停止または中断する直前に、実行中の呼び出し元、対象の本人確認、実際の場所、階層、タスクの所有者を確認します。対象に不確実な点があれば、そのままにして報告します。このセッションが起動したエージェントの未完了の作業は、完了を待つか中断します。エージェントのセッションとターミナルの構成は開いたままにします。無関係なエージェント、シェル、サービスはそのままにします。

  3. 未共有の情報をなくします。 このセッションのコンテキストにしかない学びを記録します。判断とその理由、予想外だったこと、省略した確認事項、次に行うことを含めます。それぞれ、セッションを見ていないエージェントが確認する場所に記載します。該当するイシュー、プルリクエストの説明、または/handoffで作成した引き継ぎ文書に記録します。

  4. 未決事項をなくします。 残っている各スレッドについて、完了する、チケットを作成する、またはユーザーに提起してその判断を記録する、のいずれかの結論を出します。ユーザーがここにいる間に質問し、すべての質問に答えが出てから決着させます。

    • **ユーザーに連絡できない場合、**たとえば引き継ぎで単独で決めるよう指示されている場合は、自分で判断し、その決定と理由をステップ3でセッションの知見を記録する場所に記載します。
    • セッションにセッションステータスツールがある場合は、filter: { kind: ["decision"], state: "open" } を指定してlistアクションを呼び出し、未解決のbefore_settlingとblockedの各判断をここで提起します。判断の内容はツールを通じてのみ読み取ります。モッドが保存ファイルを管理しており、形式が変わる可能性があるためです。
  5. 未保存のものをなくします。 このセッションが作業した各チェックアウトで、ステップ3と4で作成したファイルも含め、すべてコミットしてプッシュします。git statusがクリーンになり、ブランチがリモートと一致するまで続けます。意図的にコミットしないものは別に保管し、報告書に記載します。

    • リリース対象として検討する各作業ツリーで、git status --ignoredを使って無視対象ファイルと未追跡ファイルを一覧にし、保持する価値があるものを、/orchestratingのfolder-standard.mdに定められた各ファイル種別の保存先へコピーします。作業ツリーを削除すると、これらのファイルも削除されます。.vscode/などのエディター設定はメインチェックアウトにコピーします。すでに同名のファイルがある場合は、メインチェックアウト側のファイルを保持します。
    • **コミットまたはプッシュが中断された、あるいは拒否された場合は、**再試行する前にログを確認します。すでに反映されている可能性があるためです。
    • **変更がデフォルトブランチまたはユーザーのメインチェックアウトにある場合は、**このセッション自身の変更だけを、新しいブランチにコミットし、/to-prでプルリクエストを作成します。ユーザーの他の変更はそのままにし、デフォルトブランチには何もプッシュしません。
    • **作業のブランチがすでにマージされていて、ステータス変更や作業ツリーからのファイルコピーなど、追跡対象ファイルを変更して決着させる場合は、**小規模なフォローアップブランチに変更を加え、/to-prでプルリクエストを作成します。ユーザーがそこで作業している可能性があるため、ユーザーのメインチェックアウトは現在のブランチのままにします。メインチェックアウトがクリーンで、すでにデフォルトブランチにいる場合に限り、その中でプルします。リモートのデフォルトブランチから<worktree-tool>を使ってフォローアップ用の作業ツリーを作成し、後述のリリース条件を満たすまで保持します。
  6. 妨げになるものをなくします。 クリーンで、マージ済みであることが確認でき、使用中でない作業ツリーとブランチのみを解放します。保持するものはそれぞれ、その理由と使用者を記載します。呼び出し元セッションの作業ツリーとそのローカルブランチおよびリモートブランチ、メインチェックアウト、デフォルトブランチは保持します。まずgit fetch --pruneを実行し、リモートのデフォルトブランチを最新の状態にします。マージ済みであることを証明する方法は次の3つです。

    • **到達可能性:**ブランチとリモートのデフォルトブランチを指定したgit merge-base --is-ancestorが成功すること。マージコミットやファストフォワード後などが該当します。最も手軽な方法なので、最初に試します。
    • **パッチの一致:**リモートのデフォルトブランチとブランチを指定したgit cherryの出力に+行がないこと。リベース後や変更のないチェリーピック後などが該当します。+があっても、どちらとも証明できません。
    • **マージ済みプルリクエストのヘッド:**ホスティングサービスでプルリクエストがマージ済みと表示され、ブランチの先端コミットがそのヘッドコミットと同一か、その祖先であること。ブランチのコミットがプルリクエストのブランチに取り込まれた場合、そのヘッドに当該コミットが含まれるか、git range-diffまたは差分によって同じ変更を含むことが確認でき、かつブランチにそれ以外のものが残っていなければ、マージ済みとみなします。確信が持てない場合はブランチを保持します。スカッシュマージや、取り込み時に変更されたコミットは最初の2つの方法では証明できず、この方法でのみ証明できます。 各リリースの直前に、<session-host> と <worktree-tool> を通じて次を行います。
    • 更新: 現在の呼び出し元と対象の ID、リポジトリ、実際の場所、階層、ブランチの先端、および使用者を更新します。
    • 先端のひも付け: マージの証明をその先端にひも付けます。以前に証明した先端と異なる場合は、新しい先端を証明するか、対象を保持します。
    • 使用者: 作業中のエージェントだけでなく、アイドル状態のエージェント、シェル、サービスも確認します。ツールで終了できるからといって、ワークツリーが未使用になるわけではありません。
    • 対象が不確かな場合: ID または使用状況が不確かな対象は保持して報告します。
    • プールされたワークツリー: <worktree-tool> のリース ID ガードを使い、割り当て直されたリースが返却されないようにします。
    • <worktree-tool> が treehouse の場合: 稼働中の使用状況チェック、リースガード、解放確認には /treehouse を使います。

    <worktree-tool> を使い、--force を指定せずにワークツリーを解放します。

    • 解放の確認: ローカルブランチまたはリモートブランチを削除する前に、対象のワークツリーが正常に解放されたことを確認します。解放に失敗した、中断された、または不確かな場合は、両方を保持します。再試行する前に現在の状態を確認し、破壊的なクリーンアップを遅延実行で予約しないでください。
    • 先端の確認: ブランチを削除する直前に、現在のブランチ先端と記録された証明済みの先端を比較し、変更があれば再証明します。証明または排他的な所有権が不確かな場合は、ブランチを保持します。
    • ローカルブランチの削除: 到達可能性の証明を通過した場合は git branch -d を使い、残りの 2 つの証明だけが通過した場合は git branch -D を使います。到達可能性の証明を通過したブランチに対して -d が拒否した場合も git branch -D を使います。これは、-d がリモートのデフォルトブランチではなく、ブランチの上流ブランチまたは HEAD に対してチェックするためです。
    • ワークツリーのないブランチ: 同じマージ証明を適用する前に、そのブランチがチェックアウトされておらず、使用中でもないことを確認します。
    • 解放したブランチにリモートブランチがある場合: git ls-remote --heads origin <branch> によって、リモートブランチがまだ存在し、その先端がローカルブランチの先端と同じか、上記の証明のいずれかを通過することが確認できたら、リモートブランチも削除します。マージ時にリポジトリ側で削除されている場合もあります。それ以外の場合はリモートブランチを保持し、報告で名前を示します。削除する前に、そのブランチをベースブランチとするオープンなプルリクエストをホスティングサービス上のデフォルトブランチへ切り替えます。ベースブランチを削除すると、そのブランチを積み重ね先にしているプルリクエストが閉じられ、閉じたプルリクエストは別のベースブランチに対して再オープンできないためです。切り替えに失敗した場合はリモートブランチを保持し、報告で名前を示します。
  7. 報告: 実施したこと、登録した内容とその場所、保持したものとその理由、ユーザーの対応待ち事項を報告します。ID の不一致、保持した使用者、呼び出し元が保持するワークツリーとブランチも含めます。

    • セッションにセッションステータスツールがある場合: 手順 4 の後も未決定のままの項目(after_settling の項目など)を、ID、質問、デフォルト、選択肢をそれぞれ含む番号付きリストとして報告に記載します。その後、ツールの post_decide_list アクションを呼び出します。
  8. 報告の最後に再開プロンプトを付けます。 ユーザーが戻ってきたときに新しいセッションへ貼り付ける 1 行のプロンプトです。エージェントに質問しなくても作業を再開できるよう、ワークツリーのパス、ブランチ、次のセッションで残作業を確認する場所(ハンドオフのパス、または残作業を記録した issue やプルリクエスト)、最初に行うことを記載し、それ以外の情報はそこに残します。複数行のプロンプトを貼り付けると貼り付けたテキストとして処理され、そのスキルが開始されないため、必ず 1 行にします。また、どのハーネスでも使えるように、スキル名はスラッシュコマンドではなく言葉で記載します。

    Continue in the worktree <path> on branch <branch>, from the handoff at <path>: <the first thing to do, in one sentence>.
    
    • 残作業がない場合: すべてのブランチがマージされ、引き継ぐものがない場合などは、プロンプトを付けず、その旨を報告します。
  9. セッションにラベルを付けるホストである <session-host> を通じて、現在の呼び出し元の稼働中の ID と階層を更新したうえで、セッションを完了済みとしてマークします。報告、再開プロンプト、完了マークをもって完了とし、このセッション、そのワークツリー、すべてのターミナルトポロジーは開いたままにします。

コメント