About search-history
search-history searches local JSONL chat histories from Claude Code and Codex CLI. It is for finding past sessions by keyword, tool, and date range, while limiting output to context around matches.
Key features
- 01Searches Claude Code and Codex CLI histories
- 02Supports AND search for multiple keywords
- 03Filters by tool and date range
- 04Shows context around matches
- 05Reads history files without editing them
Use cases
- 01Find sessions that mention a particular keyword
- 02Limit a search to one tool or recent dates
- 03Inspect conversation snippets around a match
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ efoo-team/ skills --skill search-historyAfter installing, type/search-historyin Claude Code to confirm it loaded.
Bundled filesagents/openai.yaml
Details
From the project READMEsearch-history - チャット履歴検索
目的
Claude Code および Codex CLI のローカル履歴ファイル(JSONL)からキーワード検索を行い、該当するセッションと会話断片を提示する。両ツールの履歴を対等な検索対象として扱う。
引数の扱い
このスキルの起動時に渡される引数を以下のように分解する。
- keyword: 検索キーワード(必須)。スペース区切りで複数指定時は AND 検索
- --claude: Claude Code 履歴のみを対象にする
- --codex: Codex CLI 履歴のみを対象にする
- --all: 両方を対象にする(デフォルト)
- --days N: 直近 N 日間に絞る(デフォルト: 30)
引数は任意とし、キーワードが渡されていない場合はユーザーにキーワードの入力を求める。対象ツールの指定がない場合は両方(--all)を検索する。
検索対象パスとフォーマット
Claude Code と Codex CLI の履歴を対等に扱う。それぞれ以下のインデックスとセッション本体を持つ。
Claude Code
- インデックス:
~/.claude/history.jsonl- 各行:
{"display": "...", "timestamp": <unix_ms>, "project": "...", "sessionId": "..."}
- 各行:
- セッション本体:
~/.claude/projects/<encoded-path>/<sessionId>.jsonl- encoded-path はプロジェクトのフルパスの
/や.等の非英数字を-に変換したもの(例:/Users/foo/myapp→-Users-foo-myapp、github.com→github-com)。検索は find + grep で行うため、この規則からパスを再構成する必要はない - 各行:
{"type": "user"|"assistant"|..., "message": {"role": "...", "content": "..."}, "timestamp": "...", "sessionId": "..."}
- encoded-path はプロジェクトのフルパスの
Codex CLI
- インデックス:
~/.codex/history.jsonl- 各行:
{"session_id": "...", "ts": <unix_sec>, "text": "..."}
- 各行:
- セッション本体:
~/.codex/sessions/YYYY/MM/DD/rollout-<timestamp>-<uuid>.jsonl- 各行:
{"type": "session_meta"|"response_item", "timestamp": "...", "payload": {"role": "user"|"developer"|"assistant", "content": [...]}} session_meta行にcwd、model_provider、cli_version等のメタ情報
- 各行:
基本方針
- 読み取り専用: 履歴ファイルの編集・削除は行わない
- 効率的検索:
grepで絞り込んでから必要最小限を読む。大量のファイルを一括読み込みしない - センシティブ情報への配慮: 出力はキーワード周辺の文脈に限定する
検索の進め方
Step 1: キーワードと対象を確認
引数を解析し、検索キーワード・対象ツール・日数を確定させる。
Step 2: Claude Code 履歴の検索(対象の場合)
~/.claude/history.jsonlから keyword を含む行をgrep -iで抽出し、該当する sessionId と project を取得~/.claude/projects/配下の JSONL ファイルをfind+grep -lで keyword にマッチするセッションファイルを特定- マッチしたセッションファイルから、keyword を含む行の前後 2 行を含めて抽出し、会話の文脈を確認
Step 3: Codex CLI 履歴の検索(対象の場合)
~/.codex/history.jsonlから keyword を含む行を grep で抽出し、該当する session_id を取得--daysに基づき~/.codex/sessions/YYYY/MM/DD/の対象ディレクトリを絞り込む- 対象ディレクトリ内の JSONL ファイルに対して
grep -rlでキーワードマッチするファイルを特定 - マッチしたファイルの
session_meta行から cwd と timestamp を抽出しコンテキスト情報を付加 - keyword を含む行の前後を抽出して会話断片を取得
Step 4: 結果の整理と出力
マッチ結果を以下のフォーマットで提示する。ファイルが大量の場合は上位 20 件に絞る。
出力フォーマット
## 検索結果: "[keyword]"
### 検索条件
- 対象: Claude Code / Codex CLI / 両方
- 期間: 直近 N 日間
- ヒット数: Claude X 件 / Codex Y 件
### Claude Code セッション
#### 1. [プロジェクト名] - [日時]
- **Session ID**: `xxxx-xxxx-xxxx`
- **ファイル**: `~/.claude/projects/.../<id>.jsonl`
- **マッチ箇所**:
> [keyword を含む会話の抜粋(前後の文脈付き)]
### Codex CLI セッション
#### 1. [作業ディレクトリ] - [日時]
- **ファイル**: `~/.codex/sessions/YYYY/MM/DD/rollout-....jsonl`
- **マッチ箇所**:
> [keyword を含む会話の抜粋(前後の文脈付き)]
### ヒント
- Claude セッション再開: `claude --resume <sessionId>`
- Codex セッション再開: `codex resume <sessionId>`(直近のセッションは `codex resume --last`。`--resume` というフラグは存在しない)
- 詳細確認: 該当 JSONL ファイルを直接参照
制約
- 履歴ファイルの編集・削除は絶対に行わない(読み取り専用)
- 大量のファイルを一括 cat しない。
grepで絞り込んでから必要最小限を読む - セッション内容にはセンシティブ情報が含まれうるため、出力は検索キーワード周辺の文脈に限定する
- JSONL の各行を個別にパースできる前提で処理する(壊れた行はスキップ)
Comments
Markdown supported