← All guides

PRO TIPS Claude Code AI Agents

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:

  1. 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.
  2. 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.
  3. 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

  1. Make a folder with queue/, doing/, done/, needs-input/, failed/ and an empty STATUS.md.
  2. 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.”
  3. When the format feels right, put the planner and dispatcher on a schedule (cron or launchd) and cap the drain at 3 per wake.

Want to build this yourself?

Join Claude Code Academy, my free community. Courses, build alongs, and builders turning AI into real systems. And I post a new build on Instagram nearly every day.