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

@motiful/booth

v0.2.0

Published

AI project manager for Claude Code — parallel task execution with intelligent coordination

Downloads

165

Readme

Booth

Every idea you have becomes a running task. Booth manages them all — so your head stays clear.

Booth is an AI project manager for Claude Code. You keep thinking, keep branching — Booth dispatches each idea as a parallel CC session (called a deck), monitors progress in real-time, verifies quality against your standards, and delivers structured reports. You never lose track. You never manage folders. You just keep going.

Signal-Reactive Orchestration

Booth's architecture is signal-reactive — the daemon never polls CC, never reads terminal output, and never uses cron timers to check status. Instead, it watches the authoritative JSONL event stream that CC already emits, and reacts to state transitions.

How It Works

CC writes JSONL ──▶ Signal module (tail -f) ──▶ State module ──▶ Reactor ──▶ Action
  1. Signal: Every CC session writes a JSONL transcript. Booth tail -fs each one. Specific event patterns map to exactly one deck state (working, idle, checking, exited).

  2. State: State transitions are deduplicated (idle→idle = no-op) and persisted to SQLite. The in-memory cache serves hot-path reads; the DB is the source of truth.

  3. Reactor: Listens to state-change events and triggers actions — send a check prompt, notify the DJ, schedule a beat, auto-approve plan mode.

Why Not Loop / Cron / Heartbeat?

| Approach | Problem | |----------|---------| | Poll loop (capture-pane every N seconds) | Expensive, unreliable (terminal state ≠ CC state), races with CC's own TUI | | Cron/interval check | Misses events between ticks, adds latency, wastes cycles when nothing changes | | Heartbeat from CC | Requires CC to cooperate (it doesn't — CC has no plugin API) | | Signal-reactive (Booth) | Zero-cost when idle, instant response on state change, no coupling to CC internals beyond the documented JSONL format |

The JSONL stream is CC's own audit log — it exists whether Booth watches it or not. Booth adds zero overhead to CC's operation.

The Quality Loop

When a deck goes idle, the reactor triggers a check flow:

  1. Send [booth-check] prompt to the deck → deck self-verifies its work
  2. Deck writes a report with YAML frontmatter (status: SUCCESS or status: FAIL)
  3. Reactor detects the report, compares git state before/after check
  4. If code changed during check → re-trigger (up to 5 rounds)
  5. Final report → notify the DJ (managing CC session) → open in editor

This is a mechanism, not a prompt. The deck doesn't need to be told "remember to check your work" — the daemon enforces it structurally.

Deck Lifecycle

spin ──▶ working ◀──▶ idle ──▶ checking ──▶ idle ──▶ exited
                                   │                    ▲
                                   └── (check loop) ────┘
  • working: CC is executing (tool_use, thinking, processing user input)
  • idle: CC is at the prompt, waiting for input
  • checking: Reactor sent a check prompt, awaiting report
  • exited: Deck is done — killed by user, or CC session ended

Shutdown does not change deck status. Decks stay working/idle in the DB, and are naturally resumed on next booth start.

Deck Modes

| Mode | Behavior | |------|----------| | Auto (default) | idle → check → report → notify DJ | | Hold | idle → check → report → pause (waits for DJ instruction) | | Live | No auto-check — human drives the session |

Quick Start

npm install -g booth
cd your-project
booth init          # First-time setup
booth               # Start Booth (launches daemon + DJ)
booth spin my-task  # Create a parallel deck
booth ls            # See all deck states
booth kill my-task  # Kill a deck
booth stop          # Stop everything

Architecture

CLI (booth) ──Unix socket──▶ Daemon ──▶ tmux sessions
                               │
                    ┌──────────┼──────────┐
                    ▼          ▼          ▼
                 Signal     State     Reactor
              (JSONL tail) (SQLite)  (event handlers)
  • CLI: Thin client. Sends IPC commands, displays results.
  • Daemon: Long-running Node.js process. Owns all state and signal processing.
  • Signal: Spawns tail -f per deck JSONL. Parses events into state transitions.
  • State: SQLite DB (.booth/booth.db). In-memory Map as read cache.
  • Reactor: Event-driven. Responds to deck:idle, deck:working, etc.

All business logic is in Node.js. CC hooks are 2-line bash wrappers that call into the daemon via IPC.

License

MIT