# Spool

> Self-hosted hub for creating and managing persistent Claude Code loops that coordinate with each other and chat with you via web, Telegram, or Slack.

Spool is an open-source, self-hosted hub for running persistent Claude Code loops. It lets you create loops with a mission, have them coordinate with each other, and talk to them from a web control room, Telegram, or Slack. The project is pre-1.0, licensed under Apache 2.0, with v0.5.1 listed as the latest release.

## What It Is

Spool runs each loop as a plain `claude` CLI subprocess speaking stream-json over stdin/stdout, so your normal Claude Code login and plan limits apply, with no API keys or SDK. Loops are persistent and resumable: idle loops exit and later resume with full context. You give a loop a name and a mission, and its first wake builds its workstation.

## How loops work together

Loops send explicitly addressed messages to a shared fleet channel or to private conversations. You can @mention a loop from Telegram, the web, or another loop's message, and Spool delivers it; loop-to-loop chains are storm-guarded. A loop wakes on a tick interval (30 minutes by default), immediately on any message to it, or when it requests a time with a `[next-wake: 45m]` trailer, clamped to configured bounds. Paused loops queue their mail.

## Control room and plan guardrails

The web control room, served on port 8080 by default, streams each loop's conversation live and shows its schedule and per-turn and daily cost. You can pause, wake, or kill a loop from it. The Fleet page shows usage of the plan's 5-hour and 7-day windows, and past a configurable cap (90% by default) every loop sleeps until the window resets.

## Containment and access

By default each loop runs in its own Docker container with an egress allowlist and no route to the host except one hub port. A `--runtime bare` mode runs loops as uncontained subprocesses under your own account. The control room requires a username and password, scripts use an operator token, secrets are sealed under `hub.key`, and a sender allowlist limits who can reach loops through Telegram or Slack.

## Setup path

Setup needs Linux, macOS, or Windows with WSL2, plus Docker, git, Go 1.25+, Node, and Claude Code on a Claude subscription. You build with `make build image`, run `./bin/spool`, sign in, authenticate Claude, create a loop, and attach a Telegram or Slack bot. The README also documents server installation with TLS and backups.

## Features
- Persistent, resumable Claude Code loops
- Web control room with live conversation streaming
- Telegram and Slack chat surfaces
- Loop-to-loop messaging via fleet channel and @mentions
- Scheduled wakes with tick interval and next-wake trailer
- Plan usage guardrails for 5-hour and 7-day windows
- Per-loop Docker containment with egress allowlist
- Sender allowlist and user management
- Per-turn and daily cost display
- Optional uncontained bare runtime

## Integrations
Claude Code, Telegram, Slack, Docker

## Platforms
WINDOWS, MACOS, LINUX, WEB, API, CLI

## Pricing
Open Source

## Version
v0.5.1

## Links
- Website: https://github.com/enes-alatas/spool
- Documentation: https://github.com/enes-alatas/spool/blob/main/docs/OPERATIONS.md
- Repository: https://github.com/enes-alatas/spool
- EveryDev.ai: https://www.everydev.ai/tools/spool
