aios@ccmai — /aios/changelog

AIOS

changelog — full history from the start

v0.24.0 — 2026-09-12

↓ one ISO · 1.6 GB be8559e7181a35b45017b8ac6b43e078

features

  • One ISO. There is no longer a separate "with LLM" image: the same ISO carries the whole system and the local model is downloaded during setup (Qwen3.6-35B-A3B, 22.1 GB, no GPU needed). The image went from 7.3 GB to 1.6 GB.
  • The local/cloud choice covers every case. Both live mode and the disk installer ask the same question: run the model on your own computer, or use an external API. The hardware requirements are shown before downloading, together with a progress bar.
  • Much shorter first-run setup. What used to be ~18 questions is now ~8. Theme, voice, thinking and the date/time step are no longer asked: they are chat commands (/theme, /voice, /think) and the new aios-time command.
  • New aios-time command — timezone and NTP, the step that used to live inside the installer. Works interactively or as aios-time zone Europe/Madrid.

fixes

  • A wrong answer can no longer kick you out of the installer. Ten places were audited and fixed: _read_line span forever on EOF, an empty password was accepted and silently skipped by chpasswd (leaving the factory password on the installed disk), the disk selector cancelled after three bad answers, and a typo in the wipe confirmation aborted the installation. Now they re-ask, and cancelling is explicit.
  • Silent boot on the installed disk too: GRUB menu hidden and the console cursor off, as in live mode.
  • Real download of the AIOS local model — resumes if interrupted, verifies the size, and reports decimal units (22.1 GB).

v0.23.0 — 2026-09-12 19:12

features

  • The AIOS LLM is now Qwen3.6-35B-A3B (MoE, ~3B active of 35B, multimodal) instead of the fine-tuned Nemotron-3.5-Lightning. It does text AND vision in one model, so the separate vision container is gone.
  • Chosen over the Nemotron for three measured reasons: Apache 2.0 license (the Nemotron was OpenMDW-1.1, with a patent clause — relevant for a globally distributed ISO), identical behaviour in thinking ON and OFF (94.3% in both modes, vs 97.1%/91.4% for the Nemotron), and better tool-call discipline (CONFIRM 3/4 vs 2/4, TOOL 17/17 vs 16/17 in the OFF mode).
  • The Nemotron was faster (~26 tok/s vs ~9 tok/s on the CPU-only VPS) and scored slightly higher on thinking ON. Both trade-offs were accepted by Carlos after using it: "lo noto muchísimo mejor que cualquier otro agente/llm que hemos probado".
  • Weights: Qwen3.6-35B-A3B-UD-Q4_K_M.gguf (21.1 GB) + mmproj-qwen3.6-F16.gguf (858 MB).
  • Vision now goes through the same model. describe_screen() points at the chat endpoint, so there is one model to run and one route to maintain instead of two.
  • Verified with a purpose-made image (text RACK 7 TEMP 63C) — the model read it back exactly.
  • Verified on a real desktop: it reported the window title (bios@aios:~), the user, the hostname and what the terminal was doing. The previous 4B model could not do this.
  • The /vision/* route and the llama-vision container (Gemma-3-4B + mmproj) were removed; the vision.endpoint default now points at the chat endpoint.
  • /v1 is kept as a legacy alias and now serves the same model as /ollama, so existing configurations and any client pointed at /v1 keep working unchanged.

fixes

  • describe_screen() returned an EMPTY description. It was the only LLM call in the agent that did not send enable_thinking; the model reasoned by default, spent all 400 max_tokens on reasoning_content and returned an empty content. Fixed by sending enable_thinking: false, like every other call in the agent. This bug existed before this release — the previous model happened to work anyway.
  • setup.py would configure a broken installation. The model list for the VPS provider still offered nemotron-3.5-lightning (removed) and qwen3.5:9b (no longer served), and the vision option wrote the now-removed /vision endpoint. Both corrected to the live model and endpoint.

infra

  • The llama-hardened stack is now two containers (proxy + qwen) instead of four. Removed: the llama (Nemotron) and vision (Gemma) services, their entrypoints, their Dockerfile COPY lines, the /vision Caddy block, the depends_on that referenced the removed service, the two Nemotron GGUFs (48 GB), the two Gemma GGUFs (3.3 GB), a stray second Gemma server that had been running unattended on port 8095 for 3 days, and the dead k2-test tree.
  • Free space on the VPS went from 60 GB to 136 GB; RAM in use dropped from 30.5 GB to ~15 GB.
  • Backups of every file touched are in ~/llama-hardened/.bak-qwen36/.

v0.22.0 — 2026-09-11 23:55

fixes

  • The AIOS LLM (Nemotron-3.5-Lightning, fine-tuned) now works with thinking ON and OFF, both with tool calling. The previous fine-tune returned an empty response (1 token, finish=stop) whenever enable_thinking=false: the agent went mute on any request that needed a tool call ("hello" answered, "check the running containers" did not).
  • Root cause: at training time the chat template was rendered without enable_thinking, so it emitted a closed, empty reasoning block ( thinking) in front of the tool call. The model learned that transition and was out of distribution when a real reasoning block opened at inference.
  • Fix in the re-training: mask_generation_prompt: true + mask_reasoning_content: true (the template's own tokens are no longer supervised), tool-call arguments kept as a mapping (the Nemotron template iterates them with |items), and model.output_hidden_states: true.
  • Verified against the public endpoint in both modes: run_command {"command":"sven install vim"} — with enable_thinking: true and false.
  • Model, dataset, recipes and scripts are now versioned in the aios-model repo: behaviour dataset (249 pairs, 154 with real tool_calls), NeMo AutoModel recipes, the manual tensor-merge script and the training/deploy scripts.
  • The enable_thinking cloud patch in agent.py is no longer required: the model handles both modes, so /think on and /think off both work.

v0.21.0 — 2026-09-11 22:30

features

  • BitTorrent client with media playback (new module torrent.py + 5 agent tools). The user asks in plain language ("I want to watch Metropolis by Fritz Lang") and the agent searches, downloads and plays — no GUI needed.
  • torrent_search(query) — searches apibay.org (The Pirate Bay API) and torrents-csv.com, merges and ranks by seeders, caches the numbered list so torrent_download("<number>") just works. Verified: "Metropolis 1927 Fritz Lang" → restored 1080p release, 115 seeders.
  • torrent_download / torrent_status / torrent_control (start|stop|verify|remove|remove-data) — driven through the transmission-daemon RPC on 127.0.0.1:9091.
  • torrent_play([id]) — plays with mpv fullscreen (ffmpeg does the decoding); with no id it plays the newest media file downloaded.
  • Verified end-to-end on the build tree: 263 MB torrent downloaded to 100% in 70 s (9.76 MB/s, 50 peers), then stop + remove-data clean.
  • aria2c for plain HTTP/FTP/FTP-magnet documents (PDFs, archives) — torrent.fetch().
  • New packages installed with sven (official repos only): transmission-cli 4.1.3-2, aria2 1.37.0-3, mpv 0.41.0-6 (+ ffmpeg/libbluray refreshed to the same upstream so libbluray.so.4 and so.3 coexist).
  • Config in /etc/aios-torrent.conf (system defaults, shipped in aios-lfs) with a per-user override in ~/.aios/torrent.conf; downloads default to ~/Downloads.
  • aios-update deploys torrent.py and the new system configs (previously the manifest would have silently skipped them).

fixes

  • transmission-daemon runs as the desktop user: the Arch unit uses User=transmission (uid 169) and /var/lib/transmission, so downloads would not be readable/deletable by the user who watches them. New drop-in transmission-daemon.service.d/user.conf (aios-lfs) sets User=aios, HOME/XDG under /home/aios and --download-dir /home/aios/Downloads. No Group= line: AIOS' user aios has primary group wheel, and a wrong Group= fails the unit with 216/GROUP.
  • The daemon is not enabled at boot — torrent.py starts it on demand (systemctl, NOPASSWD in the AIOS live/installed model, with a direct-launch fallback), so an unused system keeps no extra service or open peer port.
  • Magnet building: Transmission 4.1.3 rejects a percent-encoded xt=urn%3Abtih%3A<hash> with "unrecognized info" — the xt value is now emitted verbatim (raw colons), only dn/tr are encoded.

v0.20.0 — 2026-09-09 12:45

features

  • AI vision (optional): new describe_screen() tool — captures the screen and describes it with Gemma-3-4B (multimodal VLM) on the VPS. Recognizes apps, logos and UI text (verified: identified the Grafana editor, "Prometheus default", "Kick start your query"...).
  • llama-hardened stack extended: third container llama-vision (Gemma-3-4B Q4_K_M + mmproj) on /vision/* with the same X-API-Key. Analysis takes ~43s (12.6s prompt + 30.8s gen).
  • Optional for privacy: setup asks "Enable vision?" (only for the LLM VPS provider). If declined, the agent keeps using browser/OCR. Config stores vision.enabled + endpoint + key.
  • Model ladder tested: SmolVLM-256M (175MB) ❌, SmolVLM-500M (437MB) ❌, SmolVLM2-2.2B (1.9GB) ⚠️ imprecise, Gemma-3-4B (2.5GB) ✅ — the smallest that works.

fixes

  • Anti-hallucination compression: the LLM summary is verified against real keywords from the history; if it does not mention them (K2 invented a fake Node.js/MongoDB conversation), it is rejected and an honest summary is used.
  • K2 tamed: MAX_TOKENS 2048 + reasoning_effort: low + 240s watchdog + no retry — a turn no longer burns 40 min thinking.
  • API-FIRST prompt: fetch() from browser_eval for authenticated web apps (Grafana, Prometheus, Jenkins, GitLab...).
  • browser_eval prompt: returns value (not console.log) + small steps in UI.
  • OCR: uses only installed languages (eng) instead of eng+spa which failed.
  • Software inventory: auto-record installs/removals + get_installed_info tool + markdown fact sheets.
  • Anti-loop order fix: the loop guard now runs BEFORE the "command previously failed" guard (which used break and skipped the counter — K2 looped ~18x on the same failing command). continue (not break) + whitespace-stripped args.
  • Cleanup: removed dead tools from the registry and code (mcp_call, run_playbook, process_send, module playbook.py); deleted the discarded vision-ladder GGUFs on the VPS (SmolVLM 256M/500M/2.2B) — only K2 + Gemma-3-4B remain; vision policy added to the prompt (describe_screen → browser_eval → ocr → screenshot).

v0.19.0 — 2026-09-08 22:40

↓ one ISO · 1.6 GB 365fe462dd03e2c8eb2ea3605f10df55

features

  • "LLM VPS (llama-hardened)" provider in setup: selectable alongside cloud providers, with two models:
  • k2-horizon:7b → webuillama.ccmai.org/v1/chat/completions (K2-Horizon-7B Q4_K_M, llama-server fork MBZUAI-IFM)
  • qwen3.5:9b → webuillama.ccmai.org/ollama/v1/chat/completions (Qwen3.5-9B, same stack, separate route)
  • Same X-API-Key for both; the menu propagates the URL per model (3rd tuple element).

breaking change

  • Ollama Hardened → llama-hardened: the VPS stack changes engine. ollama-core (Ollama 0.32.15) cannot serve K2 (MoVA architecture not yet supported in its llama.cpp), so the stack moves to llama-server from the MBZUAI-IFM fork behind Caddy X-API-Key. /v1 serves K2 and /ollama/* serves Qwen3.5. Ollama stays stopped as reserve (models intact in its volume).

v0.18.6 — 2026-09-08 17:05

features

  • Barge-in (interrupt the agent): during the agent's turn (while it writes or runs tools), Tab pauses and opens a mini-input to add more information by text; Ctrl+R captures info by voice (microphone + STT). The turn is cut gently and the agent relaunches with the info as a new query, keeping context. No Ctrl+C. Documented in shortcuts.txt (F1).
  • browser_elements: new tool that inventories the page's interactive elements (buttons, links, inputs) as readable refs (btn-create-dashboard, inp-search) with visible text and CSS selector — the agent SEES the page before clicking (like Hermes drive_preview action="elements").
  • browser_click/browser_type with text fallback: if the selector doesn't exist, it searches by visible text (innerText/aria-label/value/placeholder, case-insensitive) — click by what you SEE ("Create your first dashboard") without guessing selectors.
  • Browser prompt updated: the agent must call browser_elements() BEFORE clicking/typing (workflow navigate → elements → click/type).

fixes

  • token estimator len//2 (overestimates for all European languages, measured 2.8-4.4 chars/token real vs 2 estimated): compresses earlier, never reaches Cloudflare's 100s limit.
  • compression loop (max 3 passes): if after compressing the history is still above the threshold, compress again — the final prompt always fits.
  • 2000 char cap on the text to summarize: the compression call is light (~15-20s) even with a huge history.

v0.18.5 — 2026-09-07 20:21

↓ no LLM 6bade841ca07f8dda43d74efc93dbfc6

features

  • Chromium + CDP (browser_*): new tools browser_navigate, browser_eval, browser_click, browser_type — real browser control via DevTools Protocol (real DOM, clicks by selector, forms by field). No more blind OCR. Chromium 152 installed from sven.
  • Browser prompt: the agent uses browser_* to browse (never process_send — browsers ignore stdin); documented workflow (navigate → eval → click → type).
  • Dynamic installer banner: aios-install reads the version from the CHANGELOG (shows AIOS LFS INSTALLER v0.18.5 instead of the hardcoded 1.1.3).

fixes

  • silent voice (root cause): the tic aplay holds the PCM device; TTS launched another aplay → Device or resource busy silenced. Fix: close/reopen the tic aplay INSIDE the _speak_sync thread (voice.py) — speak() spawns a thread and returns, so closing in chat.py reopened before TTS opened the device.
  • browser did not navigate: _ensure_browser() used _urlopen without importing it (silent NameError) in the check and in the wait loop → 10s timeout. Fix: urllib.request as _url in both + 30s wait (Chromium takes a while to start on the laptop).
  • aios-diag not executable: mode 100755 in git (the /usr/local/bin/aios-diag wrapper had no x).

v0.18.4 — 2026-09-07 15:58

↓ no LLM 6596430daaf3f71efd368d72645fda58

fixes

  • laptop boot (boot race): getty@tty1 launched X before udev applied permissions to /dev/dri/card0 → open /dev/dri/card0: Permission denied → no screens found → getty loop → start-limit-hit → blinking cursor with no session. aios-session now waits up to 30s for /dev/dri/card0 to be readable/writable before startx.
  • laptop audio (same race): audio-detect.py ran 9s into boot, when only the HDMI card was visible → wrote plughw:0,0 (HDMI) instead of the analog one. Now if the only detected card is HDMI, it waits and retries (up to 15s) until the analog card appears.
  • deploy: aios-deploy-and-build.sh now copies scripts/aios-session and scripts/audio-detect.py to the tree (they never reached the ISO before).

v0.18.3 — 2026-09-07 08:06

↓ no LLM 299e40cc6d6c5cd345310f46c0a7004a

fixes

  • timeout HTTP 120s → 300s: long generations on CPU (stories, long answers) exceeded the 120s limit and the agent cut with Read timed out.
  • compression summary as user (not system): the no-thinking model frob/qwen3.5-instruct:9b requires system at the start of the history; a summary inserted as system in the middle caused 500 Jinja Exception: System message must be at the beginning.
  • cloud compression threshold 20% → 10%: keeps prompt-eval (~25 tok/s on CPU) under the timeout with large contexts.
  • tool output cap: ANSI strip + truncation to 1200/1000 chars (was 5000/2000) — command outputs no longer bloat the context.
  • MAX_TURNS 10 → 25 + when exhausted the agent asks (continue) Aún no he terminado... ¿Quieres que continúe? instead of (no response).
  • procedural memory filter: no longer caches greetings/trivial queries, short answers (<80 chars) or (continue) status messages.
  • OCR eng+spa: tesseract with Spanish for Spanish pages.
  • bracketed paste in _read_line() (setup.py): copy/paste works in the API key prompt.
  • dynamic version banner: AIOS/v0.18.3 is read from the CHANGELOG (auto-updates with each release) instead of the hardcoded AIOS/1.4.
  • Wargames teletype tick: 4kHz transient + 250Hz body, half volume, --period-size=128 (tick per character, no bursts); the user-typing tick is removed (only the agent's typewriter sounds).

v0.18.2 — 2026-09-04 23:21

fixes

  • docker group not created on install: missing systemd ALPM hooks (20-systemd-sysusers etc.) — added to the tree; sven install docker now creates the docker group automatically.
  • docker socket not connecting: LFS symlinks /var/run → /run, /var/lock → /run/lock, /etc/mtab → /proc/self/mounts were missing (lost by an old mksquashfs over overlay) — recreated in tree and installed disks.
  • build hardening: aios-deploy-and-build.sh verifies/recreates the 3 LFS symlinks before every mksquashfs.

v0.18.1 — 2026-09-04 17:58

fixes

  • installer password bug (critical): getpass read passwords corruptly on a dirty raw terminal — replaced with a self-contained _read_password() that masks input and controls the tty directly.
  • installer chroot ordering bug (critical): cleanup_chroot() ran before set_passwords()/harden_* — reordered so it runs last, just before the final umount.
  • installer password — real root cause (PAM): /etc/pam.d/system-auth was truncated to a single line with no password stack — chpasswd never wrote to /etc/shadow. Restored the full BLFS system-auth.
  • agent anti-loop removed: the "3 identical tool calls" detector caused false positives — replaced with a simpler guard that only refuses to re-run a run_command that already failed.
  • sudo password asked inline: removed the /sudo round-trip; run_command prompts for the sudo password (masked) directly.
  • timezone selector: hierarchical picker (continent → region → city) integrated with NTP; persisted to disk on install.

v0.18 — 2026-08-31 19:48

↓ no LLM 76179b138ab6c706a3d7863222941193

new features

  • local LLM — Qwen3.5-9B: the bundled local model is now Qwen3.5-9B (Q4_K_M), replacing Qwen3-8B — better reasoning and tool calling. llama-server upgraded to b10655 (CPU-dispatched: runs on any x86-64, from SSE4.2 to AVX-512).

fixes

  • cloud empty responses: the Ollama Hardened server now serves qwen3.5:9b with a 32K context window (OLLAMA_CONTEXT_LENGTH=32768) instead of the 4K default — fixes empty responses where reasoning + tool-calling exhausted the context.
  • agent empty-response diagnostics: on an empty response the agent now reports the cause (finish_reason, reasoning characters emitted) instead of the generic "(empty model response)".

v0.17.2 — 2026-08-30 22:49

fixes

  • audio: aplay now uses a minimal period/buffer (--period-size=512 --buffer-size=1024) so the typewriter tic sounds per-character instead of accumulating into a continuous beep.
  • volume keys: the i3 volume bindings now use amixer set Master (the same ALSA mixer aplay/plughw uses) instead of pactl (PipeWire), so the keys actually change the volume.
  • setup note: keyboard shortcuts indicate that chat commands (/sound, /voice, /theme) work after setup (once the agent/LLM starts).
  • Ollama Hardened provider: endpoint moved to :443 (valid cert via Cloudflare) and TLS verification enabled by default (VERIFY_TLS no longer tied to x-api-key); model switched from Moonlight (no function calling) to qwen3.5:9b.
  • context/tokens: cloud max_tokens now scales with the context (_cloud_context // 4) instead of a fixed 4096, and the Ollama Hardened context_limit raised 8K → 32K — fixes empty responses from reasoning models exhausting the token budget.
  • status bar: CTX block now resolves the Ollama Hardened context limit (32K) instead of the 128K default.

v0.17.1 — 2026-08-30 14:10

↓ no LLM 6bade841ca07f8dda43d74efc93dbfc6

fixes

  • audio: aios-audio.service was never enabled (missing multi-user.target.wants symlink) — audio-detect.py didn't run at boot and asound.conf kept the hardcoded plughw:1,0. Now enabled, analog card auto-detected.
  • sven: run_command passed both stdin and input to subprocess.run — sven update/upgrade/install failed with "stdin and input arguments may not both be used". Fixed.
  • sudo: agent now detects NOPASSWD (sudo -n true). Live runs sudo directly; installed asks for /sudo <password> (in-memory only, never persisted).

v0.17 — 2026-08-30 01:48

aios-v0.17.iso — retired (no longer hosted)

new features

  • sudo with password: /sudo <password> (cached in session) + run_command uses sudo -S; the agent accepts the password in local and cloud modes (no NOPASSWD needed).
  • audio-detect.py: autodetects the analog sound card and writes asound.conf dynamically — audio works on any hardware.

i18n

  • All comments and user-facing strings translated to English (agent, installer, README, docs, scripts). Fixes <think> tag corruption.

quotes

  • 5 Terminator quotes (T1 + T2) and 2 Matrix quotes (the full red pill / blue pill monologue + "Whoa. Déjà vu."). Quote lists unified (setup.py was missing Blade Runner) + shuffle-cycle picker to avoid repeats.

fixes

  • Don't auto-open Firefox for the API key (ask first).
  • Login cursor: remove vt.global_cursor_default=0 from the disk GRUB entry.
  • Audio/voice/chat patches.
  • Restore scripts/aios-diag exec bit.

license

  • MIT license added.

v0.16 — August 2026

aios-v0.16.iso — retired (no longer hosted)

voice (TTS/STT) — independent voice: section from chat

  • Config: voice: section in config.yaml (tts/stt/tts_lang), separate from cloud: (chat). Setup (live and aios-install) lets you choose TTS (off/espeak/gemini/openai), STT (off/vosk/gemini/openai) and language; voice keys go to ~/.aios/.env apart from the chat key.
  • TTS (voice.py): local espeak-ng (no key), Gemini gemini-2.5-flash-tts and OpenAI gpt-4o-mini-tts. Skips code blocks/tables and speaks in a thread. espeak-ng installed via sven.
  • STT (voice.py): local vosk, Gemini and OpenAI (records with arecord).
  • Commands: /voice (toggles, persists) and /mic (records + transcribes + sends).
  • Icon: VOX/MIC block in the i3 bar.

fixes

  • Beep/tic did not sound: aplay --buffer-size=512 --period-size=512 (buffer == period) failed silently on some codecs; removed. aios-diag now collects audio state.
  • Loading bar in English: the LLM progress bar text switched to English.

v0.15 — August 2026

aios-v0.15.iso — retired (no longer hosted)

fixes for LLM boot and screenshot

  • LLM loading stuck at 85%: select + buffered readline left listening stuck; fix: reader thread + queue (no select).
  • Printscreen (Print): inline scrot with % + && + nested quotes broke the i3 parser; fix: dedicated scripts/screenshot.sh.

v0.14 — August 2026

agent: executes real tools

  • import sys in agent.py: fixed NameError swallowed by the stream except (the agent seemed "mute").
  • Tool visible before executing: the ⚙ tool(...) is shown before execute_tool.
  • run_command with correct stdin: /dev/null by default + auto-y for sven prompts.
  • Tool list_desktop_apps: parses /usr/share/applications/*.desktop.
  • Grounding: sven always with sudo, never end the turn with a promise.

local LLM loading

  • Real progress bar in _start_local_model: real phases from the llama-server log.

screenshots and diagnostics

  • Printscreen: scrot to ~/screenshots/; documented in shortcuts.txt.
  • aios-diag: collects diagnostics, redacts keys, uploads tar.zst via rsync to a write-only diag account.

v0.13 — August 2026

stability fixes

  • Live→menu loop: _live_flow returns True and main() breaks.
  • Internet with retry: waits for DHCP after WiFi association.
  • Delete/arrows in _read_line: escape sequences handled.
  • sven timeout 600s: generous timeout for sven install/upgrade/sync.
  • Chat without staircase effect: _out() writes explicit CRLF.

v0.12 — August 2026

ollama-hardened support (Moonlight)

  • X-API-Key: auth_type (bearer/x-api-key); verify=False only for x-api-key.
  • Provider "Ollama Hardened": webuillama.ccmai.org:8443, Moonlight-16B-A3B.
  • Fix reading key of custom provider; hardened Caddyfile → 401 without a valid key.

v0.11 — August 2026

local LLM improvements (accuracy / anti-hallucination)

  • AIOS grounding: _AIOS_GROUNDING injects AIOS invariants into the system prompt.
  • Verification discipline: check current state with a tool first.
  • Sampling per official Qwen3 doc: thinking 0.6/0.95, no-thinking 0.7/0.8.
  • Reasoning_content echo: captured and returned in multi-turn history.

v0.10 — August 2026

local thinking switch + relative context/threads

  • Local thinking mode (Qwen3-8B): ON/OFF via local.think (default OFF).
  • Empirically verified: Qwen3 reasoning goes in delta.reasoning_content, not delta.content.
  • Fix context/threads in disk install: uses _detect_cpu() + _auto_context().
  • Hot /think command: toggle without leaving the agent.

v0.9 — August 2026

fix: mute agent

  • Symptom: agent stopped responding (blank response) on long tool calls with vision coordinates.
  • Root cause: chat.py swallowed agent.run() return; stream cut left empty content.
  • Fixes: show run() return, raw SSE stream log in /tmp/aios-stream.log, single retry on empty stream.

v0.8 — August 2026

distro kernel (#5) — generic hardware

  • Kernel 6.18.10 config expanded: wifi, DRM, NVMe, UAS, ethernet, ALSA HDA + USB audio.
  • linux-firmware in /lib/firmware (~534MB) + iwlwifi symlinks.
  • Verified on HP Notebook (AMD APU + RTL8723BE + RTL8106E).

setup.py — option 5 WIFI SETUP

  • Scans SSIDs, generates wpa_supplicant config, connects and verifies.
  • Persistence on installed system via systemd-networkd.
  • Bug fix: aios-wifi.service path → replaced by networkd.

infrastructure

  • sven DB sync + ghost-state registry; libinput chain; busybox applets. MILESTONE: complete AIOS on real hardware.

v0.7 — August 2026

physical milestone

  • Full boot of AIOS LFS on real hardware verified (2 Aug 2026).
  • ISO boots from USB with Rufus in DD mode.
  • Installer copies to SSD; machine boots from disk with AIOS banner and login.
  • Fixed live initrd init to wait for the boot device (30 s, [ -b ] loop).
  • Expanded device list (sdc, sdd, hd*, nvme*, mmcblk*).
  • Clear message AIOS: boot media not found + busybox shell.

v0.6 — August 2026

aios-install v1.1.2 — kernel panic fix

  • Fix: kernel panic when booting from hard disk (exit code=0x7f00).
  • Octal escape in sed pattern → double backslash fix.
  • Fallback exec /bin/sh → exec /bin/busybox sh.
  • Active wait loop (30 s) for the root device; switch_root.

v0.5 — August 2026

aios-install

  • v1.1.0: change root/aios passwords during install (getpass, chpasswd).
  • v1.1.1: silent boot on disk (timeout=0, quiet, real root=).
  • Removed nokaslr; print_box centered.

v0.4 — August 2026

setup.py

  • validate_api_key in a daemon thread with join(timeout=12).
  • os._exit(0) at the end to force exit.
  • API key saved correctly in ~/.aios/.env.
  • LOCAL menu with Qwen3-8B-Instruct; print_box centered.

v0.3 — August 2026

fix GRUB bootloader on disk installs

  • grub-mkconfig (graphical, hung in VirtualBox) replaced by a fixed text-mode grub.cfg.
  • set default=0, set timeout=5, menuentry "AIOS LFS".
  • UUIDs and "Arch Linux" references removed.

v0.2 — August 2026

SRE Agent with native function calling on Qwen2.5-7B-Instruct

  • Model fixed to Qwen2.5-7B-Instruct; 13 tools.
  • Procedural Skill-Pro memory, context compression via /v1/tokenize.
  • Setup wizard with 7 providers; RAM detection and auto context scaling.
  • Anti-loop; readline history; Ctrl+C interrupt.

v0.1 — August 2026

SRE Agent with native function calling on Qwen3-8B

  • Complete repository rewrite; lightweight SRE agent via llama.cpp server.
  • Tools: run_command, read_file, write_file.
  • Conversational support; basic security (destructive-command warning).
← back to ccmai.org
© 2026 CCMAIMIT Licensev0.17.1ultrabeta