npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@txmxthy/rvu

v0.1.0

Published

Global TUI session browser for Claude Code — review and resume any past session

Readme

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/.

Install

npm install -g rvu
npx rvu                # or run without installing

Requires Node.js 18+ and Claude Code installed (~/.claude/projects/ must exist).

Quick start

rvu                  # browse last 7 days
rvu month            # last 30 days
rvu --here           # only sessions from the current directory

Navigate 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.

How resume works

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 integration

workmux manages git worktrees and tmux windows. rvu integrates with it directly:

  • Sessions from __worktrees directories 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 --continue reconnects to existing worktrees; workmux add <branch> creates new ones
  • Sandbox mode passes --sandbox to workmux add, running the agent inside a Docker container

What you see

Preview pane

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.

Transcript preview (v)

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.

Trends & calendar (t)

Unified analytics view in bordered panes:

  • Calendar heatmap — GitHub-style grid, M to 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

Overview banner

Aggregate stats for the current period with a daily cost sparkline:

$808.55 NZD cost  3,490 calls  40 sessions  100% cache hit   ▁▂▃▅▆█▅▃▂▁

Filtering

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 | alpha

In the TUI: 1/3 to step through periods (today → 7d → 30d → 3m → 6m → 1y → all), / to search.

CLI commands

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 workmux

Sandbox

Resume 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. |

Keys

| 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 |

Demo mode

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).

How it works

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.

Environment variables

| 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 |

License

Apache 2.0 — @txmxthy