cd /news/ai-agents/aetheria-a-local-first-agent-harness… · home topics ai-agents article
[ARTICLE · art-137565] src=github.com ↗ pub= topic=ai-agents verified=true sentiment=· neutral

Aetheria – a local-first agent harness that works online or offline

Aetheria published a public control-plane export of its local-first agent harness for long-running AI work on a single Windows PC, labeling the release PRIVATE_AHEAD to signal the public export is not the live operator plant. The repository includes a supervisor, watchdog, stop and recover scripts, and a mock reference worker, with CI tests covering process identity, raced start and recover, and interrupted JSON state writes; the full multi-hour run requires a private local operator root. The project states that tree-kill and Job Object stop are Proved on Windows only where a receipt says so and Locked on non-Windows, while corrupted or unknown-version HOLD and clean stop remain PARTIAL.

read7 min views1 publishedSep 22, 2026
Aetheria – a local-first agent harness that works online or offline
Image: Michielbdejong (auto-discovered)

A local supervisor for long-running AI work on one Windows PC. The chat window is optional. The work schedule is a separate process plus files on disk.

Plant clock ≠ chat. "Plant clock" means that schedule. "Chat" (also called the mouth, or Talk-face) does not own it. Closing the chat does not stop the schedule.

This repository is a public control-plane export. It is not the live operator plant. The parity label is PRIVATE_AHEAD (public export ≠ live plant): docs/EXPORT_PARITY.md.

P1–P5 are internal certification labels used on the operator plant. They are not an outside audit, and this repo does not treat them as one.

In this GitHub repo On the private operator machine
Supervisor, watchdog, stop and recover scripts, docs Live plant, Forge console, living memory, real cycle body
A mock / reference worker you can run Host paths, credentials, private measurements
Scrubbed receipt copies under measurements/public_index/ The mouth and plant code those receipts describe

Cloning this repo does not give you the live plant. A full multi-hour run needs a complete local operator root. That root is private by design.

Finer labels (Tests, Mock, Untested, Private) live in docs/CLAIMS_TAXONOMY.md. The four words below are the ones that matter on this page. A receipt or a named CI check sits beside each claim, and the exclusion sits in the same row. One PASS cell is that row only. The evidence index is FINAL_STATE_BRIEF.md.

What Limit Evidence
Layout and compile of this tree Does not start the private plant python -u scripts/demo_local_smoke.py ·docs/PUBLIC_DEMO.md
Reference mouth closes; a mock pulse keeps advancing Mock worker. This is the public slice of plant clock ≠ chat. CI does not run this script python -u scripts/demo_continuity.py ·docs/CONTINUITY_DEMO.md
Process identity rejects the wrong role or a junk PID. Windows tasklist liveness uses the PID column "Unrelated processes survive stale-PID recovery" stays PARTIAL . The PID-column test does not flipgate_stale_pid_reuse_v1 . OS PID-number reuse was not observed. This row is not a tree-kill. Tree-kill and Job Object stop areProved on Windows only where a receipt says so, andLocked on non-Windows CI runs tests/test_lh_process_identity.py andtests/test_pid_liveness_exact.py ·docs/RELEASE_GATE_ASSURANCE.md
A raced start and recover admit one supervisor Assurance row is PASS for that test (exactly one spawn) on the Ubuntu and Windows CI jobs. It is not a tree-kill and not a watchdog relaunch. Tree-kill and Job Object stop areLocked on non-Windows . Corrupted / unknown-version → HOLD and clean stop ≠ crash stayPARTIAL . The test is not the live plant CI runs tests/test_two_controller_concurrency.py ·docs/RELEASE_GATE_ASSURANCE.md
An interrupted JSON state write leaves the previous valid document or the new one Assurance row is PASS for that test. Private plant ≠ this tree. No L7 / LIVE_RSI. No soft_ACCEPT. PID and STOP files are short in-place text. Append-only JSONL is out of scope.research/ artifacts are out of scope. HOLD and clean stop stayPARTIAL CI on 395643e (run 35695450920) runstests/test_atomic_state_writes.py andtests/test_interrupted_state_writes.py ·docs/RELEASE_GATE_ASSURANCE.md

These were accepted on the operator plant. The JSON files are scrubbed copies. Cloning does not re-run them. Exclusions in full: docs/CLOSEOUT.md.

Claim, in plain language What it does not prove Receipt
Talk-face text has no visible [MODEL_REASONING] tag. Absolute/living/ cites are rewritten or refused Does not publish plant source. Copilot is not the mouth scrub ,gate ,accept
Direct-answer contract accepted by Cover and Architect. soft_ACCEPT is false.dual_bank is false Does not unlock L7 or LIVE_RSI gate ,accept
A kill is refused when the process start time does not match, even if the command line still looks right OS PID-number reuse was not observed. Tests in this repo do not flip that plant gate gate
Four named kill sites pass that start time and refuse a mismatch Not every future kill site. Start time is not the only identity check gate
Supervised clock ran 30 minutes with the mouth closed and the tick advanced Longer runs stay locked gate
An identity-checked Windows Job Object stop ended an assigned process tree Proved on Windows (operator plant).Locked on non-Windows . Not the only stop path. Linux CI does not re-prove it. Toolhelp is not retired gate
Export hash census, with an explicit parity decision The decision on the receipt is PRIVATE_AHEAD , so public ≠ plant gate
Resume / stop / watchdog record is dual-banked The receipt has no claim sentence ( claim_wording is null). No stop or relaunch behavior is claimed. Not a portable control plane gate
  • Re-run of the receipts above inside this clone. The mouth and the plant body are not in this tree. docs/CLOSEOUT.md

  • Same Talk Face session, no gate file : Standby vs Offline labels, one desktop shortcut, windowed Edge instead of a frameless app window. Operator notes only.docs/CLOSEOUT.md

  • Assurance rows that are still PARTIAL : unrelated processes surviving stale-PID recovery; corrupted or unknown-version state ending in HOLD; clean stop distinguished from a crash; localhost mutations requiring authorization; a general "no secrets" scan (the CI path scan is narrower — see the assurance table).docs/RELEASE_GATE_ASSURANCE.md

  • Job Object containment on this repo's CI (PARTIAL ). The plant receipt above isProved on Windows only. It does not make the CI row PASS, and it isLocked on non-Windows .

  • Watchdog relaunch of a process tree. No gate file. Windows is the reference. Pending on non-Windows. Not a portable stop.

  • Held-out L5 "6/6" after the dual-face cut. No scrubbed receipt in this repo. docs/CLAIMS.md

  • This tree equals the live plant

  • Dual-bank full program. No receipt for gate_full_program_asset_class_v1 is in this repo

  • soft_ACCEPT , LIVE_RSI, L7

  • Copilot as the plant mouth

  • Federation, swarm, autonomy, self-healing, gated self-modification

  • Production-ready, enterprise, enterprise-grade, revolutionary

  • A second clock, automatic dispatch, live model hot-swap

  • Endurance past the 30-minute receipt

  • Job Object as the only stop path

  • A portable control plane: tree-kill, Job Object stop, or watchdog relaunch on non-Windows

  • A wider spawn wrap

  • P1–P5 as external accreditation

Python 3.10+. Windows is the reference OS for stop, tree-kill, Job Object, and relaunch. The smoke commands below can run on other systems. They do not make stop or relaunch portable.

git clone https://github.com/denisrigsby/Aetheria.git
cd Aetheria

python -u scripts/demo_local_smoke.py

python -u scripts/demo_continuity.py

python -m pip install pytest
python -m pytest tests/test_lh_process_identity.py tests/test_pid_liveness_exact.py tests/test_two_controller_concurrency.py tests/test_fault_injection_public.py -q

Windows wrappers for steps 1 and 2: Demo-Local.bat, Demo-Continuity.bat.

CI runs the files named in .github/workflows/ci.yml, including tests/test_lh_process_identity.py, tests/test_pid_liveness_exact.py, tests/test_two_controller_concurrency.py, tests/test_atomic_state_writes.py, and tests/test_interrupted_state_writes.py. It does not run demo_continuity.py, tests/test_fault_injection_public.py, or tests/test_talk_face_ref_allowlist.py. Those three are local checks. The workflow file is the list.

On a full local root, read-only status is python -u scripts/status_report.py. Stop is python -u scripts/aetheria.py stop (Windows tree-kill / Job Object; Locked on non-Windows). Recover is a different command from start: docs/OPERATIONS.md. The CI start/recover test is one supervisor admitted. It is not an OS relaunch.

Doc Why
FINAL_STATE_BRIEF.md Evidence index (real / proved / pending / locked)
docs/CLOSEOUT.md Receipt tables and exclusions
docs/CLAIMS_TAXONOMY.md Front labels and finer labels
docs/RELEASE_GATE_ASSURANCE.md PASS / PARTIAL / FAIL
docs/GLOSSARY.md Plant clock, mouth, HOLD, Forge
docs/WHY.md Problem and non-goals
docs/ARCHITECTURE.md Layers
docs/RUNTIME_CONTRACT.md Heartbeat, STOP, recover
SETUP.md What a full local root still needs
docs/SCENARIO_30S.md The crash-and-hold picture, and what this clone can show
Term Plain meaning
Plant clock Detached supervised job runtime
Mouth / Talk-face Optional local chat or operator UI
Forge Private operator console
Tick / cycle One bounded unit of work
HOLD Fail-closed until an operator acts
Cover / Architect Two accept roles on a plant receipt. Both accepted means the receipt says so. It is not an outside audit

MIT © 2026 Denis Rigsby / Aetheria Project

── more in #ai-agents 4 stories · sorted by recency
── more on @aetheria 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/aetheria-a-local-fir…] indexed:0 read:7min 2026-09-22 ·