// baro.rs

baro

Backgroundagentruntimeorchestrator

Plan. Parallelize. Review. Ship.

$ npm install -g baro-ai

Type a goal. Get a PR.

// agentic environment

Not a pipeline. A bus.

baro is built on the Mozaik agentic environment. The Conductor has no run() method. Every participant subscribes to event types and emits others — spawning a story, evaluating a turn, replanning the DAG are all reactions, not steps in a loop.

What you'd usually write
// the usual orchestrator
async function run(prd) {
  for (const level of prd.levels) {
    const results = await Promise.all(
      level.stories.map(s => runStory(s))
    )
    if (anyFailed(results)) {
      const fixes = await reviewer(results)
      await Promise.all(fixes.map(runStory))
    }
  }
  await commitAndPush()
  await openPR()
}
What baro does
// baro on the Mozaik bus
class Conductor extends Participant {
  onContextItem(item: ContextItem) {
    if (item.type === "RunStartRequest")
      this.emit(LevelComputeRequest())


    if (item.type === "StoryResult")
      this.checkLevel(item)


    if (item.type === "LevelCompleted")
      this.emit(this.nextLevelOrFinish())


    // no run(), no while, no Promise.all
  }
}
// the cast — 12 participants, one bus
  • ArchitectDesigns the DAG up front — runs once before any story spawns (0.25)
  • ConductorOrchestration state machine — drives the run by reacting
  • StoryFactorySpawns Story Agents on each StorySpawnRequest
  • StoryAgentRuns one story via Claude CLI, with retries and timeout
  • LibrarianCross-agent memory — indexes outputs of exploration tools
  • SentryFlags overlapping file writes across concurrent stories
  • CriticPer-turn acceptance-criteria evaluator (opt-in)
  • SurgeonEmits DAG replans when a story fails terminally (opt-in)
  • FinalizerCommits the run, pushes the branch, opens the PR
  • OperatorBridges external commands (TUI, web UI) into bus events
  • AuditorJSONL log of every event on the bus
  • CartographerTranslates bus events into UI frames for the Rust TUI
// features

Six things that earn it the orchestrator name.

  • Parallel DAG executor

    Topological sort with level grouping and cycle detection. Independent stories run simultaneously, dependents wait their turn.

  • Claude or GPT, one flag

    `--llm claude` shells out to Claude Code on your Max subscription. `--llm openai` calls GPT-5.5 natively through Mozaik. Routed defaults per phase on both — Architect plans, Story Agent executes, Critic reviews — with per-phase overrides for everything.

  • Review agent

    After every level, a review agent checks work against acceptance criteria. Spawns fix stories automatically when something is off.

  • Live TUI

    Story status, agent logs, DAG view, stats. Nothing happens behind your back — every event lands in the dashboard in real time.

  • Resume incomplete runs

    Plans persist as prd.json. If a run is interrupted or you started with --dry-run, pass --resume to continue with the same DAG.

  • PR with full summary

    On a feature branch, never on main. PR body includes the story table, build stats, time saved vs sequential, and review notes.

// deep dive

We wrote up the full engineering story — Getting the maximum out of my Claude Code subscription

// quick start

Install. Point. Ship.

$ npm install -g baro-ai
  • Basic — give it a goal, walk away (Claude Code under the hood)
    $ baro "Add JWT authentication with role-based access control"
  • Route every phase through GPT-5.5 instead
    $ OPENAI_API_KEY=sk-... baro --llm openai "Refactor the database layer"
  • Limit parallelism on big plans
    $ baro --parallel 3 "Refactor the database layer"
  • Dry-run first, run later
    $ baro --dry-run "Add WebSocket support"
    baro --resume
  • Pin a single model across every phase
    $ baro --llm openai --model gpt-5.4 "Add WebSocket support"
baro·/ˈbɑː.roʊ/·noun (slang)

Untranslatable. Approximated by cool, sharp, the real thing — but if any of those were enough, the word would not exist. Its negation carries the weight: when something is not baro, it isn't merely uncool, it is actively, irredeemably wrong.

developersarebarosoftwareisbaroagentsarebarocodingisbarothe futureisbarodevelopersarebarosoftwareisbaroagentsarebarocodingisbarothe futureisbaro
// try baro

npm i -g baro-ai

Type a goal. Get a PR.

$ npm i -g baro-ai