Skip to the content.

Kelix — final build report

Provenance: Early dogfood runs documented here used the former project name Kalph before the Kelix rename.

Date: 2026-07-02. This report closes Phase 8 (D4) of PLAN.md. Everything referenced here is committed in this repository or copied into docs/proof/.

Repo and quickstart

Deviations from the Ralph invariants

The four invariants (docs/research/ralph-invariants.md) are preserved: static prompt, fresh agent process per iteration, deterministic stop, externalized state. Deliberate deviations, all additive:

  1. Sentinel is necessary but not sufficient. Ralph stops on the sentinel; Kelix honors KELIX COMPLETE only after the runner independently re-runs the configured verify commands (D4). A lying sentinel is ignored.
  2. The prompt has budgeted data slots. The template is static, but episode digest / project memory / skills / mailbox are injected as read-only, character-capped data blocks. Ralph’s “prompt never changes” becomes “instructions never change; reference data is versioned in files.”
  3. The loop stops early when out of work per-agent. In fleet mode an agent whose claim hook finds no eligible task completes rather than burning iterations (Ralph would keep looping until cap).
  4. Extra rails Ralph doesn’t have: worktree isolation, auto-checkpoint, circuit breaker, command denylist, secret scrubbing, kill switch.

Autonomous decisions (full list in DECISIONS.md)

D1 Kiro CLI headless as primary backend · D2 Python 3.11+ stdlib-only · D3 runner state JSON / human state Markdown · D4 sentinel + verified-done · D5 agentskills.io SKILL.md format · D6 kiro/cmd/mock adapters · D7 Apache-2.0 · D8 self-hosting switchover after parity demo · D9 repo verify gate · D10 TOCTOU claim-race hand-fix (bootstrap intervention) · D11 fresh sample repo for dogfood · D12 git-local PR evidence · D13 hung verifier agent killed by hand (bootstrap intervention).

Phase 8 results

D1 — Dogfood run (docs/proof/dogfood-run.log, dogfood-retrospective.md)

Sample project: tasklite (stdlib task-tracker library), 12 owner tasks spanning package skeleton, dataclass model, store, persistence, CLI, search, due dates, stats, README. One unattended kelix run --max-iterations 25 with cursor-agent as the backend:

D2 — Fleet proof (docs/proof/fleet-session*.log, fleet-verifier-review-note.md)

Two 3-agent fleet sessions (builder, verifier, scribe) on the same repo:

D3 — Injection drill (docs/proof/injection-drill.log, injection-drill-backlog.diff)

Two layers of proof:

Self-hosting story

Unverified / deferred — stated plainly