エージェントの過去セッションを横断検索できるようにした — ctx 導入記録

  • #AI活用
  • #Claude Code
  • #開発環境
  • #エージェント履歴
エージェントの過去セッションを横断検索できるようにした — ctx 導入記録

この記事について

コーディングエージェントを複数マシンで使っていると、「あの判断、どのセッションでやったか」が誰にも分からなくなる。ログは各マシンのホームディレクトリに JSONL で残っているが、機械横断で検索する手段が標準では無い。

ctx(ctx.rs、Rust製)はこれを解決するローカル専用ツールで、各エージェントの履歴を SQLite にインデックスして横断検索する。2026-07-20 に3台へ導入し、以降そのまま運用している。

項目内容
バージョンctx 0.25.0
動作完全ローカル(外部送信なし)
データ配置~/.ctx/work.sqlite
導入日2026-07-20
対応プロバイダclaude / codex / warp / hermes ほか(検出できたものだけ有効化)

トークン削減の実測は別記事(AI利用コスト実測レポート #03)で扱う。こちらは導入手順と、踏んだ罠の記録である。

何が入ったか

導入時点の3台の規模は以下のとおり。

役割セッション数イベント数取り込んだソース
作業機約288約87,000claude / codex / antigravity / warp / hermes
常時起動サーバ351,6203ソース
3台目127antigravity のみ

作業機は本日時点で 87,980 アイテム・320 ソースまで伸びている。日常の使い方は3つに集約された。

ctx search "クエリ"                    # 横断検索
ctx show event <id> --window 10        # 当たりの前後を開く
ctx status                             # インデックスの健康状態

インデックスは同期しない

3台に入れたが、インデックスはマシン単位で独立させ、同期していない

利点採らなかった理由
1本に集約どこからでも全履歴を引ける履歴は9万件近いイベント。同期の失敗・競合の面倒が、得られる利便を上回る
マシン単位で独立(採用)壊れても1台分。設定がほぼゼロ他機の履歴は引けない

実際に困っていないのは、探したい経緯はたいてい「その作業をしたマシン」に残っているからだ。常時起動サーバで回している定期ジョブの経緯はそのサーバに、記事制作の判断は作業機にある。横断したくなった時点で考え直せばよく、先に集約基盤を作るのは早すぎる最適化だった。

既定パスにログが無い

一番の罠がこれで、ctx sources を見ると今も残っている。

antigravity  ~/.gemini/antigravity-ide/brain   empty
claude       ~/.claude/projects                available
codex        ~/.codex/sessions                 available

empty は「そのエージェントを使っていない」ではなく「既定パスを見に行ったが実体は別の場所にある」だった。実際の履歴は ~/.gemini/antigravity/brain-ide が付かない)にある。

ctx import --provider antigravity --path ~/.gemini/antigravity/brain

available / empty / missing の3状態のうち、empty を見たら「使っていない」と結論せず、実パスを自分で確認する。ここで取りこぼすと、そのエージェントの履歴だけが永久に検索に出てこない。気づく機会が無いタイプの欠落なので、導入直後に ctx sources を1回眺めておく価値がある。

インストーラを使わなかった

配布されているインストールスクリプトは実行しなかった。エージェント環境の分類器にブロックされるためで、代わりに GitHub Releases からバイナリを直接取得し、SHA256 を検証して配置した。

手順内容
1Releases から対象プラットフォームのバイナリを取得
2公開されているチェックサムと SHA256 を突合
3~/.local/bin/ に配置してパスを通す
4ctx setup でストレージ作成+初回インデックス

回避策として始めたが、結果的にこちらの方が良かった。何が入るのかが手順として全部見えているので、3台目に入れるときも同じ4行をなぞるだけで済んだ。任意のスクリプトを取得して実行する形は、無人で回っているマシンに入れる道具としては筋が悪い。

エージェント側に配線する

人間が思い出したときに叩くだけでは、道具はすぐ忘れられる。エージェントが自発的に過去履歴を引けるように、各エージェントへスキルとして登録した。

登録先状態
Claude Code(各機)導入済み
Codex導入済み
Antigravity / Antigravity CLI導入済み

これで「なぜこうなっているのか分からない」場面で、エージェントが自分で履歴を検索してから答えるようになる。人間が「ctx で調べて」と言う必要がなくなった時点で、導入が完了したと見なしている。

インデックスの更新は常駐プロセスではなく、ctx コマンド実行時に自動でメンテナンスが走る方式にした。常駐を1本増やすと、それ自体の生死を監視する仕事が増える。手動で回したいときは以下で足りる。

ctx daemon run --once

限界

  • 今の状態は分からない。ctx が持つのは過去の会話であって、現在のコードや設定ではない。現行の条文を聞くとそれらしい過去の議論を返してくるので、「今どうなっているか」は現物を読むこと
  • 検索結果は答えではなく入口。上位数件を超えると急速にノイズになる。当たりを引いたら ctx show で前後を開く
  • 履歴が残っていない範囲は存在しないのと同じ。ログの保持期間より前の判断は、どのみち掘れない

導入して効いたのは検索速度そのものより、「あのとき何を考えていたか」を口頭の記憶に頼らなくなったことだった。同じ失敗を2回踏んでから気づく、という経路がひとつ減っている。