By the end of this tutorial, you will have a single Maxxwell herd orchestrating multiple coding agents across several repos for one feature. You’ll see.
By the end of this tutorial, you will have a single Maxxwell herd orchestrating multiple coding agents across several repos for one feature. You’ll see end-to-end status in one view instead of babysitting a half-dozen terminals.
You’ll:
This isn’t about theory. It’s the concrete workflow you’d use for “Add SSO across web + API + auth-service” or any other multi-repo feature.
Before step 1, you should have:
company-apicompany-webauth-service or infra-configgit worktree familiarity is a plus but not requiredCommon failure here: trying to drive a remote SaaS agent that only exists in a browser tab. Maxxwell orchestrates real terminal-based sessions; your workers must be callable from a shell.
First, give each repo a clean working tree dedicated to this feature. This keeps your agent sessions isolated and lets Maxxwell map “one lane per repo” without stepping on existing work.
From a parent directory:
# 1) Clone or ensure repos exist
cd ~/dev
git clone [email protected]:acme/company-api.git
git clone [email protected]:acme/company-web.git
# 2) Create feature branches
cd company-api
git checkout -b feature/sso-login
cd ../company-web
git checkout -b feature/sso-login
If you prefer git worktree for parallel branches (recommended for multi-repo features):
cd ~/dev/company-api
git worktree add ../company-api-sso feature/sso-login
cd ~/dev/company-web
git worktree add ../company-web-sso feature/sso-login
You now have a dedicated directory per feature branch:
~/dev/company-api-sso~/dev/company-web-ssoMaxxwell will later attach one agent session per repo pointing at these directories.
Common failure: mixing feature work into your main working copy. That makes it harder to tell which terminals belong to the feature and which are doing something else.
The “herded” part of the workflow starts with a single written goal. Everything else is just sessions attached to that goal.
Launch Maxxwell:
maxxwell-desktopmaxxwell orchestratorIn the desktop app, create a new orchestrator seat with a clear brief:
Goal: Implement SSO for Acme web and API
Scope:
- Add OAuth2 login for the company-web frontend using our existing identity provider
- Update company-api to validate tokens from the IdP and add user context to requests
- Ensure existing local login continues to work
- Tests and integration checks must pass in each repo
Constraints:
- Do not commit directly to main
- Prefer minimal dependency changes
This orchestrator is itself a real coding-agent session, started from this brief. You’ll talk to it instead of juggling a dozen terminals.
Common failure: vague goals like “Improve auth.” The orchestrator will still run, but your herd view will be noisy and you’ll spend more time redirecting agents.
Now wire in the workers: your existing coding agents, one per repo, all tied back to the same goal.
In Maxxwell’s fleet view:
company-api feature directory.company-web.Example via CLI (names are illustrative, adapt to your own agent commands):
# API worker session
maxxwell session open \
--name api-sso \
--goal "Implement SSO feature across web and API" \
--cwd ~/dev/company-api-sso \
--cmd "claude-code --project company-api-sso"
# Web worker session
maxxwell session open \
--name web-sso \
--goal "Implement SSO feature across web and API" \
--cwd ~/dev/company-web-sso \
--cmd "cursor-agent --project company-web-sso"
In the desktop app, this corresponds to:
New session → choose the agent command (e.g. claude-code)Working directory → ~/dev/company-api-ssoAttach to goal → select your SSO orchestrator goalMaxxwell now tracks each worker as a lane under that goal. Each lane has a status label:
workingidlewaiting on youblockedneeds sign-innot starteddonedeadnot heard from (when Maxxwell can’t confirm state)There’s also a "possibly stalled" overlay if a session sits in one state for too long.
Common failure: reusing one session to hop between repos. Maxxwell will still track it, but you lose clear per-repo context, and it’s harder to debug when something drifts.
With sessions running, make the herd view readable per repo. The goal is: you glance once and know where each repo stands.
In Maxxwell’s herd view (desktop):
company-api.company-web.api-sso session into the company-api group.web-sso session into the company-web group.Each group now shows:
If you’re using CLI only, you can still get group-like context by naming sessions consistently:
# Naming pattern: <repo>-<feature>-<role>
maxxwell session list
# Example output (simplified)
# [company-api] api-sso-worker working
# [company-web] web-sso-worker waiting-on-you
You can then filter by prefix:
maxxwell session list --filter repo=company-api
Common failure: dumping all sessions into one default group. That recreates the “pile of terminals” problem that Maxxwell is meant to relieve.
The herd view becomes useful when it tells you how close the feature is, not just each repo in isolation. You’ll set up status signals that reflect cross-repo dependencies.
A minimal pattern that works well:
Capture this in the orchestrator brief or a short status.md file in each repo.
company-api/status.md:
# SSO feature status - API
Done when:
- /auth/login and /auth/callback endpoints implemented
- Token validation middleware present and tested
- Integration tests covering login and token validation pass
Blocked when:
- Identity provider config not available
- Database migration for user table not applied
company-web/status.md:
# SSO feature status - Web
Done when:
- Login page supports "Continue with SSO" button
- OAuth2 redirect flow integrated with /auth/login
- End-to-end tests passing in CI
Blocked when:
- API SSO endpoints not reachable
- API returns invalid or missing user context
Now instruct each agent session explicitly via the orchestrator:
Orchestrator to API worker:
- Implement everything in company-api/status.md until all "Done when" items are satisfied.
- Mark yourself as "waiting on you" when tests need my sign-off.
Orchestrator to Web worker:
- Treat API SSO endpoints as a dependency.
- Pause and set status to "blocked" if the API lane reports blocked.
You send those instructions as messages from the orchestrator seat to each worker. Maxxwell will show in the herd view which lane is blocked versus waiting on you.
Common failure: relying on implicit understanding. If you don’t encode what “done” means per repo, your herd status collapses into vague “still working”.
Maxxwell’s fleet controls have one important property: they draft commands and messages instead of executing them. Nothing happens until you press Enter.
Example: pausing all web-related agents while the API refactors.
From the orchestrator seat:
Pause web group (or equivalent fleet control) in the Maxxwell UI.Pause work on web-sso until API SSO endpoints are stable. Focus only on test and doc updates.Similarly, a fleet control that would run git status in all sessions writes a composed command into the terminal composer but does not run it until you send it.
This matches what most teams want: orchestration without surprise commits. The person still presses Enter.
Common failure: expecting autopilot. Maxxwell does not automatically correct drift, recycle context, restart stopped work, or run goal checks on its own schedule. It gives you controls and visibility; you remain the operator.
Multi-repo work usually involves long chats and big diffs, which hit context limits quickly. Maxxwell exposes context pressure per session with tiered warnings.
In the herd view you’ll see, per lane:
When a lane turns yellow or red:
Compact on that lane.Common failure: ignoring context pressure and letting agents thrash. That’s how you end up with two sessions rebuilding the same area from scratch.
Once the feature is mostly done, you want a direct answer: what landed, what did the agents decide, and what still needs you?
Maxxwell’s orchestrator seat provides a return report summarizing:
waiting on you (e.g. env configs, secrets)Use this to drive your final review:
maxxwell session attach api-ssocd ~/dev/company-api-sso
npm test
git diffThis is where Maxxwell earns its keep: instead of walking each session asking “what’s going on?”, you get one structured summary.
Common failure: closing the app and assuming work is gone. Maxxwell detaches from sessions; it doesn’t kill them. Your agents continue running in those terminals.
If you’re already orchestrating agents with tmux, shell aliases, or custom scripts, you should evaluate this against that baseline.
Maxxwell gives you:
working, idle, waiting on you, blocked, etc.)Other multi-agent tools give their own flavors of orchestration, often with more automation. Maxxwell is opinionated in the other direction: your tools stay yours, the person presses Enter, and the focus is visibility over autopilot.
Maxxwell shows per-session states with a "possibly stalled" overlay when a session has stayed in the same state for longer than expected. Combine that with context pressure and recent output:
working + recent logs → likely just slowworking + "possibly stalled" + no new output → probably stuckwaiting on you → explicitly blocked on a decisionYou can attach to any session directly to inspect what it’s doing.
You don’t have to assign a worker to every repo. For simple infra or config repos:
done, not started), even without a child agent.The herd view is still useful; those repos just show as manual lanes.
Yes. Maxxwell treats workers as unmodified tools. You can have:
api-sso running Claude Codeweb-sso running CodexEach runs as its own terminal session; Maxxwell just orchestrates them. You bring the models and subscriptions you prefer.
Maxxwell doesn’t hide what agents do:
not heard from, not guessed.The point is to make agent behavior inspectable, so you can keep using the tools you trust instead of pushing them behind another opaque layer.
Two, usually:
done/blocked definitions, every lane says "working" and you become the bottleneck again.Solve those, and the herd view starts to show real end-to-end progress instead of noise.