Repository navigation
Releases: aquilaelabs/aerieos
Release list
v0.9.0-dev.4809
What changed since v0.9.0-dev.4750.
Added
- AerieOS has a way in at its screen: a console password set on This machine logs in as admin with sudo, and the boot menu's Rescue entry opens a root shell at the screen when nothing else answers (6e8e123)
- An installed AerieOS takes over the disks another NAS made as they are: each data disk found by its serial and mounted with its own filesystem at its old path (read-only by default, writing nothing at all), the parity disk left alone, the pools writable, the merged folders made again, the shares served as they were, and the containers and VMs that ran brought back with the exact images they ran and started with the machine where they were (This machine, Disks from the stick)
- The image is tagged :dev when a release or dev build is published, so an install can follow the dev channel by its compose file or template (1b8ce1d)
- aerie version release --withdraw TAG deletes a published release and its tag together, and the tag in the project's copy, so the number can be cut again; it is always the project owner's answer on the bell, and a tag whose release is already gone goes alone (7a8e367)
- aerie version rehearse runs every build a release's tag runs on the pushed branch, publishing nothing, with a summary of the files the release would carry, so a release is tagged once it is green (7a8e367)
- A release can be signed with an offline release key (tools/release-sign.py): AerieOS's updater, the stick maker and the installer refuse a release the install's own config/release-signers does not verify, so a change to the repository or its CI cannot hand an install an update (7f98d53)
- AerieOS keeps the versions an update replaces, the three newest by default: each is on the boot menu under Older versions and on This machine, a visit lasting one boot with the configuration as it was (300599f)
- On a bare-metal or USB install, plain http://the-machine/ finds the dashboard: a redirect on port 80 until nginx or anything else takes the port (2a102c2)
- An agent works the project's git host through
aerie forge: pull requests (list, view, create, comment, review, close, merge), issues, CI runs with their logs, reruns and dispatches, and releases, one set of verbs on GitHub, GitLab, Gitea and Forgejo, each run on the controller with the project's access token, which never reaches a session. The token is measured on the host without changing anything; the project's Permissions view gains On the git host, each ability with what the token allows and an Allow or Deny over it (merging starts at Deny); every session is told at its start what it may do there and what to ask for; and Which permissions? beside the token field opens the new git hosts page, the table of what to enable on each host. (3113eeb) - A machine that is its own controller sets up its disks in its first run: you say how many disks may fail, it picks a ZFS layout or an array with parity from the disks there and says how much you can use and how it grows, names every disk it erases before it writes, and makes the Media, Backups and Projects shares after. (386d43e)
- AerieOS's console shows AerieOS's logo above the login prompt at every boot, with the release it runs and the address to open the dashboard at; the installer opens on the same logo. (68ba427)
- A tool pack or a catalog app can carry its own icon:
iconinbbtool.jsonorbbapp.jsonnames a PNG, WebP or SVG file in it (64 KB at most), which its Library card shows in place of its kind's glyph. It is read at the commit the pack is pinned to and shown only as an image, so an SVG's scripts never run. (fe8d6df) - Two release channels: the releases as published, and a dev channel of the pre-releases CI publishes from a dev build (a vX.Y.Z-dev.N tag, the same files, never the latest), picked under Controller settings, Updates, where an install offers it; aerie version release --dev cuts and pushes such a tag (8228751)
- Moving a controller to another home without losing its nodes: Prepare to move under Controller settings arms the move and shows a move token once, with no life on it, so a controller is prepared days ahead; every node hears the new address and a challenge of its own on each hello from then on, and the section says how many have; the bundle (the state, the deploy key, each store, the repositories and the install key as ticked, each with its size) is packed fresh each time it is downloaded; the new install's first page (Moving a controller here?) takes the token with the old controller's address and pulls the bundle from it, or with a downloaded bundle, holds it to the version gate, restores it and restarts; the landing is told both ways under the move key, so the old controller marks itself moved whichever side was up; it is read-only after, saying where it went, and tells a node that comes late its own challenge, so it knocks and follows like the others; the new controller's Nodes page lists the nodes not yet here with one line each (builderbot-agent follow) for a node that outlived the old controller, never enrolled again (72d59c6)
- Power under Controller settings on a bare-metal install and AerieOS: Restart and Shut down for the machine the controller runs on, the same verbs This machine has (72d59c6)
- A held start on a bare-metal install: after a shutdown that was not clean, or when hold the next start was ticked beside Restart and Shut down before a restart, the install comes up with the dashboard, its agent and the network and nothing else (no agent session starts; a shell still opens) until Start is pressed on This machine, a band on every page saying it is held and why (0a822e8)
- This machine: on a controller installed bare metal the computer it runs on has a page of its own, first in the rail's Controller group, with what the machine is, the Updates section and everything a node's page draws (health, projects, sessions, features, storage, network, reboot and power off); it is no longer a row on the Nodes page or in its picker, and a project's node picker names it This machine (ae919d3)
- A bare-metal install updates from the page: a newer release is a line on the bell and an Updates section under Controller settings, Update runs the installer through the machine's own node (its root agent, never the controller's account), the release's controller bundle is fetched from the release and checked against its sha256 and its build attestation, and a new release that does not answer is rolled back by itself; each release now publishes builderbot-controller-X.Y.Z.tar.gz with its sha256 and attestation (2df7ee8)
- Tests run on a node picked for them: a project's settings gain a Test node beside its nodes, and with one named aerie tests run, aerie dashboard test and the gate's suites run there as a job (this tree snapshotted, as a build travels), with as many workers as that node's cores and memory allow, the lines streamed back, the run recorded and a covered run's counters merged here as a local run's are; a run behind another there says how many jobs are ahead (725635f)
- USB devices to VMs: a VM host's node page gains a USB section listing each device the machine has (name, vendor and product, serial, port, speed, the driver holding it) with what holds it, Give to a VM attaches it live to a running VM and writes it into its definition (a stopped one has it from its next start), Take back detaches it, a device is found again by its serial after a replug or a reboot and by its port when two are alike, a device the host boots from, serves storage on or has in a pool stays the host's with why, the VM's row names what it holds, and aerie vm devices and aerie vm usb let a session list and ask, held for an administrator on the bell; the section's Controllers list each USB controller with what hangs off it and its IOMMU group, given whole through the VM's Hardware dialog unless something the host needs shares the group; the Features section's IOMMU puts intel_iommu=on or amd_iommu=on with iommu=pt on the kernel's command line and asks for a restart (afbb962)
- The roadmap's steps move between items without losing anything: aerie roadmap step mv takes a step to another item whole, split makes new items from an item's steps, fold makes an item a step of another, and each step keeps the number it was first given, so aerie roadmap show R56.9 finds it wherever it is now; on the page a step has Move to, an item Split and Fold into, and in reorder mode a step drags onto another item (3b4d293)
- Every notebook record prints whole as JSON, YAML or Markdown (--format, or --json) on aerie roadmap, bug, rules, wiki, design and map, from one serializer with a format number in each document, and the same formats come back in: aerie roadmap add --from FILE and aerie bug add --from FILE add the records in a file, and aerie roadmap apply FILE writes an edited show back, refused when the list moved since it was printed; the code map reads data files too, so aerie map find DASHBOARD_PORT names every file a setting lands in and aerie map who-calls DASHBOARD_PORT where the code reads it (3b4d293)
- A model router on a node: a node's page gains a Model router section that deploys LiteLLM there with the provider keys you give it (Anthropic, OpenAI, Google, OpenRouter, xAI, and any OpenAI-compatible endpoint under a name of its own), kept sealed on the controller and never in a session's view, Ollama beside it where you turn it on with its models pulled and removed from the section, and the projects allowed to use it, each handed the router's address and a key of its own at a session's start so its spend is its own; the models the router knows, with their context and price, and each project's spend are read from the section (a82d20e)
- Any model as a fifth coding agent: OpenCode, pointed at a node's model router rather than signed in to anybody, offered by Start as Any model with the router's models (their context and price where...
v0.9.0-dev.4750
What changed since v0.9.0-dev.4745.
Added
- On a USB stick, This machine can name a folder already on the machine's disks as the projects folder, so a controller moved there works on its projects where they are, with nothing copied (7c24926)
- On a USB stick the projects are never kept on the stick: until a system pool or a projects folder on the disks is named, no project is made, cloned or moved in (7c24926)
- A move onto a USB stick lands from Controller settings, Move a controller here, once the disks hold the projects, spooled and unpacked there; a landing without room says so before it takes the bundle (7c24926)
- Every release starts as a draft: the Artifacts view's Drafts shows its notes to read and correct, and Publish makes it public once its files are all there (c4879b7)
Changed
- The :latest image is now the newest published release, moved when one is published, where it followed every push to main; :main follows main, and :dev and :X.Y move when a release is published (c4879b7)
Upgrading
- A container following :latest now moves only when a stable release is published; to follow every change on main as before, point it at :main (c4879b7)
Signed by BuilderBot: builderbot-app-0.9.0-dev.4750.apk with the sideload key release, certificate SHA-256 DE:66:E7:9C:EE:81:22:51:55:AB:7D:00:85:79:64:CE:9F:F8:0A:FF:A5:56:BA:D9:73:9C:EB:F1:57:D4:D7:0F
v0.9.0-dev.4745
What changed since v0.9.0-dev.4724.
Added
- A release can be signed with an offline release key (tools/release-sign.py): BuilderBot OS's updater, the stick maker and the installer refuse a release the install's own config/release-signers does not verify, so a change to the repository or its CI cannot hand an install an update (7f98d53)
Fixed
- On a node, the project owner's shells and coding agent sessions are known as the owner's again, so bb treats the owner's own tree as theirs there (0369c15)
- Moving a controller or restoring a backup no longer holds the whole bundle in memory, so a large workspace can move without the controller being stopped partway; a bundle made by an earlier version still lands (0369c15)
- A container that cannot start because its port is taken says which port, where the reason was cut off (2e1d46b)
Signed by BuilderBot: builderbot-app-0.9.0-dev.4745.apk with the sideload key release, certificate SHA-256 DE:66:E7:9C:EE:81:22:51:55:AB:7D:00:85:79:64:CE:9F:F8:0A:FF:A5:56:BA:D9:73:9C:EB:F1:57:D4:D7:0F
v0.9.0-dev.4724
What changed since v0.9.0-dev.4706.
Added
- A project's FTP access can be kept on for an hour, a day or a week, then turns itself off
- BuilderBot OS has a way in at its screen: a console password set on This machine logs in as admin with sudo, and the boot menu's Rescue entry opens a root shell at the screen when nothing else answers (6e8e123)
- A controller moved onto a bare-metal machine keeps the node that machine already is and a stick's plan of disks to adopt (a94c440)
- An installed BuilderBot takes over the disks another NAS made as they are: each data disk found by its serial and mounted with its own filesystem at its old path (read-only by default, writing nothing at all), the parity disk left alone, the pools writable, the merged folders made again, the shares served as they were, and the containers and VMs that ran brought back with the exact images they ran and started with the machine where they were (This machine, Disks from the stick)
Changed
- Any install picks its update channel, Releases or Dev builds, under Controller settings' Updates, and keeps it; the dev channel was offered only to a controller started for development (4c96252)
Fixed
- The VMs page lists a VM BuilderBot did not make whose name has a space in it, where it was missing (7f8d87a)
Signed by BuilderBot: builderbot-app-0.9.0-dev.4724.apk with the sideload key release, certificate SHA-256 DE:66:E7:9C:EE:81:22:51:55:AB:7D:00:85:79:64:CE:9F:F8:0A:FF:A5:56:BA:D9:73:9C:EB:F1:57:D4:D7:0F
v0.9.0-dev.4706
What changed since v0.9.0-dev.4692.
Added
- The image is tagged :dev at every release and dev build, so an install can follow the dev channel by its compose file or template (1b8ce1d)
Changed
- A chip that narrows a list moves it: what stays slides to its new place, what the chip leaves out fades away and what it brings fades in, on the Library's cards and every page with chips (3279319)
- On the Library the source chips count within the kind picked, so picking Apps says how many apps each source has (4330d70)
- The NVIDIA driver's card and row say installed and in use where they said running the card, and an installed card or row says so in green (bc71c74)
Fixed
- A project's FTP access keeps working after its node's agent updates itself, where the old server held the port and refused every login while the new one could not start (Address already in use). A node already in that state mends itself once its agent is updated: the agent ends the old server it finds on the port and starts its own
- The Windows companion's .exe starts again, where it stopped at once with No module named bbcompanion.main because its build left the app's own package out
Signed by BuilderBot: builderbot-app-0.9.0-dev.4706.apk with the sideload key release, certificate SHA-256 DE:66:E7:9C:EE:81:22:51:55:AB:7D:00:85:79:64:CE:9F:F8:0A:FF:A5:56:BA:D9:73:9C:EB:F1:57:D4:D7:0F
v0.9.0-dev.4692
What changed since v0.9.0-dev.4628.
Changed
- A project's Agents may says what each of its parts is for: Coding agents says Claude always may and an unticked agent does not start there, Start opens and Sessions each carry a line under them, and each agent's guards fold under How each agent is guarded (6ae825f)
- A project's Permissions, On the git host: Change CI workflow files set to Deny now refuses a session's push that changes a workflow file (a workflow runs with the repository's secrets); Push branches, Read the code and Publish and edit releases have no switch there any more, each showing the setting that governs it (Pushing, or Agents may: Tag and publish a release), since a Deny on them was told to sessions but never enforced (30cba84)
Fixed
- A node no longer goes quiet for good after its agent's token changes: two of its calls carrying a new token at the same moment left it with a token that expired three minutes on, and its agent was turned away until the node was enrolled again. A node shut out that way comes back by itself at its next call (6058f86)
- A node whose agent is being turned away now says so on its row and on the bell, with the reason and that enrolling it again is the way back, where its row said only quiet
- A model router key containing a quote, a backslash or a dollar sign no longer breaks the router's compose file, and an endpoint address must be a single line (67651d4)
- Taking a project off a node's model router while the router is down now says it could not, and keeps the project listed until the router has deleted its key, where it looked revoked while the key went on working (7397b39)
- A project can no longer act on another project's VM whose machine name its own VM's name would share (foo's bar-web and foo-bar's web): the second name is refused on that node, and a node acts on a VM only for the project it was made for (a3b131a)
- A VM's shared folder that is a link out of its project's folder is refused rather than shared, so a link to / no longer gives a VM the host's files (8d0a4f3)
- Starting the controller with a mistyped install key no longer replaces every person's key store, which lost their git tokens for good once the right key was back (023d6be)
- Setting or changing the install key no longer drops the people who gave a project their git token from it (9b48d7b)
- bb forge acts only on the repository a project was linked to: a session that points the project's origin at another repository is refused until it sets the remote back (353ec12)
- Changing your password or removing a git token now shuts your key store at once, where the tokens it had opened went on working until its window ran out (4ffba79)
- On the controller's own machine a job can no longer have the agent write over a system file through a link left in the VMs' folders (f0da796)
- Changing the install key no longer loses the passwords of mounted shares, the keys of encrypted pools or the secret settings of tool packs, and the key before is kept until the next start has sealed everything again (67c73c3)
- Moving or backing up the controller keeps the links in your repositories, which were dropped and then showed as deleted files (6ccf86c)
- Replacing a file on a release keeps the old one until the new one is up, so a failed upload no longer leaves the release without it (5827373)
- Renaming a container whose second volume fails to copy no longer leaves its first volume moved and the container on an empty one (0311d7e)
- A controller restore that fails partway puts the state that was there back and says so, where it left a half-restored controller (75a483a)
Signed by BuilderBot: builderbot-app-0.9.0-dev.4692.apk with the sideload key release, certificate SHA-256 DE:66:E7:9C:EE:81:22:51:55:AB:7D:00:85:79:64:CE:9F:F8:0A:FF:A5:56:BA:D9:73:9C:EB:F1:57:D4:D7:0F
v0.9.0-dev.4628
What changed since v0.9.0-dev.4501.
Added
- bb version release --withdraw TAG deletes a published release and its tag together, and the tag in the project's copy, so the number can be cut again; it is always the project owner's answer on the bell, and a tag whose release is already gone goes alone (7a8e367)
- bb version rehearse runs every build a release's tag runs on the pushed branch, publishing nothing, with a summary of the files the release would carry, so a release is tagged once it is green (7a8e367)
- A project can list the files each release must carry in .release-files; the controller checks every release against it once CI has had three hours, and a release short of a file is a red row on the bell naming the file and why (7a8e367)
Changed
- A session's bb version release from a branch other than main makes a dev pre-release unless --stable is said, and its first line names the channel the release lands on (7a8e367)
- bb sign release waits for its look and says what it found, run by run, or why it found nothing to sign (7a8e367)
- Pages read alike: sizes say their unit after a space and in TB past a terabyte, a list narrowed two ways shows one All with the second row starting at Any source or Any version, a view's status line is a note unless it says what stops a press, the Wiki view's controls are one row, Commit all and the Design view's new page sit on one line, and where any coding agent is meant the page says agent (56bc704)
Fixed
- A git token given for a host with a port (a self-hosted Gitea on :3000) matches its project's remote again: one kept with the port's colon written as %3a was never found by the remote's host, and read that way on the Keys page (2868b53)
v0.9.0-dev.4501
BuilderBot 0.9.0, dev build (v0.9.0-dev.4501)
A pre-release on the dev channel: the whole of 0.9.0 as it stands. It is never the latest release, and a container on :latest does not move to it; an install on the dev channel (Controller settings, Updates) is offered it.
BuilderBot OS is the experimental edition. It is the first build of the appliance image published, and the edition most likely to break: install it on a machine or a VM you can wipe. Everybody else: the container edition is the one to run.
What is in this release
- The controller's container image,
ghcr.io/aquilaelabs/builderbot:0.9.0-dev.4501 - The bare-metal bundle,
builderbot-controller-*.tar.gz, with its sha256 and build attestation - BuilderBot OS: the ISO, which installs on a machine or a VM, and the USB stick's image for
tools/builderbot-stick.py, each with its sha256, attached only once the image has booted in CI; when they are not here, the OS edition is not ready in this build - The Android app, the Windows companion and the VS Code extension, attached by their own builds a few minutes after the release
What is new
- BuilderBot OS, the appliance image: a read-only root in two slots, updates from the page that boot on trial and fall back by themselves, and BuilderBot's mark on the console at every boot.
- A NAS on the controller's own machine: the first run sets up its disks (how many may fail, the layout picked from the disks), ZFS pools, a mixed-disk array with parity, encrypted pools, snapshots, shares over SMB and NFS given to people and roles, backups, disk health on the bell, a UPS, reporting.
- One Library: toolchains, coding agents, tool packs and apps on one page from the vetted catalog's signed index, Installed and Updates filters, a page of its own for every entry and every installed thing, and a pack's or app's own icon.
- Any coding agent from the catalog, and any model through a node's model router (LiteLLM), with OpenCode as Any model.
- An agent on your git host:
bb forgeworks pull requests, issues, CI runs and their logs, and releases on GitHub, GitLab, Gitea and Forgejo with the project's token, which never reaches a session; each project's Permissions view says what the token allows and lets you turn any of it off. - Every page in one order: the page's head, its numbers, then its search and buttons, then the list, the same on a phone and at a desk.
- System containers on the Containers page: nginx, the scanners and the model router pinned at the top in rows like any other container, each with Configure to its own page.
- The dev channel itself, the bell reaching you by mail, ntfy and the rest, one token per git host and account, key stores opened less at a time, sign-ins bound to their browser, VMs and USB devices on the controller's machine, Let's Encrypt on the nginx page, and polish across every page.
The full list is the Unreleased section of CHANGELOG.md.
Screenshots
Signed by BuilderBot: builderbot-app-0.9.0-dev.4501.apk with the sideload key release, certificate SHA-256 DE:66:E7:9C:EE:81:22:51:55:AB:7D:00:85:79:64:CE:9F:F8:0A:FF:A5:56:BA:D9:73:9C:EB:F1:57:D4:D7:0F







