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

topout

v0.3.2

Published

Manage multiple AI coding agents from one interface

Readme

Topout

Open-source tool to manage multiple AI coding agents.

One click: branch, worktree, agent, terminal. All visible in one place.

Quick Start

npx topout
  1. Add a repo — point Topout at an existing git repository
  2. Create a workstream — enter a branch name, an agent launches automatically
  3. Repeat — spin up as many as you need, all visible in the sidebar

That's it. Local-only, no account required.

What It Does

  • Creates an isolated git worktree for each branch
  • Launches an AI agent (Claude, Codex, etc.) in a tmux session per worktree
  • Streams all agent terminals to a single web UI
  • Manages the full lifecycle: create, monitor, interact, delete
  • Runs locally on macOS and Linux

Prerequisites

  • Node.js 22+
  • tmuxbrew install tmux (macOS) or apt install tmux (Linux)
  • git
  • An AI coding agent: Claude Code, Codex, or any CLI tool

CLI Options

| Flag | Default | Description | |------|---------|-------------| | --port <number> | 3000 | Port for the web UI | | --no-open | — | Don't auto-open the browser |

Environment variables:

  • TOPOUT_DATA_DIR — data directory (default: ~/.topout)

Configuration

Topout uses a three-tier configuration hierarchy. Each tier can define session configs (what tools to launch) and lifecycle hooks (scripts to run during setup).

System (built-in)  →  User (~/.topout/config/)  →  Repo (<repo>/.topout/)

Higher tiers override lower tiers. The repo tier has the final say.

Directory Structure

User-level (~/.topout/config/):

~/.topout/config/
├── sessions/
│   └── <id>.yml          # session configs
└── hooks/
    ├── repo_add/
    │   └── <id>.yml      # run when a repo is added
    └── workstream_setup/
        └── <id>.yml      # run when a workstream is created

Repo-level (<repo>/.topout/):

<repo>/.topout/
├── sessions/
│   └── <id>.yml
└── hooks/
    ├── repo_add/
    │   └── <id>.yml
    └── workstream_setup/
        └── <id>.yml

Sessions

Session configs define tools that can be launched inside a workstream. Topout ships with built-in presets for Claude Code and Codex. To add your own, create YAML files in ~/.topout/config/sessions/ (user-level) or <repo>/.topout/sessions/ (repo-level).

# ~/.topout/config/sessions/aider.yml
name: Aider
icon: terminal-square
description: AI pair programming
singleton: true
auto_start: true
hooks:
  startup: aider
  shutdown:
    signal: SIGTERM
    grace_period_ms: 5000
env:
  AIDER_MODEL: claude-sonnet-4-20250514

Fields:

| Field | Required | Default | Description | |-------|----------|---------|-------------| | name | yes | — | Display name in the UI | | icon | yes | — | Icon identifier (e.g. terminal-square, tool:claude) | | description | no | — | Short description shown in the session picker | | singleton | no | false | Only allow one instance per workstream | | auto_start | no | — | Automatically launch when a workstream is created | | hooks.startup | no | — | Shell command to run in the session's terminal | | hooks.shutdown.signal | no | — | Signal to send on shutdown (e.g. SIGTERM) | | hooks.shutdown.grace_period_ms | no | — | Time to wait after signal before force-killing | | hooks.shutdown.command | no | — | Command to run on shutdown instead of a signal | | env | no | — | Environment variables passed to the session | | enabled | no | — | Set to false to disable an inherited config |

Session configs appear in the "+" menu when adding sessions to a workstream.

Merge behavior: Sessions merge by full replacement — if a repo defines a session with the same ID as a user or system config, the repo version completely replaces it. Set enabled: false to disable an inherited session without replacing it.

Auto-start: Sessions with auto_start: true launch automatically after workstream creation. When a repo is first added, auto-start sessions wait for setup hooks to finish before launching — this ensures hooks like dependency installation complete before agents start.

Lifecycle Hooks

Hooks are shell commands that run at specific points in the setup lifecycle. They execute in a visible "Setup" terminal so you can see their output.

Trigger events:

| Event | When it runs | |-------|-------------| | repo_add | Once when a repository is first added to Topout | | workstream_setup | Each time a workstream is created |

When a repo is added, both events fire in order: repo_add hooks first, then workstream_setup hooks.

Hook YAML schema:

# ~/.topout/config/hooks/workstream_setup/install-deps.yml
command: npm install
after: some-other-hook
enabled: true

| Field | Required | Default | Description | |-------|----------|---------|-------------| | command | yes | — | Shell command to execute | | after | no | — | ID of another hook to run after (controls ordering) | | enabled | no | true | Set to false to disable an inherited hook |

The hook ID is derived from the filename (e.g. install-deps.yml → ID install-deps). Use after to control execution order when multiple hooks exist for the same event.

Merge behavior: Hooks merge at the field level — if a repo defines a hook with the same ID as a user or system hook, only the fields specified in the repo config override; unspecified fields inherit from the lower tier. Set enabled: false to disable an inherited hook.

Environment variables available to hook scripts:

| Variable | Description | |----------|-------------| | TOPOUT_WORKSTREAM_TYPE | repo or worktree | | TOPOUT_WORKSTREAM_PATH | Absolute path to the workstream directory | | TOPOUT_WORKSTREAM_BRANCH | Git branch name | | TOPOUT_REPO_PATH | Absolute path to the repository root | | TOPOUT_API_BASE | Topout server URL (e.g. http://localhost:3000) |

System Configs

Topout ships with a built-in system hook:

  • setup-claude-hooks (repo_add) — configures Claude Code to report session status back to Topout via HTTP hooks

System configs can be disabled at the user or repo level by creating a config with the same ID and enabled: false:

# ~/.topout/config/hooks/repo_add/setup-claude-hooks.yml
# Disables the built-in Claude Code hooks setup
enabled: false

Re-run Setup

If you need to re-run setup hooks for a repo (e.g. after changing hook configs), right-click the repo in the sidebar and select Re-run setup.

Security

Do not put secrets in .topout/. This directory is intended to be committed to version control and shared with your team.

Repo-level configs can execute arbitrary shell commands, similar to Makefile or .vscode/tasks.json. Only add repos you trust. Use environment variables or external secret managers for sensitive values.

Telemetry

Topout collects anonymous usage telemetry (operation types, durations, error counts) to help improve the product. No file paths, repo URLs, branch names, or user content is ever collected.

To disable: OTEL_SDK_DISABLED=true npx topout or set {"enabled": false} in ~/.topout/config/telemetry.json.

See the full telemetry docs for configuration options.

License

Topout is licensed under AGPL-3.0. You can freely use, modify, and self-host it. If you modify Topout and offer it as a service, you must share your changes under the same license.