agsearch
Find the session you remember,
even when you don't remember its title.
Ranked full-text search across every Claude Code and Codex CLI session on your machine.
agsearch indexes the local transcripts your coding agents already write. Search them in one ranked list, preview the matching lines, and resume the original Claude Code or Codex session. Everything stays on your machine.
Quick start
Try a search without installing anything:
uvx agsearch -n "stripe tax id"
For the interactive interface:
brew install devcodes9/tap/agsearch
agsearch
Type anything you remember from a past conversation. Select a result to resume it.
Features
- Full-conversation search. Search user prompts and assistant replies, not only titles and session metadata.
- One list for both tools. Claude Code and Codex sessions appear together, labelled
ccandcx. - Ranked results. BM25 ranking favors focused sessions and shows matching lines in context.
- Preview, read, or resume. Inspect a match, open the transcript in a pager, or return to the original session.
- Fully local. No uploads, API keys, hosted index, or network calls.
- Fast warm searches. A per-file cache reparses only transcripts that changed.
Installation
Homebrew
Recommended because it installs both agsearch and the fzf dependency:
brew install devcodes9/tap/agsearch
Python tool installers
uv tool install agsearch
# or
pipx install agsearch
Install fzf separately for the interactive interface.
Without it, agsearch -n "query" still works.
Install script
curl -fsSL https://raw.githubusercontent.com/devcodes9/agsearch/main/install.sh | sh
This installs the latest release to ~/.local/bin. Set PREFIX to change the destination or
AGSEARCH_VERSION to pin a release.
agsearch requires Python 3.9 or newer and has no Python package dependencies.
Usage
agsearch # browse all sessions in the interactive interface
agsearch "stripe tax id" # open with an initial query
agsearch -n "stripe tax id" # print ranked matches without fzf
agsearch --here "webhook" # search only the current project
agsearch -p myapp "migration" # search projects whose path contains "myapp"
agsearch --thinking "query" # include assistant thinking blocks
agsearch --no-resume "query" # print the selected resume command
agsearch --reindex # rebuild the transcript cache
agsearch --version # print the installed version
Interactive keys
| Key | Action |
|---|---|
| Enter | Resume the selected session |
| Ctrl-O | Read the full conversation in your pager |
| Ctrl-Y | Copy the resume command |
| Ctrl-/ | Toggle the preview pane |
Selecting a result starts claude --resume or codex resume from the session's project
directory. The current query is copied to the clipboard so you can find the same text after
resuming.
For a global shortcut, see the hotkey guide.
Why not just /resume?
Claude Code's /resume picker and codex resume are good when you remember a session's title,
branch, directory, or first prompt. They search metadata about the session.
agsearch searches the conversation itself. It also combines both tools in one list and includes
Claude Code SDK and -p sessions that do not appear in the native picker.
Use the native picker when you remember what the session was called. Use agsearch when you remember what was said.
Search and ranking
agsearch drops common stopwords, applies conservative stemming, and ranks matching sessions with
BM25 across three weighted fields: title and project, first prompt, and full transcript. Sessions
covering more query terms rank first; relevance, recency, and previous resumes break close ties.
Rare long typos fall back to subsequence matching, so conection pool still finds the
session about connection pools.
Search is lexical, not semantic. It will not match concepts expressed with completely different words, and the first result is not guaranteed to be the session you intended.
Privacy and storage
agsearch reads:
~/.claude/projects/**/*.jsonl~/.codex/sessions/**/*.jsonl
Its cache lives under ~/.cache/agsearch/. Transcript parsing and ranking happen locally, and
only changed files are reparsed.
[!IMPORTANT] Claude Code deletes transcripts after 30 days by default. To keep a longer searchable history, set
cleanupPeriodDaysin~/.claude/settings.json:{ "cleanupPeriodDays": 365 }agsearch never changes this setting.
Session handling
- Claude Code subagent transcripts are folded into their resumable parent session.
- SDK and other automated sessions remain searchable but rank below user-started sessions.
- Sessions from deleted worktrees resume from the nearest existing parent directory.
- Recently active sessions are marked
●and require confirmation before reattaching.
Development
git clone https://github.com/devcodes9/agsearch.git
cd agsearch
python3 -m unittest discover -s tests
Changes to ranking should include a regression case in tests/. See the
changelog and
open issues.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agsearch-0.1.0.tar.gz.
File metadata
- Download URL: agsearch-0.1.0.tar.gz
- Upload date:
- Size: 44.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ecd4e29732944f0dcbf289b740a5c574e850fe52cea79b6baeb471767c44608
|
|
| MD5 |
d7b179e3eb4f88addd7e9df70af445fa
|
|
| BLAKE2b-256 |
4008877176ad92f4d1bff74407c3b093ff038041aa1dec27507a7132ea572572
|
Provenance
The following attestation bundles were made for agsearch-0.1.0.tar.gz:
Publisher:
publish-pypi.yml on devcodes9/agsearch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agsearch-0.1.0.tar.gz -
Subject digest:
3ecd4e29732944f0dcbf289b740a5c574e850fe52cea79b6baeb471767c44608 - Sigstore transparency entry: 2566486492
- Sigstore integration time:
-
Permalink:
devcodes9/agsearch@07df1957bc4951dcddc8d544c4f3366ea880647e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/devcodes9
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@07df1957bc4951dcddc8d544c4f3366ea880647e -
Trigger Event:
push
-
Statement type:
File details
Details for the file agsearch-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agsearch-0.1.0-py3-none-any.whl
- Upload date:
- Size: 26.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce7362e10438c105760bba935112a9edcfe011d3158676158c3f0de7c035634e
|
|
| MD5 |
a520096777505c700187ec8da5acc000
|
|
| BLAKE2b-256 |
8be77abf29404772bd85fee085a565ece0906c9d3ac084a400f91794182cc513
|
Provenance
The following attestation bundles were made for agsearch-0.1.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on devcodes9/agsearch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agsearch-0.1.0-py3-none-any.whl -
Subject digest:
ce7362e10438c105760bba935112a9edcfe011d3158676158c3f0de7c035634e - Sigstore transparency entry: 2566486525
- Sigstore integration time:
-
Permalink:
devcodes9/agsearch@07df1957bc4951dcddc8d544c4f3366ea880647e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/devcodes9
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@07df1957bc4951dcddc8d544c4f3366ea880647e -
Trigger Event:
push
-
Statement type: