← Products

spoolctl

A local job queue built for operators that die.

uv tool install spoolctl

spoolctl is a local job queue for shell commands. It needs no daemon, no broker, and no server. One SQLite file coordinates everything. If a worker dies in the middle of a job, another worker picks the job up and runs it again.

Why it exists

Most local queue tools expect a person to watch them. With pueue, task-spooler, or nq, a job whose process is killed does not run again, and a failed job is not retried. The person at the terminal does the recovery.

Queues with automatic retry, such as Celery, RQ, and huey, are libraries. Jobs are functions in your application, and you need a broker or an application runtime.

Today, much local shell work comes from processes that cannot watch: coding agents, scripts, and unattended pipelines. They get killed mid-job. They run at the same time without coordination. spoolctl gives their shell commands the reliability of a real job queue, with less setup than either kind of tool.

What you get

Quick example

spoolctl add --timeout 600 -- python fetch.py --all
spoolctl add --after 5m --queue gpu -- python train.py
spoolctl work --drain
spoolctl work --queue gpu --slots 1
spoolctl status --json
spoolctl feedback 1 --json

Start as many workers as you like, at any time. They need no coordination. spoolctl feedback returns one verdict per job: done or not, succeeded or not, why, and what to do next.

Built for agents

Every command has a --json output with a stable shape and fixed error codes. spoolctl brief prints a short usage guide for an agent. spoolctl capabilities and spoolctl schema publish the contract. spoolctl doctor checks whether the queue is ready without changing it.

Honest limits

If you watch your queue yourself, pueue is a good choice. spoolctl is for work that must survive when nobody is watching.

Works with evalctl

evalctl can send its runner commands to spoolctl with evalctl run --queue spoolctl. See one command, three tools for a full example.

Install

spoolctl needs Python 3.10 or later. It is pre-1.0 and licensed under Apache 2.0.

uv tool install spoolctl

You can also use pip install spoolctl. See the spoolctl documentation for guarantees, configuration, and the full command reference.