Releases: brunos3d/lazy-claude
Release list
v1.3.0
New session from any project
Lazy Claude now starts sessions, not just resumes them.
nstarts a fresh Claude Code session in the highlighted project, from any panel.Ndoes the same with--dangerously-skip-permissionsafter a confirmation.- Both actions also live in the action menu (
x) under Project, and stay disabled while the project directory is missing on disk. - Same round trip as a resume: Claude Code takes the terminal, and Lazy Claude comes back when it exits, landing on the project with the fresh session at the top of its list.
Selection follows focus
The sessions panel always highlights a row, but from the Projects panel you have not chosen it yet. The action menu and the quick shortcuts now treat the session as unselected until Sessions or Details has focus, so browsing projects offers project actions only.
Full changelog: v1.2.0...v1.3.0
v1.2.0: workspace actions, sorting and a resume round trip
The command palette becomes the workspace command surface, sorting and filtering become state you can change, and resuming a session now brings you back.
Actions in the command palette
ctrl+k gains an Actions tab. Open the palette without typing anything and the tabs show your recent searches and every command, so you can find things by browsing instead of remembering that M refreshes metadata.
Searching finds commands by description as well as by name. largest reaches both size sorts and the statistics report. repair reaches the repair command, the health check and the missing-projects filter. archive reaches the archived toggle and unpack.
Twenty five commands in four groups: Sorting, Filters, Workspace and Statistics.
Sorting and filtering
Press s to sort the focused list, or pick a sort from the palette. Sessions order by most recent, oldest, largest, smallest or title in either direction. Projects order by recently active, least recently active, most sessions, largest total size or name.
The order holds until you change it, and the active sort shows on the right of each panel's search row. "Least recently active" is the one worth knowing about: it surfaces the projects you have not touched in months, which is usually the list you want before deciding what to delete.
Filters narrow the projects list to what needs attention: missing on disk, orphaned, or empty. An active filter names itself in the panel title, and esc clears it.
Resuming brings you back
Pressing e or E hands the terminal to Claude Code as before, and now takes it back when Claude Code exits, landing on the session you were just working in. Both resume modes behave the same way. A non-zero exit is reported in the status line on the way back.
Set LAZY_CLAUDE_NO_RETURN to exit on handover instead, which is what you want if you use lazyclaude <path> as a one-shot launcher.
Workspace statistics
A new report covering project counts, live and archived session counts, storage totals and averages, and the five largest projects and sessions. Available from the palette, or as lazyclaude stats [--json].
The action menu is contextual now
x holds only the operations that act on the highlighted project or session, grouped into Session, Project and Dangerous. The seven operations that acted on the whole workspace regardless of what was selected moved to the palette: backup manager, unpack archive, health check, diagnostics, rescan, refresh metadata and prune orphans. Their single-key shortcuts inside the menu are gone; R still rescans globally.
Repair appears in both, because it targets the selected project when that project's directory is missing and otherwise opens a picker over every broken project.
Also in this release
- The palette focuses the tab holding the strongest match rather than always the first, so a command word does not land you on a project whose path happens to contain those letters in order.
- The match counter on each search row reflects a workspace filter, not just a typed query.
- Documentation reorganised around the two command surfaces.
Upgrading
npm install -g lazy-claude-tui@1.2.0Nothing about the on-disk format changed, so no migration is needed. Sorts and filters are per-session state and reset when you quit.
v1.1.0
Find and resume Claude Code sessions from the terminal, and keep the project data behind them healthy.
This release adds a global command palette, names the window while the TUI owns the terminal, and rewrites the README around using the project.
Install
npm install -g lazy-claude-tui
pnpm add -g lazy-claude-tui
yarn global add lazy-claude-tui
bun add -g lazy-claude-tuiOr run it without installing:
npx lazy-claude-tuiRequires Node.js 18 or newer.
Command palette
ctrl+k opens a search over every project and session on the machine, live and archived, separate from the per-panel / search. Type a few characters, press enter, and the interface jumps to the result: it selects the project, loads its sessions, highlights the session, and focuses the right panel. Jumping to an archived session flips the list to the archived view first.
Results are grouped into categories with a tab bar under the input, and the active tab owns the whole result area. Nothing is capped, so a query that matches 300 sessions gives you all 300 in a scrollable list rather than a truncated top ten. A category with no hits has no tab, so you can never land on an empty one, and each tab keeps its own cursor and scroll position. tab and shift+tab cycle categories, pgup and pgdn page, ctrl+u clears, esc closes. Recent searches appear when the input is empty.
The palette navigates and nothing else. Operations stay in the action menu (x).
Underneath it is a provider architecture. SearchIndexer builds one in-memory index of the workspace in the background, so opening the palette never triggers indexing and never waits for it. Adding a searchable entity means writing a provider and registering it; the palette and the engine do not change. A ConversationProvider ships registered and disabled, which is where message search will land.
Terminal title
The TUI sets the window title to "Lazy Claude" while it owns the terminal, and restores whatever the shell had set on exit. It pushes and pops the terminal's own title stack, so quitting does not leave a stale title behind or blank the one you had. Windows consoles ignore the escape sequences, so process.title is set as well.
Command names
The commands are now lazyclaude, lazy-claude, lazy-claude-tui, and lzc. All four run the same binary.
Note
lazyclaude was removed in 1.0.1 and is back in this release as the main command. The unrelated lazyclaude package ships a binary with the same name, so installing both globally leaves one silently overwriting the other. If you use that package, install this one and stick to lazy-claude or lzc.
Documentation
The README is rewritten around using the project rather than describing its internals. It now covers the command palette, the session inspector tabs, the action menu, and every keyboard shortcut, none of which were documented before, with screenshots next to the features they show and a table of contents.
Internals moved to docs/architecture.md: the layer separation, the on-disk format, journaled mutations, session parsing and caching, the overlay system, and the search engine.
Also in this release
- The action menu is responsive and scrollable, so it stays usable in short terminals
- Ranking is shared between the palette and the panel searches: exact beats prefix beats substring beats subsequence, with the fuzzy score breaking ties
- 42 tests covering ranking, the search engine, the workspace indexer, providers, jump planning, and overlay windowing
Full changelog: v1.0.1...v1.1.0
v1.0.1
Find and resume Claude Code sessions from the terminal, and keep the project data behind them healthy. A keyboard-driven TUI in the spirit of LazyGit, plus a CLI that exposes the same operations for scripts.
Install
npm install -g lazy-claude-tui
pnpm add -g lazy-claude-tui
yarn global add lazy-claude-tui
bun add -g lazy-claude-tuiOr run it without installing:
npx lazy-claude-tuiThe commands are lazy-claude and the short alias lzc. Requires Node.js 18 or newer.
What it does
Sessions are listed under the real titles Claude Code writes, next to their branch, age, and size, instead of bare UUIDs. Fuzzy search narrows hundreds of sessions in a few keystrokes (lz finds lazy-claude, vrt finds vortex-platform), the inspector shows what a session actually did across four tabs (statistics, conversation preview, activity timeline, file activity), and e hands the terminal over to claude --resume in that project's own directory.
It also owns the data underneath. Claude Code derives each storage path from the project's absolute path, so a plain mv orphans every session that belonged to it. Lazy Claude moves projects with their history intact, including nested sub-projects and worktrees, repairs references after a move that already happened, archives and prunes what is no longer needed, packs a project and its sessions into a portable .claudepack, and backs up the history index before every change. Every destructive operation supports --dry-run and confirms with the exact planned steps.
Everything in the TUI is also a CLI command, sharing the same service layer: list, sessions, show, search, info, doctor, verify, move, repair, prune, remove, pack, unpack, backup, and session.
Implemented natively in TypeScript. No shell-outs, no dependency on other tools.
Changes in 1.0.1
The package is published as lazy-claude-tui, since lazy-claude was too close to the unrelated lazyclaude package.
The lazyclaude binary alias has been removed. That package already ships a binary with the same name, so installing both globally would have left one silently overwriting the other. The commands are now lazy-claude and lzc.
Installation instructions for npm, pnpm, yarn, and bun were added to the README.