Skip to content

ADR 0004: Two-Binary ShellKit Architecture

Status: parked Last reviewed: 2026-06-20 Superseded by: DECISIONS.md#parked-shellkit-direction Accepted: 2026-05-21

This ADR is a historical record for the removed ShellKit Rust architecture. ShellKit is parked and this two-binary design is not current repo direction.

Context

Shell startup has a strict latency and failure budget, while machine/bootstrap orchestration can be slower and more featureful. A single broad binary in the startup path would couple those concerns.

Decision

Use one Rust workspace with separate binaries:

  • shellkit: full CLI for planning, applying, updating, diagnostics, tools, config, and agent workflow integration.
  • shellkit-shim: tiny runtime helper for shell startup and cache repair.

Normal shell startup must not invoke the full machine orchestrator.

Consequences

  • Runtime code stays small enough for startup-sensitive paths.
  • Machine/bootstrap orchestration can grow without taxing every interactive shell launch.
  • Changing the two-binary architecture is a decision gate.

Alternatives considered

  • Single ShellKit binary for everything. That is simpler initially, but it risks pulling heavy dependencies into shell startup.
  • Shell-only implementation. That avoids Rust bootstrap work, but it keeps timeout handling, process-tree cleanup, diagnostics, and cross-shell behavior fragmented.

Follow-up work

  • Scaffold the Rust workspace and add both binary targets.
  • Keep profile integration out of the first scaffold commit.