Skip to content

Execution Flow

sequenceDiagram
    participant OC as OperatorConsole
    participant OPS as OperationsCenter
    participant PM as PlatformManifest
    participant SB as SwitchBoard
    participant BE as ExecutionBackend
    participant MP as ManagedProject
    participant CU as Custodian

    OC->>OPS: task intent
    OPS->>PM: resolve topology and visibility
    OPS->>SB: route proposal using CxRP
    SB-->>OPS: lane decision (backend_name, worker_backend)
    OPS->>BE: dispatch to backend adapter
    note over BE: TeamExecutor / DAGExecutor / CritiqueExecutor<br/>— or —<br/>DirectLocal / AiderLocal (via CoreRunner subprocess layer)
    BE->>MP: execute workflow or agent topology
    MP-->>BE: artifacts and reports
    BE-->>OPS: normalized ExecutionResult
    OPS->>CU: validate policy and hygiene boundaries

AI execution backends (ADR 0005)

The three AI execution backends implement distinct multi-agent topologies:

Backend Pattern Primary use
TeamExecutor Coordinator → workers → verifier cycles Team topology, parallel agent stages
DAGExecutor DAG with concurrent layer execution Structured multi-step workflows
CritiqueExecutor Adversarial proposer/critic or Reflexion Quality-gated tasks, adversarial review

All three call the Claude Code or Codex CLI via subprocess internally (worker_backend from SwitchBoard lane decision).

Direct-local and aider-local adapters

For simpler single-agent tasks, OperationsCenter uses its direct_local and aider_local adapters. These delegate subprocess mechanics to CoreRunner — a library that provides process-group-safe child process execution, timeout enforcement, and stdout/stderr capture to files.

DirectLocalBackendAdapter → CoreRunner.run() → SubprocessRunner → claude CLI
AiderLocalBackendAdapter  → CoreRunner.run() → SubprocessRunner → aider CLI

CoreRunner is not an AI execution backend; it is a subprocess mechanics library shared by those two adapters.

worker_backend propagation

SwitchBoard encodes the CLI backend preference (claude_code or codex_cli) in LaneDecision.metadata["worker_backend"]. OperationsCenter forwards this through the adapter into the executor, where it controls which CLI is spawned.