683a673d
docs: v0.0.5 and v0.0.6 release notes
a73x 2026-08-13 06:19
Commit message
docs/releases.md
| Old | New | ||
|---|---|---|---|
| @@ -5,6 +5,91 @@ Tarballs and checksums for every release live at | |||
| 5 | newest. The [quickstart](quickstart.md) takes a release from download to a | 5 | newest. The [quickstart](quickstart.md) takes a release from download to a |
| 6 | running VM. | 6 | running VM. |
| 7 | 7 | ||
| 8 | ## v0.0.6 | ||
| 9 | |||
| 10 | The distance from a token to a running VM. `eitri init` is one guided command | ||
| 11 | that takes you from a fresh access token to a first shell — it proves your | ||
| 12 | token, settles your SSH CA (uses the one you have, never blindly makes a | ||
| 13 | second), and writes the config every later command reads. After it, `eitri ssh | ||
| 14 | <vm>` needs no environment at all. | ||
| 15 | |||
| 16 | **One guided setup.** `eitri init` walks the steps and confirms each before it | ||
| 17 | acts: which plane, which tenant, which signing key. It never generates a CA when | ||
| 18 | you already have one, and it tells you plainly when a key it finds is one no | ||
| 19 | guest will trust — the failure that used to read as a bare "permission denied." | ||
| 20 | |||
| 21 | **One MCP surface.** eitri speaks MCP in exactly one place: `/mcp` on the | ||
| 22 | control plane, with a bearer token. The local stdio binary is gone — a | ||
| 23 | self-hoster gets an MCP server by hosting the plane, and there is one credential | ||
| 24 | story to keep honest instead of three. | ||
| 25 | |||
| 26 | **The console uses the width it is given.** Wide viewports get two real | ||
| 27 | columns — the facts a page reports on the left, the actions you can take on the | ||
| 28 | right — instead of an 80-column measure with a field of empty space beside it. A | ||
| 29 | guest names the CAs it trusts, baked in when it was created. An offered agent | ||
| 30 | upgrade shows itself as pending rather than a button that ignores you. A VM being | ||
| 31 | created says what it is doing — "downloading image 1.2/3.7 GiB" — instead of a | ||
| 32 | silent "creating," and a published port counts the sessions it carries. | ||
| 33 | |||
| 34 | **Refusals that tell you the fix.** A tenant with no registered CA is told the | ||
| 35 | three ways to add one, not just told no. A full host names what is holding its | ||
| 36 | capacity — and if it's a VM you just deleted, it says to wait for the teardown | ||
| 37 | rather than to delete another. A gate bound to every interface with no name to | ||
| 38 | advertise refuses to boot and says so, instead of booting into certificates no | ||
| 39 | client can verify. A sign-in that fails names the origin that broke it — usually | ||
| 40 | a browser at the wrong address for the console. | ||
| 41 | |||
| 42 | **Known limits.** | ||
| 43 | |||
| 44 | - The local stdio MCP binary is retired. If you registered it with `claude mcp | ||
| 45 | add eitri`, point your client at `/mcp` on your plane with a personal access | ||
| 46 | token instead. | ||
| 47 | - Self-hosters: a gate bound to a wildcard (`:2222`) now requires | ||
| 48 | `ssh_gate_domain` and refuses to start without it — a gate has to know the name | ||
| 49 | clients dial. Set it, or bind one concrete address. | ||
| 50 | - The first v0.0.6 plane freezes each existing guest's trusted-CA set at | ||
| 51 | upgrade, so guests that never had a record now do — and can, for the first | ||
| 52 | time, be flagged when a tenant's CA set moves on. A VM created before this | ||
| 53 | shows its frozen set rather than "unrecorded." | ||
| 54 | - A mixed fleet: publishing a UDP port on a host still running a pre-v0.0.5 | ||
| 55 | agent is refused, because that agent would bind it as TCP and report it healthy | ||
| 56 | while it carried nothing. Upgrade the host's agent, then publish the port. | ||
| 57 | |||
| 58 | ## v0.0.5 | ||
| 59 | |||
| 60 | A published port can carry datagrams. Expose a VM's UDP port the same way you | ||
| 61 | expose a TCP one — DNS, game servers, anything that doesn't wait for a | ||
| 62 | handshake — and eitri carries the datagrams to the guest and the replies back. | ||
| 63 | Around it, VMs got sturdier: they persist by default, they recover their clock | ||
| 64 | after a host sleeps, and a host that can't certify a guest stops being somewhere | ||
| 65 | to put one. | ||
| 66 | |||
| 67 | **UDP exposures.** A published port is TCP or UDP now, chosen at create. Traffic | ||
| 68 | on a published port rides its own path so a busy port can't starve the fleet | ||
| 69 | management the same tunnel carries. | ||
| 70 | |||
| 71 | **Every VM is persistent.** A guest that outlives a reboot is the default and | ||
| 72 | the only mode — there is no per-VM knob to lose track of. A powered-off guest is | ||
| 73 | a stopped machine you can start again, not a thing that quietly vanished. | ||
| 74 | |||
| 75 | **A guest keeps its clock through a host's sleep.** Close a laptop that's | ||
| 76 | running guests, open it hours later, and the guests step their clocks back into | ||
| 77 | line instead of sitting in the past — the state that used to make a gate admit | ||
| 78 | you and the guest deny you. | ||
| 79 | |||
| 80 | **A host that cannot certify a guest is not a place to put one.** The plane | ||
| 81 | won't schedule a VM onto a host whose agent can't sign the guest's host key — the | ||
| 82 | VM would boot unreachable. It refuses at create, naming the fix. | ||
| 83 | |||
| 84 | **Known limits.** | ||
| 85 | |||
| 86 | - Fielded hosts: the exposure session caps rest on the agent's file-descriptor | ||
| 87 | limit, which the shipped unit raises. A host whose unit predates that line | ||
| 88 | needs the unit reinstalled to get the higher ceiling. | ||
| 89 | - macOS hosts: every agent upgrade is a new binary, so macOS re-asks its Local | ||
| 90 | Network / privacy permission each time. Approve it in System Settings after an | ||
| 91 | upgrade, or the agent looks enrolled but silently can't reach its guests. | ||
| 92 | |||
| 8 | ## v0.0.4 | 93 | ## v0.0.4 |
| 9 | 94 | ||
| 10 | A PAT is enough. Point an LLM client anywhere on the internet at | 95 | A PAT is enough. Point an LLM client anywhere on the internet at |