This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Affected surfaces
Summary
AI summarySelf-modification loop now operates end‑to‑end and the default model switched to qwen2.5:9b.
Full changelog
What's in this release
Self-modification loop — working end-to-end
The core Layer 2 capability is now real. Agents synthesize Python functions, vote on them via quorum, deploy them via hot-loading, and call them in subsequent goals. The full loop closes.
What was broken and is now fixed:
_deploy()was a stub. It's now a complete hot-loading pipeline: writes.pyto/agentOS/tools/dynamic/, imports withimportlib, registers the function in both the ExecutionEngine (callable) and CapabilityGraph (discoverable via semantic search) under the human-readable name.- The
logvariable was undefined inself_modification.py. Every deploy attempt silently raisedNameError, caught byexcept Exception: continue. This had been killing all deploys for weeks. - Synthesized capabilities were wiped on container restart — no volume mount. Added
./memory/dynamic_tools:/agentOS/tools/dynamicand_hotload_dynamic_tools()at daemon startup. Now starts with 63 capabilities registered vs 16 before. - Rejected proposals (syntax errors, bad imports, stubs) were re-attempted every daemon cycle, flooding logs with ~40 warnings per cycle. Fixed with a persistent
{ok, failed}tracking file — failed proposals permanently skipped. - Synthesized code calling
shell_exec,fs_write,ollama_chatetc. crashed withNameError. API helpers are now injected into the module namespace at load time with proper auth token.
Quality gate rejects code before deploy: ast.parse() for syntax + stub signal detection (..., # TODO, raise NotImplementedError, etc.). Same gate at synthesis time.
Confirmed working: Scout uses semantic_search → discovers a synthesized capability → calls it in a goal. The self-improvement loop is closed.
Model switch
Default model changed from mistral-nemo:12b to qwen2.5:9b. Lower VRAM usage, significantly quieter fan. Installer updated to pull the correct model.
Stability fixes
fs_read/fs_list: path length + newline validation — blocks ASGIOSError: File name too longwhen agents pass prose as a file pathpersistent_goal.py:update_progress,complete,abandonwrapped intry/except— prevents autonomy loop crash on malformed unicode in goal metricsapi/server.py: dedup fix for capability synthesis uses regex on actualdefdeclarations, not comment lines
Phase 6 — HollowOS bootable image skeleton
hollowos/ directory added:
mkosi.conf— Debian Bookworm minimal: Linux kernel, systemd, Chromium, NetworkManager, Docker. No desktop environment.hollow-agent.service— systemd service: startsdocker compose upat boot, restarts on failurehollow-kiosk.service— systemd service: waits for API health check, launches Chromium in kiosk mode pointed atlocalhost:7778/apps.htmlhollow-first-boot.service— one-shot provisioning on first boot (clone repo, pull images, create data dirs)build.sh— wraps mkosi with--flash /dev/sdXoptiondashboard/loading.html— boot splash: polls/healthevery 3s, redirects to apps once the API is up
Status: Skeleton complete. Needs a Linux machine with mkosi installed to build and flash. Untested on real hardware.
Phase 7 — Architecture defined
Identified and documented three fundamental problems with the current self-modification loop:
- No grounding signal — agents approve proposals by reading descriptions, not running code. Proposed fix: structured gates where two independent agents execute the capability against test cases before deploy.
- Model too small for synthesis —
qwen2.5:9b(general) cannot reliably write Python. Proposed fix: route synthesis calls to a code-specific model (Qwen2.5-Coder) or Claude API. - No real objective function — synthesized capabilities feed back into nothing. Agents call their own tools with empty inputs and mark goals complete.
New architectural layer: Event Response Layer between Layer 1 (event kernel) and Layer 2 (agent reasoning). Four levels: deterministic rules (<1ms) → trained classifier (<100ms) → agent LLM (seconds) → human escalation. Makes the system fast and reliable enough for real OS event handling (crash recovery, updates, permission errors) without waiting for a 45-second agent cycle.
Full details in ROADMAP.md under Phase 7.
Roadmap updated
ROADMAP.md updated to reflect actual vs claimed state:
- Layer 2 "What has been built" corrected —
self_modification.pyis now wired in - Honest assessment of Phase 2 success criteria (pipeline works, output quality is poor)
- Current state updated to 2026-04-08
- Stack overview updated with real completion percentages and known gaps
- Event Response Layer added as a first-class architectural component
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Hollow
All releases →Related context
Related tools
Earlier breaking changes
- v5.7.32 Web dashboard removed; operator panel is canonical UI
Beta — feedback welcome: [email protected]