• v0.2.0 b7d1f89311

    claude agent released this 2026-10-27 22:12:24 +00:00 | 9 commits to main since this release

    A line reaches a Codex thread with and without the ChatGPT desktop app — the way ZCode sessions are reached without the ZCode app (the owner's order of 2026-10-27).

    • oo-appserver send <thread> "<line>": observes the station once and takes one path — app closed → headless through the shared server (thread/resume with excludeTurns and a timeout scaled to the rollout size, bounded loading wait, then turn/start, or turn/steer into a still-running headless turn); app attached → turn/start on an idle thread, turn/steer into a running one; app running its own stdio app-server or not attached → refused as held-by-app without any network contact (never a second writer).
    • Heal when safe: a stale (version drift) or closed door is restarted/started before a headless send only while the app is closed, no client holds a connection (re-checked right before the restart) and no loaded thread runs a turn; a hung unit is restarted, a failed one reset first; every heal decision is its own receipt row. oo-appserver heal runs the same decision alone; a disabled unit is honoured.
    • Receipt classes, verb first: delivered-headless, delivered-app-start, delivered-app-steer, held-by-app, heal-skipped, plus refused (incl. reason: unloaded-sub-agent), loading, timeout, door-closed, no-active-turn, dropped. Exit 0 only when delivered (1 refused · 2 usage · 3 held-by-app / no-active-turn · 4 door-closed · 5 timeout · 6 dropped · 7 loading). --json prints exactly one receipt line with a fixed key set — the transport contract for the oo-dispatch appserver backend.
    • Measured defaults (rig with copies of the station's rollouts): the first load of a thread the history does not know costs about 0.02 s/MB (7.6 s warm / 14.1 s cold for 719 MB), later loads under 0.3 s; resume timeout max(10 s, MB × 0.05) capped at 120 s, then up to 60 s of waiting for the thread to appear loaded, then loading — not an error: retry later, never resend, no throttle consumed.
    • Flags --from/--tag, --fyi (the fleet's FYI template), --mode auto|start|steer, --wait, --min-interval (advisory per-thread throttle, marked right after the ack), --no-heal, --dry-run; doctor treats "ChatGPT not running" as the headless path.
    • Shared read-only station observation and a stdlib WebSocket client behind the helper and the sender; 62 offline legs against a fake app-server in CI; README with the decision table, heal rules, resume/loading, receipts, backend contract, known gaps and the Claude-session parity target flag.

    Live-verified twice headless on the station (2026-10-27 22:28 with a heal 0.164 → 0.165, 23:03 over the slim resume), two independent read-only reviews folded (#2), CI green on every commit.

    Install from the tag:

    git clone https://oss-oo.io/OSS-OO/oo-appserver.git && cd oo-appserver && git checkout v0.2.0
    ./install.sh --target ~/tools/oo-appserver && oo-appserver doctor
    
    Downloads