tap

Wrap long-running commands with per-service runners and a Unix socket HTTP API.

1|Updated Jan 17, 2026
One-click install
npx skills add https://github.com/bbatchelder/tap --skill tap
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: tap
Source: https://github.com/bbatchelder/tap/tree/main
Command: npx skills add https://github.com/bbatchelder/tap --skill tap

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Tap solves the challenge of reliably starting, monitoring, and controlling long-running processes by wrapping them with a dedicated runner that captures output in memory and exposes a minimal API to query logs and manage restarts.

Core Features & Use Cases

  • In-memory ring buffer: stores recent stdout/stderr lines for fast, deterministic access without log files.
  • Unix-domain socket API: remote control of each service via a lightweight HTTP interface.
  • Per-service runner: isolates supervision and lifecycle to a single process, enabling predictable restarts and readiness checks.
  • Use cases: run a web server or worker, observe logs, restart on failure, or stop services in CI pipelines.

Quick Start

Use tap to run a service, observe logs, and restart when needed. Example: tap run myapp -- node server.js; then tap observe myapp --last 50; if needed, tap restart myapp.

Frequently Asked Questions about tap

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I supervise a long-running command and query its logs in memory?

To supervise a long-running command with queryable logs, wrap it with a per-service runner that captures stdout and stderr in an in-memory ring buffer. This isolates process lifecycle and enables fast log access without writing log files.

What is the best way to restart or stop a long-running process remotely in a CI pipeline?

Remote control of a long-running process is handled via a lightweight HTTP API over Unix-domain sockets. You can send restart or stop commands to a specific service runner without direct terminal access.

Can I manage multiple isolated services with separate readiness checks on Unix?

Yes, per-service isolation assigns a dedicated runner to each long-running command on Unix-like environments. This enables predictable restarts, individual readiness checks, and independent log buffers for each supervised process.

How do I view recent logs from a supervised process without reading a log file?

You can observe recent output from a supervised process by querying the in-memory ring buffer using the CLI. Running the observe command retrieves the latest stdout and stderr lines directly from memory.

What are the limitations of using an in-memory ring buffer for process supervision?

An in-memory ring buffer for process supervision limits log history to recent lines and loses all output upon process exit or system restart. It does not provide persistent log files for long-term auditing or crash analysis.