claude-handoff について
claude-handoffは、Claude Codeユーザー向けのローカルコマンドラインツールです。セッションを別のAIが引き継げる文書にまとめ、出典付きのプロジェクトメモリーも作成します。標準ではオフラインで動作し、LLMによる要約も選べます。
主な機能
- 01セッション引き継ぎ文書の作成
- 02過去セッションの検索と絞り込み
- 03出典付きプロジェクトメモリーの作成
- 04メモリーの自動挿入と更新
- 05出力内の秘密らしい文字列のマスキング
活用シーン
- 01クラッシュ後の作業コンテキスト復元
- 02Claude Codeの作業を別モデルへ移行
- 03新しいセッションへのプロジェクト履歴の共有
- 04過去の会話から議論内容を検索
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| project | string | いいえ | プロジェクトパスの部分文字列フィルター |
詳細
claude-handoff
Claude Code のセッションを、クラッシュしたセッションも含めて、別の AI が引き継げる整理された handoff.md に変換します。さらに、独自の履歴から要点をまとめ、Claude Code に永続的なプロジェクトメモリを与えます。
chf
これだけです。最新のセッションが handoff.md になります。会話からノイズを取り除き、変更されたファイルや実行されたコマンドをまとめ、受け取るアシスタントへの指示から始まるため、余分なプロンプトを追加せずに、そのまま Gemini、GPT、claude.ai、または新しい Claude Code セッションに貼り付けられます。

Claude Code は各セッションを JSONL としてローカルに保存します(~/.claude/projects/…/*.jsonl)。そこにはツール呼び出し、ツールの実行結果、思考ブロック、システムからのリマインダーが含まれます。既存のエクスポーターは、そのすべてを Markdown に書き出します。claude-handoff は代わりに引き継ぎドキュメントを作成します。また、全履歴を読み取れるため、プロジェクトメモリの概要も作成できます。
- 依存関係ゼロ。 Python 3.9 以降で動作する標準ライブラリのみを使用します。9つのモジュールからなるパッケージで、
curlで取得して監査できる、生成済みの単一ファイルスクリプトも提供しています。 - デフォルトでは決定論的。 API 呼び出しもコストもなく、オフラインで動作します。
- 本格的な要約が必要なら
--llm。 独自の API キーを使って Claude、OpenAI、Gemini を利用できます。または--llm claude-cliを指定すれば、ローカルにインストール済みの Claude Code CLI を既存の Pro/Max プランで実行できます。API キーは不要です。 - ノイズなし。 ツールの実行結果、思考ブロック、システムからのリマインダー、サブエージェントの会話、スラッシュコマンドのラッパーを除外します。ユーザーの意図、アシスタントの回答、変更されたファイル、実行されたコマンドは保持します。サブエージェント(
agent-*.jsonl)のファイルやコマンドも含まれます。完全なトランスクリプトは--include-sidechainsで出力できます。 - プロジェクトメモリ。
chf --briefは、プロジェクトのセッション履歴全体を、生きた概要1つに要約します。プロジェクトの概要、現状、決定事項、修正内容、規約、未完了の作業を再開するための優先順位付き計画を含み、すべての記述に該当セッションを明記します。--install-brief-hookを使うと、この概要が新しい Claude Code セッションごとに挿入されるため、Claude はプロジェクトを把握した状態で作業を開始できます。 - 安心して貼り付け可能。 API キー、トークン、
password=など、シークレットに見える文字列はすべての出力からマスキングされます。ウェブチャットに貼り付ける引き継ぎも、外部へのデータ送信にあたります。公開共有する場合は--anonymizeでさらに匿名化できます。
前提条件
| 要件 | 最低要件 | 確認方法 | 備考 |
|---|---|---|---|
| Python | 3.9+ | python3 --version | 必須となる唯一の要件です |
| Claude Code | 任意のバージョン | claude --version | --llm claude-cli の使用時のみ必要です(Pro/Max のログインを使用) |
| pipx (推奨) | 任意のバージョン | pipx --version | pip install pipx を実行するか、brew/通常の pip を使用します |
サードパーティ製の Python パッケージは一切不要です。すべて標準ライブラリで動作します。
インストール
pipx install claude-handoff # or: pip install claude-handoff
brew install Vasilispapg/tap/claude-handoff # Homebrew
# or just grab the generated single-file build — stdlib-only, auditable:
curl -O https://raw.githubusercontent.com/Vasilispapg/claude-handoff/main/single/claude_handoff.py
python3 claude_handoff.py --list
パッケージをインストールすると、同じ機能を持つ2つのコマンド claude-handoff と短縮エイリアス chf を使えます。タブ補完:
eval "$(claude-handoff --completions zsh)" # bash works too
60 秒:状況に応じて選ぶ
セッションがクラッシュした、使用制限に達した、またはターミナルを閉じた場合:
chf -o clipboard
…その後、claude.ai、ChatGPT、Gemini、または新しい claude セッションに貼り付けます。
以前のどのセッションでも使えます。クラッシュする前にインストールしておく必要はありません。
Claude Code から別のモデルに作業を移す場合:
chf --fit 32k -o clipboard # sized to the receiver's context window
「CORS について話したセッションはどれでしたか?」
chf --list --grep "CORS" # every match, with a 🔍 context preview
chf --grep "CORS" # or export the newest match directly
Claude Code にこのプロジェクトの永続的なメモリを持たせる場合:
chf --brief --llm claude-cli # distill ALL sessions → one cited brief
chf --install-brief-hook # every new session starts knowing it
トランスクリプトではなく、実際の要約(目標/決定事項/状態/次の手順)が必要な場合:
chf --llm claude-cli # your Claude Code login — no API key
ターミナルセッションではなく、claude.ai または ChatGPT のウェブチャットを使う場合:
chf conversations.json --list # each app's data export works as input
chf conversations.json --name "webhook bug"
プロジェクトメモリ(--brief)
Claude Code はセッションをまたぐとすべてを忘れてしまいますが、履歴はすべてディスク上にあります。chf --brief は現在のプロジェクトのすべてのセッションを読み込み、~/.claude/briefs/<project>.md に 1 つのメモリドキュメントを作成します。
- 事実に基づくセッションのタイムラインと、最も頻繁に触れられたファイル(決定論的で無料)。
--llmを指定すると、冒頭にこれは何か(プロダクト、スタック、現在の状態)と現在の状況(完了/進行中/未着手)を記し、その後に理由を含む決定事項、修正済みのバグ、規約をまとめた要約メモリを作成します。さらに、未解決の事項を順序付きの再開計画としてまとめ、それぞれに具体的な次のアクションと[in flight]/[blocked]/[not started]タグを付けます。各箇条書きには、元になったセッション ID が記載されます(chf --name <id>でソースを開けます)。

セッションごとのメモはキャッシュされるため、新しいセッション後に更新しても、新しいセッション分だけが処理されます。巨大なセッション(約 120k 文字を超えるもの)はメモ内でマップリデュースされるため、メモリへの出力が途中で切れることはありません。どれだけ大きくても、何も気づかれないまま省かれることはありません。
メモリに取り込む内容を選ぶこともできます。--exclude <id> はセッションを除外します(重複や実験などです。引数なしの --exclude は番号付きの選択画面を開き、保存済みの除外対象には ✗ が付いた状態で表示されます。番号を入力すると切り替わるため、選び直すのではなく対象を編集できます)。また、--keep first:2,last:20 を指定すると、長大な履歴を最初のセッションと直近のセッションに絞り込めます。どちらの設定も保持されます。brief のスタンプに保存されるため、変更するまでフックや後の更新でも適用され続けます(--exclude none、--keep all)。また、chf --brief -o clipboard を実行すると、要約を含む現在の brief をクリップボードにコピーできます。すぐに貼り付けて、プロジェクトメモリを別のモデルに渡せます。
brief はプロジェクトの保存データだけにとどまりません。chf --brief --grep X -o - は、X について話しているセッションだけを対象にテーマ別メモリを作成します。また、chf conversations.json --brief -o brief.md は、claude.ai または ChatGPT のエクスポートから永続的なメモリを作成します(すべての会話を、それぞれの ID を出典として記載します)。どちらも意図的にエクスポート形式(明示的な -o のみ)となっているため、永続的な brief が上書きされることはありません。
graphify を実行していますか? 2 つのツールは設定なしで双方向に連携します。chf --brief -o graphify は現在のメモリを raw/ に保存します。更新され続ける 1 つの project-memory.md が、次回の /graphify --update でコードのナレッジグラフにリンクされます。また、graphify-out/graph.json が存在すると、すべての brief に無料で ## Code map が追加されます(コミュニティ、ハブとなる概念、コミュニティ間の bridges:、ラベル付きの flows:)。これにより、新しいセッションでは履歴だけでなく、コードの構造も把握できます。プロジェクト内のコピー(raw/project-memory.md、任意のルート BRIEF.md)は brief の書き込みごとに更新されます。更新のみが行われ、フックがファイルを作成することはありません。全体の流れについては、docs/GUIDE.md をご覧ください。
chf --install-brief-hook
2 つのフックをインストールします。SessionStart は brief をコンテキストとして挿入します(Claude はプロジェクトを把握した状態で開始し、/compact の後にも再挿入されます)。SessionEnd は事実に基づく部分を無料で自動更新します。フックから LLM が実行されることはありません。要約部分は、明示的に指示した場合にのみ更新されます。brief には鮮度を示すスタンプが付き、新しいセッションやコミットがある場合、ファイルと挿入内容には警告だけでなく、それらの一覧(セッションのタイトル、コミットの件名)も表示されます。そのため、新しいセッションでは、何か変更があったという事実だけでなく、何が変わったのかもわかります。完全ローカルで動作し、他の箇所と同様に機密情報のマスキングが適用されます。
→ 手順ごとの仕組み、実際のコスト表、このツールを使った 1 日の完全な流れについては、docs/GUIDE.md をご覧ください。
自動化する
chf --install-hook # SessionEnd + PreCompact → handoff to ~/.claude/handoffs/
chf --install-brief-hook # SessionStart/End + PreCompact → project memory (above)
chf --install-skill # /claude-handoff skill → Claude Code drives chf correctly
PreCompact は重要です。Claude Code が長いセッションのコンテキストを圧縮する直前に、両方のフックが状態をスナップショットします。ハンドオフは、圧縮によって失われかけている詳細を保持し、簡潔な骨組みはセッション中も最新の状態に保たれます。
どちらも ~/.claude/settings.json を非破壊的に編集し、冪等で、対応する --uninstall-* フラグがあります。フックが失敗してもホストセッションに影響することはなく、フックが LLM の呼び出しやファイルの自動作成を行うこともありません。
3 つ目は Claude 自身のためのものです。--install-skill は /claude-handoff スキルを ~/.claude/skills/ に配置し(トリガーを ~/.claude/CLAUDE.md に追加します)、Claude Code が推測せずにツールの構文を把握できるようにします。たとえば、ライブセッション内で chf だけを実行したときにどのセッションが選ばれるか、claude-cli(サブスクリプション)と claude(API キー)の違い、トークン予算に合わせる --fit、エージェントシェルから対話型ピッカーを起動しないことなどです。冪等で、手書きのセクションを尊重し、--uninstall-skill を実行すると、どちらのファイルもそれ以外の箇所に触れることなく、両方の要素を削除します。
出力例
# Conversation handoff
> To the receiving assistant: … you are taking over …
## Session
- Project: /home/you/myapp (branch main)
- When: 2026-08-20 09:00 → 09:04
- Activity: 2 user messages, 2 assistant replies, 4 tool calls
## Files created / modified
- auth.py
## Commands run
- python -m pytest tests/test_auth.py -q
_🤖 2 subagent(s) contributed to the work above (--include-sidechains for their transcripts)._
## Conversation
_Condensed digest, every turn capped — verbatim messages with --full, a real summary with --llm._
- **🧑 User:** the login breaks on unicode passwords…
- **🤖 Assistant:** Found it — ascii encoding. Changed to utf-8, tests pass. _[4 tool calls]_
- 🔔 Agent "Update the docs" finished
各ターンの要点がすべて含まれます。これは要約ツールであり、エクスポーターではありません。--full を指定すると従来どおりメッセージをそのまま出力し、--llm を指定するとダイジェストが、すべてを読んだうえで作成される実際の要約に置き換わります。
よく使うコマンド
chf # latest session → handoff.md
chf -i # numbered picker; "1,3" or "2-4" merges several
chf --list # what sessions do I have? (title · first prompt)
chf --list --format json # the same, machine-readable
chf --name "login bug" # newest session whose title/prompt matches
chf "login bug" # same — a non-path argument is a name search
chf --grep "CORS" # newest session that *talked about* CORS
chf --grep CORS --grep auth # …that talked about BOTH (AND)
chf a.jsonl b.jsonl # several paths → ONE merged handoff
chf --project myrepo # latest session of a specific project
chf path/to/session.jsonl -o - # explicit file → stdout
chf -o clipboard # straight to the clipboard — go paste it
chf --full # verbatim messages instead of the digest
chf --last 5 # only the last 5 user turns
chf --since 2h # only the last 2 hours of the session
chf --fit 32k # sized to fit a 32k-token context
chf --include-tools # keep collapsed per-tool-call detail
chf --include-sidechains # append full subagent transcripts
chf --anonymize # public-safe: ~ paths, no emails/IPs/username
chf --project myrepo --merge # whole project in ONE handoff, oldest → newest
chf --format json -o session.json # machine-readable handoff
# LLM summaries (goal / decisions / current state / next steps).
# --llm composes with EVERYTHING above — picker, --name/--grep/--project,
# --merge, --last/--since, clipboard, JSON… (only --fit stays
# deterministic-only, by design):
chf --llm claude-cli # your Claude Code login — no API key
chf --llm ollama # local model — fully offline
chf --llm claude # Anthropic API (ANTHROPIC_API_KEY)
chf --llm openai --model gpt-4o # OpenAI API (OPENAI_API_KEY)
chf --llm gemini --with-transcript # Google API (GEMINI_API_KEY)
chf --llm claude-cli --focus "emphasize the API decisions"
chf --grep CORS --llm claude-cli # find the session, then summarize it
chf -i --merge --llm claude-cli -o clipboard # pick several → ONE summary, pasted
chf --since 2h --llm claude-cli # summarize just the last two hours
# project memory:
chf --brief # free factual brief (timeline + files)
chf --brief --llm claude-cli # + distilled decisions/fixes/conventions
chf --brief --exclude # numbered picker: edit the sticky exclusions (✗ pre-selected, numbers toggle)
chf --brief --keep first:2,last:20 # bound a huge history: founding + recent
chf --brief --keep since:30d # …or by time — the window slides
chf --brief --grep auth -o - # thematic memory: only the auth sessions
chf conversations.json --brief -o brief.md # memory from a claude.ai/ChatGPT export
どこを検索しますか? セッションは Claude Code のグローバルストア(~/.claude/projects)に保存されるため、どこからでも chf を実行できます。現在のディレクトリがプロジェクト(またはそのサブフォルダー)なら、そのプロジェクトのセッションが対象になります。親の「マスターフォルダー」なら、その配下にあるすべてのプロジェクトが対象になります。--any を指定すると、ディレクトリを完全に無視します。自動選択では、ほとんど何も含まれていないセッション(claude /login が残すスタブなど)は除外されるため、「最新」は最新の 実際の 会話を意味します。明示的なパス、--name、-i が指定されている場合は、常にそちらが優先されます。
大きなセッション。 1 回の処理で扱える長さ(約 400k 文字)を超えるトランスクリプトは、マップリデュース方式で要約されます。チャンクごとにメモを作成し、それを統合します。情報がひそかに削除されることはなく、処理済みのチャンクは ~/.cache/claude-handoff にキャッシュされるため、中断した処理も追加コストなしで再開できます。API プロバイダーではチャンクを 4 並列で処理します。設計上、claude-cli と ollama は順次処理されます。ターミナルでは、処理の進行状況がリアルタイムのプログレスバーで表示されます。
[█████████░░░░░░░░░░░░░░░] 3/9 chunks | 4m12s elapsed | ~8m left | summarizing part 4/8 (199,867 chars)…
API の usage データを含むセッションでは、ヘッダーに Tokens 行も表示され、実行ごとに出力のおおよそのトークン数も報告されます。
プライバシーとゼロトラスト
--llmを渡さない限り、データが外部に送信されることはありません。 決定論的モードは完全にオフラインです。- すべての出力で秘匿情報のマスキングが有効です。 LLM に送るデータだけでなく、API キー、トークン、JWT、
password=など、シークレットに見える文字列はハンドオフ自体、フックのファイル、MCP の応答からも除去されます。貼り付けた文書も外部に送信される可能性があります。--no-redactを指定すると、その実行に限りマスキングを無効にできます(設定ファイルでは意図的に使用できません)。 --anonymizeを指定すると、ホームディレクトリを~に置き換え、メールアドレス、IPv4 アドレス、ユーザー名をプレースホルダーに置き換えます。公開の Issue やフォーラムに貼り付ける際に便利です。--llm claude-cliと--llm ollamaを使うと、データをすでに管理しているアカウントとマシンの内部に留められます。- プロンプトインジェクションへの防御: トランスクリプトには、信頼できないテキスト(ツールの結果に含まれるウェブページや、貼り付けられた README など)が頻繁に含まれます。トランスクリプトを読み込むすべてのプロンプト、ハンドオフの前置き、簡潔なインジェクション用ラッパーでは、そうした内容を 指示ではなくデータ として扱います。この動作はテストで固定されています。これは軽減策であり、完全な保証ではありません。パーサー自体が何かを実行することはありません。
設定(任意)
常に使うデフォルト値は ~/.config/claude-handoff/config.json に設定できます(CLI フラグが常に優先されます。CLAUDE_HANDOFF_CONFIG を指定するとパスが上書きされます)。
{ "llm": "claude-cli", "fit": "32k", "include_tools": true }
使用できるキーは llm、model、fit、output、include_tools、include_sidechains、max_chars、anonymize、focus です。セキュリティ設定(no_redact)は意図的に設定できません。マスキングを弱めるには、実行ごとに明示的に選択する必要があります。設定ファイルに問題があっても、警告が表示されて無視されるだけで、処理が失敗することはありません。
環境変数
| 変数 | 用途 |
|---|---|
ANTHROPIC_API_KEY / CLAUDE_API | --llm claude 用のキー(最初に設定されたものが優先されます) |
OPENAI_API_KEY / GPT_API | --llm openai 用のキー |
GEMINI_API_KEY / GOOGLE_API_KEY / GEMINI_API | --llm gemini 用のキー |
OLLAMA_MODEL / OLLAMA_BASE_URL | ローカルの Ollama モデルとエンドポイント |
CLAUDE_HOME | Claude Code のホームディレクトリ(デフォルトは ~/.claude)— セッション、引き継ぎ情報、ブリーフの保存場所 |
CLAUDE_HANDOFF_CACHE | チャンク/ノートのキャッシュディレクトリ(デフォルトは ~/.cache/claude-handoff) |
CLAUDE_HANDOFF_CONFIG | 設定ファイルのパス(デフォルトは ~/.config/claude-handoff/config.json) |
CLAUDE_HANDOFF_DEBUG | 1 = --debug と同じです。フックも有効になります(フックコマンドまたはシェル環境に追加してください) |
claude-cli では環境変数は不要です。インストール済みの
Claude Code CLI を呼び出し、Pro/Max プランに課金されます
(ログインするには、claude を一度実行してください)。
MCP サーバー
任意の MCP クライアント(Claude Desktop、Claude Code、…)から引き継ぎ情報を直接取得できます。
claude mcp add claude-handoff -- claude-handoff --mcp
ツール:list_sessions(このマシン上のセッション一覧)と handoff(名前/プロジェクト/パスで指定したセッションのドキュメントを作成します。共有可能なバージョンには anonymize を指定してください)。デフォルトでは決定論的に動作します。MCP クライアントが LLM による要約を実行できるのは、サーバーを --allow-llm 付きで起動した場合のみです。
トラブルシューティング
pip install 後に claude-handoff: command not found と表示される
pip は、PATH に含まれていない場合があるユーザー用 bin ディレクトリにスクリプトを配置します。PATH も管理する pipx install claude-handoff または brew を使うか、~/.local/bin(Linux)/~/Library/Python/3.x/bin(macOS)を PATH に追加してください。
「~/.claude/projects にセッションが見つかりません」と表示される
Claude Code を実行したことのないマシン(またはユーザー)を使用しているか、ストアが別の場所にあります。CLAUDE_HOME をその場所に設定してください。プロジェクトフォルダー内では、このツールはそのプロジェクトに対象を絞ります。すべてを検索するには --any を指定してください。
違うセッションが選ばれた
「最新」はほぼ空のスタブを除外しますが、それでも単に最も新しいファイルを選びます。-i(選択画面)、--name "タイトルの一部"、または --grep "発言内容" を使ってください。
--llm claude-cli が失敗する、または認証を求められる
claude を一度実行してログインしてください(/login)。Claude Code セッションの内部から呼び出した場合も動作します。継承された CLAUDE* 環境変数は削除されるため、ネストされた CLI は新規起動時と同様に認証します。
--llm claude-cli が「Credit balance is too low」で失敗する
シェルでエクスポートされた ANTHROPIC_API_KEY が Pro/Max ログインより優先され、(残高のない)Console アカウントに課金されていました。0.18.0 以降は、起動される CLI からキーが自動的に削除されます。古いバージョンでこの問題が発生する場合はアップグレードするか、実行前に unset ANTHROPIC_API_KEY を実行してください。
「--llm claude を使うには ANTHROPIC_API_KEY を設定してください…」と表示される
API プロバイダーを使うには、環境変数にキーを設定する必要があります。上の表を参照してください。キーがない場合は、--llm claude-cli(サブスクリプション)または --llm ollama(ローカル)を使ってください。
--fit と --llm/--max-chars を組み合わせられない
--fit は決定論的な出力サイズを単独で調整します。指定した覚えがない場合は、設定ファイルで fit が設定されている可能性があります。--max-chars を明示的に指定して上書きするか、そのキーを削除してください。
ブリーフの挿入時に「このブリーフより新しいセッションがあります」と警告される
これは鮮度の確認が機能していることを示しています。chf --brief --llm claude-cli を実行して再度抽出してください(キャッシュされるため、新しいセッション分のみ課金されます)。SessionEnd フックがインストールされていれば、事実部分は自動的に更新されます。
何も起きないまま処理が終わったように見える場合
設計上、寛容に処理する箇所(破損した JSONL 行、読み取れないファイル、キャッシュの問題など)では実行がクラッシュしません。--debug(または CLAUDE_HANDOFF_DEBUG=1)を追加すると、スキップされた対象とその理由を確認できます。フックはエラーを常に stderr に出力しつつ、終了コード 0 で終了します。
Windows で文字化けする
PYTHONUTF8=1 を設定してください(CI ではテストスイート全体をこの設定で実行しています)。
フラグの完全なリファレンス
| フラグ | 意味 |
|---|---|
--list | セッションを一覧表示します(日付、サイズ、プロジェクト、タイトル・最初のプロンプト)。conversations.json がある場合は、そのチャットを一覧表示します |
--name QUERY | タイトルまたは最初のプロンプトに QUERY を含む最新のセッション(またはウェブの会話)を選択します |
--grep TEXT | 会話に TEXT を含む最新のセッションを選択します(すべての語句を必須にするには、このフラグを繰り返します)。--list/-i と併用すると、🔍 プレビュー付きですべての一致を表示します |
--project NAME | プロジェクトパスに NAME を含む最新のセッションを選択します(繰り返し指定可能。複数のプロジェクトをまとめられます) |
-i/--interactive | 番号付きリストからセッションを選択します。1,3 や 2-4 のように指定すると、複数のセッションを1つの引き継ぎにまとめます |
--any | 現在のディレクトリを無視し、すべてのプロジェクトのセッションを対象にします |
--last N/--since 2h | 会話の末尾だけを保持します(ユーザーの発話 N 件/指定した時間範囲) |
--merge | 対象範囲内のすべてのセッションを1つの引き継ぎにまとめます(セッション区切りマーカー、合計アクティビティ) |
--brief | プロジェクトの全履歴を ~/.claude/briefs/<project>.md に要約します(決定論的。実際の要約には --llm を使用) |
--exclude ID | --brief と併用すると、セッションをメモリから除外します。ID の接頭辞(--list または brief の引用から取得)を指定します。複数指定するにはカンマ区切りにするか、フラグを繰り返します。引数なしの --exclude を指定すると、保存済みの対象が選択済み(✗)の番号付きピッカーが開きます。番号で切り替え、空のまま確定するとそのまま保持し、none で解除します。更新後も保持され、--exclude none で解除します |
--keep SPEC | --brief と併用すると、メモリの生成に使うセッションの範囲を指定します。20/last:20(最新のもの)、first:2(初期のもの)、since:7d(最終アクティビティを基準。ISO 日付も使用可能)、または first:2,since:30d のように組み合わせて指定します。保持されるため、更新後もスライディングウィンドウが維持されます。--keep all で解除します |
--install-brief-hook/--uninstall-brief-hook | プロジェクトメモリのフックです。SessionStart で brief を挿入し、SessionEnd で事実を自動更新します |
--install-hook/--uninstall-hook | 各セッション終了時に ~/.claude/handoffs/ へ引き継ぎを自動書き込みします |
--install-skill/--uninstall-skill | /claude-handoff Claude Code スキル(~/.claude/skills/ 内の SKILL.md と ~/.claude/CLAUDE.md 内のトリガーセクション)をインストールし、Claude が chf を正しく操作できるようにします。冪等で、手書きのセクションを尊重し、アンインストールしても CLAUDE.md の他の部分には手を加えません |
--format md|json | Markdown(デフォルト)または機械可読な JSON を指定します。--list にも適用されます |
-o FILE/-o -/-o clipboard/-o graphify | 出力先のファイル/標準出力/クリップボード/graphify コーパス(ナレッジグラフ用の raw/)を指定します(デフォルトは handoff.md) |
--fit TOKENS | トランスクリプトの切り詰めを調整し、決定論的な引き継ぎのサイズをトークン予算(32k、128k、1m)に合わせます |
--full | デフォルトの簡潔な要約ではなく、会話の発話をそのまま出力します(従来形式のトランスクリプト) |
--max-chars N | トランスクリプトセクションの文字数を制限します(デフォルトは 80 000。冒頭と直近の末尾を保持します) |
--include-tools | 各ツール呼び出しを折りたたみ可能な <details> ブロックで表示します |
--include-sidechains | サブエージェントのトランスクリプト全体を追加します(インラインのサイドチェーンと <session-id>/subagents/agent-*.jsonl)。ファイル/コマンドのアクティビティは常に集計されます |
--llm claude|openai|gemini|claude-cli|ollama | クリーニング済みの生トランスクリプトの代わりに、LLM による要約を使用します |
--model ID | 使用する LLM モデルを上書きします |
--focus TEXT | 要約に追加の指示を指定します(例:--focus "emphasize the API decisions") |
--with-transcript | --llm と併用すると、クリーニング済みのトランスクリプトも追加します |
--anonymize | 公開共有用に個人を特定できる情報を削除します。ホームパスは ~ に、メールアドレス/IP アドレス/ユーザー名はプレースホルダーに置き換えます |
--no-redact | 機密情報らしき文字列を保持します(デフォルトでは、LLM の有無にかかわらず、すべての出力から機密情報らしき文字列を除去します) |
--no-cache | チャンクメモのキャッシュ(~/.cache/claude-handoff)を無効にします |
--mcp | 標準入出力経由で MCP サーバーとして実行します |
--allow-llm | --mcp と併用すると、handoff ツールで LLM による要約を実行できるようにします(明示的なオプトイン) |
--completions bash|zsh | タブ補完用のスニペットを出力します |
--debug | 許容されるエラー(破損した行、読み取れないファイル)を標準エラー出力に報告します。致命的なエラーにはなりません |
今後の予定
- Gemini のエクスポートを入力として利用(Google Takeout は HTML のみを出力します。実際の、機密情報を削除したエクスポートを提供いただければ、それをもとに開発できます)
- セッションチェーン:
/compactで続行されたセッションを自動検出し、その系譜を統合するオプションを提供(--follow)
PR を歓迎します。
他のツールとの比較
この分野にツールがないわけではありませんが、断片化しています。用途に合ったツールを選んでください。
- エクスポーター — claude-conversation-extractor、claude-code-log、claude-code-transcripts、claude-to-markdown — トランスクリプトを読みやすい Markdown/HTML に変換します。ツールのノイズも含まれ、引き継ぎを想定した形式にはなっていません。
- 異なる CLI 間でセッションを移動するツール — cli-continues(
npm i -g continues)は、16 種類のコーディング CLI(Claude Code を含む)のネイティブなセッションストアを読み取り、コンテキスト文書を別のターミナルツールに挿入します。Claude Code から Codex/Cursor/Gemini CLI への移行には最適ですが、ウェブチャットを移行先に指定できず、LLM による要約も行わず、Node 22.5 以降が必要です。 - セッション中に使う引き継ぎ用スキル/プラグイン — thepushkarp/handoff、claude-session-handoff、claude-code-handoff — セッション終了前に実行するのを忘れなければ便利です。モデルはセッションのコンテキストを使って要約を書き、出力先は次のClaudeセッションです。
- ブラウザー拡張機能 — Handoff、LLM Context Bridge、ContextSwitch — ChatGPT/Claude/Gemini 間でウェブチャットを移行できますが、Claude Code のセッションは参照できません。
claude-handoff は、この分野における事後処理向けで、どこにでも貼り付けられるツールです。事後に JSONL を処理するため、過去のセッション、クラッシュしたセッション、利用上限に達したセッションにも使えます。事前に何もインストールする必要はなく、デフォルトではトークンを一切消費しません。必要に応じて実際の要約を作成でき(--llm)、claude.ai、ChatGPT、Gemini など、ブラウザーやスマートフォンで使うあらゆるモデルが引き継げる文書を生成します。また、--brief を使えば、履歴を継続的に利用できるプロジェクトメモリに変換する唯一のツールです。
開発
git clone https://github.com/Vasilispapg/claude-handoff && cd claude-handoff
python3 -m unittest discover -s tests -v # the whole suite (no deps needed)
python3 -m claude_handoff tests/fixtures/agent_session.jsonl -o - # smoke run
python3 scripts/build_single.py --check # single-file build is fresh
uvx ruff check claude_handoff scripts tests # lint (config in pyproject)
実行時のコードは claude_handoff/ パッケージにあります。single/claude_handoff.py
は生成ファイルです。パッケージを変更した後は、python3 scripts/build_single.py を実行して再生成してください(古いままだと CI が失敗します)。パーサーの新しい動作を追加する際は、tests/fixtures/ に機密情報を削除したフィクスチャを用意することから始めてください。CONTRIBUTING.md と AGENTS.md(人間と AI の貢献者のための手順と不変条件)を参照してください。
詳細情報
docs/GUIDE.md — claude-handoff を使う一日:手順、--brief の段階ごとの動作、正直なコスト表、チートシート · INDEX.md — ファイル一覧 · docs/DEVELOPMENT.md — アーキテクチャ、JSONL スキーマの注記、設計上の決定事項 · AGENTS.md — AI コーディングエージェント向けの貢献ガイド · CONTRIBUTING.md · CHANGELOG.md
ライセンス
MIT
mcp-name: io.github.Vasilispapg/claude-handoff
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。