PLANNING ACROSS REPOS

Plan once. Build across every repo.

Batman drafts one plan across the repos you choose, files scoped tasks in each repo, and the fleet picks them up through the normal queue.

HOW THE WORK SPLITS UP

One request becomes one pull request per repo.

The diagram below shows what Batman keeps track of. Each repo gets its own task, Lucius picks it up on the next run, and each pull request merges on its own.

BATMAN PLAN · FAN-OUT parent issue → N child issues → N PRs
agent:large-feature org slug rollout specs#42 agent:bundle:add-org-slug BATMAN DRIVES plans, files, tracks agent:implement your-backend PR opened by lucius +162 / -34 in 4 files agent:implement your-frontend PR in review +98 / -12 in 3 files agent:implement your-mobile queued, no firing yet picked next interval
slack #alfred · batman plan 2026-05-12 11:44 UTC
Slack message from the Alfred bot. Batman drafted a plan for issue #504 across the backend, web, and mobile repos, with the order to roll them out and a preview of the plan. The status badge is green. The plan is a draft waiting for approval.

A real Batman plan posted to Slack on 2026-05-12. It was approved a few minutes later. Lucius started on the backend task first; the web and mobile tasks followed on the next two runs.

A real Batman plan posted to Slack on 2026-05-12. It was approved a few minutes later. Lucius started on the backend task first; the web and mobile tasks followed on the next two runs.
WHAT BATMAN FILES

A plan, then a task per repo, then the work.

Batman reads one big feature request, drafts the plan, and posts it to Slack for approval. You react with the agreed emoji. Batman then files scoped tasks in the right repos. Lucius and the rest of the fleet claim those tasks through the normal queue, with the same worktree, spend, review, and merge gates as any other run.

The plan Batman drafts

your-platform#812 (agent:large-feature) copy
Bundle: billing-v2 rollout
Repos in scope:
- your-backend (Kotlin, Quarkus)
- your-frontend (React, Vite)
- your-mobile (Expo)
- your-data-infra (Python)
Children to file:
- backend: introduce BillingV2Service
- backend: migrate /api/v1/invoices
- frontend: pricing page rewrite
- mobile: settings screen v2
- data-infra: invoice export job
Waiting for your go-ahead before filing.

A task it files in one repo

your-backend#247 (agent:implement) copy
Parent: your-platform#812
Bundle: bundle:billing-v2
Goal: introduce BillingV2Service with a clean
interface. No callers wired yet.
Constraints:
- Kotlin, Quarkus
- Existing BillingService stays untouched
- Add unit tests for the new interface
Done when:
- PR open against main
- Tests green
- Ra's al Ghul approves
HOW THE PLAN STAYS ORGANIZED

One label per stage. No database.

The same GitHub labels as a single-repo run, plus one extra label that ties each task back to the plan it came from.

agent:large-feature

You add this to a feature request. Batman picks it up, drafts a plan, and posts it to Slack for approval.

bundle:<slug>

Added to every task Batman files, so each one points back to the plan it belongs to.

agent:implement

Each task starts with this label. Lucius can claim repo-sized tasks independently, each in its own worktree.

agent:done

Added to a task when its pull request merges. You can use the completed tasks to close the parent feature request with a clear trail.

CHECK THE PLAN FIRST

Test the architect before you spend anything.

Batman never files tasks without your approval. A dry run checks the local wiring without touching GitHub, Slack, an LLM, or your repos.

terminal copy
$ alfred dry-run batman
alfred dry-run: batman
role: cross-repo architect
mode: safe simulation
would: resolve config, acquire the agent lock, run preflight, and enter the runner
would not: call the host scheduler, mutate GitHub, post Slack, invoke an LLM, or edit files