Skip to content

Conductor

Steel-tech edited this page Jul 24, 2026 · 1 revision

🎩 Conductor (structupath.conductor)

Mental model: "Run a team β€” a builder, a validator, a reviewer β€” each as a real, visible, attachable agent pane, with one orchestrator driving them." Unlike Swarm's N-identical fan-out, Conductor's workers are role-differentiated and mixed-vendor (claude/codex/pi side by side), and they survive the orchestrator β€” a crashed driver doesn't kill the team.

Repo: StructuPath/herdr-conductor Β· Full reference: the repo README

The split that makes it work

Half Where Who drives it
Transport (the loop) scripts/conductor-lib.sh An orchestrating agent sources it and runs the loop
Operational surface the board + stand-down actions You / the TUI menu

Dispatch is agent-driven, not an action β€” herdr plugin actions get no argv/TTY, so the intelligence that decomposes a feature and assigns roles is the agent's job, not a shell script's.

The 2 actions

Action What
board Live pane: one row per worker β€” role, kind, pane, status (from herdr agent list, not screen-scraping), cwd. Refreshes every 2s; q quits.
stand-down Closes only conductor-owned worker panes for the active run (ownership-verified); git branches + worktrees kept.
herdr plugin action invoke board      --plugin structupath.conductor
herdr plugin action invoke stand-down --plugin structupath.conductor

The agent-driven loop (what the orchestrator does)

. scripts/conductor-lib.sh
conductor_start_worker builder  claude "$engine_wt"          # warms by default
conductor_start_worker reviewer codex  "$repo" -- --sandbox read-only
conductor_dispatch builder "$builder_prompt"
conductor_await    builder && conductor_collect builder      # settles on the report SENTINEL
conductor_teardown

Three things to remember

  1. Settle β‰  success β€” a worker hits idle after any turn (even a clarifying question). Completion is a <!-- REPORT-COMPLETE --> sentinel in .conductor/report.md, never agent state. The lib enforces this (freshness-checked).
  2. Warm by default β€” a cold interactive agent opens on a welcome screen and drops its first prompt; conductor_start_worker warms it. --no-warm to skip.
  3. Files both directions β€” mission in via .conductor/task.md, result out via .conductor/report.md (auto-gitignored). Panes are for humans to watch and attach to.

The composition

CONDUCTOR decides   β†’   SWARM isolates        β†’   GUARD enforces
(this plugin)           (worktree per writer)     (read-only audit for review roles)

Requirements

herdr β‰₯ 0.7.5, Node β‰₯ 20, Python 3, Bash 3.2+. macOS / Linux.