Repository navigation
The onboarding release. v0.2.0 shipped a key-free teammate path that could not
actually be reached by a teammate without a key — anyone installing @latest
before this tag gets that build, so this is the version to point a new coworker at.
-
The key-free teammate path actually works now — found by dry-running the tool
as a new coworker (cleanGOBIN, a separateHOMEper machine, a stand-in
git remote, nothing from the checkout onPATH). Three defects, all inside the
first four minutes:ettle mcprequired an API key to start, which made the key-free path
unreachable by exactly the person it was built for. Client-side distillation
exists so a teammate never needs a key;ettle_emitwithatomsand
ettle_respondmake no model call at all. The key is now optional: without
one the server serves that half and the model-calling tools return
mcpserver.ErrNoKey, which names the alternative (ettle_distill+atoms)
rather than reporting a bare missing key.ettle mcphad no--roomand kept the horizon in a process-local map,
so two people on two machines never saw each other's atoms over MCP — the
distributed path and the key-free path did not intersect anywhere. The
horizon now rides the sametransport.Transportseam the CLI uses
(ettle mcp --room <name>, or--transport), with a fold-by-participant at
the read side so a re-emit overwrites on an append-only bus. Default is
unchanged: in-process, this server only.ettle room joinprinted the one command guaranteed to fail for a
keyless joiner (use it: ettle standup --room …). It now branches on whether
a key is present and leads with what will actually work.ettle roomwith no
args gained a real usage block.
Verified end to end after the fix: a keyless "Bob" drove
ettle mcp --room,
emitted client-distilled atoms into a git-backed room, and the key-holding
"Alice" reconcile caught the resulting collision (5/5 samples) across the bus. -
README install path made self-consistent, and the forge metadata refreshed.
The quickstart now leads withgo install …@latest, states the substitution in
the direction the examples are actually written (ettleforgo run ./cmd/ettle, not the reverse), and shows the installed-binary form in the
ettle roomblock — the distributed flow needs no bundledtestdata/, so that
is the block a teammate actually copies.claude mcp addis given both ways.
GitHub description, topics, and homepage updated: the old description predated
rooms and the key-free path, andhomepagewas unset.