Skip to main content

Why Broski Exists

Broski was built to close the gap between simple command runners and deterministic build systems.

The core gap​

Most teams use one of these patterns:

  • Make/Just: fast to adopt, but limited explainability and weak determinism.
  • Heavy build systems: strong determinism, but high complexity and onboarding cost.

Broski aims for the middle:

  • shell-first authoring
  • deterministic graph execution when declared
  • interactive mode for local DX
  • explicit cache miss reasoning

What teams struggle with today​

1) “Why did this rebuild?”​

Without manifest diffs, CI reruns are hard to reason about.
Broski answers with --explain against previous manifests.

2) “Why did this pass locally but fail in CI?”​

Implicit inputs cause nondeterministic behavior.
Broski requires explicit contracts for graph-mode tasks.

3) “Why is my local runner corrupting outputs on failure?”​

Partial outputs can leak from failed executions.
Broski uses transactional output promotion to keep artifact state safe.

Execution model at a glance​

Where Broski is stronger than Make/Just​

ProblemMakeJustBroski
Content-level cache keysNoNoYes
Structured cache miss reasonsLimitedNoYes
Transaction-safe output promotionNoNoYes
Interactive local task supportYesYesYes
Secret-safe explain outputNoNoYes
Live TUI dashboard with per-task ETANoNoYes
Cooperative soft/hard cancellationNoNoYes
Structured execution event stream (for CI/IDE integration)NoNoYes

Where to go next​