If you've been watching the AI space, you've noticed the push toward multi-agent systems—autonomous agents working in parallel on coordinated tasks. Anthropic has Claude with planned multi-agent capabilities. Anthropic and others offer orchestration frameworks. But what if you could roll your own coordination layer for under 50 lines of shell code? Developer Andros demonstrates exactly that: a functional multi-agent system using nothing but bash, Git, and TODO.org.

The Coordination Hub: TODO.org

The foundation here is elegantly simple—Org Mode files act as the task board. Each entry has a title, ID, detailed description, status (TODO/IN-PROGRESS/DONE), and optional :BLOCKER: properties pointing to dependent tasks. This structure mirrors how human teams track work in tools like Jira or Trello, but with zero licensing fees and full programmatic access. Agents read this file, identify available tasks (those marked TODO without pending blockers), claim them by updating status, then execute.

The Run Script

The run_agents.sh script does the heavy lifting: it sets a MAX_JOBS variable to cap parallel agents, runs git pull before launching each one to sync state, and manages the lifecycle. Each agent executes an identical prompt from AGENT_PROMPT.md via claude --dangerously-skip-permissions -p (the flag bypasses confirmation prompts for autonomous operation). Output goes to log files named with commit hash and agent number. Critically, the script waits for all running agents to finish when no TODO tasks remain—otherwise you'd have processes hanging indefinitely.

Git as Scrum Master

Here's where it gets clever: the author frames Git as the "Scrum Master" of this operation. Without an initial commit, the main branch doesn't exist and git pull/push fail entirely. Agents use git pull --rebase origin main to stay synchronized. When two agents collide on the same task, one wins the push while the other must rebase, resolve any TODO.org conflicts, and retry. AI models handle these merge conflicts surprisingly well—no locks, semaphores, or message queues required.

Agent Prompt Design

The AGENT_PROMPT.md file defines everything about agent behavior: how to select tasks (typically oldest available), collaboration rules, when to block dependent work, and explicit exit 0 commands for graceful shutdown. This is where you encode your team's conventions—branch naming schemes, commit message formats, review criteria. The prompt becomes institutional knowledge that scales across as many parallel agents as your compute budget allows.

A Real Example: Mars Landing Page

The walkthrough creates a landing page project with TODO.org entries defining HTML structure, Bulma CSS styling, Chart.js visualization, and copy for statistics sections—all with proper blocking dependencies so agents can't style elements before they're created. Running bash run_agents.sh spawns multiple Claude instances that race through the backlog, updating task statuses in real-time.

Key Takeaways

  • TODO.org (or any machine-readable task file) serves as your coordination hub—no proprietary tooling required
  • MAX_JOBS controls parallelism and token burn rate—tune based on budget and latency tolerance
  • The --dangerously-skip-permissions flag enables true autonomy but requires trust in your agent prompts
  • Git conflict resolution replaces complex locking mechanisms—natural synchronization for free
  • Clear task definitions with explicit dependencies are non-negotiable—you get out what you put into the backlog

The Bottom Line

This isn't production-grade infrastructure, but it's a legitimate proof-of-concept that exposes how orchestration frameworks work under the hood. Before committing to expensive platforms, understanding these primitives makes you a sharper evaluator—and maybe saves you some serious cash.