Jared Frieden
jared / engine / agent-operating-system

The Agent Operating System

History. The last generation is on the architecture page.

history System · 2026 Codex App ServerClaude CodeOVCoordMCPObsidianPowerShell

This page is history, not the live engine. The live platforms are AgiRook, ContextForge, and optional PocketBridge. The mothballed generations are compared on the architecture page.

The problem

One person working across a pile of AI tools ends up with coordination scattered through chat histories that die at the end of each session. There is no shared state, no queue, no audit trail, and every new session starts from nothing. I decided to treat it as an operating-system problem instead: give it processes, a scheduler, a filesystem, capability boundaries, and a way to recover native agent sessions after an orchestrator stops.

The shape

The last generation separated judgment from authority. Sol runs through the Codex harness; Fable runs through Claude Code. Either can coordinate, implement, or review when the route permits, but neither model owns lifecycle truth. OVCoord binds each native thread or session to a scoped RunEnvelope, an ordered event ledger, per-session usage, a filtered MCP view, and content-hashed artifact references. Markdown remains the human-readable intent and task surface; deterministic PowerShell machinery remains the scheduler and state authority.

Manager routes handle architecture, synthesis, and adjudication. Worker routes handle bounded implementation and swarm batches. High-risk implementation is reviewed through the other harness, so the reviewer does not inherit the implementer's session or assumptions.

That generation sat on top of an earlier one that coordinated work through markdown task files alone. Both are history. They are compared side by side, diagrams included, at the architecture page.

Design decisions I would defend

Native harnesses instead of a lowest-common-denominator proxy. Codex keeps its App Server threads, turns, steering, goals, and approvals. Claude Code keeps its streaming sessions, tools, and resume behavior. OVCoord adapts both into one protocol-neutral run contract without pretending their lifecycle semantics are identical.

Files for intent, a ledger for runtime truth. Tasks and decisions stay in plain Markdown because they should be readable, greppable, and versionable. Claims, native session IDs, budgets, approval decisions, usage, and ordered events live in a runtime ledger because concurrent lifecycle state needs stronger invariants than prose.

Capabilities are issued per run. MCP is the shared tool and resource plane, not the scheduler. Each run receives only its declared tools and one scoped ovcoord://run/... resource. Approval requests and decisions land in the same audit trail, and destructive patterns are denied even when a low-risk run otherwise allows automatic work.

Subscription-aware accounting. Codex and Claude currently run through subscriptions, so token and reported-dollar values are session telemetry by default rather than fake invoice caps. Wall time, top-level turns, and Claude agentic turns remain hard boundaries. Token or cost limits become hard only when a run opts in.

No model in the monitoring loop. Heartbeats, polling, file watching, stale-claim recovery, and state transitions are daemon work. Models are reserved for planning, implementation, review, and decisions where judgment is actually required.

Proof, not just a diagram

The native dual-agent pilot used Sol to plan, steered the live Codex turn, sent bounded implementation to a native Fable session, resumed Sol for independent review, denied a destructive approval request, and recorded separate usage for both subscriptions. The pilot passed, and the full OVCoord suite passed 245 of 245 tests.

Sol plans frames the workin a live thread Turn steered course-correctedmid-run Fable implements bounded scope,native session Sol reviews resumed fresh,independent eyes Approval DENIED destructive requestrefused Usage recorded separately, persubscription dispatch hand back 1 2 3 4 5 6 the pilot passed · the full suite ran 245 of 245 green · failed attempts were kept as evidence
One run through the system: planned in one seat, built in another, reviewed by fresh eyes; the one destructive request was refused and logged.

Failed pilot attempts were retained as evidence and drove changes to steering IDs, budget semantics, Claude turn accounting, settings isolation, and Windows sandbox handling.

Continuity across context death

The adapter process is disposable. OVCoord stores the native Codex thread ID or Claude session ID beside the goal, scope, policy, usage, and artifacts. A replacement process can resume the native session while the audit ledger survives independently. For longer arcs, structured handoffs and session-start briefings still surface pending work from the Obsidian coordination vault.

Scale

As of July 2026 the underlying task bus has carried more than 440 tasks across 83 batches, over 340 of them completed, backed by more than 150 purpose-built automation scripts. The vNext runtime adds native-session orchestration without discarding that proven file-based coordination layer. The runtime itself is held to 309 automated checks across two PowerShell runtimes, and the shared memory plane both harnesses read carries 159 canonical entries.

What it taught me

The upgrade was not "add more agents." It was to make authority explicit. Models should own judgment; deterministic machinery should own state, permissions, accounting, and evidence. Once identity, role, harness, and model are separate routing dimensions, the system can adopt better manager and worker models without rebuilding the operating contract around each release.