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

tmux-ide

v2.7.0

Published

Turn any project into a tmux-powered terminal IDE with a simple ide.yml

Readme

tmux-ide

CI

The terminal that understands your agents.

Other tools rebuild the terminal to understand agents. tmux-ide teaches the terminal you already use to understand them. One command adds a native chrome to any tmux session: a fleet of tabs with live agent-status glyphs, ground-truth working/blocked/done detection, notifications when an agent needs you, and a crash-proof restore that rebuilds your whole fleet — including your Claude conversations. It's built around tmux, so there's nothing to migrate and nothing to lock into.

Install

npm install -g tmux-ide

Global install also registers the bundled Claude Code skill and enables CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 in ~/.claude/settings.json if Claude Code is installed locally.

Quick start

tmux-ide adopt work                    # add the dock to a session you already have
tmux-ide integration install claude    # ground-truth agent status via Claude Code hooks
tmux-ide events --follow               # stream agent-status transitions
tmux-ide unadopt work                  # revert — it was only tmux options

adopt is purely additive tmux configuration. If tmux-ide ever crashes or is uninstalled, your sessions keep running as ordinary tmux — no wrapper process, no lock-in. And because the chrome lives server-side, it renders from any client, including over SSH.

The three-beat story

Adopt in place. tmux-ide adopt <session> drops a status bar onto any existing session: clickable fleet tabs, per-agent glyphs, and [ ⌂ home ] [ ⧉ switch ] [ ? keys ] triggers.

Know your fleet. Install the Claude Code integration and working/blocked/done come from the agent's own lifecycle. A toast fires on every attached client the moment an agent goes blocked or done; per-pane border chips read claude · working. Any agent can self-report with one pane option:

tmux set-option -p @agent_state "working:$(date +%s)"

Survive anything. Continuous snapshots mean a tmux server death isn't a lost afternoon. tmux-ide restore rebuilds every session, window, layout, cwd, and title; --resume-agents revives your Claude conversations from their recorded session ids.

Teams of any agents

Run a heterogeneous fleet — Claude Code, codex, cursor-agent, aider, anything — in one set of sessions, and let them coordinate. Every agent's status is on a shared bus every other agent can read; one agent can task another by typing into its prompt; and any agent can block until a teammate finishes. It's agent-agnostic by design: Claude Code reports automatically, everyone else self-reports with a one-line pane option.

tmux-ide team --json                                   # read the fleet's status
tmux-ide send %2 "implement /login, then run the tests" # task another agent
tmux-ide wait output %2 --match "tests passed"          # block until it finishes
tmux-ide wait agent-status api --status done            # or wait on a whole session

send types straight into another agent's prompt (target by pane ID, title, role, or name; long messages auto-route through a dispatch file). wait exits 0 on match, 1 on timeout, so it scripts cleanly. See the multi-agent teams docs for a worked lead-dispatches-to-codex example.

One app, a keystroke away

Once a session is adopted, the whole UI is a keystroke or two away — one interaction grammar (j/k move, enter opens, / filters, esc backs out, ? asks) and one theme file (~/.tmux-ide/config.json).

Every surface has a prefix twin (prefix then a letter) that works under every keyboard protocol, plus an fast-path for a single keystroke when your terminal allows it. Lead with the prefix — an agent pane can temporarily change how the terminal encodes keys and swallow a root-table Alt bind, but the tmux prefix always reaches tmux. Right-click anywhere opens the actions menu at the pointer.

| Surface | Prefix (always works) | Alt fast-path | | ---------------------------------------------- | --------------------- | -------------- | | Home cockpit — fleet tree, detail, preview | prefix h | ⌥h | | Switch session | prefix j | ⌥p | | Cheat sheet — every key on one page | prefix k | ⌥k | | Actions menu — at the pointer (or right-click) | prefix u | ⌥m | | Sidebar — a fleet nav column | prefix b | ⌥b | | Panels — explorer / changes / config | prefix e g v | ⌥e ⌥g ⌥, |

Optional: describe a layout with ide.yml

Adopt works on any session. If you'd rather have tmux-ide build the layout, scaffold an ide.yml:

tmux-ide init          # auto-detects your stack
tmux-ide               # launch (the session is adopted automatically)
name: my-app
sidebar: true # nav column (prefix b / ⌥b)

rows:
  - size: 70%
    panes:
      - title: Claude
        command: claude
        focus: true
      - title: Shell
  - panes:
      - title: Dev Server
        command: pnpm dev

More

tmux-ide also has a worktree flow (a git worktree plus an adopted session per branch), wait coordination primitives, a --json surface on every command, and an optional task/mission orchestrator for coordinated multi-agent work. See the docs:

  • Getting started and the full docs site
  • Run tmux-ide --help for the complete command list

Requirements

  • tmux — 3.2+ recommended (tmux-ide doctor requires ≥ 3.0; 3.6 is the smoothest)
  • Node.js — ≥ 20
  • Bun — only needed for the TUI surfaces (home cockpit, sidebar, floating panels) when running from a dev checkout. Installed releases ship a compiled tmux-ide-tui binary instead, so no bun runtime is required.

Run tmux-ide doctor to check your machine — the "TUI surfaces" row reports whether they resolve via a dev checkout (bun) or the compiled binary.

TUI surfaces & the compiled binary

The cockpit/sidebar/widget surfaces are OpenTUI/Solid (.tsx). In a dev checkout they run under bun (the bunfig preload supplies the JSX transform). For installed users there is no checkout and often no bun, so those surfaces run from a single self-contained executable built with bun build --compile:

pnpm build:tui   # → packages/daemon/dist/tui/tmux-ide-tui (requires bun to build)

It bundles every surface behind a tmux-ide-tui <surface> [flags] dispatcher, embeds the native OpenTUI dylib, and pre-transforms JSX at build time — so it needs no runtime. The CLI resolves surfaces checkout-first, then a shipped/local compiled binary, then a per-platform binary downloaded on demand.

Per-platform binaries. The npm tarball does not carry the ~70MB binary (a surprise on every install). Instead each release publishes one per platform (darwin-arm64, darwin-x64, linux-x64, linux-arm64) as a GitHub release asset. On a machine with no bun and no shipped binary, fetch the right one on demand:

tmux-ide update --tui-binary   # downloads it to ~/.tmux-ide/bin/ (verified, chmod +x)

Nothing is downloaded automatically on install. tmux-ide doctor's "TUI surfaces" row spells out how surfaces currently resolve on your machine.

Contributor workflow

The repo is a pnpm workspace with a root CLI package and a separate docs app package:

pnpm install --frozen-lockfile
pnpm lint
pnpm format:check
pnpm test
pnpm docs:build
pnpm pack:check

pnpm check is the intended local pre-push command and matches the default release checklist.

Open source project files

License

MIT