本文へスキップ
claudemods

ctx-handoff:Claude Code 長いセッションを楽にするMod

プロンプトキャッシュを保ち、教えたことをプロジェクトノートにし、満杯のコンテキストを引き継ぎます。

権限

  • ファイルを読み取るお使いのマシン上のファイルの読み取りやディレクトリの一覧取得ができます($.fs.read / list / stat / exists)。
  • ファイルを書き込むお使いのマシン上でファイルを作成・上書きできます($.fs.write)。
  • モデルを呼び出す(利用枠を消費)独自に Claude へリクエストを送信でき、その分はプランの利用量にカウントされます($.model.* / $.agent.spawn)。
  • ツール呼び出しを傍受Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
  • プロンプトを読み取る入力内容と会話のトランスクリプトを参照できます(prompt.* / session.append / session.messages)。
  • UI を変更Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
  • コマンド・ツールを追加あなたや Claude が呼び出せる新しいスラッシュコマンドやツールを登録します($.command.register / $.tool.register)。
  • データを保存プラグイン専用のストアにセッションをまたいでデータを保持します($.store.*)。
検証バージョン
v2.1.303
最終検証日
必要バージョン
Claude Code ≥ 2.1.287
表示先
プロンプト上部、ステータス、トースト

Claude Code 内でインストール:

/plugin install ctx-handoff --marketplace cablate/ctx-handoff-mod
すべてのインストール方法 ↓

このModでできること

ctx-handoff は CabLate(cablate)による、Claude Code 長いセッション向けのコミュニティModです。数時間続く会話で出てくる雑務をまとめて引き受けます。離席中はごく小さなリクエストを送ってプロンプトキャッシュの期限切れを防ぎ、繰り返した指示をプロジェクトごとのノートにして新しい会話へ読み込み、Claude が失敗したツールを再試行したときや、確認せずに「完了」と言ったときに一言促します。

大きな機能が 2 つありますが、こちらは自動ではありません。任意の引き継ぎは、コンテキストがしきい値に達すると作業の要約を書き、会話をクリアして新しい会話で続けるもので、既定ではオフです。ガードは、繰り返したルールから Mod が下書きするツール呼び出しのチェックで、承認するまで適用されません。入力欄の上のパネル(/handoff panel)には、ガード、メモリ、ルール、直近のノート更新、すべての設定が並びます。

作者の README は、Claude のサブスクリプションと大きなコンテキストでの長いセッションを想定しています。API キー、Bedrock、Vertex ではキャッシュが 5 分しか持たないため、作者は /handoff refresh off を勧めています。

デモ

録画では、小さなデモプロジェクトでこの Mod を読み込んだ Claude Code を起動します。フッターにはすぐ ctx-handoff: 30 more messages until notes update と表示されます。次のバックグラウンドのノート更新までのカウントダウンです。続いて /handoff guard を実行すると、Guards: none と、ガードが下書きされる条件が表示されます。/handoff refresh では Currently on. Usage: /handoff refresh on|off と表示されます。録画中にモデルへのリクエストは発生せず、パネルも開きません。パネルにはノートファイルのフルパスが表示されるためです。

インストール

インストールブロックのいずれかの方法を使ってください。どれも作者自身のマーケットプレイスから直接インストールします。新しいセッションを開始して /handoff を実行します。セッション開始後にフッターのカウントダウンが表示されます。

$ install ctx-handoff

Claude Code 2.1.287 以上が必要

作者のマーケットプレイスからインストール: cablate/ctx-handoff-mod

  1. 1.Claude Code 内で1行

    /plugin install ctx-handoff --marketplace cablate/ctx-handoff-mod

    実行中のセッション(v2.1.275 以降)に貼り付けます。最初に Claude Code がマーケットプレイスの追加を確認します。

  2. 2.シェルから

    claude plugin marketplace add cablate/ctx-handoff-mod
    claude plugin install ctx-handoff@ctx-handoff-mod

    その後、すでに開いているセッションでは /reload-plugins を実行してください。

  3. 3.インストールせずに試す

    git clone https://github.com/cablate/ctx-handoff-mod
    claude --plugin-dir ./ctx-handoff-mod

    その1セッションだけ Mod を読み込みます。設定には何も追加されません。

仕組み

すべての機能は 1 つのモジュール hooks/register.ts から登録されます。ターンが終わるたびにアイドルタイマーが再開されます。タイマーが作動し、コンテキストが min_tokens を超えていれば、キャッシュされた会話を読むための最小の fork リクエストを送り、次の更新を予約します。次はそのスケジュール関数で、hooks/register.ts からの抜粋です。

async function schedule($: EngineInterface, delay = cfg.idleMs) {
  rt.idle?.cancel()
  if (await awayPaused($)) { rt.idle = undefined; await update($, idleState, () => null); return }
  rt.idle = $.clock.after(delay, () => void onIdle($))
  const due = (await $.clock.now()) + delay
  await update($, idleState, () => ({ due, refreshes: rt.refreshes }))
}

既定のアイドル時間は 50 分、更新は最大 3 回で、その後はクリアせずに離席用の引き継ぎを保存します。ユーザーメッセージ 30 件ごと、または引き継ぎの前に、履歴を持たない別のリクエストが、会話の新しい部分だけをノート用モデル(claude-sonnet-5-5、低い推論強度)に送ります。返ってきた JSON のアクションはコードで検証され、ユーザーの引用は実際のメッセージの中に見つかる必要があり、秘密情報のように見える行は書き込み前に捨てられます。ノートは prompt.context で新しい会話に注入されます。

カスタマイズ

この Mod は userConfig を宣言していません。設定はパネルの設定タブ(/handoff panel を開いてキー 5)にあり、settings.json の pluginConfigs["ctx-handoff@<marketplace>"].options も読みます。両方ある場合はパネルの値が優先されます。設定には auto_handoff(既定はオフ)、threshold(600000 トークン)、idle_minutes(50)、max_refresh(3)、min_tokens(30000)、distill_every(30)、notes_model、retry_nudge、done_check、reply_language、language があります。残りはスラッシュコマンドで操作します。/handoff now、dry、distill on|off、refresh on|off、away pause|resume、guard、resume、continue、resend です。

権限と安全性

マニフェスト、hooks/hooks.json、hooks/register.ts の全体、設定、ノート、引き継ぎ、ガード、ループ、言語、プロモート、整理プロンプトの各モジュールを読みました。残りのファイルは主に i18n の文字列、パネルの表示、小さな記録用ヘルパーで、1 行ずつ読む代わりに検索で副作用がないか確認しました。リポジトリには package.json、インストールスクリプト、バイナリ、minify されたコードはありません。tools/ は作者向けのスクリプトで、プラグインは読み込まず、私たちも実行していません。隠れた Unicode 文字はありません。

知っておくべき点:

  • モデルへのリクエストはあるが、他のネットワークアクセスはない。 fetch、プロセス呼び出し、ネットワークのコードはありません。$.model.fork と $.model.complete を呼び、Claude の利用枠を使います。会話の内容は、ノートや引き継ぎの要約のために、会話そのものと同じ形で送られます。
  • 自分のストアの外に書き込む。 $.fs.write が <claude 設定ディレクトリ>/projects/<ワークスペース>/memory/ctx-handoff.md を作成・更新し、パネルでノートを削除する前に .ctx-handoff-backup/ へバックアップを書きます。バックグラウンドのノート更新は既定でオンですが、ホームフォルダで開始したセッションでは行われません。settings.json、シェルのファイル、LaunchAgents には触れず、HOME、USERPROFILE、CLAUDE_CONFIG_DIR を読みます。
  • モデルにテキストを注入する。 prompt.context は、ノート、任意の進捗メモ、ガードの質問を [ctx-handoff] のタグ付きで新しい会話に追加します。ツール結果にリマインダーが付くこともあります。git リポジトリでルールが 3 回繰り返されると、注入されるテキストは、確認なしでそれをリポジトリ(CLAUDE.md、.claude/skills、フック)に書くよう Claude に指示します。ただしコミットはさせません。ノートはモデルが書いた会話の要約なので、ときどきファイルを確認してください。
  • ゲートするフック。 tool.call が呼び出しを拒否するのは、承認済みのガードの場合だけです。classic.Stop は、ファイルを編集したのにチェックを実行していない場合、ターンごとに 1 回だけ「完了」の回答を止めます(done_check、既定でオン)。prompt.submit は、引き継ぎの実行中あなたのメッセージを保留します。自動引き継ぎをオンにすると、Mod 自身が /clear を実行して要約を送信します。
  • デーモンもテレメトリもない。 タイマーは Claude Code のプロセス内にあるだけで、利用統計はプラグインのストアに残ります。
  • 管理された環境。 claude plugin validate によると、組織が Claude Code を管理している環境では、ユーザーがインストールしたプラグインの prompt.context と classic.Stop のフックは動きません。
  • ライセンス。 MIT で、LICENSE ファイルがあります。

claude plugin validate はエラーを報告しませんでした。警告は、リポジトリ直下の CLAUDE.md がプラグインのコンテキストとして読み込まれない、という 1 件だけです。作者の 15 ファイル・290 件のテストは Claude Code 2.1.303 ですべて通りました。

ファイルを読み取る
お使いのマシン上のファイルの読み取りやディレクトリの一覧取得ができます($.fs.read / list / stat / exists)。
ファイルを書き込む
お使いのマシン上でファイルを作成・上書きできます($.fs.write)。
モデルを呼び出す(利用枠を消費)
独自に Claude へリクエストを送信でき、その分はプランの利用量にカウントされます($.model.* / $.agent.spawn)。
ツール呼び出しを傍受
Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
プロンプトを読み取る
入力内容と会話のトランスクリプトを参照できます(prompt.* / session.append / session.messages)。
UI を変更
Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
コマンド・ツールを追加
あなたや Claude が呼び出せる新しいスラッシュコマンドやツールを登録します($.command.register / $.tool.register)。
データを保存
プラグイン専用のストアにセッションをまたいでデータを保持します($.store.*)。

互換性とトラブルシューティング

macOS 上の Claude Code 2.1.303 で確認しました(validate、テスト、録画)。作者の README は 2.1.287 以降を必要としています。/handoff が反応しない場合は次を確認してください。

  • claude --version が 2.1.287 以降で、インストール後に新しいセッションを始めた。
  • 別の /handoff コマンドがすでにある場合、Mod は代わりに /ctx-handoff を登録します。
  • ノート更新がオフのとき、またはホームフォルダで Claude Code を起動したときは、フッターのカウントダウンは出ません。
  • キャッシュ更新はキャッシュが 1 時間持つ環境でだけ役に立つので、API キーでは /handoff refresh off でオフにしてください。
  • /handoff を実行すると、直近の失敗やノートファイルのパスを含む現在の状態が見られます。

よくある質問

ctx-handoff は Claude の利用枠を消費しますか?
はい。独自のサーバーはありませんが、Claude Code のサインインを通じてモデルへリクエストします。キャッシュ更新はごく小さなリクエストで、ノート更新は会話の新しい部分だけを低い推論強度で Sonnet 5.5 に送ります。完全な引き継ぎは 1 回のリクエストです。
ファイルはどこに書き込まれますか?
プロジェクトノートは、~/.claude/projects/(または CLAUDE_CONFIG_DIR)以下の該当ワークスペースの memory フォルダにある ctx-handoff.md に書かれます。それ以外はプラグイン自身のストアに保存されます。パネルでノートを削除する前には、古いファイルのバックアップが作られます。
勝手に会話をクリアしますか?
auto_handoff をオンにした場合だけです。既定はオフで、オフならコンテキストが満杯のときは Claude Code 標準の compact が働きます。離席中の引き継ぎはクリアせずに保存され、そこから再開するかはあなたが選びます。
Claude のツール呼び出しをブロックできますか?
ブロックできるのはガードだけです。繰り返したルールからガードの下書きが作られ、承認するまで適用されません。別に、既定でオンの確認があり、ファイルを編集したのにテストを実行していない場合、「完了」の回答を 1 回だけ止めることがあります。
バックグラウンドの機能をオフにするには?
ノートは /handoff distill off、キャッシュ更新は /handoff refresh off でオフにできます。/handoff panel を開き、設定タブで注意喚起や返答言語のリマインダーを変更することもできます。
Claude Code で動作中の Project Sentinelおすすめ

Project Sentinel

長時間の Claude Code の実行のための、ステータス帯、コンテキスト引き継ぎ、プロンプトキャッシュの追跡、権限ルール。

  • プロンプト上部
  • ペイン
  • スピナー
  • ステータス
  • トースト
  • ファイルを読み取る
  • コマンドを実行
  • モデルを呼び出す(利用枠を消費)
  • ツール呼び出しを傍受
  • プロンプトを読み取る
  • UI を変更
  • コマンド・ツールを追加
  • データを保存

v2.1.296 で検証済み

Claude Code で動作中の Cache Clockおすすめ

Cache Clock

Claude Code のステータスラインの下に、プロンプトキャッシュの残り時間、ヒット率、コールド後の再キャッシュ量を表示します。

  • ステータス
  • ファイルを読み取る
  • ファイルを書き込む
  • コマンドを実行
  • コマンド・ツールを追加

v2.1.296 で検証済み

Claude Code で動作中の Where Am Iおすすめ

Where Am I

Claude Code のプロンプトの上に、セッションの目標・現在の作業・あなた待ちの項目・次の一手を表示します。

  • プロンプト上部
  • ファイルを読み取る
  • モデルを呼び出す(利用枠を消費)
  • ツール呼び出しを傍受
  • プロンプトを読み取る
  • UI を変更
  • コマンド・ツールを追加

v2.1.303 で検証済み

同じカテゴリの Mod: タイマー、ToDo、スタンドアップ、コンテキスト、利用枠、コスト。