Past a certain point you stop waiting on the models and start waiting on yourself.
Past a certain point you stop waiting on the models and start waiting on yourself.
You’ve got Claude Code, Codex, Cursor, maybe GitHub Copilot /fleet all running. The feature spec is clear, but now you’re:
This tutorial walks through turning a single feature spec into a task tree that multiple coding agents can execute in parallel without you becoming mission control.
It’s a practical companion to the pillar piece, “AI coding agent orchestration: the complete guide for multi-agent development”. Here we stay concrete and step-by-step.
We’ll use a feature with enough moving parts to be realistic:
Feature: Add OAuth login with GitHub and Google to an existing SaaS app, including:
- Backend OAuth flows
- User account linking (email + OAuth provider)
- Frontend login/signup UI changes
- Tests and basic monitoring
- Docs for support and ops
We’ll build a task tree for AI agents, then show how to run it in parallel.
Agents work best when the prompt is “produce these artifacts” not “implement login”. GitHub’s /fleet docs and OpenAI’s Codex guidance both say: map work items directly to files, test suites or docs.
Start with a flat list of outputs:
backend/auth/github_oauth.py and backend/auth/google_oauth.pyUser model: oauth_id, provider, email_verified/login, /signup, and a "Connect GitHub" account settings paneltests/auth/test_oauth_flows.pydocs/auth/oauth-login.mdWrite this down in the repo, not just in your head. Anthropic recommends a repo-level file (e.g. AGENTS.md or CLAUDE.md) for durable instructions.
Concrete move: add AGENTS.md at repo root:
# AGENTS task brief: OAuth login feature
Artifacts for this feature:
- Backend: GitHub & Google OAuth modules; user model fields
- Frontend: login/signup flow; account linking UI
- Tests: integration tests for success/failure cases
- Monitoring: basic auth failure metrics/log filters
- Docs: end-user & support doc for OAuth login
This becomes shared context for any agent you spin up.
Now turn the artifacts into a task tree - each node is a concrete task that an agent can own. Anthropic’s multi-agent work and GitHub /fleet both emphasize separate, narrow jobs.
For our OAuth feature:
OAuth Login Feature
├─ Backend Foundations
│ ├─ 1.1 Analyze existing auth & user model
│ ├─ 1.2 Design data model changes (oauth_id, provider, email_verified)
│ └─ 1.3 Define OAuth callback & state handling contracts
├─ Provider Integrations
│ ├─ 2.1 Implement GitHub OAuth module
│ └─ 2.2 Implement Google OAuth module
├─ Frontend Flows
│ ├─ 3.1 Update /login and /signup pages
│ └─ 3.2 Account linking UI in settings
├─ Testing & QA
│ ├─ 4.1 Integration tests for success/failure
│ └─ 4.2 Regression tests for existing login
└─ Docs & Ops
├─ 5.1 OAuth login user doc
└─ 5.2 Ops runbook & monitoring checklist
Dependencies:
Explicit dependencies keep agents from drifting. You know what can run in parallel and what must sequence.
Next, decide what can truly run in parallel without causing chaos.
Using the tree above, label tasks:
/login and /signupThis is roughly the same pattern GitHub and Cursor push: plan first, then fan out.
Write this into AGENTS.md so every agent sees it:
## Task tree & dependencies
Serial foundation tasks:
- 1.1, 1.2, 1.3
Parallel cluster A (after foundation):
- 2.1, 2.2, 3.1, 3.2
Parallel cluster B (after A is code-complete):
- 4.x, 5.x
Now you have a concrete dependency graph that a coordinator - human or agent - can reason about.
The prompt for each worker should read like an issue, not a brainstorm. OpenAI recommends “write prompts as if you are writing a GitHub Issue.”
For each task, write:
Example: Task 2.1 - GitHub OAuth module
### Task 2.1 - Implement GitHub OAuth backend module
Goal
- Implement GitHub OAuth for login and account linking.
Inputs
- Existing auth code in `backend/auth/`
- User model in `backend/models/user.py`
- Contracts from tasks 1.2-1.3 in `AGENTS.md` (callback URL format, state handling).
Outputs
- New module: `backend/auth/github_oauth.py`
- Wiring into login flow without breaking existing password login.
- Docstring describing public functions and expected behavior.
Constraints
- Use existing HTTP framework and auth/session utilities.
- Don’t store access tokens long-term; keep only what we need for identity.
Do this for each node in the tree. You now have a backlog that maps 1:1 to agent tasks.
You need a way to:
You can do this a few ways:
tmux panes and shell aliases/fleet, Cursor Plan Mode, Anthropic subagentsThe mechanics differ, but the coordination moves are the same: one orchestrator seat, many workers.
With Maxxwell, for example:
Regardless of tool, pick one place where you talk about the task tree and not twelve places.
Now we connect the task tree to actual agent sessions.
Use branches or Git worktrees to keep work separated:
# foundation work
git checkout -b feat/oauth-foundations
# parallel cluster A branches
git worktree add -b github-oauth ../feat-oauth-github
git worktree add -b google-oauth ../feat-oauth-google
git worktree add -b oauth-frontend ../feat-oauth-frontend
Each agent works in its own directory / branch, reducing merge conflicts.
Whatever agent UI you’re using, start each worker with:
AGENTS.md visibleExample (generic agent prompt):
You are working in branch github-oauth.
Task: 2.1 - Implement GitHub OAuth backend module.
Context:
- Read AGENTS.md for the overall OAuth feature plan, task tree, and contracts.
- Inspect backend/auth/ and backend/models/user.py to understand existing auth.
Deliverables:
- Create backend/auth/github_oauth.py with functions for login and account linking.
- Wire into the existing login flow without breaking password auth.
- Add or update tests if they exist; otherwise leave TODOs listed clearly.
Ask me before changing public API signatures.
Repeat for Google OAuth, frontend flows, tests, docs.
In Maxxwell, you’d:
Maxxwell’s orchestrator seat lets you keep these briefs in one place and see which session is “working”, “waiting on you”, “blocked”, or “possibly stalled”.
The main failure mode in multi-agent setups is drift: a downstream agent assumes a contract that the upstream one never implemented.
You avoid this by making a few coordination rules explicit:
AGENTS.md or contracts/oauth.md.With GitHub /fleet, that’s the handoff description between agents. With Maxxwell or a tmux setup, this is simply you editing the contract file and telling workers to re-read.
Anthropic notes multi-agent systems are powerful but expensive and failure-prone. The expensive part isn’t just tokens (15× chat in their experiments), it’s your attention.
So you need a cheap way to answer:
With plain terminals, this is manual tab-flipping. With Maxxwell, you get a single window listing sessions and their states:
working: agent is actively streaming outputidle or done: no activity; likely finishedwaiting on you: agent asked a questionblocked: the underlying tool errored or needs sign-inpossibly stalled: no recent activity, state uncertainYou still make the decisions - Maxxwell doesn’t auto-restart or auto-correct drift - but the visibility is centralized.
This is where the orchestrator seat pays off: you ask it, in plain language, “Summarize which OAuth tasks are done, which are blocked, and where code is diverging from the contracts.” It reads the lanes and answers.
Parallel agents without a clean synthesis step is how you get broken builds. Coordinate merges like you would a small team.
For each cluster:
Example orchestrator prompt:
You are the orchestrator for the OAuth feature.
Summarize the changes from the following branches:
- github-oauth
- google-oauth
- oauth-frontend
For each, list:
- New endpoints and routes
- Changes to the User model
- Any TODOs left in tests or docs
Then tell me where they disagree with contracts/oauth.md.
You merge only after that report looks sane.
Long-running sessions can accumulate a lot of context. With Maxxwell you get a live context-pressure readout and a one-click compact; other tools have similar “summarize and continue” features.
Use compaction:
You don’t need autopilot; you just need enough tools to keep sessions legible.
When the feature is done, your task tree should reflect reality:
This matters because you’re likely to reuse this pattern. OpenAI says agentic AI shifts the unit of work from single interactions to long-horizon tasks; this OAuth feature is one such horizon.
Update AGENTS.md:
## OAuth feature status
Done:
- 1.1-1.3 foundations
- 2.1 GitHub, 2.2 Google modules
- 3.1-3.2 frontend flows
- 4.x tests (see tests/auth/test_oauth_flows.py)
- 5.1-5.2 docs & ops
Notes:
- User model gained `oauth_provider` and `oauth_subject_id`.
- Callback paths differ slightly from the initial sketch; see contracts/oauth.md.
Next time you decompose a feature, this file is your starting point.
Aim for “small ticket” level, not line-item level.
A task that comfortably fits into 30-90 minutes of human work is usually right. OpenAI’s Codex data shows over 80% of sampled users submit at least one request worth 30+ minutes of work, and about 25% submit one worth 8+ hours - you don’t want a single agent owning that entire 8-hour chunk.
Most teams do well with 3-6 concurrent sessions per feature.
Anthropic’s multi-agent research system shows parallel breadth-first work is effective but 15× more token-hungry than chat, so you want meaningful parallelism without saturating your own ability to review outputs.
Put API contracts in a single source of truth file and make every prompt reference it explicitly.
Use language like: “You may not introduce new routes or fields; use only what’s defined in contracts/oauth.md. If you need a change, ask me.” Then funnel all changes through one orchestrator session.
Maxxwell sits above your coding agents and manages them; it doesn’t replace them.
You keep using Claude Code, Codex, Cursor or Copilot as workers. Maxxwell gives you one window showing every session’s state and an orchestrator seat that reports what landed, what is waiting for you, and which lanes look stalled. Fleet controls draft changes - they write unsent commands into the composer - so you stay the one who presses enter.
No.
If you’re adding a single endpoint or tweaking one component, a single agent session is usually faster than spinning up a task tree and a fleet. This decomposition pattern is for features that naturally split into backend, frontend, tests, docs, and ops - where you already feel the cost of coordinating work.