ezvibe-light
v0.1.10
Published
Lightweight TUI for managing Claude Code sessions and ideas
Maintainers
Readme
You're running 5 Claude Code sessions across 3 projects. Terminal tabs everywhere. You forgot which one was the auth refactor. The API plan? Buried in ~/.claude/. Your notes? Gone.
One command. All your sessions. All your context.
npx ezvibe-light┌─ Ideas ───────┬─ Detail ─────────────────┐
│ ? EXPLORING │ │
│ > Auth Refac… │ > Auth Refactor │
│ API Client │ │
│ │ Stage: implementing │
│ # PLANNING │ Path: ~/projects/auth │
│ DB Schema │ Session: ● running │
│ │ │
│ > IMPLEMENTING│ Notes (2) │
│ Login Page │ - Check migration script │
│ ● running │ - Update JWT config │
│ * DONE ├──────────────────────────┤
│ Dark Theme │ [1]CLAUDE.md [2]Memory │
│ ○ stopped │ [3]Plans │
└───────────────┴──────────────────────────┘
[n]ew [Enter]attach [s]tage [Tab]panel [q]uitQuick Start
npx ezvibe-lightNo build step. No config files. No browser. No compilation. Just works.
Requires Node.js 18+, tmux, and Claude Code
# tmux
brew install tmux # macOS
sudo apt install tmux # Ubuntu/Debian
# Claude Code
npm install -g @anthropic-ai/claude-codeThe Workflow
Press 'n' Press Enter Press Ctrl-b d
│ │ │
Name your idea → Claude Code launches → Back to EZVibe Light
Pick a project in a tmux session Session keeps running
Full terminal access Switch to another ideaThe key insight: tmux sessions are immortal. Close your terminal, lose SSH, reboot — your Claude Code sessions are still there, right where you left them.
Switching Between Sessions
This is the core loop:
Enter— Jump into a Claude Code sessionCtrl-b d— Detach. Back to EZVibe Light. Claude keeps running in the background.j/k— Select another ideaEnter— Jump into that session
All sessions run simultaneously. Switch between them in seconds.
Full Lifecycle
n— Create an idea. Name it, pick a project from~/.claude/projects/Enter— Launch Claude Code (or reattach to an existing session)Ctrl-b d— Detach. Switch to another idea. Repeat.s— Move through stages:exploring→planning→implementing→doneTab— Browse CLAUDE.md, memory files, and plans without leaving the TUI
Why Not Terminal Tabs?
| | Terminal tabs | EZVibe Light |
|---|---|---|
| Which session is which? | You don't know | Idea names + stages + status |
| Claude's plans/memory | Another terminal, cat files | Press Tab |
| Track progress | Sticky notes? | Built-in lifecycle |
| Session persistence | Close tab = gone | tmux = immortal |
| Notes on a task | Open a text editor | Press a |
Why Not EZVibe (Web)?
Same family, different philosophy.
| | EZVibe | EZVibe Light | |---|---|---| | Install | Minutes (C++ compilation) | Instant | | Runtime deps | 15+ including native modules | 3 (pure JS) | | Bundle | Multi-MB Next.js | 43 KB | | Over SSH | No (needs browser) | Yes | | Form factor | Browser dashboard | Your terminal |
Want WebGL terminals and dashboards? Use EZVibe. Want something that starts before you finish blinking? Use EZVibe Light.
Keyboard Shortcuts
Every action is one keypress. No menus. No mouse. Press ? for the full list.
Sessions
| Key | Action |
|---|---|
| Enter | Attach Claude Code session (creates one if none exists) |
| Ctrl-b d | Detach — back to EZVibe Light, session keeps running |
| x | Kill session |
Ideas
| Key | Action |
|---|---|
| j / k | Navigate up / down |
| n | New idea (guided wizard) |
| s / S | Cycle stage forward / backward |
| e | Edit name |
| d | Delete (with confirmation) |
| p | Set project path |
| a | Add a note |
Panels
| Key | Action |
|---|---|
| Tab | Cycle: Detail → Context → Notes |
| 1 2 3 | Context tabs: CLAUDE.md / Memory / Plans |
Architecture
43 KB bundle. 3 dependencies. Single process.
┌────────────────────────────────────────────┐
│ Ink (React for CLI) TUI rendering │
│ CommandRegistry Extensible keys │
│ Wizard state machine Multi-step flows │
│ tmux Session immortality│
│ JSON file Zero-config store │
│ ~/.claude/ reader Plans + memory │
└────────────────────────────────────────────┘No Express. No WebSocket. No webpack. Just Node.js talking to tmux.
Data
~/.ezvibe-light/
└── data.json # Ideas, sessions, notes — human-readable JSONBack it up, version-control it, edit it by hand. It's just a file.
Extensibility
Add commands without touching the core:
commands.register({
name: 'my-action',
key: 'g',
description: 'Do something cool',
canExecute: (ctx) => !!ctx.selectedIdea,
execute: (ctx) => { /* your logic */ },
});Multi-step flows use a wizard state machine:
wizard.start({
steps: [
{ type: 'input', key: 'name', prompt: 'Name:' },
{ type: 'project-picker', key: 'path', prompt: 'Project:' },
],
onComplete: (results) => createIdea(results.name, results.path),
});Development
git clone https://github.com/JayCheng113/EZVibe-Light.git
cd EZVibe-Light
npm install # 3 seconds, zero compilation
npm run dev # watch mode
npm run build # production build (43 KB)
npm test # 43 tests, 5 suites| Suite | Tests | Covers |
|---|---|---|
| store.test.ts | 16 | CRUD, persistence, cascading deletes |
| tmux.test.ts | 14 | Command construction, session lifecycle |
| commands.test.ts | 6 | Registration, guards, key resolution |
| wizard.test.tsx | 3 | Step progression, completion, cancellation |
| e2e.test.tsx | 4 | Full app rendering, shortcuts, overlays |
License
MIT
