Skip to content

v0.2.0 — the distributed release

Choose a tag to compare

@justinstimatze justinstimatze released this 23 Jul 04:02
· 102 commits to main since this release

The distributed release. ettle stopped being a single-host demo: a team can join a room with one command over a private git repo, see who's present, and — new here — take part without an API key of their own.

⚠️ Still an early design-stage proof-of-concept. The coordination engine runs; its accuracy is not validated. ettle eval is an inspectable smoke test on a tiny synthetic corpus, not a precision/recall measurement. Treat this as a thesis with a runnable skeleton.

Install

go install github.com/justinstimatze/ettle/cmd/ettle@v0.2.0

Or clone if you want the bundled testdata/ the quickstart uses.

Highlights

  • ettle room — one-command join for distributed mode. room init <git-url> / room join <git-url> / room list / room status. A private git repo is the bus (via leat); the git URL is the invite. Each agent appends only its own lane, so pushes never conflict, a line whose author ≠ its lane is dropped, and git log is the audit trail. Day-to-day use is just standup --room <name> — no env vars, no paths.
  • ettle room status — the presence view. Who's in the room and what each person is working on, read straight off the bus with no detection and no model call.
  • Client-side distillation — one API key per room, not one per person. ettle_emit now accepts already-typed atoms, and a new ettle_distill MCP prompt hands your own agent the distillation rules. Anyone driving ettle from Claude Code or Cursor contributes with no key and no server-side model call. This strengthens the privacy boundary: raw notes never leave the person's machine at all, instead of crossing to the server and being dropped there. Client atoms are still sealed server-side (caps, secret scanner, privacy override) and attribution is forced by construction.
  • Renamed the core object knot → tangle. A knot can be tied in a single thread; a tangle is several threads interfering — which is what the object actually is.
  • Verdict labels record the tangle's recurrence, so human real/not_real/handled answers are learnable when they accrue. The calibration loop itself remains deliberately unbuilt.
  • Prior art §10 — a close read of Dust's "pods": the same single-player→multiplayer diagnosis, answered with pooled shared state rather than bounded per-person state.

Full detail in CHANGELOG.md.