GG / MACHINE RUNTIMEHTTP COMMANDS · SSE RECEIPTS

Headless infrastructure for agent products

The client can disappear. The work should not.

Gooselake is a machine-side runtime for agents that operate on real hosts. It keeps sessions, event history, processes, worktrees, and team coordination durable while any web app, desktop UI, or CLI stays thin.

Provider dialects
Codex · Claude · ACP
Durable truth
SQLite event ledger
Client contract
HTTP · SSE · cursors
Machine surface
Processes · Git · MCP

The architectural bet

01 / BUILD THE DISTRIBUTED SYSTEM ON PURPOSE

Put the durable truth on the machine where the agent works.

Agent products begin as interfaces and quietly accumulate a runtime: a second provider, background execution, resumable sessions, approvals, delivery queues, and another client. Gooselake makes that boundary explicit from the first turn.

The result is one long-lived Rust control plane behind HTTP and SSE. Provider adapters translate. SQLite remembers. Clients render what the runtime can prove.

Read the story behind Gooselake
OUTSIDE / CLIENTSreplaceable views
  • Web app
  • Desktop UI
  • CLI
  • Ops console
INSIDE / DURABLE RUNTIMEHOST OWNED
Sessions become runtime records, not component state.
sessions + turnsevents + recoveryteams + deliveriesprocesses + worktrees
OUTSIDE / MACHINEspecialized engines
  • Codex
  • Claude
  • ACP agents
  • Host OS + Git

What the runtime earns

02 / INFRASTRUCTURE AFTER THE DEMO

Six hard problems. One reusable control plane.

Gooselake is valuable because these concerns reinforce each other. The event ledger makes recovery inspectable. Session ownership makes process control and message delivery safe. Worktree claims give team operations a real machine boundary.

01

Provider-neutral, harness-native

Codex, Claude, and ACP map their native lifecycles into one runtime model for sessions, turns, approvals, and terminal state. Real capability differences remain explicit instead of being papered over.

Compare providers
02

Events with receipts

Important transitions land in SQLite with scoped sequence numbers. Clients can resume from a cursor, replay the gap, and follow the live tail without inventing missing state.

Follow the event model
03

Recovery at boot

Startup reconciles sessions, turns, approvals, deferred deliveries, processes, and worktree claims. Work either resumes safely or becomes an inspectable failure, never a convincing ghost.

Understand recovery
04

Processes with an owner

The runtime starts commands, enforces ownership and concurrency, records lifecycle, and keeps bounded stdout and stderr logs. Live output is a sample; the log files are authoritative.

Inspect process control
05

Worktrees with claims

Managed Git workspaces have durable records, explicit claims, cleanup policy, and startup repair. Team spawn treats session, worktree, membership, and onboarding as one journaled saga.

See worktree lifecycle
06

Messages that get delivered

Team messages produce per-recipient delivery records with policies, deferral, retries, cancellation, and replayable state. Coordination is transport infrastructure, not prompt roleplay.

Open teams and comms

The flight recorder

Reconnect without guessing.

Every important event is a scoped, sequenced receipt. A client remembers the last cursor it processed, asks for everything after it, renders the backlog, and then follows live state.

Session and process streams subscribe before replay handoff to close the live-event gap. Lifecycle transitions are critical; high-volume output can be droppable because full process logs stay authoritative.

Read events and recovery
SESSION / SESS_7F2ACURSOR 128
  1. 0129
    turn.startedcritical · persisted
    REPLAY
  2. 0130
    process.outputdroppable · sampled
    REPLAY
  3. 0131
    approval.requestedcritical · persisted
    REPLAY
  4. high-water markbacklog reconciled with live subscription
    HANDOFF
  5. 0132
    turn.completedcritical · persisted
    LIVE
STREAM ATTACHEDSQLITE IS TRUTH

Host work and agent teams

03 / OWNERSHIP ALL THE WAY DOWN

Work has a place. Coordination has a delivery state.

An agent that can edit a repository and run a build needs more than a chat transcript. Gooselake makes the host resources and the handoffs between agents explicit, durable, and queryable.

HOST MANIFESTOWNED RESOURCES
WORKTREE / WT_03feature/agent-runtimeclaim: sess_codex_14 · cleanup: on release
PROCESS / PROC_92bun testowner: sess_codex_14 · logs: authoritative

Creation, claims, lifecycle, logs, and cleanup stay separate so the runtime can explain exactly who owns what.

Follow the host workflows
TEAM DELIVERY / MSG_81NON-INTERRUPTING
01Message recordedidempotency key accepted
02Recipient busydelivery deferred
03Turn boundaryinject, retry, or cancel

A direct message or broadcast becomes one message plus a delivery record per recipient. Restart the runtime and deferred delivery is still runtime state.

See delivery semantics

Thin by design

04 / SPEND COMPLEXITY ON THE PRODUCT

Build the interface your users need. Keep the runtime out of it.

A good client can be killed, restarted, and reconnected without changing the runtime’s understanding of the work.

CLIENT RETAINSEPHEMERAL
  • 01the selected session or team
  • 02the last processed event cursor
  • 03draft input and optimistic presentation
  • 04local display preferences
RUNTIME OWNSDURABLE
  • 01provider-backed sessions and opaque provider references
  • 02turns, approvals, and one-active-turn coordination
  • 03event history, scoped cursors, and recovery diagnostics
  • 04process records, logs, worktrees, claims, and team deliveries

Documentation flight plan

05 / ENTER FROM WHERE YOU STAND

From first boot to day-two operations.

The manual is organized around how the runtime behaves, not around a list of crates. Pick the route that matches the work in front of you.

Browse the complete manual

Control tower, not cockpit

Give the next agent product a foundation that already knows how to survive.

Start locally, create one provider-backed session, and watch the runtime retain its own receipts.

Open the quick startInspect the source on GitHub