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. 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 https://github.com/denisrigsby/Aetheria/blob/main/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/ https://github.com/denisrigsby/Aetheria/blob/main/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 https://github.com/denisrigsby/Aetheria/blob/main/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 https://github.com/denisrigsby/Aetheria/blob/main/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 https://github.com/denisrigsby/Aetheria/blob/main/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 https://github.com/denisrigsby/Aetheria/blob/main/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 flip gate stale pid reuse v1 . OS PID-number reuse was not observed. This row is not a tree-kill. Tree-kill and Job Object stop are Proved on Windows only where a receipt says so, and Locked on non-Windows | CI runs tests/test lh process identity.py and tests/test pid liveness exact.py · docs/RELEASE GATE ASSURANCE.md https://github.com/denisrigsby/Aetheria/blob/main/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 are Locked on non-Windows . Corrupted / unknown-version → HOLD and clean stop ≠ crash stay PARTIAL . The test is not the live plant | CI runs tests/test two controller concurrency.py · docs/RELEASE GATE ASSURANCE.md https://github.com/denisrigsby/Aetheria/blob/main/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 stay PARTIAL | CI on 395643e run 35695450920 runs tests/test atomic state writes.py and tests/test interrupted state writes.py · docs/RELEASE GATE ASSURANCE.md https://github.com/denisrigsby/Aetheria/blob/main/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 https://github.com/denisrigsby/Aetheria/blob/main/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 https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/scrub mouth leak v1.json , gate https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/gate talkface visible tag seal v1.json , accept https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/architect accept talkface visible tag seal v1.json | | Direct-answer contract accepted by Cover and Architect. soft ACCEPT is false. dual bank is false | Does not unlock L7 or LIVE RSI | gate https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/gate direct answer contract talk face v1.json , accept https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/architect accept direct answer contract talk face v1.json | | 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 https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/gate stale pid reuse v1 1412.json | | 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 https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/gate expected create time call sites v1 930b.json | | Supervised clock ran 30 minutes with the mouth closed and the tick advanced | Longer runs stay locked | gate https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/gate endurance v1 0440.json | | 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 https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/gate job object kill path v1 a709.json | | Export hash census, with an explicit parity decision | The decision on the receipt is PRIVATE AHEAD , so public ≠ plant | gate https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/gate export hash parity v1 79b2.json | | 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 https://github.com/denisrigsby/Aetheria/blob/main/measurements/public index/gate control plane resume stop watchdog v1 84f7.json | - Re-run of the receipts above inside this clone. The mouth and the plant body are not in this tree. docs/CLOSEOUT.md https://github.com/denisrigsby/Aetheria/blob/main/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 https://github.com/denisrigsby/Aetheria/blob/main/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 https://github.com/denisrigsby/Aetheria/blob/main/docs/RELEASE GATE ASSURANCE.md - Job Object containment on this repo's CI PARTIAL . The plant receipt above is Proved on Windows only. It does not make the CI row PASS, and it is Locked 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 https://github.com/denisrigsby/Aetheria/blob/main/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 1. Run — layout and compile. No private plant. python -u scripts/demo local smoke.py 2. Test — reference mouth closes; the mock pulse still advances. python -u scripts/demo continuity.py 3. Local checks — identity, single-flight start/recover, and fault injection. 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 https://github.com/denisrigsby/Aetheria/actions/workflows/ci.yml 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 https://github.com/denisrigsby/Aetheria/blob/main/docs/OPERATIONS.md . The CI start/recover test is one supervisor admitted. It is not an OS relaunch. | Doc | Why | |---|---| | FINAL STATE BRIEF.md https://github.com/denisrigsby/Aetheria/blob/main/FINAL STATE BRIEF.md | Evidence index real / proved / pending / locked | | docs/CLOSEOUT.md https://github.com/denisrigsby/Aetheria/blob/main/docs/CLOSEOUT.md | Receipt tables and exclusions | | docs/CLAIMS TAXONOMY.md https://github.com/denisrigsby/Aetheria/blob/main/docs/CLAIMS TAXONOMY.md | Front labels and finer labels | | docs/RELEASE GATE ASSURANCE.md https://github.com/denisrigsby/Aetheria/blob/main/docs/RELEASE GATE ASSURANCE.md | PASS / PARTIAL / FAIL | | docs/GLOSSARY.md https://github.com/denisrigsby/Aetheria/blob/main/docs/GLOSSARY.md | Plant clock, mouth, HOLD, Forge | | docs/WHY.md https://github.com/denisrigsby/Aetheria/blob/main/docs/WHY.md | Problem and non-goals | | docs/ARCHITECTURE.md https://github.com/denisrigsby/Aetheria/blob/main/docs/ARCHITECTURE.md | Layers | | docs/RUNTIME CONTRACT.md https://github.com/denisrigsby/Aetheria/blob/main/docs/RUNTIME CONTRACT.md | Heartbeat, STOP, recover | | SETUP.md https://github.com/denisrigsby/Aetheria/blob/main/SETUP.md | What a full local root still needs | | docs/SCENARIO 30S.md https://github.com/denisrigsby/Aetheria/blob/main/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 pause 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 https://github.com/denisrigsby/Aetheria/blob/main/LICENSE © 2026 Denis Rigsby / Aetheria Project