Give your AI agents their own task queue
Your agents sit idle between your prompts. Mine pull work from their own board: a planner writes tickets, a dispatcher runs up to 3 every wake.
The problem
Every task my agents did had to pass through me. I had to think of it, phrase it, open a session, paste it in, wait, check the result. My own to-do list filled up with things an agent could handle, and the agents sat idle because I was the only one feeding them. You do not scale a team by routing every job through one person. Same with agents: as long as you are the dispatcher, you are the bottleneck.
What I built
A to-do list for agents, separate from my own. It lives in its own repo and runs on my Mac mini on a schedule:
- A spotter script wakes every 15 minutes and greps my notes for lines starting with
task:. No model call, zero tokens. It just collects stubs into an inbox. - A planner agent wakes every 3 hours, reads the new stubs plus my goals and priorities, and writes well-specified tickets into the queue: what to do, why, where the output belongs, a priority, and an assignee.
- A dispatcher wakes every 3 hours, claims the top ready ticket, runs it headlessly with
claude -p, and files the result.
In its first verified run the planner marked “book my exam” as a human-only task assigned back to me at P0, pushed background summaries down to P2 and P3, and flagged a ticket with a placeholder URL instead of blindly running it. That is the point of a planner: tickets arrive specified, prioritized, and routed.
The board format
Status is just which folder the ticket sits in:
queue/ waiting, prioritized by the planner
doing/ claimed by a worker right now
done/ finished, output filed
needs-input/ parked, the worker needs something from me
failed/ the worker gave up, with notes
STATUS.md the board, regenerated after every run
One ticket is one markdown file:
# Summarize this week's competitor activity
priority: P2
assignee: claude-code
target: Content OS vault
Context: why this matters and where the sources are.
Done when: a summary note exists in the vault.
If a worker hits something it cannot resolve, it writes a NEEDS-INPUT: marker and the ticket parks in needs-input/ instead of failing silently. I check the board, answer, and it moves on.
The drain limit
The dispatcher drains at most 3 tickets per wake. That is the safety idea. If the planner ever writes a bad batch, the worst case is 3 tickets of spend, and I see the results on the board before the next wake. The system is also cheap when idle: the spotter never calls a model, and the planner and dispatcher only spend tokens when there is actual work.
Do this now
- Make a folder with
queue/,doing/,done/,needs-input/,failed/and an emptySTATUS.md. - Write 3 tickets by hand in the format above, then tell Claude Code: “Claim the top ticket in queue/, do it, move the file to done/, and regenerate STATUS.md.”
- When the format feels right, put the planner and dispatcher on a schedule (cron or launchd) and cap the drain at 3 per wake.