Skip to content

Releases: mainplane-ai/mainplane

v0.5.9

Choose a tag to compare

@github-actions github-actions released this 30 Oct 01:36
123c206
  • Self-hosting at your own URL: install --url https://<host> (Windows: -Url), server quickstart --url, or mainplane-server url <url> on an installed harness runs it behind your own reverse proxy, with no cloudflared and nothing from Cloudflare. The config's new url field keeps it; tunnel stays for Cloudflare tunnels, and a config with both is refused. The proxy must serve HTTPS on 443 with a certificate every device trusts and pass WebSocket upgrades; the self-hosting guide has Caddy, nginx and Tailscale serve examples. With its own URL the harness says within 20 s what is wrong: a name that does not resolve, an untrusted certificate, nothing answering, a 5xx from the proxy, or a proxy that refuses WebSocket
  • A harness URL that fails says why: when the pointer answers but the harness URL does not, login, worker join and a saved login name the cause (DNS, certificate, a Cloudflare tunnel that is not connected, a 5xx from the proxy, nothing answering). "Is this machine offline?" shows only when the pointer itself cannot be reached
  • Workers: mainplane worker rename <name> <new> (PUT /workers/{name}/name) renames a worker in place, with its keys and mesh address. On Linux without systemd, as in most containers, mainplane install stops before anything is written and says to run mainplane worker by hand
  • Harness: a background job that loses contact (its worker drops, or the harness restarts) is a system record that opens nothing and comes with the next message; a job that exits still opens its session. A session's .log copies to workers run one at a time, so an older copy never lands last
  • Providers: images are fit to each vendor's limits when the request is built, once per image from its own record, so an image the harness accepted can no longer break later requests. At a session's image limit, later images are replaced by a note to continue in a new session. The catalog adds GPT-6.1 Terra on OpenAI, OpenRouter and the ChatGPT subscription
  • Terminal app: markdown tables render in a box, with cells wrapped in their columns and rows stacked when the terminal is narrow. Shift+Enter makes a new line in Windows consoles. Ctrl+K deletes to the end of the line and Ctrl+E goes to it on every OS (Continue and Workers stay on /continue, /workers and Ctrl+P). Cmd+Delete deletes to the start of the line in Ghostty, iTerm2 and kitty. A startup reply that conhost sends without its ESC is no longer typed into the input
  • npx mainplane and uvx mainplane run the CLI: the npm and PyPI packages download the release binary for the machine and check it against the release's SHA256SUMS

v0.5.9-rc.2

v0.5.9-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Oct 01:05
123c206
  • Self-hosting at your own URL: install --url https://<host> (Windows: -Url), server quickstart --url, or mainplane-server url <url> on an installed harness runs it behind your own reverse proxy, with no cloudflared and nothing from Cloudflare. The config's new url field keeps it; tunnel stays for Cloudflare tunnels, and a config with both is refused. The proxy must serve HTTPS on 443 with a certificate every device trusts and pass WebSocket upgrades; the self-hosting guide has Caddy, nginx and Tailscale serve examples. With its own URL the harness says within 20 s what is wrong: a name that does not resolve, an untrusted certificate, nothing answering, a 5xx from the proxy, or a proxy that refuses WebSocket
  • A harness URL that fails says why: when the pointer answers but the harness URL does not, login, worker join and a saved login name the cause (DNS, certificate, a Cloudflare tunnel that is not connected, a 5xx from the proxy, nothing answering). "Is this machine offline?" shows only when the pointer itself cannot be reached
  • Workers: mainplane worker rename <name> <new> (PUT /workers/{name}/name) renames a worker in place, with its keys and mesh address. On Linux without systemd, as in most containers, mainplane install stops before anything is written and says to run mainplane worker by hand
  • Harness: a background job that loses contact (its worker drops, or the harness restarts) is a system record that opens nothing and comes with the next message; a job that exits still opens its session. A session's .log copies to workers run one at a time, so an older copy never lands last
  • Providers: images are fit to each vendor's limits when the request is built, once per image from its own record, so an image the harness accepted can no longer break later requests. At a session's image limit, later images are replaced by a note to continue in a new session. The catalog adds GPT-6.1 Terra on OpenAI, OpenRouter and the ChatGPT subscription
  • Terminal app: markdown tables render in a box, with cells wrapped in their columns and rows stacked when the terminal is narrow. Shift+Enter makes a new line in Windows consoles. Ctrl+K deletes to the end of the line and Ctrl+E goes to it on every OS (Continue and Workers stay on /continue, /workers and Ctrl+P). Cmd+Delete deletes to the start of the line in Ghostty, iTerm2 and kitty. A startup reply that conhost sends without its ESC is no longer typed into the input
  • npx mainplane and uvx mainplane run the CLI: the npm and PyPI packages download the release binary for the machine and check it against the release's SHA256SUMS

v0.5.8

Choose a tag to compare

@github-actions github-actions released this 28 Oct 02:24
e552ac4
  • Quickstart: the update and data sharing questions cover the screen, one at a time, instead of dimming the step behind them. A new session with nothing chosen, on a harness with no earlier session, takes its provider's middle model, such as Claude Sonnet 5.5 or GPT-6.1 Sol, marked in the catalog's new self-hosted-default group; before, it took Claude Opus 5.5 or the provider's first model. With an earlier session, a new one still takes that session's model. The first message typed is now "Quickly explain to me how Mainplane works, what computers you have access to, and what you can do with ASCII diagrams"
  • Terminal app: /workers on a new session's screen sets the workers it is made with. A sent home draft no longer comes back on every new session. A message sent from a new session is posted even if the screen leaves before the session is made
  • Workers and drives: an offline worker keeps its name until it is removed. A node that takes a name over takes its address too, so mounts of a reinstalled drive server reach it. A macOS worker refuses to start while another worker's utun holds the mesh route, and says how to clear a drive macOS will not unmount. Workers bound reads, frame lengths and long output lines, and reap killed interpreters
  • Harness: stop kills on every worker the session ever listed. Frame writes to a worker that stopped reading are bounded. A config or auth table is never read half written. Deleting one session twice at once no longer deadlocks. Data sharing keeps its offsets after a failed post
  • Providers: claude-code claims the turn it resumes, so two forks of one context do not race. Malformed stream events return errors instead of panicking
  • Onboarding: a stale login says so, downloads say they start, and the connector finds the harness again when a call fails at its tunnel URL. Releases ship THIRD_PARTY_NOTICES

v0.5.8-rc.2

v0.5.8-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Oct 02:06
e552ac4
  • Quickstart: the update and data sharing questions cover the screen, one at a time, instead of dimming the step behind them. A new session with nothing chosen, on a harness with no earlier session, takes its provider's middle model, such as Claude Sonnet 5.5 or GPT-6.1 Sol, marked in the catalog's new self-hosted-default group; before, it took Claude Opus 5.5 or the provider's first model. With an earlier session, a new one still takes that session's model. The first message typed is now "Quickly explain to me how Mainplane works, what computers you have access to, and what you can do with ASCII diagrams"
  • Terminal app: /workers on a new session's screen sets the workers it is made with. A sent home draft no longer comes back on every new session. A message sent from a new session is posted even if the screen leaves before the session is made
  • Workers and drives: an offline worker keeps its name until it is removed. A node that takes a name over takes its address too, so mounts of a reinstalled drive server reach it. A macOS worker refuses to start while another worker's utun holds the mesh route, and says how to clear a drive macOS will not unmount. Workers bound reads, frame lengths and long output lines, and reap killed interpreters
  • Harness: stop kills on every worker the session ever listed. Frame writes to a worker that stopped reading are bounded. A config or auth table is never read half written. Deleting one session twice at once no longer deadlocks. Data sharing keeps its offsets after a failed post
  • Providers: claude-code claims the turn it resumes, so two forks of one context do not race. Malformed stream events return errors instead of panicking
  • Onboarding: a stale login says so, downloads say they start, and the connector finds the harness again when a call fails at its tunnel URL. Releases ship THIRD_PARTY_NOTICES

v0.5.7

Choose a tag to compare

@github-actions github-actions released this 26 Oct 16:05
b4ad0c2
  • The terminal app asks to update when the harness is behind the latest release: "Mainplane vX is available. Update now?" Enter updates the harness, waits for it to come back, then updates the app and opens it again. Esc skips that release until a newer one. /settings still updates anytime, and offers only a newer release, never an older one
  • POST /settings answers a failed update with 500, not 502, since a proxy answers 502 while the harness restarts

v0.5.7-rc.2

v0.5.7-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Oct 07:08
b4ad0c2
  • The terminal app asks to update when the harness is behind the latest release: "Mainplane vX is available. Update now?" Enter updates the harness, waits for it to come back, then updates the app and opens it again. Esc skips that release until a newer one. /settings still updates anytime, and offers only a newer release, never an older one
  • POST /settings answers a failed update with 500, not 502, since a proxy answers 502 while the harness restarts

v0.5.7-rc.1

v0.5.7-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Oct 06:47
90d0ca4
  • The terminal app asks to update when the harness is behind the latest release: "Mainplane vX is available. Update now?" Enter updates the harness, waits for it to come back, then updates the app and opens it again. Esc skips that release until a newer one. /settings still updates anytime, and offers only a newer release, never an older one
  • POST /settings answers a failed update with 500, not 502, since a proxy answers 502 while the harness restarts

v0.5.6

Choose a tag to compare

@github-actions github-actions released this 26 Oct 01:38
c8623d1
  • Data sharing permission: the quickstart, after the providers step, and the terminal app, on first open, ask "Help improve Mainplane": allow the use of your sessions to improve Mainplane and train AI models. Nothing is shared until the user allows it. When allowed, the harness sends the session records written after that to data.mainplane.ai, with provider keys and common key formats in text bodies replaced. With DO_NOT_TRACK set, there is no question and nothing is sent. The quickstart's line about anonymous usage data is gone
  • /settings in the terminal app shows the harness version, updates the harness to the latest release, and turns data sharing on or off. GET /settings and POST /settings do the same over the API. An update is installed by the admin worker, checked against the release signature as worker updates are, and restarts the harness
  • Subscription sign-in in the terminal app opens its dialog at once. The dialog shows the URL, to select and copy, with words for a browser on another machine: visit the URL, log in, paste the address it sends you to. The paste field shows the shape of that address. A browser on the app's machine still opens and ends the sign-in by itself. The quickstart's /providers shows the list of commands above the input, as in a session

v0.5.6-rc.1

v0.5.6-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Oct 00:34
c8623d1
  • Data sharing permission: the quickstart, after the providers step, and the terminal app, on first open, ask "Help improve Mainplane": allow the use of your sessions to improve Mainplane and train AI models. Nothing is shared until the user allows it. When allowed, the harness sends the session records written after that to data.mainplane.ai, with provider keys and common key formats in text bodies replaced. With DO_NOT_TRACK set, there is no question and nothing is sent. The quickstart's line about anonymous usage data is gone
  • /settings in the terminal app shows the harness version, updates the harness to the latest release, and turns data sharing on or off. GET /settings and POST /settings do the same over the API. An update is installed by the admin worker, checked against the release signature as worker updates are, and restarts the harness
  • Subscription sign-in in the terminal app opens its dialog at once. The dialog shows the URL, to select and copy, with words for a browser on another machine: visit the URL, log in, paste the address it sends you to. The paste field shows the shape of that address. A browser on the app's machine still opens and ends the sign-in by itself. The quickstart's /providers shows the list of commands above the input, as in a session

v0.5.5

Choose a tag to compare

@github-actions github-actions released this 23 Oct 09:37
1fe0bbc
  • run takes background: true: the code runs as a job in a new interpreter process on the worker, with no shared state and no timeout, and its output goes to <scratch>/jobs/<call id>.log. The result comes at once with the job's pid and log path. When the job ends, a message via job brings its exit code, run time and the tail of its log, and opens a closed session like any message. A lost connection or a harness restart posts a message that the job may still be running. Stop ends a session's jobs on the workers connected at the time
  • run takes an optional timeout in seconds. The default stays 10 minutes
  • Each message the model sees begins with a line via <via>, who sent it. Before, the model never saw it
  • Stop works on a session that is not stepping: it kills the session's interpreter processes on its connected workers and writes a system record naming who stopped it. Delete stops the session first and waits for its step to end, and a session past its context limit kills its processes. In the terminal app, /stop on an idle session does the same
  • Harness API for setup: GET / adds network (starting, ready, or why the tunnel last stopped the harness), GET /join gives the network name and device code, POST /keys {"name"} makes an api key (409 when the name is in use), and GET /drives, PUT /drives/{name} {"server","workers"} and DELETE /drives/{name} change drives as a config save does. PUT refuses a server that is not connected or cannot serve drives. GET /workers shows drive_server: true for a worker that can serve drives: Debian or Ubuntu, with no other NFS export and port 445 free
  • Server quickstart: curl -fsSL https://mainplane.ai/install | sh -s -- server quickstart (and the Windows line) installs the harness and opens the terminal app on the server machine, as its operator, for a guided setup: a provider, then optionally workers, the app on another device and a shared drive for all workers, then a new session with a first message typed. Each step is the words and the keys under them: Enter continues, Esc goes back. The server machine's CLI, TUI and admin worker reach the harness over loopback, so the TUI opens before the tunnel is up
  • Subscriptions: chatgpt, a ChatGPT plan through Sign in with ChatGPT, and claude-code, a Claude Pro/Max plan through Anthropic's own claude binary (self-hosted only). Picking either in /providers opens the browser to sign in, and the app says Connected when it is done, with no paste. With the browser on another machine, paste the address the browser ends on. mainplane signin <provider> does the same from the CLI
  • Providers: the HTTP shapes take an optional url, the base url of the vendor's SDK. The catalog adds 8 labs, OpenCode Go (one key across four shapes) and fast variants such as provider/model:fast with their own price. The alibaba provider is gone; Qwen stays through OpenCode Go and OpenRouter. openai-chat keeps and replays the reasoning OpenRouter and OpenCode Go stream (reasoning, reasoning_details)
  • Terminal app: /providers (alias /connect) lists providers in sections, subscriptions first. Keys show as typed. The empty new session screen shows a biplane behind the wordmark that turns toward the mouse, and the model and context limit under the input; the animation stops while the terminal is out of focus. The light theme only recolors
  • Fixes: a worker puts its mesh route and rule back after systemd-networkd removes them, and never removes another worker's. On Windows, an update no longer fails with "Access is denied" while a TUI runs from an old binary. Uninstalling the harness removes the old binaries its updates left beside the worker's, also when the worker uninstalls itself with an older release
  • The release gate runs on machines of its own. It wipes each one first, then installs the previous release with two providers and a session, updates it to the new one and checks that both and the session survive