The context-switch tool for Claude Code. Pick up where you left off.
You sit down Monday morning. You had six sessions running across three projects on Friday. claude --resume only shows the current directory. You need the full picture: what was I doing, what did it cost, where did I leave off?
rvu is a TUI that reads every Claude Code session across every project on your machine. Browse them, preview transcripts, see cost/activity/tool breakdowns, then resume — inline, in a new tmux window, or inside a sandboxed container via workmux. One keystroke to pick up where you left off.
Read-only. Never modifies ~/.claude/.
npm install -g @txmxthy/rvu
npx @txmxthy/rvu # or run without installingRequires Node.js 18+ and Claude Code installed (~/.claude/projects/ must exist).
rvu # browse last 7 days
rvu month # last 30 days
rvu --here # only sessions from the current directoryNavigate with j/k, expand a project with Enter or Space, select a session, press Enter to resume it. Press v to preview the transcript first. Press t for trends and analytics.
rvu isn't just a viewer — it's a launcher. When you press Enter on a session, what happens depends on your launcher mode. Press L to cycle:
| Mode | What happens |
|---|---|
| inline | claude --resume <id> takes over your terminal. rvu exits. |
| tmux | Opens a new tmux window with claude --resume. rvu stays alive — flip back and pick another session. |
| workmux | If a worktree exists for the session's branch, reconnects via workmux open --continue. Otherwise creates a new worktree with workmux add — full split-pane layout with shell, hooks, and copied unstaged files. |
| workmux sandbox | Same as workmux but inside a hardened Docker container. Network deny-by-default, no SSH keys, no cloud credentials. |
Set a default with rvu launcher workmux or rvu launcher workmux-sandbox. Persisted to ~/.rvu/config.json.
Live sessions aren't blocked — pressing Enter on a LIVE session automatically forks it via claude --resume <id> --fork-session, creating a new session from the existing transcript without disrupting the running one.
workmux manages git worktrees and tmux windows. rvu integrates with it directly:
- Sessions from
__worktreesdirectories are grouped under their parent project (not scattered as separate entries) - Worktree sessions are tagged with
≡on the branch label and separated by a── worktrees ──divider workmux open --continuereconnects to existing worktrees;workmux add <branch>creates new ones- Sandbox mode passes
--sandboxtoworkmux add, running the agent inside a Docker container
Select any session to see its metrics, computed live from the JSONL transcript:
- Cost, turns, cache-hit %, tokens (input/output/cached)
- Activity breakdown — Code, Debug, Explore, Feat, Refactor, Test, Plan, Agents, etc.
- Model breakdown — Opus / Sonnet / Haiku with cost and call count
- Tool usage — Edit, Read, Bash, Grep, and which shell commands were run
- MCP servers called
Select a project row to see the same metrics aggregated across all its sessions.
Full-screen pager showing every user/assistant turn. Scroll with j/k, g/G for top/bottom. Decide whether to resume without leaving rvu — press Enter to launch directly from the preview.
Unified analytics view in bordered panes:
- Calendar heatmap — GitHub-style grid,
Mto cycle metric - Daily sparklines — cost, sessions, or tokens over 30 days
- Hour of day / Day of week — when and which days you code most
- Activity mix — stacked bars per day (Code/Debug/Explore/etc)
- Model mix — Opus vs Sonnet vs Haiku trend
- Streak + cumulative cost — consecutive active days and running total
Aggregate stats for the current period with a daily cost sparkline:
$808.55 NZD cost 3,490 calls 40 sessions 100% cache hit ▁▂▃▅▆█▅▃▂▁
rvu --since "3 days" # custom range
rvu --branch main # filter by git branch
rvu --project myproject # filter by project name
rvu --here # scope to current directory only
rvu --sort cost # sort by: recent | count | cost | alphaIn the TUI: 1/3 to step through periods (today → 7d → 30d → 3m → 6m → 1y → all), / to search.
rvu status # one-liner: cost · calls · sessions · cache hit
rvu status --since 30d --format json # JSON for scripting
rvu export --format csv # multi-section CSV (Overview, Daily, Activity, Models, Tools, Projects)
rvu export --format json --output usage.json
rvu list --json # session list as JSON
rvu list --since 30d --here # scoped to current directory
rvu summarize --since week # generate 6-10 word LLM titles via claude -p
rvu summarize --limit 10 --force # regenerate, capped
rvu currency GBP # set display currency (auto-detected from locale by default)
rvu currency --reset
rvu launcher workmux # set default launcher
rvu launcher workmux-sandbox # set default to sandboxed workmuxResume sessions inside hardened Docker containers via workmux. Claude gets coding tools but no access to host filesystem (beyond the project), cloud credentials, SSH keys, or internal network.
rvu sandbox setup # build image, configure workmux, detect dotfiles
rvu sandbox doctor # verify prerequisites
rvu sandbox init # scaffold .workmux.yaml in current project
rvu sandbox shell # one-off hardened shell (no workmux needed)Requires Docker and workmux. Auth token (CLAUDE_CODE_OAUTH_TOKEN) must be set in your shell environment.
| Vector | Status |
|---|---|
| Host filesystem | Project directory only. Dotfiles read-only if configured. |
| Git | Local only. No push — no SSH keys or tokens mounted. |
| Cloud (GCP/AWS/K8s) | Blocked. No credentials, no API domains. |
| Docker socket / SSH keys | Not mounted. |
| Network | Deny-by-default egress via iptables. |
| Key | Action |
|---|---|
j/k / ↑↓ |
Navigate |
Enter |
Resume session / toggle project |
v |
Preview transcript |
t |
Trends & calendar |
L |
Cycle launcher: inline → tmux → workmux → workmux sandbox |
Space / h / l |
Collapse / expand project |
/ |
Search |
s |
Cycle sort |
1 / 3 |
Step period shorter / longer |
? |
Help overlay |
q |
Quit |
rvu --demo replaces all project names, paths, branches, and titles with fake data. For screenshots and recordings where you don't want to leak real project names. Deterministic output (same fake data every run).
rvu reads ~/.claude/projects/ — session indexes for fast metadata, JSONL transcripts on-demand when you select a session. Stream-parsed with bounded concurrency to handle 50MB+ files without blowing memory.
Costs use live pricing from LiteLLM (cached 24h at ~/.rvu/pricing.json), falling back to a hardcoded table for current Claude models.
Sessions from workmux __worktrees directories are automatically grouped under their parent project.
Activity classification (13 categories) is purely heuristic — tool patterns + user-message keywords, no LLM calls.
| Variable | Description |
|---|---|
CLAUDE_CONFIG_DIR |
Override Claude data directory (default: ~/.claude) |
CLAUDE_CODE_OAUTH_TOKEN |
Auth token for sandbox containers |
NO_COLOR |
Disable colour (no-color.org) |
RVU_DEBUG |
Enable launcher debug logging to ~/.rvu/launcher.log |
Apache 2.0 — @txmxthy

