ADR 0042 · caliband sibling-binary placement
- Status: accepted
- Date: 2026-05-26
Context
The workspace declares two binaries:
caliban— the primary user-facing TUI/CLI. Source at the workspace root (caliban/src/main.rs).caliband— the supervisor daemon (ADR 0037). Source nested under its owning crate atcrates/caliban-supervisor/src/bin/caliband.rs, declared via the[[bin]]entry incrates/caliban-supervisor/Cargo.toml.
ADR 0005 ("Workspace layout") establishes the convention that
"primary" binaries live at the workspace root. caliband does not —
it lives nested under its owning crate. ADR 0037 introduces the
daemon obliquely (its name, its on-disk paths, and its protocol) but
does not document the placement choice. This ADR records it.
Decision
caliband stays nested under caliban-supervisor as a secondary
binary, with its [[bin]] declaration in the supervisor crate's
Cargo.toml.
Consequences
- Clean process boundary between the user-facing
calibanCLI/TUI and the supervisor daemon. The two never share amainentry point; they communicate over a Unix socket per ADR 0037. - Direct crate access.
calibandconsumescaliban-supervisor's modules directly without going through a public API surface — appropriate because they ship together. - No accidental dispatch. Launching
calibannever accidentally invokescaliband'smain(or vice versa); they're distinct binaries fromcargoand from the user's$PATH. cargo installrequires--bin calibandexplicitly. The supervisor crate's README documents this; thecaliban agentssubcommand spawnscalibandfrom the same install prefix ascaliban(per ADR 0037).- Workspace-root parsimony. The root stays focused on the primary
product (
caliban); the daemon is appropriately filed under the crate that owns its implementation.
Why this differs from ADR 0005
ADR 0005's "binaries at root" rule was written assuming a single binary. With two, the rule needs nuance:
- A binary whose sole purpose is to expose a crate's library functionality as an executable belongs with that crate.
- A binary that integrates many crates into the product surface belongs at the workspace root.
caliban is the latter; caliband is the former. This ADR amends
ADR 0005's rule by adding that nuance.
Revisit if
- A third sibling binary appears (e.g., a
caliban-mcpdaemon for remote MCP servers). At that point the workspace should consider abinaries/subdirectory rather than continuing the case-by-case pattern. calibandoutgrows its current sole consumer (thecaliban agentssubcommand) and starts being launched standalone by other tooling — it might then belong at the root for discoverability.
References
- ADR 0005 (workspace layout — sets the "binaries at root" convention this ADR refines).
- ADR 0037 (subagent isolation + fleet — introduces
caliband). - Source:
crates/caliban-supervisor/src/bin/caliband.rs. - Declaration:
crates/caliban-supervisor/Cargo.toml([[bin]]).