Commit 084a8b5
feat: full machine control for every agent + the OpenClaw/Hermes feature set, gated and audited
FULL CONTROL — every agent controls the host (shell, files, network), each via its
project's own supported switch: opencode OPENCODE_PERMISSION={"*":"allow"},
claude-code --dangerously-skip-permissions, OpenClaw `exec-policy preset yolo`,
Hermes unattended auto-approve, and a RUN: tool-loop the Brain drives on any
OpenAI-compatible model. CrewAI crews get a run_shell tool. Injected into every
service via full_control_env(); config: security.full_control / guardrails.
The installer now asks for root ONCE up front (sudo keep-alive on Linux/macOS,
UAC self-elevation on Windows), installs system packages + the global aios command
+ a boot service, but keeps toolchains user-owned and hands ownership back.
SECURITY (aios_sec.py) — full control + an open control plane is exactly
CVE-2026-25253, so it's paired with a real gate: loopback trusted, every other
request needs AIOS_HUB_TOKEN; CSRF closed (cross-origin always needs the token,
CORS never echoes *); DNS-rebinding closed (Host must be IP/known-local); exec
guardrails refuse rm -rf /, mkfs, dd to block devices, fork bombs, shutdown
(tokenized, not regex — catches --no-preserve-root); everything audited.
DURABLE STATE (aios_brain.py) — one SQLite db (WAL, profile-aware) backing:
Task Brain cron + interval + agent + shell on one scheduler, every run logged
TaskFlow durable multi-step flows; state commits per step, resumes on restart
Active Memory FTS5 recall on EVERY turn + async fact extraction (learns your workflow)
Skills self-improving Curator writes skills/learned/*/SKILL.md after real tasks
Audit every command any agent ran
Old memory.json / schedules.json migrate in automatically.
TOOLS (aios_tools.py) — the one choke point for shell (guardrailed + audited),
the 28-channel catalog read from OpenClaw's own dist/channel-catalog.json, and
skill install/learn.
CLI: aios exec, channels, attach (jump into a live OpenClaw session), migrate
(import from OpenClaw), profile (isolated per-client agents), token [--rotate].
HUB: Brain now has a body (RUN: loop, capped, guarded). New endpoints /api/exec,
channels, tasks, flows, skills, audit, security. Dashboard gains Channels, Task
Brain, TaskFlow, Skills, and Control & Audit views; a fetch wrapper attaches the
token so WSL-over-IP works. Fixed a latent bug: /?token=… (and any ?query) 404'd
the dashboard because the root match didn't strip the query string.
Fixed install.ps1: it never parsed under PowerShell 5.1 -File (em-dashes decoded
as ANSI) — now pure ASCII.
Verified on Windows: guardrails (32 cases), auth gate (14 cases incl. CSRF +
rebinding), cron matcher (15 cases), FTS recall, durable flow revisions, all new
endpoints live, dashboard views render with zero console errors, exec round-trips
to the audit log, and aios start hub enforces the token end-to-end.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent 7854315 commit 084a8b5
12 files changed
Lines changed: 1952 additions & 77 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
65 | | - | |
66 | | - | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
67 | 70 | | |
68 | 71 | | |
69 | 72 | | |
| |||
158 | 161 | | |
159 | 162 | | |
160 | 163 | | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
161 | 170 | | |
162 | 171 | | |
163 | | - | |
| 172 | + | |
164 | 173 | | |
165 | 174 | | |
166 | 175 | | |
| |||
169 | 178 | | |
170 | 179 | | |
171 | 180 | | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
172 | 186 | | |
173 | | - | |
| 187 | + | |
174 | 188 | | |
175 | 189 | | |
176 | 190 | | |
| |||
209 | 223 | | |
210 | 224 | | |
211 | 225 | | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
212 | 240 | | |
213 | 241 | | |
214 | 242 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
44 | 61 | | |
45 | 62 | | |
46 | 63 | | |
| |||
49 | 66 | | |
50 | 67 | | |
51 | 68 | | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
52 | 72 | | |
53 | 73 | | |
54 | 74 | | |
| |||
0 commit comments