Organize and resume AI coding sessions across multiple agents
Terminal session manager that indexes, tags, and resumes every Claude Code, Cursor, Kiro, and Codex session.
1.2.3Add to Favorites
Why it matters
Manage every AI coding session you've ever started across Claude Code, Cursor CLI, Kiro CLI, and Codex by indexing, naming, tagging, searching, and resuming conversations that would otherwise be lost in untitled JSONL files scattered across your filesystem.
Outcomes
What it gets done
Index all AI coding sessions from multiple agents into a searchable SQLite database
Name, tag, and group sessions into projects for easy retrieval
Search across session titles, prompts, directories, projects, and tags
Resume any past coding session from anywhere on your system
Source
Get it from source
Spark does not host a copy of it.
Open sourceReports
Agent outcome reports
No reports yet
Overview
Wallfacer
wallfacer is a terminal session manager that indexes past sessions from Claude Code, Cursor CLI, Kiro CLI, and Codex read-only into its own SQLite database, letting you name, tag, search, and resume them from a TUI or scriptable CLI. Use it when working across multiple AI coding CLIs and needing one organized, searchable way to find and resume past sessions.
What it does
wallfacer is a terminal session manager for Claude Code, Cursor CLI, Kiro CLI, and Codex that lets you see every AI coding session you've ever started, then name, tag, group, search, resume, or delete them, from a full-screen browser or the command line. Each of these tools stores conversations differently and without titles - Claude Code as untitled JSONL under ~/.claude/projects/, Kiro CLI in a flat ~/.kiro/sessions/cli/ folder, Cursor CLI in hash-named directories under ~/.cursor/chats/, Codex by date under ~/.codex/sessions/ - so after a few weeks you end up with dozens of indistinguishable transcripts across four agents. wallfacer indexes them all read-only, never touching the agents' own files, and keeps your titles, tags, and projects in its own local SQLite database.
When to use - and when NOT to
Use wallfacer when you regularly work across Claude Code, Cursor CLI, Kiro CLI, or Codex and need one searchable, organized view of past sessions instead of hunting through each tool's own storage format. It fits both interactive browsing (the TUI) and scripted workflows (the CLI, with --json output), since both read and write the same SQLite index - tag a session in the browser and it's immediately findable with wallfacer list --tag. It is not a replacement for any of the underlying agents; it only indexes and organizes sessions those tools already created, and an adapter for opencode is still on the roadmap rather than supported today.
Inputs and outputs
brew tap pradipta/wallfacer https://github.com/pradipta/wallfacer
brew install pradipta/wallfacer/wallfacer
Also installable with go install github.com/pradipta/wallfacer@latest (requires Go 1.22+), or from prebuilt binaries on the releases page. Running bare wallfacer opens a full-screen interactive browser; running wallfacer <command> runs a one-shot CLI subcommand. Key commands: wallfacer new ~/work/api --title "Fix flaky auth tests" to start a session, wallfacer resume "fix flaky auth tests" to reopen one by title or ID prefix, wallfacer search auth to search titles, prompts, directories, projects, and tags, and wallfacer list --project api --json for scripting. wallfacer rm <ref> moves a session to trash; only --purge deletes it permanently.
Integrations
wallfacer scans each agent's session storage (~/.claude/projects/, ~/.cursor/chats/, ~/.kiro/sessions/cli/, ~/.codex/sessions/), reading only the head of each file for its working directory, timestamps, and first prompt as an automatic title; its own metadata lives separately in SQLite at ~/.local/share/wallfacer/, so deleting that database loses only the organizational overlay, never a conversation. Sync is incremental and runs automatically before every command, so it stays fast with hundreds of sessions. For agents that spread one session across multiple files (Kiro CLI's transcript plus metadata sidecar and scratch directory, Cursor CLI's split chat and transcript), the whole set is deleted together so nothing lingers in the agent's own picker. Other agents plug in through a small adapter interface. Licensed under MIT.
Who it's for
Developers who regularly switch between multiple AI coding CLIs and need one organized, searchable place to find, tag, and resume past sessions instead of digging through each tool's own storage format.
Source README
██╗ ██╗█████╗ ██╗ ██╗ ███████╗█████╗ ██████╗███████╗██████╗
██║ ██║██╔══██╗██║ ██║ ██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗
██║ █╗ ██║███████║██║ ██║ █████╗ ███████║██║ █████╗ ██████╔╝
██║███╗██║██╔══██║██║ ██║ ██╔══╝ ██╔══██║██║ ██╔══╝ ██╔══██╗
╚███╔███╔╝██║ ██║███████╗███████╗██║ ██║ ██║╚██████╗███████╗██║ ██║
╚══╝╚══╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝╚═╝ ╚═╝
wallfacer
A terminal session manager for Claude Code,
Cursor CLI, Kiro CLI and
Codex -
see every AI coding session you've ever started, then
name, tag, group, search, resume, or delete them, from a full-screen browser or straight
from the command line.
Why
Claude Code stores every conversation as an untitled JSONL file under ~/.claude/projects/,
keyed by whatever directory you were in. Kiro CLI does much the same in a single flat~/.kiro/sessions/cli/ folder, Cursor CLI buries each chat in a hash-named directory
under ~/.cursor/chats/, and Codex files its rollouts by date under ~/.codex/sessions/.
After a few weeks you have dozens of transcripts, across four
agents, that you can't tell apart and no way to find the one you need.
wallfacer indexes them all - read-only, it never touches the agents' files - and keeps
your titles, tags, and projects in its own local SQLite database.
Features
- One view of everything - every session, from every directory and every agent, sorted by recency
- Organize - rename sessions, tag them, group them into projects
- Search - across titles, first prompts, directories, projects, and tags
- Launch & resume - start new sessions or jump back into old ones, from anywhere
- Multi-agent - Claude Code, Cursor CLI, Kiro CLI and Codex side by side; pick the agent when
you start a session, filter by it afterwards - Safe deletes -
rmmoves to trash; only--purgeis permanent - TUI and CLI - a full-screen browser for humans, subcommands +
--jsonfor scripts - Extensible - agents are pluggable adapters; opencode is on the roadmap
Install
With Homebrew, on macOS or Linux:
brew tap pradipta/wallfacer https://github.com/pradipta/wallfacer
brew install pradipta/wallfacer/wallfacer
The formula lives in this repository instead of a separate homebrew-wallfacer
tap, which is the only reason the tap needs its URL spelled out. After that,brew upgrade wallfacer works as usual.
Or with Go:
go install github.com/pradipta/wallfacer@latest
Requires Go 1.22+. Pre-built binaries are on the releases page; building from source is
covered in the development guide.
Two ways to use it
wallfacer is one binary with two front ends, and which one you get depends on whether you
pass a subcommand:
| You type | You get |
|---|---|
wallfacer |
The TUI - a full-screen, interactive session browser. Start here. |
wallfacer <command> |
The CLI - one-shot subcommands for scripts and muscle memory. |
They are not separate tools and there is nothing to switch between: both read and write the
same SQLite index, so a session you tag in the browser is immediately findable bywallfacer list --tag, and vice versa. Anything the TUI can do, a subcommand can do too.
(If stdout isn't a terminal - wallfacer | less, or inside a script - the bare command
prints help instead of opening the browser.)
Quick start
Open the browser and work from there:
wallfacer
Or drive it from the shell:
wallfacer new ~/work/api --title "Fix flaky auth tests"
wallfacer resume "fix flaky auth tests" # by title or ID prefix
wallfacer search auth
wallfacer list --project api --json # for scripts
The TUI - wallfacer
Bare wallfacer opens a full-screen session browser: a list on the left, and a detail
pane on the right showing everything wallfacer show prints for whatever is highlighted.
Every row shows its project, tags, directory, age and agent - the same metadatawallfacer list prints. Below ~100 columns the detail pane steps aside and the list
takes the full width.
| Key | Action |
|---|---|
↑/↓ j/k |
move |
/ |
fuzzy filter across titles, projects, dirs, tags and agent names |
P / T / A |
cycle the project / tag / agent filter (wraps back to unfiltered) |
x |
clear the project, tag and agent filters |
tab |
show or hide the detail pane |
enter |
resume - the terminal is handed to the agent; the browser returns when you exit |
n |
new session (asks for the agent, then directory, title, project, tags) |
r / t / p |
rename / edit tags / set project |
d |
delete → trash, with confirmation |
? / q |
help / quit |
The agent step comes first and is a one-line picker: ←/→ or a digit to choose, enter to
go on, esc to back out. Claude Code is preselected, and the step is skipped entirely if only
one adapter is registered.
The CLI - wallfacer <command>
Every subcommand is one-shot: it runs, prints, and exits. Same index as the browser.
| Command | What it does |
|---|---|
wallfacer |
(no subcommand) Open the interactive browser |
wallfacer new [dir] [--agent A] [--title T] [--project P] [--tag t] |
Start a new session in a directory |
wallfacer resume <ref> |
Reopen a session in its original directory |
wallfacer list [--project P] [--tag T] [--agent A] [--json] |
List sessions, newest first; --agent accepts a case-insensitive substring |
wallfacer search <query> |
Search titles, prompts, dirs, projects, tags |
wallfacer show <ref> |
Full details of one session |
wallfacer rename <ref> <title> |
Rename a session |
wallfacer tag add|rm <ref> <tag>… |
Add or remove tags |
wallfacer project set|clear <ref> |
Group sessions into a project |
wallfacer rm <ref> [--purge] [-f] |
Trash a session (--purge deletes permanently) |
wallfacer sync |
Rescan disk (runs automatically before every command) |
<ref> is an ID prefix (resume 5f2) or an exact title (resume "smoke test") - ambiguous
references list the candidates instead of guessing. Sessions started outside wallfacer are
picked up automatically; there's no import step.
How it works
wallfacer scans ~/.claude/projects/, ~/.cursor/chats/, ~/.kiro/sessions/cli/ and~/.codex/sessions/, reading
just the head of each session file for its working directory, timestamps, and first prompt (the
automatic title). Every agent's listing carries the agent type, so wallfacer list shows anAGENT column and --agent narrows to a case-insensitive substring such askiro or cursor. Your metadata lives in SQLite at~/.local/share/wallfacer/ - delete it and you lose only the overlay, never a conversation.
Sync is incremental, so it stays fast with hundreds of sessions.
rm moves a session to wallfacer's trash. For agents that spread one session over several
files - Kiro CLI writes a transcript plus a metadata sidecar, prompt history and a scratch
directory, and Cursor CLI splits a chat between its own directory and a transcript filed under
the project - the whole set travels together, so a deleted session doesn't linger in the
agent's own session picker.
Once a day the browser asks GitHub whether a newer release exists and, if so, mentions it
once on its footer; subcommands repeat that cached answer on stderr, so it never lands in--json output or a pipe. Nothing ever waits for it: the lookup belongs to the browser
because it is the front end that outlives a network round trip, and a subcommand only reads
the cached answer - a file read, no network - so an update that lands late simply shows up
the next time you run wallfacer. The cache lives in the data dir, andWALLFACER_NO_UPDATE_CHECK=1 turns the whole thing off.
Other agents plug in through a small adapter interface - see
docs/adding-an-agent.md.
Roadmap
- Adapters for Claude Code, Cursor CLI,
Kiro CLI and Codex - Adapter for opencode
- A preferred-agent setting, so the picker's default is yours to choose
- Full-text search across session content (SQLite FTS5)
-
wallfacer restore(un-trash from the CLI) - Export a session transcript to Markdown
- Stats (sessions per project/week, disk usage)
- Desktop app - sessions in a sidebar, embedded terminal, multiple tabs
(Wails + xterm.js on top of the same Go internals)
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.