{"slug": "show-hn-wallfacer-a-terminal-session-manager-for-claude-code", "title": "Show HN: Wallfacer: A terminal session manager for Claude Code", "summary": "Developer Pradipta released Wallfacer, a terminal session manager for Claude Code that indexes all AI coding sessions stored as untitled JSONL files under ~/.claude/projects/ into a local SQLite database, allowing users to name, tag, group, search, resume, or delete sessions from a TUI or CLI. The tool is read-only on Claude's files, supports safe deletes via trash, and is available as a single Go binary for macOS and Linux via go install or pre-built releases.", "body_md": "\n\n```\n██╗    ██╗█████╗  ██╗     ██╗     ███████╗█████╗   ██████╗███████╗██████╗\n██║    ██║██╔══██╗██║     ██║     ██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗\n██║ █╗ ██║███████║██║     ██║     █████╗  ███████║██║     █████╗  ██████╔╝\n██║███╗██║██╔══██║██║     ██║     ██╔══╝  ██╔══██║██║     ██╔══╝  ██╔══██╗\n╚███╔███╔╝██║  ██║███████╗███████╗██║     ██║  ██║╚██████╗███████╗██║  ██║\n ╚══╝╚══╝ ╚═╝  ╚═╝╚══════╝╚══════╝╚═╝     ╚═╝  ╚═╝ ╚═════╝╚══════╝╚═╝  ╚═╝\n```\n\nA terminal session manager for [Claude Code](https://claude.com/claude-code) — see every AI coding\nsession you've ever started, then **name, tag, group, search, resume, or delete** them, from a\nfull-screen browser or straight from the command line.\n\nClaude Code stores every conversation as an untitled JSONL file under `~/.claude/projects/`\n\n,\nkeyed by whatever directory you were in. After a few weeks you have dozens of transcripts you\ncan't tell apart and no way to find the one you need.\n\nwallfacer indexes them all — **read-only, it never touches Claude's files** — and keeps your\ntitles, tags, and projects in its own local SQLite database.\n\n**One view of everything**— every session, from every directory, 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** Safe deletes**—`rm`\n\nmoves to trash; only`--purge`\n\nis permanent**TUI and CLI**— a full-screen browser for humans, subcommands +`--json`\n\nfor scripts**Extensible**— agents are pluggable adapters; Codex, opencode, Cursor CLI, and kiro-cli are on the roadmap\n\n```\ngo install github.com/pradipta/wallfacer@latest\n```\n\nRequires Go 1.22+. Pure Go, no CGO — macOS and Linux. Pre-built binaries are on the\n[releases page](https://github.com/pradipta/wallfacer/releases); building from source is\ncovered in the [development guide](/pradipta/wallfacer/blob/main/docs/development.md).\n\nwallfacer is one binary with two front ends, and which one you get depends on whether you pass a subcommand:\n\n| You type | You get |\n|---|---|\n`wallfacer` |\nThe TUI — a full-screen, interactive session browser. Start here. |\n`wallfacer <command>` |\nThe CLI — one-shot subcommands for scripts and muscle memory. |\n\nThey are not separate tools and there is nothing to switch between: both read and write the\nsame SQLite index, so a session you tag in the browser is immediately findable by\n`wallfacer list --tag`\n\n, and vice versa. Anything the TUI can do, a subcommand can do too.\n\n(If stdout isn't a terminal — `wallfacer | less`\n\n, or inside a script — the bare command\nprints help instead of opening the browser.)\n\nOpen the browser and work from there:\n\n```\nwallfacer\n```\n\nOr drive it from the shell:\n\n```\nwallfacer new ~/work/api --title \"Fix flaky auth tests\"\nwallfacer resume \"fix flaky auth tests\"    # by title or ID prefix\nwallfacer search auth\nwallfacer list --project api --json        # for scripts\n```\n\nBare `wallfacer`\n\nopens a full-screen session browser: a list on the left, and a detail\npane on the right showing everything `wallfacer show`\n\nprints for whatever is highlighted.\n\nEvery row shows its project, tags, directory, age and agent — the same metadata\n`wallfacer list`\n\nprints. Below ~100 columns the detail pane steps aside and the list\ntakes the full width.\n\n| Key | Action |\n|---|---|\n`↑/↓` `j/k` |\nmove |\n`/` |\nfuzzy filter across titles, projects, dirs and tags |\n`P` / `T` |\ncycle the project / tag filter (wraps back to unfiltered) |\n`x` |\nclear the project and tag filters |\n`tab` |\nshow or hide the detail pane |\n`enter` |\nresume — the terminal is handed to the agent; the browser returns when you exit |\n`n` |\nnew session (prompts for directory, then title, project, tags) |\n`r` / `t` / `p` |\nrename / edit tags / set project |\n`d` |\ndelete → trash, with confirmation |\n`?` / `q` |\nhelp / quit |\n\nEvery subcommand is one-shot: it runs, prints, and exits. Same index as the browser.\n\n| Command | What it does |\n|---|---|\n`wallfacer` |\n(no subcommand) Open the interactive browser |\n`wallfacer new [dir] [--title T] [--project P] [--tag t]` |\nStart a new session in a directory |\n`wallfacer resume <ref>` |\nReopen a session in its original directory |\n`wallfacer list [--project P] [--tag T] [--json]` |\nList sessions, newest first |\n`wallfacer search <query>` |\nSearch titles, prompts, dirs, projects, tags |\n`wallfacer show <ref>` |\nFull details of one session |\n`wallfacer rename <ref> <title>` |\nRename a session |\n`wallfacer tag add|rm <ref> <tag>…` |\nAdd or remove tags |\n`wallfacer project set|clear <ref>` |\nGroup sessions into a project |\n`wallfacer rm <ref> [--purge] [-f]` |\nTrash a session (`--purge` deletes permanently) |\n`wallfacer sync` |\nRescan disk (runs automatically before every command) |\n\n`<ref>`\n\nis an ID prefix (`resume 5f2`\n\n) or an exact title (`resume \"smoke test\"`\n\n) — ambiguous\nreferences list the candidates instead of guessing. Sessions started outside wallfacer are\npicked up automatically; there's no import step.\n\nwallfacer scans `~/.claude/projects/`\n\n, reading just the head of each session file for its\nworking directory, timestamps, and first prompt (the automatic title). Your metadata lives in\nSQLite at `~/.local/share/wallfacer/`\n\n— delete it and you lose only the overlay, never a\nconversation. Sync is incremental, so it stays fast with hundreds of sessions.\n\nOther agents plug in through a small adapter interface — see\n[docs/adding-an-agent.md](/pradipta/wallfacer/blob/main/docs/adding-an-agent.md).\n\n- Adapters for more agents:\n[Codex](https://github.com/openai/codex),[opencode](https://github.com/sst/opencode), Cursor CLI, kiro-cli - Full-text search across session\n*content*(SQLite FTS5) -\n`wallfacer restore`\n\n(un-trash from the CLI) - Export a session transcript to Markdown\n- Stats (sessions per project/week, disk usage)\n- Desktop app — sessions in a sidebar, embedded terminal, multiple tabs (Wails + xterm.js on top of the same Go internals)\n\nSee the [development guide](/pradipta/wallfacer/blob/main/docs/development.md) for building, testing, and releasing.\nContributions welcome — especially new agent adapters.\n\n*The name is borrowed from the Wallfacers of Liu Cixin's* The Dark Forest *— people entrusted\nwith plans too sprawling for anyone else to follow.*", "url": "https://wpnews.pro/news/show-hn-wallfacer-a-terminal-session-manager-for-claude-code", "canonical_source": "https://github.com/pradipta/wallfacer", "published_at": "2026-07-29 12:32:14+00:00", "updated_at": "2026-07-29 12:52:50.096631+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "large-language-models"], "entities": ["Pradipta", "Claude Code", "Wallfacer", "SQLite", "Go"], "alternates": {"html": "https://wpnews.pro/news/show-hn-wallfacer-a-terminal-session-manager-for-claude-code", "markdown": "https://wpnews.pro/news/show-hn-wallfacer-a-terminal-session-manager-for-claude-code.md", "text": "https://wpnews.pro/news/show-hn-wallfacer-a-terminal-session-manager-for-claude-code.txt", "jsonld": "https://wpnews.pro/news/show-hn-wallfacer-a-terminal-session-manager-for-claude-code.jsonld"}}