Communityライティング&編集github.com

janole/session-bandit

オフラインで動作するCLIツール兼エージェントスキルで、ローカルのClaude CodeおよびCodexのセッショントランスクリプトを検索、閲覧、要約できます。

session-bandit とは?

Session Banditは、コーディングエージェント(Claude Code、Codex、BotBandit)がディスクにJSONL形式で書き込むセッショントランスクリプトをインデックス化する、完全オフラインのCLIツール兼エージェントスキルです。デフォルトで `~/.claude/projects/`、`~/.codex/sessions/`、`~/.botbandit/sessions/` をスキャンし、API呼び出しや認証、ネットワークアクセスを一切必要としません。主な機能として、セッションの一覧表示(重要度や日付でのフィルタリング・ソート)、全文検索、人間が読める形式でのトランスクリプト表示、構造化されたダイジェスト抽出(ハンドオフノートやメモリノート作成に最適)、公開前の機密情報編集チェック、安全なMarkdownエクスポート、パース状態の健全性診断を提供します。エージェントツールとして使用する場合は、デフォルトの機械可読なJSON/JSON Lines出力を優先し、人間向けの表示には `--pretty` フラグを使用します。このスキルは、開発ワークフローにおいてセッションの知識を活用し、コンテキストの継続性を高めるために設計されています。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add janole/session-bandit

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

前提条件

Session Banditはシステムにインストールする必要があるCLIツールです。利用可能かどうかを確認します:

command -v session-bandit

インストールされていない場合は、グローバルにインストールします:

npm install -g session-bandit

パッケージがまだnpmにない場合は、ソースからインストールします:

git clone https://github.com/janole/session-bandit.git
cd session-bandit
pnpm install
pnpm -r build
npm install -g packages/cli

Node.js 22+ と pnpm 10+ が必要です(ソースからのビルド時のみ。npmインストールにはNode.jsのみ必要です)。

インストールを確認します:

session-bandit --version

Session Banditの機能

Session Banditは、コーディングエージェント(Claude Code、Codex、BotBandit)がディスクにJSONLとして書き込むセッショントランスクリプトをインデックス化します。完全にオフラインで動作します — APIコール、認証、ネットワークは不要です。デフォルトで ~/.claude/projects/、~/.codex/sessions/、~/.botbandit/sessions/ をスキャンします。

出力モード

Session Banditをエージェントツールとして使用する場合は、デフォルトの機械可読な出力を推奨します:

  • list および search はデフォルトでJSON Linesを出力します。
  • extract、redact-check、doctor はデフォルトでJSONを出力します。
  • show は人間が読める形式のトランスクリプトを出力します。

--pretty は、人間が読める端末ビューがブラウジングやユーザーへの報告に役立つ場合にのみ使用してください。解析や、ハンドオフ・メモリノートのための構造化入力として使用する予定のコマンドに --pretty を追加しないでください。

コマンド

セッション一覧

# すべてのセッションを一覧表示、新しい順(JSON Lines)
session-bandit list

# 重要度階層付きの人間可読テーブル
session-bandit list --pretty

# エージェントまたはプロジェクトでフィルタ
session-bandit list --agent codex --project botbandit

# 内容/重要度でソート(重要なセッションが先)
session-bandit list --sort importance

# 重要度の低いセッションを除外
session-bandit list --min-importance moderate

# 期間で制限: 相対(7d, 24h, 2w, 3m)または絶対日付
session-bandit list --since 7d
session-bandit list --since 2026-06-01 --until 2026-06-15

セッショントランスクリプトの表示

# 完全なIDまたは前方一致
session-bandit show 342647fa-5bf
session-bandit show 342647fa --agent claude

セッション横断検索

session-bandit search "tool approval"
session-bandit search "apply_patch" --agent codex
session-bandit search "adapter" --since 3d --pretty

セッションダイジェストの抽出(ハンドオフ/メモリの中核機能)

# 構造化ダイジェスト(JSON)— 内容スコア、ファイル、コマンド、エラー、主要なターン
session-bandit extract 342647fa-5bf

# ダイジェストを即座に送信可能な合成プロンプトでラップ
session-bandit extract 342647fa-5bf --prompt handoff
session-bandit extract 342647fa-5bf --prompt memory

# 完全なトランスクリプトをダイジェストに含める
session-bandit extract 342647fa-5bf --full --prompt handoff

パース状態の確認

session-bandit doctor
session-bandit doctor --agent codex
session-bandit doctor --agent botbandit

公開前の編集チェック

# デフォルトはJSONレポート
session-bandit redact-check 342647fa-5bf

# ユーザーとのレビュー用の人間可読レポート
session-bandit redact-check 342647fa-5bf --pretty

# より保守的なプレビュー
session-bandit redact-check 342647fa-5bf --redact strict

レビュー/公開用のMarkdownエクスポート

session-bandit export-md 342647fa-5bf --out ./session.md
session-bandit export-md 342647fa-5bf --out ./session.md --report-out ./redaction-report.json
session-bandit export-md 342647fa-5bf --out ./session.md --title "Apple Watch interface"

export-md はデフォルトで --redact cautious を使用します。公開アーティファクトに対して --redact none を使用しないでください。ユーザーが明示的に要求し、リスクを受け入れた場合を除きます。そのモードではCLIは --yes を要求します。

セッションの公開

コーディングセッションの公開を求められた場合、Session Banditは決定論的かつオフラインに保ちます。CLIを使用して編集済みMarkdownアーティファクトと編集レポートを作成します。エージェントの判断は、セッションの選択、タイトル/スラッグの選択、任意の散文の洗練、およびユーザーへのリスク報告にのみ使用します。

  1. ソースセッションを見つける。 ユーザーがセッションIDを指定した場合は直接使用します。それ以外の場合は、可能性のあるセッションを検索または一覧表示します:

    session-bandit list --sort importance
    session-bandit search "the topic"
    

    ユーザーが対象を絞り込んだ場合は --agent または --project を使用します。

  2. タイトル、スラッグ、出力パスを選択する。 GitHub Pagesスタイルのリポジトリでは、セッションごとに1フォルダを推奨します:

    sessions/<slug>/index.md
    sessions/<slug>/redaction-report.json
    

    スラッグは短く、小文字で、安定したものにしてください。タイトルが不明な場合は、エクスポート前にユーザーに提案します。

  3. アーティファクトを作成する前に編集をプレビューする:

    session-bandit redact-check <sessionId> --pretty
    

    件数と注目すべきリスクを報告します。セッションにプライベートな顧客データ、認証情報、プロプライエタリな出力、または異常に機密性の高いローカルコンテキストが含まれていると思われる場合は --redact strict を使用します。

  4. Markdownとレポートをエクスポートする:

    session-bandit export-md <sessionId> \
      --out sessions/<slug>/index.md \
      --report-out sessions/<slug>/redaction-report.json \
      --title "Human readable title"
    

    ユーザーが明示的に要求し、リスクを受け入れない限り、公開公開に --redact none を使用しないでください。

  5. 公開前にレビューする。 Markdownと編集レポートを検査します。サマリーセクション、関連セッション、コマンド、ツール出力、ローカルパスが適切であることを確認します。自動編集はベストエフォートであり、安全性を保証するものではありません。

  6. 必要に応じてMarkdownを洗練する。 CLI出力の範囲外で、短いイントロ、セクション見出し、またはクロージングノートを追加または編集しても構いません。事実を捏造しないでください。トランスクリプト、ダイジェスト、出典、編集レポートはそのまま維持します。

  7. 公開前に確認を求める。 git add、git commit、git push、またはデプロイアクションの前に、編集リスクを要約し、ユーザーが現在のターンで既に承認を与えていない限り、明示的なユーザー承認を求めます。

GitHub Pagesテンプレート

このスキルには、この SKILL.md の隣の templates/github-pages-default/ にデフォルトの公開テンプレートが同梱されています。ユーザーがGitHub Pagesリポジトリ、洗練された静的サイト、またはエクスポートされたセッションのデフォルトの公開表示を求めた場合に使用します。

テンプレートの動作:

  • カスタムレイアウトとCSSを備えたJekyll/GitHub Pagesサイトです。
  • 生成されたセッションが sessions/<slug>/index.md にあることを期待します。
  • 編集レポートが sessions/<slug>/redaction-report.json としてセッションの隣にあることを期待します。
  • _config.yml のデフォルトを使用して、エクスポートされたSession Bandit Markdownが自動的にセッションレイアウトを取得するようにします。
  • JekyllやPagesデプロイなしでレイアウトを確認するためのローカルフィクスチャ .design/session-page.html が含まれています。
  • 静的で自己完結型です。ユーザーが明示的に要求しない限り、外部アセット、トラッカー、フォント、リモートスクリプトを追加しないでください。

空の公開リポジトリを初期化する場合:

cp -R <skill-directory>/templates/github-pages-default/. <target-repo>/

リポジトリが既に存在する場合、_config.yml、_layouts/、assets/session.css、index.md、README.md を確認せずに上書きしないでください。sessions/<slug>/index.md、sessions/<slug>/redaction-report.json、およびユーザーが手動インデックスを希望する場合はインデックスエントリのみを追加または更新します。

視覚的なテンプレート変更については、公開前に templates/github-pages-default/.design/session-page.html をローカルで確認することを推奨します。これはプレーンなHTMLから意図的に構築されているため、Jekyllは必要ありません。

ハンドオフノートの作成

以前のセッションからハンドオフノートを作成するよう求められた場合:

  1. セッションを見つける。 ユーザーがセッションIDを指定した場合は直接使用します。それ以外の場合は、最近のセッションを一覧表示し、関連するものを選択します:

    session-bandit list --sort importance
    

    またはトピックを検索:

    session-bandit search "the topic"
    

    手動ブラウジングのためにテーブル/抜粋が必要な場合のみ --pretty を追加します。

  2. ハンドオフプロンプトでダイジェストを生成する:

    session-bandit extract <sessionId> --prompt handoff
    

    これにより、構造化されたダイジェスト(内容スコア、書き込まれたファイル、エラー、サマリー/要約、目標、最終状態)が合成プロンプトでラップされて出力され、何を書くべきかが指示されます。

  3. ハンドオフを書く。 プロンプトは、目標、行われたこと、現在の状態、残っていることをカバーするよう求めます。ダイジェストの構造化データ(書き込まれたファイル、エラー、主要なターン)を事実の基盤として使用します。簡潔に保ちます — 戻ってくるエージェントに必要なのは完全な履歴ではなく、状態です。

  4. ハンドオフを保存する ユーザーが希望する場所(ドキュメントストア、マークダウンファイルなど)に保存します。

メモリノートの作成

過去のセッションからメモリノートを作成するよう求められた場合:

  1. セッションを見つけて抽出する:

    session-bandit extract <sessionId> --prompt memory
    
  2. メモリノートを書く。 プロンプトは、セッションの内容、主要な成果、覚えておく価値のあるファイル/決定をカバーする2〜4文を求めます。推奨される重要度階層(trivial / light / moderate / substantive / heavy)で締めくくります。

  3. メモリノートを保存する ユーザーが希望する場所に保存します。

ヒント

  • --prompt handoff および --prompt memory テンプレートは最初のドラフトです。出力形式をユーザーのニーズに自由に適応させてください — 価値があるのはテンプレートテキストではなく、ダイジェストデータです。
  • 複雑なマルチステップの作業など、完全なトランスクリプトが必要な場合は --full を使用します。--full がない場合、ダイジェストはコンパクトになり、詳細が省略される可能性があります。
  • Claudeのrecap、Codexのcompaction、BotBanditのmemory/compactionイベントは summary メッセージとして表示され、抽出に含まれます。これらを有用な合成コンテキストとして扱いますが、ハンドオフとメモリはダイジェストのファイル、エラー、テスト、最終ターンに基づいて作成します。
  • セッションを公開またはエクスポートする前に、session-bandit redact-check <sessionId> --pretty を実行し、残存リスクを報告します。自動編集はベストエフォートであり、安全性を保証するものではありません。
  • Markdownエクスポートには、session-bandit export-md <sessionId> --out <path> --report-out <reportPath> を推奨し、コミット/公開を提案する前にレポートを検査します。
  • Markdownが標準的な公開アーティファクトです。ユーザーが特にHTMLを要求した場合を除き、基本的なHTMLトランスクリプトを作成しないでください。高品質なHTMLは、レビュー済みのMarkdownまたは編集済みバンドルから生成する必要があります。
  • 新しいGitHub Pages公開リポジトリには、同梱の templates/github-pages-default/ テンプレートを推奨します。ユーザーが別のスタイルを要求しない限り、これがデフォルトの公開表示です。
  • 内容スコアは アクティビティ(ツールコール、ファイル書き込み、テスト実行)を測定し、重要度 ではありません。短いセッションに重要な決定が含まれている可能性があります。スコアだけでなく、主要なターンを読んでください。
  • セッションIDはプレフィックス(例: 完全なUUIDの代わりに 342647fa)で指定できます。
  • 何かおかしいと思ったら session-bandit doctor を実行します — パースの前提が実際のセッションファイルと一致しているか、フォーマットのずれ、インジェクションマーカー、認識されないタイプ、サイレントスキップをチェックします。--agent claude、--agent codex、または --agent botbandit を使用してチェックを絞り込みます。

関連スキル