-
Notifications
You must be signed in to change notification settings - Fork 0
Self Management
blumi can evolve itself: author its own skills, edit its own config (validated), and reload in place to apply both — no restart, conversation preserved. These are agent tools the model calls during a turn; just ask it in chat ("add a skill for ...", "set llm.temperature to 0.3 and reload").
Status: the self-management tools below are live. Triggering them directly from the phone app (buttons for reload / restart / edit config / build skills) and a restart-the-gateway capability are rolling out incrementally.
Reads/writes ~/.blumi/settings.json by dotted key, and can add personas. Every change is
validated (it must deserialize as a valid config) before an atomic write, so a bad edit is
rejected rather than corrupting your config.
Process-level settings (bind host/port, the gateway password, the grid identity) are read once at startup, so changing them needs a restart, not just a reload.
Create / update / delete a SKILL.md under ~/.blumi/skills/<name>/. Skills are
progressive-disclosure instructions: their name + description sit in the system prompt; the agent
loads the full body on demand. See blumi skills and CLI Usage.
Emits a reload: blumi re-reads settings.json, re-scans skills, and rebuilds the session seeded
from the current conversation (messages, todos, token counts preserved). Use it after
self_config / manage_skill.
The always-on gateway is supervised: launchd KeepAlive (macOS) and systemd Restart=always
(Linux) auto-restart it on crash. That's crash recovery for free — see Gateway.
For a wedged-but-alive session, a reload (above) rebuilds it without losing the conversation.
Beyond crash recovery, blumi treats reliability as a bounded control problem (after the self-healing-orchestrators paper) and turns repeated failures into durable improvements — wired into the failure taxonomy and the semantic memory.
-
Reflex recovery. A failed tool result is classified (bad args, state conflict, crash,
empty) and gets a budgeted, targeted recovery action — re-read-then-retry, an argument fix from
the tool's hint, narrow-the-query, or escalate. Only idempotent (read-only) tools auto-retry;
mutating tools (Bash, FileWrite, ...) escalate rather than blind-retry. It composes with the
doom-loop guard, and each attempt emits an observability trace (
⚕ self-heal ...inline in the TUI). -
Learns from failures. A successful recovery is stored as a failure→fix episode in the
agentmemory namespace, so it diffuses across the grid ; a similar future failure recalls the known fix and injects it as trailing guidance. Paths/secrets are redacted first. -
Evolves. Recurring failure clusters are mined (on the gateway sweep) into auto-written
recovery skills (low-risk, with a notice — via the same
manage_skillactuator above); anything risky — config / providers / secrets / deletes — raises an approval instead. The audit trail is kept asevolutionmemories. -
Confirmed. With
heal.verifyon, a recovery is marked verified only when the retried tool actually succeeds on a later step (ground truth, not just "a fix was suggested"), and the fix that worked has its utility reinforced.
Configure it (~/.blumi/settings.json; defaults shown):
"heal": { "enabled": true, "recovery_budget": 2, "verify": false, "learn": true, "evolve": "auto", "redact_paths": true }
-
evolve—"auto"(apply low-risk skills automatically, with a notice) ·"propose"(mine + always ask) ·"off"(kill switch: still recover & learn, but never self-modify). -
recovery_budgetmax recovery attempts per turn ·verifyrequire cross-step success ·learnwrite failure→fix episodes ·redact_pathsscrub paths/secrets before storage ·enabledmaster switch.
See it: the TUI /heal overlay (recovery / evolution / proposal counts + recent items), the
inline ⚕ self-heal traces, the blugo Heal tab, or GET /api/heal on the gateway.
- Config writes are validated + atomic (temp file → rename), mode
0600. - Skill names are slug-jailed (no path traversal).
- These tools are powerful; under non-YOLO sessions, mutating actions still surface an approval card. Keep destructive operations behind "ask" in your permissions.