Skip to content

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:

  1. Campaign planner registers named children, optional tracker refs, and dependency edges.
  2. Dispatcher starts children when predecessors complete (complete/skipped).
  3. Campaign evaluator aggregates PR outcomes, verifies integration contracts across children, optionally files one memory propose_change PR 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 merging
child-ui → waits on REST contract emitted by backend child

The 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).

CommandPurpose
coro campaign listEnumerate 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.