Skip to main content
Glama

claude-handoff

claude-handoff: ノイズの多いトランスクリプトは chf を通してクリーンな handoff.md と永続的なプロジェクトメモリになる

PyPI Python CI Downloads License: MIT

あらゆる Claude Code セッション(クラッシュしたものも含む)を、別の AI が続きから作業できるクリーンな handoff.md に変換します。さらに、自身の履歴から抽出した Claude Code 用の永続的なプロジェクトメモリも提供します。

chf

これだけです。最新のセッションが handoff.md になります。ノイズのない会話、変更されたファイル、実行されたコマンド。受け取る側のアシスタントへの指示で始まるので、Gemini、GPT、claude.ai、または新しい Claude Code セッションに追加のプロンプトなしでそのまま貼り付けられます。

chf -o clipboard の動作 — セッションから貼り付け可能なハンドオフまで5秒

Claude Code はすべてのセッションをローカルの JSONL(~/.claude/projects/…/*.jsonl)として保存します。そこにはツール呼び出し、ツール結果、思考ブロック、システムリマインダーが満載です。既存のエクスポーターはそれらすべてをマークダウンに出力します。一方 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= など)はすべての出力から編集されます — Web チャットに貼り付けるハンドオフも外部送信です。--anonymize は公開共有用にさらに進みます。


前提条件

要件

最小

確認

備考

Python

3.9+

python3 --version

唯一の必須要件

Claude Code

任意

claude --version

--llm claude-cli のみで必要(Pro/Max ログインを使用)

pipx (推奨)

任意

pipx --version

pip install pipx — または brew / 通常の pip を使用

サードパーティの Python パッケージは一切不要 — すべて標準ライブラリで動作します。

Related MCP server: Longhand

インストール

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

パッケージをインストールすると、claude-handoff と短いエイリアス chf の2つの同一コマンドが使えます。タブ補完:

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 の Web チャット:

chf conversations.json --list      # each app's data export works as input
chf conversations.json --name "webhook bug"

プロジェクトメモリ(--brief)

Claude Code はセッション間ですべてを忘れます — しかし全履歴はディスク上にあります。chf --brief は現在のプロジェクトのすべてのセッションを読み取り、1つのメモリドキュメントを ~/.claude/briefs/<project>.md に書き込みます:

  • 事実に基づくセッションタイムライン + 最も頻繁に触れたファイル(決定的、無料);

  • --llm を使用すると、凝縮されたメモリ — 理由付きの決定事項、修正されたバグ、規約、未解決のスレッド — 各箇条書きが出典のセッション ID 付きで引用されます(chf --name <id> でソースを開きます)。

chf --brief の動作 — プロジェクト全体の履歴が引用付きメモリに凝縮される

セッションごとのノートはキャッシュされるため、新しいセッション後の更新では新しいものだけにコストがかかります。また、巨大なセッション(約12万文字超)はノート内でマップリデュースされるため、メモリパスが切り詰められることはありません。どのサイズでも何も黙って破棄されません。

chf --install-brief-hook

2つのフックをインストールします:SessionStart はブリーフをコンテキストとして注入し(Claude はプロジェクトを既に知った状態で開始 — /compact 後にも再注入されます)、SessionEnd は事実部分を無料で自動更新します。フックから LLM が実行されることは決してありません。凝縮部分はあなたが明示的に指示したときだけ更新されます。ブリーフには鮮度スタンプが付き、ファイルと注入の両方が新しいセッションの存在を警告します。完全にローカル。編集は他の場所と同様に適用されます。

→ ステップバイステップの仕組み、正直なコスト表、1日使ってみたウォークスルー:docs/GUIDE.md。

自動化する

chf --install-hook                 # SessionEnd + PreCompact → handoff to ~/.claude/handoffs/
chf --install-brief-hook           # SessionStart/End + PreCompact → project memory (above)

PreCompact が重要な理由:Claude Code が長いセッションのコンテキストを圧縮する直前に、両方のフックが状態をスナップショットします — ハンドオフは圧縮がまさに絞り出そうとしている詳細を保持し、ブリーフの骨格はセッション中も新鮮なままです。

どちらも ~/.claude/settings.json を非破壊的に編集し、冪等で、対応する --uninstall-* フラグがあります。フックの失敗がホストセッションを壊すことはなく、フックが LLM 呼び出しをトリガーしたり、単独でファイルを作成したりすることもありません。


出力の見た目

# 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, 4 assistant replies, 4 tool calls

## Files created / modified
- /home/you/myapp/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
### 🧑 User
the login breaks on unicode passwords…
### 🤖 Assistant
Found it — ascii encoding. Changed to utf-8, tests pass.

よく使うコマンド

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 --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):
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"

# project memory:
chf --brief                        # free factual brief (timeline + files)
chf --brief --llm claude-cli       # + distilled decisions/fixes/conventions

どこを探すの? セッションは Claude Code のグローバルストア(~/.claude/projects)にあるため、chf はどこからでも実行できます。現在のディレクトリがプロジェクト(またはそのサブフォルダ)の場合、そのプロジェクトのセッションにスコープされます。親の「マスターフォルダ」の場合はその下のすべてのプロジェクトにスコープされます。--any はディレクトリを完全に無視します。自動選択はほぼ空のセッション(claude /login が残すスタブなど)をスキップするため、「最新」は最新の実際の会話を意味します — 明示的なパス、--name、-i は常に優先されます。

大きなセッション。 1パス(約40万文字)を超えるトランスクリプトはマップリデュース方式で要約されます:チャンクごとのノート、その後1つの統合 — 何も黙って破棄されず、完了したチャンクは ~/.cache/claude-handoff にキャッシュされるため、中断された実行は無料で再開できます。チャンクは API プロバイダーで4並列で実行されます。claude-cli と ollama は設計上逐次実行のままです。ターミナルではライブのプログレスバーが表示されます:

[█████████░░░░░░░░░░░░░░░] 3/9 chunks | 4m12s elapsed | ~8m left | summarizing part 4/8 (199,867 chars)…

API の usage データがあるセッションにはヘッダーにトークン行も追加され、毎回の実行で出力の約トークンサイズが報告されます。

プライバシーとゼロトラスト

  • --llm を渡さない限り、どこにも何も送信されません — 決定的モードは完全にオフラインです。

  • 編集は LLM トラフィックだけでなく、すべての出力に適用されます:秘密文字列(API キー、トークン、JWT、password= など)はハンドオフ自体、フックファイル、MCP 応答から除去されます — 貼り付けられたドキュメントも外部送信だからです。--no-redact は実行ごとにオプトアウトします(設定ファイルでは意図的に許可されていません)。

  • --anonymize はさらに、ホームディレクトリを ~ に変換し、メールアドレス、IPv4、ユーザー名をプレースホルダーに置き換えます — 公開の issue やフォーラムへの貼り付け用です。

  • --llm claude-cli と --llm ollama は、すべてを既に管理しているアカウントとマシン内に留めます。

  • プロンプトインジェクション対策:トランスクリプトには信頼できないテキスト(ツール結果の Web ページ、貼り付けられた 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 ディレクトリに置きます。pipx install claude-handoff または brew を使用してください — どちらも PATH を管理します — または ~/.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 は新しいものと同じように認証されます。

"Set ANTHROPIC_API_KEY … to use --llm claude" 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 にエラーを報告し、それでも exit 0 を返します。

Windows で文字化け PYTHONUTF8=1 を設定してください(CI はこの方法で全体のスイートを実行します)。

全フラグリファレンス

フラグ

意味

--list

セッションを一覧表示(日付、サイズ、プロジェクト、タイトル · 最初のプロンプト); conversations.json がある場合はそのチャットを一覧表示

--name QUERY

タイトルまたは最初のプロンプトに QUERY を含む最新のセッション(または Web 会話)を選択

--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)

--install-brief-hook / --uninstall-brief-hook

プロジェクトメモリフック: SessionStart でブリーフを注入、SessionEnd で事実を自動更新

--install-hook / --uninstall-hook

各セッション終了時にハンドオフを ~/.claude/handoffs/ に自動書き込み

--format md|json

マークダウン(デフォルト)または機械可読 JSON — --list にも適用

-o FILE / -o - / -o clipboard

出力ファイル / stdout / クリップボード(デフォルト handoff.md)

--fit TOKENS

決定的ハンドオフをトークンバジェット(32k、128k、1m)にサイズ調整(トランスクリプトの切り詰めを調整)

--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

stdio で MCP サーバーとして実行

--allow-llm

--mcp と一緒に: handoff ツールに LLM サマリーを実行させる(明示的なオプトイン)

--completions bash|zsh

タブ補完スニペットを出力

--debug

許容された失敗(壊れた行、読み取れないファイル)を stderr に報告 — 何も致命的になりません

ロードマップ

  • Gemini エクスポートを入力として(Google Takeout は HTML のみを配布 — 実際のレッドアクション済みエクスポートをビルドに持参)

  • セッションチェーン: /compact で継続されたセッションを自動検出し、系統のマージを提案(--follow)

PR 歓迎。

他との比較

このスペースは空ではありません — 断片化されています。状況に合ったツールを選んでください:

  • エクスポーター — claude-conversation-extractor、claude-code-log、claude-code-transcripts、claude-to-markdown — トランスクリプトを読みやすい Markdown/HTML に変換、ツールノイズ含む、ハンドオフフレーミングなし。

  • クロス CL Iセッションムーバー — cli-continues(npm i -g continues)は 16 のコーディング CLI のネイティブセッションストア(Claude Code 含む)を読み取り、別のターミナルツールにコンテキストドキュメントを注入します。Claude Code → Codex/Cursor/Gemini CLI に最適; ただし Web チャットを対象にできず、LLM サマリーは行わず、Node 22.5+ が必要です。

  • セッション内ハンドオフスキル/プラグイン — thepushkarp/handoff、claude-session-handoff、claude-code-handoff — セッション終了前に実行するのを覚えている場合に最適; モデルはセッションのコンテキストを使ってサマリーを書き、出力は次の Claude セッションを対象にします。

  • ブラウザ拡張機能 — Handoff、LLM Context Bridge、ContextSwitch — ChatGPT/Claude/Gemini 間でWeb チャットを転送; 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

Available Tools

2 tools
handoffB

Build a clean handoff document (markdown) from a Claude Code session so another assistant can continue the work. Deterministic — no LLM calls, no cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
lastNokeep only the last N user turns
nameNonewest session whose title or first prompt contains this
pathNoexplicit session .jsonl path
projectNo
anonymizeNo
include_toolsNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses a key behavioral trait ('Deterministic — no LLM calls, no cost'), which is useful, but it does not describe side effects, required session context, or how the tool processes the session beyond generating a document. This partial disclosure is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences, both front-loaded with purpose and a notable trait. Every word earns its place, with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters, no output schema, and no annotations, the description is severely under-specified. It fails to explain how parameters like anonymize or include_tools affect output, what the tool returns (file vs printed text), or any prerequisites such as an existing session. The deterministic note is helpful but does not cover the core operational details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, so the description must compensate for undocumented parameters (project, anonymize, include_tools). However, the description makes no mention of any parameters, neither explaining the documented ones nor filling gaps for the undocumented. It adds zero semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb 'build' and the resource 'clean handoff document (markdown) from a Claude Code session', with clear intent ('so another assistant can continue the work'). This clearly distinguishes it from sibling list_sessions, which lists sessions rather than generating documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for handoff scenarios but does not explicitly state when to use it versus list_sessions or any alternatives. It provides context for its purpose but lacks explicit exclusions or comparisons, leaving the agent to infer the appropriate choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sessionsA

List Claude Code sessions on this machine, newest first: date, project, id, title and first prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNosubstring filter on the project path

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose the read-only nature implicitly (listing) and the ordering, but it doesn't explicitly state that no modifications occur, nor does it mention any authentication requirements or potential limitations. The description is adequate but not rich in behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, directly front-loaded sentence states the resource, ordering, and return fields without any fluff or repetition. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and no output schema, the description covers the essential return fields and ordering. It omits details like pagination limits or how many sessions are returned, but for a straightforward listing operation this is a minor gap given the simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage for the single parameter 'project' is 100%, with a clear description of it being a substring filter on the project path. The tool description adds no additional parameter-level detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a clear resource ('Claude Code sessions on this machine'), and the behavior ('newest first'), plus the fields included. It's easily distinguished from the lone sibling 'handoff', which implies a different purpose entirely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for listing local sessions, but provides no explicit when-to-use or when-not-to-use guidance, nor does it reference any alternatives. With only one sibling (handoff) that seems unrelated, the context is adequate but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.0
    • First observedhandoff
    • First observedlist_sessions

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one lists available sessions and the other generates a handoff document from a selected session. There is no overlap or ambiguity in their roles.

Naming Consistency4/5

Both tool names are concise verbs, but they mix patterns slightly: 'list_sessions' follows verb_noun while 'handoff' is a single verb/noun. The inconsistency is minor and both names are predictable in context.

Tool Count3/5

Two tools is a thin set, but it matches the server's narrow purpose of session listing and handoff generation. It feels borderline but acceptable for a focused utility.

Completeness5/5

The domain is fully covered: list_sessions provides the discovery step and handoff provides the output generation. There are no obvious dead ends or missing operations for the stated purpose.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Persistent memory for Claude Code. Automatically indexes every conversation and provides production-grade hybrid search (BM25 + vectors + reranker) via MCP tools. 100% local, zero config, zero API keys, zero invoice.
    16
    37 npm
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Persistent local memory for Claude Code that indexes every session's JSONL file verbatim into SQLite + ChromaDB. Exposes 17 MCP tools for semantic recall, deterministic file replay, and fuzzy "do you remember when..." queries across your entire session history — no API calls, nothing leaves the machine.
    17
    77 PyPI
    15
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Persistent memory + FTS5 full-text search for Claude Code conversation history. Indexes ~/.claude/projects/ JSONL into SQLite, exposes 10 MCP tools (store/recall/search memories, browse sessions, get summaries) plus prompts. Includes a web UI for visual exploration
    10
    152 npm
    96
    MIT