Skip to content

Hollow

v5.0.0 Feature

This release adds 3 notable features for engineering teams evaluating rollout.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Affected surfaces

rce_ssrf breaking_upgrade

Summary

AI summary

Self-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 .py to /agentOS/tools/dynamic/, imports with importlib, registers the function in both the ExecutionEngine (callable) and CapabilityGraph (discoverable via semantic search) under the human-readable name.
  • The log variable was undefined in self_modification.py. Every deploy attempt silently raised NameError, caught by except 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/dynamic and _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_chat etc. crashed with NameError. 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 ASGI OSError: File name too long when agents pass prose as a file path
  • persistent_goal.py: update_progress, complete, abandon wrapped in try/except — prevents autonomy loop crash on malformed unicode in goal metrics
  • api/server.py: dedup fix for capability synthesis uses regex on actual def declarations, 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: starts docker compose up at boot, restarts on failure
  • hollow-kiosk.service — systemd service: waits for API health check, launches Chromium in kiosk mode pointed at localhost:7778/apps.html
  • hollow-first-boot.service — one-shot provisioning on first boot (clone repo, pull images, create data dirs)
  • build.sh — wraps mkosi with --flash /dev/sdX option
  • dashboard/loading.html — boot splash: polls /health every 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:

  1. 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.
  2. Model too small for synthesisqwen2.5:9b (general) cannot reliably write Python. Proposed fix: route synthesis calls to a code-specific model (Qwen2.5-Coder) or Claude API.
  3. 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.py is 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

Track Hollow

Get notified when new releases ship.

Sign up free

About Hollow

All releases →

Related context

Earlier breaking changes

  • v5.7.32 Web dashboard removed; operator panel is canonical UI

Beta — feedback welcome: [email protected]