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

baton-cli

v0.6.2

Published

Git-backed session handoff for Claude Code

Readme

Baton Banner

npm version CI

Git-backed session handoff for Claude Code.

Continue the same coding session on another machine without losing context.

baton push   # on machine A
baton pull   # on machine B

Why

CLI coding agent sessions are trapped on one machine:

  • Session context doesn't travel between devices
  • The same repo lives at different absolute paths on different machines
  • macOS, Linux, and Windows use different paths and home directories
  • Existing tools sync config, not coding sessions

Baton fixes this. Push your session, pull it elsewhere, keep working.


Install

npm install -g baton-cli

Requirements: Node.js 18+, Git, GitHub CLI (authenticated)


Quick start

# On machine A — push your sessions
cd ~/work/my-project
baton push

# On machine B — pull and continue
cd ~/projects/my-project
baton pull

On first run, baton push creates a private GitHub repo (baton-sessions by default) to store your session data. On another machine, baton pull auto-detects this repo from your GitHub account.


How it works

  1. Auto-detect the project from git remote in the current directory
  2. Collect all Claude Code sessions, tool results, and project memory
  3. Virtualize absolute paths into portable placeholders (${PROJECT_ROOT}, ${HOME}, ${TMP})
  4. Push the checkpoint to your private GitHub repo
  5. On another machine, pull and expand placeholders to local paths
  6. Claude Code picks up the restored sessions automatically

What gets synced

| Component | Synced | Why | |-----------|--------|-----| | Session conversation logs | Yes | All sessions for the project | | Tool results | Yes | Small, needed for reference integrity | | Project memory | Yes | Tiny, valuable for continuity | | Subagent logs | No | Too large, results already in main conversation |


CLI reference

baton push              # push all sessions for this project
baton push --force      # overwrite remote even if ahead
baton pull              # restore sessions locally
baton status            # show current project and sync state

Cross-platform path handling

Same repo, different machines:

| Machine | Path | |---------|------| | macOS | /Users/you/work/my-project | | Linux | /home/you/projects/my-project | | Windows | C:\Users\you\my-project |

Baton replaces absolute paths with portable placeholders on push and expands them to local paths on pull. Longest paths are replaced first to prevent partial matches.


Conflict guard

baton push checks if the remote has changes you haven't pulled. If so, it refuses to push to prevent accidental overwrites.

baton push          # refused — remote is ahead
baton pull          # pull first
baton push          # now it works

baton push --force  # or override the check

Design principles

  • Project-aware: identity comes from git remote, not local paths
  • Checkpoint-first: restore from snapshots, not fragile live mirroring
  • Portable before native: prioritize continuity over perfect restoration
  • Git-backed: GitHub for durable history and recovery
  • Simple: two commands, no daemon, no config ceremony

What Baton is not

  • A real-time sync engine
  • A multi-user collaboration platform
  • A semantic memory system
  • A config sync tool

License

MIT