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

batonsh

v0.3.9

Published

One terminal for all your coding agents — Claude Code, Codex, OpenCode and more, working as a team

Readme


What is Baton?

You probably use one coding agent at a time: you open Claude Code or Codex, give it a task, and watch. Baton lets you use several at once, as a team, in one window.

  • You describe what you want, in plain words.
  • An orchestrator (one of your agents) plans the work and hands pieces to workers: other agents, from any vendor, each in its own copy of your project.
  • The workers can talk to each other, and their work gets reviewed by a different vendor. It lands in your project only after your tests pass.
  • You see everything live: every command, every edit and every message. Anything that needs you waits in one inbox.

Baton doesn't replace your agents or their logins. It runs the ones you already have, with your own accounts. It's free and open source (MIT), and nothing leaves your machine except the calls your agents already make.

Install

curl -fsSL https://raw.githubusercontent.com/k6w/baton/main/install.sh | sh    # macOS, Linux
irm https://k6w.github.io/baton/install.ps1 | iex                             # Windows (PowerShell)
brew install k6w/tap/baton        # Homebrew (macOS, Linux)
npm install -g batonsh            # npm (any Node ≥ 18; macOS, Linux, Windows)

From source, with Bun ≥ 1.3:

git clone https://github.com/k6w/baton && cd baton
bun install && bun run build      # → dist/baton

The installers download one file (baton, or baton.exe) for your system, check its SHA-256 against the release, and put it on your PATH (~/.local/bin, or %LOCALAPPDATA%\baton\bin). baton update keeps it current.

Your first five minutes

1. See what Baton found on your machine

baton doctor

It lists your agents (installed? signed in?), your terminal's features, and anything to fix. An agent that isn't signed in? baton login claude (or codex, opencode, …) runs that agent's own sign-in.

2. Try it with simulated agents (free, no tokens)

baton demo

Type any task and press Enter. A pretend team plans, edits, chats and asks for approval, so you can learn the screen without spending anything. ? shows every key, and /guide has short lessons.

3. Use it on your project

cd my-project
baton

The first run sets the folder up: it finds your agents and your test command, and writes a small .baton/config.toml. Then just ask:

add rate limiting to the login endpoint, with tests

Pick any agents you like. With two vendors (say Claude Code and Codex), each one reviews the other's work.

How it works

   you ──► orchestrator ──► claude-1 ─┐
              (plans)       codex-1  ─┼─ each in its own git worktree
                            gemini-1 ─┘   they message each other on the bus
                               │
                 review by a different vendor ─► your checks pass ─► merged into your project

| | | |---|---| | Orchestrator | The lead agent. It reads your request, plans it, picks agents and models, and lands their work. You can talk to it, or to any agent directly with @name. | | Workers | Every worker gets a git worktree: a private copy of your project, including your uncommitted changes. Workers can't step on each other or on you. | | Bus | Agents message each other ("I'm taking the API, can you do the CSS?"). Results flow back to whoever asked automatically. | | Reviews | Before a merge, an agent from another vendor reviews the diff. Two models catch more than one. | | Merge | A 3-way merge into your working tree, after your checks (workspace.verify) pass. Your branch and staged changes are never touched, and /undo reverts a merge. | | Inbox | Approvals, plans to confirm, stuck agents, conflicts: everything that needs you is in one place (ctrl+a). |

The full tour, in plain words: How Baton works.

Roles, skills and team memory

Workers are only as good as their brief, so Baton helps the lead write a good one:

  • Roles: tester, reviewer, debugger, refactorer, docs, security, researcher, frontend, or your own in .baton/roles/*.md. Each brings instructions, an access level (read-only roles can't edit, even in YOLO), a model size and a "done when" check. /spawn tester starts one.
  • Acceptance checks: the lead sets a command (bun test src/auth), and Baton runs it when the worker finishes. The work counts only when it passes; the worker gets two more tries.
  • Skills: .baton/skills/<name>/SKILL.md (or your .claude/skills). Every agent sees what's available and loads what it needs. Works with Codex, OpenCode and Gemini too, not just Claude.
  • Team notes (opt-in): facts agents learn ("tests need DB_URL") go into .baton/notes.md, and every new worker starts with them.

Each one has its own switch: baton features notes on, or /settings → Team features. Switched off, the agents never hear of it. /roles, /skills, /notes, /team <name> in the app. All of it: roles, skills and notes.

How much freedom agents get

One dial controls every agent at once, the lead and the workers, even while they run. Press shift+tab to turn it.

| Mode | What agents may do without asking you | |---|---| | ◆ normal | each agent's own defaults: reads and edits are fine, risky commands ask | | ↯ auto | anything inside your project; destructive commands still ask | | ▲ yolo | everything, no prompts, no sandbox. Your deny rules still apply | | ◇ ask | nothing: every edit and command waits for you |

Rules you write (for example "never git push") hold in every mode. Commands from untrusted repos need baton trust first.

Everyday keys

| Key | What it does | |---|---| | Enter | send a message to the orchestrator (@codex-1 … talks to one agent) | | ctrl+a | inbox: everything that needs you (ctrl+y approves the oldest) | | tab | move to the agents, then z zoom · space peek & reply · esc back | | ctrl+d | changes: every agent's diff, merge or review it | | ctrl+g | the plan: tasks, owners, progress (editable) | | ctrl+p | command palette: search everything | | ctrl+s · ctrl+t | settings · themes | | ? | all keys (every one can be changed) |

Slash commands: /merge all · /undo · /review codex-1 · /spawn claude 2 tests · /style · /costs · /history · /guide. Press / to see them all.

Works with the agents you already use

| Agent | How Baton talks to it | |---|---| | Claude Code | Agent SDK (your Claude Code login or API key) | | Codex | codex app-server (your ChatGPT login or API key) | | OpenCode | opencode serve | | Gemini, Cursor, Copilot, Goose, Kiro, Qwen, Cline, Kimi, Droid, … | Agent Client Protocol | | Aider, Crush and any other CLI | in a terminal session (PTY) | | Remote agents | A2A | | Baton's own agent | built in: any model provider, local models too |

Each agent is driven through its real interface (not by scraping its screen), so you see proper tool calls, diffs, costs and approvals from all of them. Adding your own takes a few lines of config: agents & providers.

Beyond the terminal

  • Phone: baton web --lan shows a QR code. Follow along, approve and send tasks from your phone, with one-tap approve/deny from notifications (ntfy, Slack).
  • Scripts and CI: baton run "update the changelog" --approve all --json.
  • From other tools: baton mcp lets Claude Desktop, Cursor or any MCP client hand tasks to your team. baton a2a serves it to other agents.
  • GitHub: baton issue 42 starts from an issue, and /pr opens a draft pull request from what was merged.
  • History: every run is saved. baton --continue (or ctrl+r in the app) resumes one, baton replay plays it back, and baton export writes Markdown or HTML.
  • Track record: Baton learns which agent is good at what in your project (/scores), and the orchestrator uses that to pick who does what.

Make it yours

  • Looks: 11 styles (/style) and ~50 themes (ctrl+t), all meeting WCAG contrast, and any combination works. /background terminal keeps your terminal's own (even transparent) background.
  • Layouts: grid, list, focus, swarm, wide (ctrl+l).
  • Everything else: budgets, models per task size, approval rules, notifications, sounds, key bindings. ctrl+s has it all with explanations, or edit .baton/config.toml (configuration).

Documentation

| Start here | Go deeper | Reference | |---|---|---| | Quickstart | Roles, skills & notes · Workspaces & reviews | Configuration · Command line | | How Baton works | Agents & providers | Keybindings | | Troubleshooting & FAQ | Phone & web · Teams & GitHub | Themes & styles | | | The Baton agent · A2A | SDK & protocol · Changelog |

All of it is also on the website: k6w.github.io/baton.

FAQ

Baton is free. Your agents cost what they always do, on your own plans and keys. ctrl+e shows spend per agent, and budgets (budget.run_usd) stop work at a limit.

No. One works fine: the orchestrator can run several copies of the same agent in parallel. Two vendors add cross-reviews.

  • Workers edit private copies, and nothing reaches your files until a merge, which /undo reverts.
  • Risky commands ask first (unless you turn the dial up), and your deny rules always hold.
  • Baton has no server and no telemetry by default. It never reads or stores your agents' credentials.

Yes: install with PowerShell (irm https://k6w.github.io/baton/install.ps1 | iex) and run baton in Windows Terminal. It needs Git for Windows. WSL works too, with the Linux installer.

More: troubleshooting & FAQ.

Contributing

bun install
bun test                                    # ~480 tests
bunx tsc -p tsconfig.json --noEmit && bunx biome check .
bun packages/cli/src/main.ts demo           # run from source

The code is a Bun + TypeScript monorepo:

| Package | What it does | |---|---| | protocol | events, the adapter contract, the control protocol | | kernel | config, the event store, state | | daemon | the runtime, bus, policy, worktrees | | adapters/* | one package per agent family | | tui | the terminal UI (OpenTUI + Solid) | | cli | the baton command | | sdk | the TypeScript client |

There's also a Python SDK in sdk-python. Releases: bun scripts/version.ts 0.2.0, commit, then git tag v0.2.0 && git push --follow-tags. CI builds, signs and publishes everything.

License

MIT. Agent logos come from LobeHub Icons (MIT); they're trademarks of their owners and only identify which agent is running.