Maia OS builds
source-implemented candidateEach entry is a test build of Maia OS, either a nightly build or a canary build. Every capability in these builds is a source-implemented candidate: the code exists and qualification is pending. Test builds change often. Maia ships canary builds, and no stable release is planned. Work that is not built yet stays on the roadmap, marked planned. Every line gives the type of the change, its area and what changed.
- feat(session) show a turn's context in use against the model window (E5 context %)
- fix(node) give a coding Claude worker the permission callback that keeps AskUserQuestion
- fix(node) keep a coding Claude Session's sandbox sockets under the Unix path limit
- fix(node) mitigate the bwrap pid race for sandboxed coding Sessions on Linux
- feat(node) adopt a Claude Code session with host authority (D-198, slice 3)
- feat(node) launch a host-authority Codex Session on the user's own configuration (D-198)
- docs(swarm) state that host adoption is Claude Code only now the Codex launch landed (D-198)
- test(cli) reset the unpacked pack reference to main's measured size
- feat(node) enforce the coordinator approval grant (D-199, E4)
- feat(cli) show a Session's latest turn and wait for a sent turn (E2, E3)
- feat(node) opt-in host-authority Session mode, slice 1 (D-198)
- docs(swarm) document a coding Session's lane from create to archive (E11)
- fix(node) keep a Session recoverable when its runtime ends as the Node stops
- feat(node) roll an upgrade back when the new release is not ready or loses a Session (ZU-A)
- feat(session) label a Session at creation and show labels in list and show (E1)
- feat(cli) read public events with maia events read (E8)
- feat(node) launch Claude Code with host authority as the user (D-198, slice 2)
- feat(node) drain to idle and a kill switch for remote installs (ZU-B)
- docs(node) add the zero-impact update recovery contract and spike results (ZU0)
- fix(sdk,cli) show why a saturated Session create was refused (E9)
- feat(node) fail an install whose Node would not survive a reboot (ZU-C)
- feat(session) report Session activity and the latest turn state, and wait on an activity (E5)
- feat(node) canary updater with verified npm release fetch (ZU2a)
- docs(operations) runbook for moving a running lane to Maia (E6)
- feat(node) configurable Session caps and a host headroom gate (E1, E9)
- feat(node) approval grant on the Project guard (D-199, E4 slice a)
- feat(node) announce Session activity changes (EV1b)
- fix(node) report unavailable containment below Landlock ABI 6
- docs(roadmap) plan zero-impact updates and the session-runner acceptance criteria (D-196)
- feat(node) list user Skills folders under hard containment (AI1b)
- feat(client) show a note when the Node pruned earlier Session history (EV0e)
- fix(release) expect a failed Skills scope on a Linux kernel below Landlock ABI 6
- fix(sdk) report a connection-limit refusal during discovery as saturated
- perf(node) warm the Skills package check and skip the running Node's re-hash (AI1b-perf)
- fix(release) keep the lifecycle's isolated home out of sticky /tmp
- feat(node) register the Session activity event kind with a payload schema (EV1a)
- feat(node) mark pruned event history with an oldest-retained cursor (EV0e slice 5a)
- feat(metrics) add the event journal pruner benchmark and warn-only collector (EV0e)
- feat(node) add the dormant event journal pruner and retention status (EV0e slice 4)
- feat(agents) maia agents detect (AI1)
- feat(node) prune the oldest event journal rows (EV0e slice 3)
- feat(cli) bundle the maia-sessions and maia-node Skills (AI0)
- feat(node) journal counters and ID watermark (EV0e slice 2, v074)
- docs(roadmap) plan routines and triggers RT0–RT3 (owner direction)
- refactor(node) only the events module reads the journal tables (EV0d-3)
- test(cli) fail when bundled guidance names a command or flag the CLI lacks (AI0)
- fix(node) report a closed storage connection as unavailable in node status
- feat(node) keep a Session's stop revision and an interrupt's phase as columns (EV0d-2)
- feat(node) keep a receipt's aggregate revision as a column (EV0d-1)
- docs(cli) describe the orchestration Skill without naming another tool
- perf(node) start through a launcher that enables the compile cache (MP5)
- feat(events) add the events.watch frames to the observation socket (EV0c-2)
- refactor(node) remove the unwired configuration resolver and writer, and ratchet unreachable files (F7a)
- feat(node) read the event journal through signed cursors (EV0c-1, D-188)
- docs plan agent integration AI0–AI3 and record D-190
- perf(node) hash the managed Pi interpreter in chunks (MP5)
- test(cli) prove --json successes, MCP framing and remote login under --node (MP2)
- refactor(node) one immediate-transaction helper and a ratchet against hand-written BEGIN (F6a)
- feat(session) --name, --cwd and named terminal keys (MP3)
- feat(metrics) print whole-server footprints for any terminal tool (MP0)
- feat(node) write events through one journal append (EV0b, D-188)
- feat(cli) enforce --node and --json parity across Node-backed commands (MP2)
- feat(node) decode controller policy rows and baseline SQL row assertions (F5)
- refactor(node) break the connection and harness import cycle (F4)
- feat(session) an orchestrator Session answers its direct children's questions (MP4, D-186)
- refactor(sdk) break the node-changes cycle (F3)
- feat session.wait blocks until a Session reaches a state (MP1)
- feat(quality) check package ownership, exports and layers (F2)
- refactor(release) drop the nightly channel and the latest promotion from the release scripts (D-185)
- feat(quality) ratchet the dependency graph with an exact cycle and edge baseline (F1)
- feat(protocol) register event kinds and the maia.event.v2 envelope (EV0a)
- perf(gate) cap gate concurrency, serialize gates per host, cache lint and typecheck
- docs specify one shared event core (D-188)
- docs use neutral example hosts and wording
- docs sync ROADMAP with shipped slices, canary wording, MP and Foundations tracks
- feat(publish) publish a canary per green push to main, stop nightlies (D-185)
- docs record the foundations audit and target architecture (F0, D-189)
- feat Connection grants per Workspace and Project, with single or rotating pools (S2, D-147)
- docs Routine gates, sandboxed Project setup and Session moves to a server (D-174)
- docs Maia's own terminal multiplexer in Rust and Alpha 1 (D-175)
- docs per-terminal footprint, agent-managed Routines, a Rust Node track and roles for people and agents (D-177–D-180)
- docs Alpha 1 lanes raise the CLI standalone ceiling by measured growth, to at most 385 KiB (D-181)
- feat(routine) run a Routine on demand with preview and confirmation (TM9a)
- fix(node) report undelegated cgroups instead of healthy process resources
- docs(routine) a manual fire fails when its routine is not active at the claim
- chore(deps) bump rustls from 0.23.43 to 0.23.46 in /apps/desktop/src-tauri
- feat(cli) one address space across Nodes (TM11)
- feat(metrics) terminal multiplexer suite with D-177's per-terminal costs (TM0)
- test(node) hold the S12b attach budgets in pnpm metrics, ten times them in pnpm test
- docs prioritize usable dogfood and keep Node on TypeScript/Effect
- feat register a running remote Node (maia node register, D-176)
- docs(benchmarks) screen engine measurements for the owner's pick (TM0)
- test(node) size the hang guards of built-process and SQLite tests for a loaded host
- feat(cli) route the agent loop and approvals by exact ID across Nodes (TM11b)
- fix(node) carry the coordinator principal over the SSH bridge so maia --node mcp is gated remotely
- feat(node) keep a Terminal's live output only in the Node's bounded memory (TM2a)
- feat(node) writable Claude Code and Codex Sessions on Linux Nodes, with the D-184 Claude sandbox mode
- feat(cli) route the coordinator MCP tools across Nodes (TM11b B+C)
- feat(node) run a person's Terminal in a PTY on a Linux Node (TM1a)
- fix(node) record the exit code of a failed Claude command
- feat(release) linux-x64 install and update, remote install from npm and pnpm packages, Linux controller unit recipe (D-183)
- test(node) size three hang guards to 3x their measured time
- feat(dev) lab fleet of real Nodes over loopback SSH, in delegated user units (D-183)
- fix(release) install the release under umask 022 and say why a writable worker package is refused
- feat(node) stream Session attach over the SSH bridge (TM3)
- feat(cli) hold the dashboard's connection to every Node (D1a1 data layer)
- docs add the supervisor protocol for agent questions
- fix(sdk) give operations that hash a vendor binary a deadline that outlasts the work
- fix(agent) pin every Pi package, and check the installed Pi graph before and after publishing
- feat(cli) Ctrl-Z suspends maia dashboard like the terminal does (D1a2-a)
- fix(publish) give the Linux lifecycle a private Node.js and name the refused path kind
- fix(deps) patch undici and zod (DX4 alert triage)
- fix(ci) a Markdown-only change skips package builds and tests
- docs trace without content, Skills as SOPs, automatic onboarding, tool conventions and context efficiency (D-166–D-173)
- fix(sdk) recognize MaiaClientError across two copies of the SDK
- feat(cli) maia dashboard draws the portfolio Tree and the status bar
- fix(node) keep Node tests independent of the host and keep a tool reply when stdin close races a clean exit
- feat(client-core) terminal chords, terminal-only commands and reserved chords in the registry
- fix(client-core) route actions to the Node that holds their target and refuse shared IDs
- feat(cli) maia dashboard draws a static frame through a scoped pi-tui adapter (D1a0)
- feat(client-core) carry the request deadline as deadlineAt and admit reads before it (D1a1)
- fix(node) answer socket overflow with saturated instead of dropping it
- feat(release) publish @maiaos/client-core as the sixth npm package
- chore(metrics) accept the first npm pack of @maiaos/client-core
- fix(client-core) per-Node freshness, credential rejection and reconnect backoff
- fix(sdk) epoch_changed ends a Node change watch instead of resnapshotting the old instance
- fix(cli) human output labels single objects and drops status noise
- docs plan the terminal dashboard, native goals and the visible queue (D-161–D-163)
- fix(node) a tool-only turn settles; an over-long response is cut at the bound, not storage_corrupt (S12e)
- feat Session turn queue: queued sends, list and cancel (S26, D-144)
- fix(node) vendor text stays out of Claude error items, Codex versions, HTTP status and rejection guidance
- fix(node) exit a failed maia-node command reliably, with its code and its output
- perf(cli) import Effect AI by subpath; the standalone CLI drops 22 KB (D-154)
- test(node) expect a closed pipe when the bridge rejects an oversized frame
- feat pre-push skips the gate on a tree that already passed it
- feat(node) Linux managed secrets in systemd-creds files (E2b, D-155)
- feat(node) MonotonicClock measures lease time across suspend
- fix(dev) dev:clean removes worktrees whose squash-merged pull request landed
- fix(cli) exit a maia command reliably, with its code and its output
- fix(cli) session attach never passes terminal controls or column-0 status lines through
- test(node) prove the mailbox quota refusal and release in one test
- feat orchestrator Sessions start and steer their own child Sessions (FV2, D-151)
- feat(node) managed secret store: gateway keys in the macOS Keychain on fresh profiles
- feat Scheduled Sessions: the first Routines, with at-most-once fires (S30, D-142)
- docs plan complete harness capture and unattended fleet mechanics
- fix(node) lint with a 4 GB heap so CI stops running out of memory
- docs record the first version and the cutover on host containment (D-150, D-151, D-152)
- fix remote Node text and human CLI output never pass terminal controls through
- test(node) deliver the draining log under a controlled flush clock
- feat Sessions in one Workspace message each other through Maia
- fix(node) vouch harness CLIs at any size; keep 256 MiB for Maia's own targets
- feat versioned Agent definitions per Project and Sessions started from them (S49)
- fix(node) process-host output ordering and bounded interrupted writes under load
- fix(node) write a telemetry batch once per file segment, not once per record
- fix(node) acknowledging a Session message frees its mailbox quota
- feat detect harness CLIs, propose updates, per-harness update policy
- test(node) size the hang guard of process-spawning tests from their idle time
- fix(node) log no Codex rejection text, only its cause and bounded metadata
- fix(node) the remote probe shows no text the remote host wrote
- feat(fleet) manage several servers over --node and node list; strict ssh host keys
- feat(node) maia-node release update: a confirmed two-step update to a channel or version
- feat(release) ship a linux-x64 process host in nightly and canary tarballs
- fix(release) unblock the Linux nightly: bind the managed Pi worker by what loads
- fix(cli) print the revision in session show text output
- chore(release) log how npm's CDN answers a version it does not serve yet
- feat(dev) add pnpm dev:lab scenario stress, an offline load run on a fake gateway
- feat(node) install exact nightly or canary builds side by side and switch between them
- feat(protocol) freeze the MN0 machine principal, lease and spool contracts
- fix(deps) patch 82 of 87 Dependabot alerts without adding dependencies
- fix(node) prove the observation commit wake on a frozen clock, not wall time
- feat(node) bootstrap the first owner of a Node from the CLI
- fix(node) keep Node tests passing on a loaded machine
- feat(dev) add pnpm dev:lab, an isolated multi-Node dogfood lab
- feat(node) check whether a build can read a profile's data
- docs(roadmap) make cross-harness Session communication an explicit outcome
- feat(node) select the process host by platform from an embedded list
- perf(ci) start the tests when the scope is known, not after quality
- docs(roadmap) plan security releases (RL8) and a dependency selection policy (DEP3)
- docs rewrite the package and root READMEs to the essentials
- feat(dev) stop unsigned commits before push and warn when a clone does not sign
- fix(release) publish every package, then wait up to 30 minutes for npm to serve them
- feat(agent) add official Pi SDK migration foundation
- feat(site) redesign pre-release marketing experience
- docs plan enterprise readiness and parallel self-hosting
- docs move the Maia Cloud plans to the Maia Cloud repository
- ci run CI on the vllnt self-hosted runners
- fix move Maia to the Node 24.22.1 security release
- feat(dev) local dev lifecycle — port blocks, dev:clean, pre-push tests, growth budget
- fix(ci) read squash-merge acceptance lines; growth check in own job
- feat(release) publish nightly and canary from CI; block stable
- fix(release) read npm's fresh registry endpoints and close review findings
- fix(node) retain test process output until it is read