single static go binary · zero dependencies

All your coding-agent history, unified.

You solved this exact thing last week. Which agent was it in? The session's still on disk — you just can't get back to it.

seshy can. Run it in any repo for one fuzzy-searchable list of every past agent session that ran there — seven agents, newest first, color-coded. Hit Enter and you're back in the real conversation, full context.

And the list is just the start: seshy search greps every agent's history, seshy all spans every repo on the machine, and it all pipes to JSON.

seshy — ~/repos/control-panel
~/repos/control-panel · 23 sessions · 7 agents
filter › deploy
2m ago claude stop the deploy. i lied in the PR description.
1h ago codex deleted prod. it's fine. it's fine. is it fine?
3h ago droid i force pushed to main and now there's a meeting about me
5h ago agy undo a force push WITHOUT anyone knowing (URGENT)
1d ago opencode the tests didn't pass. can you just delete the tests
2d ago grok i committed all the API keys to a public repo. yesterday.
↑↓ move / filter p preview h headless resume q quit

Every session carries its exact resume command — pipe it to jq, fzf, or your own agents.

Which agent did you use on this repo last?

You bounce between Claude, Codex, Droid and the rest — then a week later can't recall which CLI you were in when you fixed that thing. Run seshy in the repo and every past session is right there, newest-first and color-coded by agent. No spelunking through ~/.claude and six other folders.

  • RUNseshy, in the repo. Every past session that ran there, across every agent, in one list.
  • FINDType to filter. Fuzzy-match the prompt, agent, or repo. p previews the first prompt and last message.
  • RESUMEHit Enter. seshy execs that agent's own resume command — the real thread, right where you left off.

Every agent you run.

Native session format in, native resume out — no exporting, no lock-in. seshy reads each tool's store read-only and never touches your history.

Claude Code
Codex
Grok
pi
OpenCode
Antigravity
Droid

All seven in one list, color-coded — or narrow to one with --agent.

Enter doesn't open an export. It opens the session.

seshy execs the agent's own resume command — claude --resume, codex resume — in the right directory, and gets out of the way. The agent restores its own full context. The real thread, lossless, not a summary.

Press p first to be sure: the pane shows the session's first prompt, its last message, and the exact resume command — so you land in the right conversation, not a guess.

Claude2m ago
resume claude --resume 9f3a…c1
dir ~/repos/control-panel
id 9f3a…c1
claude-opus-4·33 turns
FIRST PROMPT
stop the deploy. i lied in the PR description — the migration is not reversible, roll it back before it ships.
LAST · assistant
Deploy halted and the migration reverted on staging. Added a guard so an irreversible migration cannot ship without --force. You are clear.

Every repo on the machine.

seshy all is the same picker, machine-wide: the most recent sessions across every repo, fuzzy-filterable by repo name so you can jump to any project from anywhere. It pages as you scroll — the header shows how much is loaded — and stays instant with thousands of sessions.

seshy all
showing 50 of 1,284 · all repos
filter › panel
2m agoclaudecontrol-panel · wire the alerts digest
1h agocodexcontrol-panel · add /health endpoint
3h agodroidcontrol-panel · fix the schedule worker
↑↓ move/ filter resumescroll to load more

Even the runs the CLIs bury.

Headless and automated runs — claude -p, codex exec — never show up in the native CLIs at all. seshy lists them by default and resumes them like anything else, so your scripted work stays findable. Want a cleaner view? Press h to hide them, or set it in config — it persists.

seshy — config
# headless runs show by default — resume them like any session
 
$ seshy config set hideCodexExec true
ok · codex exec now hidden
 
# or just press h in the picker to toggle.

Your history just became infrastructure.

One unified index over seven agents' sessions — and three ways to use it. You fuzzy-find it. Your agents search it. Your scripts pipe it.

seshy doesn't do semantic search — it's why your agent can.

Your agents search it.

The bundled Agent Skill turns "find where we set up the rate limiter" into several literal searches over seshy's fast index. The agent expands your intent, reads the excerpts, judges relevance, and hands back the right thread with its resume command. Semantic recall — with no model, no vector store, no daemon in seshy itself.

agent — tracing your history
you: where did we set up the rate limiter?
 
seshy search "rate limit" -i
3 matches · claude, codex
 
claude · ~/repos/api · 3d ago
…a token-bucket RATE LIMIT on /login…
claude --resume 71b0…4e

Your scripts pipe it.

list, sessions, and search print JSON the moment they're piped — each record carrying its native resume command. seshy sessions is the uncapped, machine-wide index, built without reading file contents. Shape it with -o table|json|ndjson.

seshy — piped to jq
$ seshy list ~/app | \
jq -r '.sessions[] | .resume'
 
claude --resume 9f3a…c1
codex resume 71b0…4e
droid --resume a2d8…90
 
# pick one, run it, you're back in.

Everything seshy can do.

Seven agents, every subcommand, a few composable flags — one static binary that's as happy in a pipe as in your hands.

Interactive picker

seshy [path] opens a fuzzy-searchable TUI for a directory. ↑↓ move, / filter, p preview, resume, q quit.

Jump to the latest

seshy last [path] instantly resumes the most recent session in a directory — no picker, no clicks.

Every repo, paged

seshy all shows the most recent sessions across every repo on the machine. The picker pages in more as you scroll, so it stays instant with thousands of sessions.

Readable table

seshy list [path] prints a clean table in the terminal, and flips to JSON the moment it's piped.

Digest for agents

seshy summary [path] condenses a project's sessions into a compact digest an agent can read at a glance.

Content search

seshy search <pattern> searches across all agents and prints an excerpt plus the resume command per hit. Supports -i and --regex.

Uncapped JSON index

seshy sessions emits every session across all agents and repos as JSON — path, agent, dir, mtime, id, resume — without reading file contents.

Preview pane

Toggle p in any picker to see the first prompt, the last message, and the exact native resume command before you commit.

Read-only by design

seshy never writes to your history. Picking a session simply execs the agent's own resume command in the right directory.

Headless runs, surfaced

See and resume the headless, automated runs the native CLIs bury — claude -p / Agent-SDK and codex exec. Shown by default; press h (or set hideClaudeHeadless / hideCodexExec) to hide them when you want a clean list.

Flags that compose

Scope and shape any command with -C/--cwd, --all, --agent, -n/--num, and -o/--format.

Agent Skills, included

Bundled seshy and conversation-search skills — your agent finds, summarizes, and resumes past sessions itself, semantically.

No daemon. No database. No write access.

seshy is deliberately boring infrastructure: a read-only lens over the session files already on your disk.

Zero dependencies

A single static Go binary. No runtime, no daemons, nothing running in the background.

Read-only by design

seshy reads each agent's store natively and never writes to it. Your history stays exactly where the agents put it.

Zero config required

Install it, run it. The only file seshy owns is its own config — and only if you set something.

Free & open source

MIT-licensed at github.com/buddyh/seshy. Read every line it runs on your history.

Install seshy.

A single static binary with zero dependencies. Pick the path that fits your setup.

Homebrew

macOS & Linux, kept up to date.

$ brew install buddyh/tap/seshy

Go

Build from source with the Go toolchain.

$ go install github.com/buddyh/seshy@latest
View on GitHub Read the docs github.com/buddyh/seshy