Run a campaign
A campaign is still a normal Job record — its workflowPath is workflows/campaign/workflow.md (/concepts/architecture/). Campaigns exist for features that naturally split into coordinated child Runs with DAG dependencies (dependsOn). Intake stays familiar: coro job (or tracker triggers) behave like ordinary tasks until the Planner or tooling promotes to convert_to_campaign.
When the planner escalates
Heuristics (see /packages/intelligence-base/layer/agents/planner.md) include epic-scale scope, conflicting acceptance criteria spanning multiple repos, or explicit organisational policy that forbids gigantic single PR blasts.
Once promoted:
- Campaign planner registers named children, optional tracker refs, and dependency edges.
- Dispatcher starts children when predecessors complete (
complete/skipped). - Campaign evaluator aggregates PR outcomes, verifies integration contracts across children, optionally files one memory
propose_changePR bundling organisational learnings (/guides/review-proposals/).
Dependencies & parallelisation
dependsOn[] declares a Directed Acyclic Graph — cycles are authoring errors surfaced during planning. Typical pattern:
child-auth → depends on infra-migration PR mergingchild-ui → waits on REST contract emitted by backend childThe dashboard exposes parent/child timelines; coro campaign show renders ASCII-friendly dependency summaries for operators.
coro campaign CLI
All subcommands operate on existing campaign job IDs (/reference/cli/ for global flags).
| Command | Purpose |
|---|---|
coro campaign list | Enumerate Runs whose workflow is the campaign markdown. |
coro campaign show --job <id> | Prints child statuses, phases, tracker keys, aggregated token usage/cost estimates. |
coro campaign skip --job <id> --child <name> | Marks a child logically complete — unblocks dependents (use sparingly for genuinely obsolete scopes). |
coro campaign rerun --job <id> --child <name> | Re-dispatches a stalled/failed lane after remediation. |
coro campaign cancel --job <id> --child <name> | Bookkeeping cancel — does not violently kill an already running child but prevents fresh dispatch. |
Pair CLI usage with dashboard drill-down for logs and artefact links.
Lane parameters per child
Children still carry params.lane (fast, standard, deep, …) — align with risk heuristics (/guides/switch-lanes/). Avoid assigning DEEP to children that do not actually need analyser/QA phases; campaign cost multiplies quickly.
Related reading
- /guides/team-setup/ — tracker + SCM prerequisites for multi-repo campaigns.
- /guides/cookbook/ — “cross-service feature as campaign” recipe.