Releases: BigscreenVR/omp-spt
Release list
omp-spt v0.9.4
Requires spt-core v0.67.0 or newer and Oh My Pi v16.3.15 or newer (both unchanged). Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension.
Fixed
- Incoming peer messages preserve your unsent draft without changing how they wake the agent. Idle arrivals, busy deliveries, and resubmissions keep OMP's native user-prompt delivery; the extension marks its own delivery stubs as system-injected before the editor handles them, so your typing stays untouched. Peer messages remain user-role context with their full bodies unchanged; they are not promoted to developer or system instructions.
omp-spt v0.9.3
Requires spt-core v0.67.0 or newer (unchanged) and Oh My Pi v16.3.15 or newer. Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension.
Fixed
- A turn that ends into a hold still feeds its closing text. The arming turn of
spt_checkpoint(and a turn ending in a usage-limit hold) never reaches the idle transition its closing message rides on, so that message was missing from the sender's IO feed (hertz's 0.9.2 acceptance caveat: the native arming closure was absent from the sender rows). The closing text now goes out as the turn's last mid span before the forced busy, exactly once. REQ-IO-TURN-FEED.
omp-spt v0.9.2
Requires spt-core v0.67.0 or newer (unchanged) and Oh My Pi v16.3.15 or newer. Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension.
Fixed
- The IO feed's reported cursor is session-scoped, closing the replay 0.9.1 left open. 0.9.1 made the history baseline session-scoped but still cleared the per-turn reported cursor on every
before_agent_start. One OMP run holds several turns — a delivery, a steer or a reminder queued mid-run starts the next turn with anotherbefore_agent_startand noagent_start, and the singleagent_endat the run's end carries every message of the run — so a span reported in an earlier turn of the run was in neither the baseline nor the cleared cursor and went out again at the run's end, minting a freshMSG_OUTfor each shortform (hertz on 0.9.1, 2026-09-10 01:21Z: seq 2030/2033 duplicating 2024/2026; todlando on 0.9.0 with no checkpoint at 01:20Z). The reported cursor and the now-signal's agent-output cursor now live for the session; only positional entries clear per run. KNOWN-HAZARDS #19 (field section added), REQ-HAZARD-IO-HISTORY-REPLAY; live failure found by hertz.
omp-spt v0.9.1
Requires spt-core v0.67.0 or newer (unchanged) and Oh My Pi v16.3.15 or newer. Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension.
Fixed
- The IO feed no longer replays earlier output after a checkpoint (or any narrower view of the session). The feed judged "this turn's output" against one replaceable snapshot of the conversation, and OMP presents views of very different width —
agent_endcarries only the run's new messages, a per-requestcontextcan be narrower than the last, and a compaction yields a summary plus a kept tail. When a later view was wider than the snapshot, every historical assistant message in the gap went out again as a mid-turnAGENT_OUTPUT, and core minted newMSG_OUTdeliveries for every@<…@>shortform in them (todlando, 2026-09-10 00:35Z: every span since 00:04Z re-sent to doyle, hertz and deployah after anspt_checkpoint). The assistant baseline is now session-scoped and only ever widens, so reported assistant identity is exactly-once per session, not per turn. KNOWN-HAZARDS #19, REQ-HAZARD-IO-HISTORY-REPLAY; RCA by hertz.
omp-spt v0.9.0
Requires spt-core v0.67.0 or newer (unchanged) and Oh My Pi v16.3.15 or newer. Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension.
Added
- The context ledger: spt's durable context for a session. OMP applies an extension's
contexthook per provider request and never stores its output, and it discards thebefore_agent_startsystem-prompt override when the turn ends. So everything omp-spt added that way — the startup brief, the durable mind on resume, every now-signal (turn start and boundary), every delivery polled while busy — was seen for one turn or one request and then gone; only delivered bodies had a durable home (0.3.31's re-splice). All of it now lives in one hidden block re-supplied as the last message of every provider request: a head (the mind, then the brief) and an ordered, UTC-timestamped log of everything spt added since the last reset — every now-signal kind verbatim, every delivery's arrival and sender, polled envelopes verbatim. Tail placement keeps the transcript prefix cache-stable (a changing system prompt would re-bill the whole session every turn). The log is bounded (32 KB, oldest evicted first with a visible count, entries clipped at 16 KB) and clears on compaction, keeping the head and recording the reset as its first entry. Order and timing are part of the memory: no now-signal kind is filtered or summarised.
Changed
- No more per-turn system-prompt override and no per-request
spt-now-signal/spt-eventmessages. The 0.8.0 "brief on every turn" is superseded: the brief is the ledger's head. The now-signal's turn-start answer and every boundary answer are ledger entries; deliveries drained overapi pollwhile busy are ledger entries.
adapter.spt sha256 1bfdf10c610343a9efdc4f0631d13dc1f5f05ea6aad4515c35a136a562b0e8f8.
omp-spt v0.8.0
Requires spt-core v0.67.0 or newer (unchanged) and Oh My Pi v16.3.15 or newer. Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension.
Added
- RECV-silence watchdog (KNOWN-HAZARDS #17). A listener that takes deliveries from spt-core but emits nothing to the extension used to sit ONLINE and deaf, invisible to the hazard-#5 ladder (which only arms once a delivery has been received). While a listener is up and the session is idle, the extension now replays the endpoint's
spt api io-eventsledger every two minutes and counts theMSG_INrows taken since that listener started against the deliveries it actually received (listener frames plus frames it drained itself overapi poll). More rows than receipts restarts the listener once (LISTENER_RESTART_ON_SILENCEin the log, degraded-comms rail); the same divergence on the replacement closes the endpoint through the existing fail-closed ladder so it is visibly offline. Silence alone never restarts anything, and an unreadable ledger proves nothing. On spt-core ≤ 0.67.x the relay leg writes noMSG_INrow (F-038, spt-bs-releases#280), so the watchdog is fail-safe today and becomes effective the release #280 lands, with no adapter change.
Changed
- The startup brief rides every turn and spells the shortform opener out. The brief used to ride the system prompt of the activation turn only; OMP rebuilds the per-turn override, so a session deep into its work no longer saw it. It is now appended on every turn, and its messaging line shows the grammar in full —
@<doyle your text @>, the opener@<glued to the id (@<doyle, never@doyle), ids comma-joined, closer@>— after a field session opened with@doyle … @>and had to resend.
adapter.spt sha256 825e84ed397f7082ec9de3b20d8fda575d06b45a8ec0fb9e03fbe626728516b1.
omp-spt v0.7.1
omp-spt 0.7.1
Requires spt-core v0.67.0 or newer (unchanged) and Oh My Pi v16.3.15 or newer. Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension.
Fixed
- A failed
sptcommand is now reported by the line that explains it, and its whole output is logged. A failure used to be summarised by the first non-empty line of the command's output. spt-core prints a diagnostic ahead of its refusal on everyapi bindon a node without an engine room (ER_HOSTED_PROBE:…, an eager reserved-id probe that decides nothing — spt-bs-releases#279), so the decisiveCONFLICT:<id> is live under session …line never reached the log or the notification; the 0.7.0 subagent field report cited the probe line as the refusal for that reason. The summary now skips that diagnostic and the full capture rides with the error into the log line, so the next refusal is diagnosable from the log alone.
Changed
- Parity record corrected. F-037 in
docs/SPT-CORE-FINDINGS.mdnow cites the publishedapi bindownership guarantee ("you can only bind your own") and theCONFLICTline — doyle's ruling of 2026-09-06 — and KNOWN-HAZARDS #15 no longer calls the probe the guard. The two shortform-outcome rows indocs/PARITY.mdthat still read "gap → phase 2" record what 0.4.0 shipped: dispatch outcomes and the session's sender proof come from spt-core'sDISPATCH_RESULTS.
Release commit: 7ac97dfa3e907d37e63dc39aa2072bea508dfa87 (feature commit 685b6eb). Asset: adapter.spt (x86_64 Windows MSVC, Linux GNU, static Linux musl helpers).
omp-spt v0.7.0
Requires spt-core v0.67.0 or newer (unchanged) and Oh My Pi v16.3.15 or newer. Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension. Do not runspt_checkpointon an endpoint still on 0.4.0–0.6.0 — see Fixed.
Fixed
spt_checkpointno longer hangs OMP. The tool used to await native compaction from inside its own call; OMP's compaction aborts the active run and waits for it to settle, and the run was waiting on the tool — a three-way wait that froze the "Compacting context…" loader until Esc and then reported a failed checkpoint with no wake. It never bit in the field only because no endpoint had run it yet. The tool now arms the checkpoint and returns at once ("end the turn now"); when the turn ends the endpoint publishes busy and the extension compacts from a timer, outside every tool and hook, then queues the same-endpoint wake exactly as before — and only once OMP's ownsession_compactevent proves the reset committed, since OMP's interactive compaction resolves normally even when cancelled or failed. A reset that fails after arming, or resolves without committing, is reported as a next-turn notice (commune saved, context NOT reset, no wake queued) — never a false wake. (KNOWN-HAZARDS #16)- A subagent no longer activates the endpoint a second time. OMP binds the extension again for every in-process subagent session, with no marker that says so; the nested copy read the same endpoint id and ran a second
api bindwith the subagent's session id — which spt-core happened to refuse (ER_HOSTED_PROBE:no-row), leaving an error line per subagent and relying on core's accident to keep the primary session alive. Exactly one binding per OMP process activates now; every later one is inert (no bind, no listener, no state, no session-end; tools and/readyrefuse), so a message can only ever surface in the main conversation. (KNOWN-HAZARDS #15)
Added
- Deliveries during a checkpoint are held for the post-reset turn. From arming
spt_checkpointuntil its wake (or failure notice) is queued, inbound peer messages stay in custody unsubmitted — a stub submitted into the dying context would be summarised away — the status rail reads· checkpoint pending, and the deaf-session ladder pauses. The release resubmits them right after the wake; OMP orders the wake turn against the delivery turns itself.
Field-verified on 0.6.0 (no code change)
- The long-foreground-command nudge (35 s
sleep, line quoted verbatim by hertz) and the[omp-spt <id>]log prefix. Note the nudge's window: OMP backgrounds a foregroundbashitself atbash.autoBackground.thresholdMs(default 60 s) and backgrounds early when a steer arrives, so the nudge fires for completed foreground runs of 30–60 s.
Requires spt-core v0.15.0 or newer (was v0.13.2). This release adds self-checkpointing for live agents, automatic resume context, and clearer multi-line message delivery — all built on features that arrive in spt-core v0.15.0.
Added
- Self-checkpointing for live agents —
/sptc:commune --checkpoint. A live agent can now reset and rebuild its own context without you running/clear. Write a commune containing the marker!!checkpoint!!and the session clears itself, then wakes back up from that very commune and keeps going. A single!!checkpoint!!wakes with a default "Proceed with next steps"; a pair of markers wakes with whatever instruction you write between them. The marker is one-shot — it never lingers in your rebuilt context. - Automatic resume context. When a live agent's session starts (or clears), it now pulls its durable role, working context, and latest unsynced commune and re-injects them automatically — so it resumes where it left off instead of coming back blank.
Changed
- Incoming messages are easier to read. A message delivered from another agent now renders across multiple lines — the envelope opening, the body, and the close each on their own line — instead of one dense single line.
- Requires spt-core v0.15.0+ (up from v0.13.2). Self-checkpointing and resume context both rely on capabilities introduced in that release;
/sptc:setupandspt adapter updatewill keep you current. - Adapter version of truth is now 0.7.0 (shown in
/sptc:versionand the release tag).
[0.6.2] - 2026-06-23
Requires spt-core v0.13.2 or newer (unchanged). A small but important delivery fix — no change to commands or setup.
Fixed
- Messages delivered while you're idle now actually send. Previously an incoming message from another agent could be typed into your Claude Code input box but never submitted — it just sat there as an unsent draft. The delivery now presses Enter to send it, so idle-delivered messages arrive and run on their own. Your half-typed draft is still stashed and restored around the delivery, exactly as before.
[0.6.1] - 2026-06-22
Requires spt-core v0.13.2 or newer (the version that can install a multi-platform package). Packaging-only release — no change to what the adapter does, only how it ships.
Packaging
- One download now covers every platform. The adapter ships as a single multi-platform
adapter.sptthat bundles both the Windows and Linux builds beside one shared manifest; installing picks your platform automatically. This replaces the previous per-OS files and the Windows-only stopgapadapter.spt(which broke self-update on Linux), sospt adapter add --release …andspt adapter updatenow just work on either OS with no platform to pick. Requires spt-core v0.13.2+ (the version that can read a multi-platform package).
Changed
- Setup is simpler.
/sptc:setupnow activates the adapter with a plainspt adapter add --release SaberMage/spt-claude-code— no OS detection or asset selection, since the one package is host-agnostic. - Adapter version of truth is now 0.6.1 (shown in
/sptc:versionand the release tag). The cplugs plugin skeleton bumps with the simplified setup body.
omp-spt v0.6.0
Requires spt-core v0.67.0 or newer (unchanged) and Oh My Pi v16.3.15 or newer. Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension and helper.
Added
- A provider usage limit is an outage, not a fault — and the endpoint now waits it out. When a turn ends with an account-level refusal (OMP's usage-limit classification, HTTP 402, or quota/credits/billing wording), the extension says so once and plainly: nothing is broken, the session and its context are intact, only a human clearing the limit or the provider's stated reset changes anything, and the provider's own line is quoted. It then holds the endpoint busy — not receivable — until the stated reset plus one minute, re-asserting that state every five seconds so a stray recovery is corrected within seconds. Peer messages wait in the queue instead of bouncing off a session that cannot answer, and the deaf-session ladder pauses for the hold. A human prompt releases the hold early; the deadline releases it and delivers everything queued, in order; after a restart the session's own record re-arms the hold while its last message is still the refusal. Without a parseable, plausible reset time the endpoint simply stays reachable — the failure direction is always "reachable too early", never "stuck forever". Per-interval rate limits and capacity shedding are transient and never a hold.
- The Psyche companion's account refusal is reported for what it is. When the companion's inner OMP turn is refused for account or credential reasons,
psyche-ompnow exits spt-core's reserved code96with aPSYCHE_ACCOUNT_REFUSALline that names the cause and the fix in one breath: an outage, not a fault; the Psyche session and its stored context are intact and untouched; a human clears the account. spt-core paces its retries on that code, never reseeds, and spends no strike — so a billing limit no longer looks like a broken companion. - Long foreground commands get a nudge to go background. A foreground
bashcall that measured 30 s or more has one[spt]line appended to its result: peer deliveries reach you only at your next boundary and the endpoint read busy the whole time — run such commands withasync: trueand poll. At most three nudges per turn; advice only, nothing is blocked.
Changed
- Companion failures say what the inner session actually said. A failed
psyche-omporecho-commune-ompturn now carries a bounded tail of BOTH the inner session's stdout and stderr in its failure line, and says explicitly when a channel was silent — silence being itself the thing worth knowing. - Every extension log line names its endpoint (
[omp-spt <id>],unboundbefore activation), so field logs that interleave several hosted sessions attribute to a perch. - The end-of-session summarizer no longer mistakes a machine for a teammate. The echo-commune policy prompt names another agent only where the transcript shows a direct exchange with it, and never presents a machine, host, or node name as an agent, peer, or teammate.
- Both LLM-turn roles declare their invocation budget in the manifest (
psyche_resume240 s,echo_commune180 s) instead of riding spt-core's 90-second default, per the published §Invocation budgets. - KNOWN-HAZARDS #14: a perch's
rest_stateis a last-rest stamp, never a suspend proof (doyle ruling, 2026-09-06); the extension never reads it, and a unit test keeps it that way. - Parity matrix: sister rows 0.25.14 / 0.25.15 / 0.25.25–0.25.28 (phase 4) and 0.25.19 / 0.25.29 / 0.26.0 (phase 5) are now covered (the 0.26.0 nudge recorded as a measured-after-the-fact divergence); 0.38.4 / 0.38.5 triaged N/A; baseline advanced to
omp-spt v0.6.0→claude-spt-bs v0.38.5.
omp-spt v0.5.0
Requires spt-core v0.67.0 or newer (unchanged) and Oh My Pi v16.3.15 or newer. Update with
spt adapter update omp-spt, then restart existing endpoints (spt endpoint stop <id>→spt endpoint start <id>, orspt go <id>to attach) so they load the refreshed extension.
Added
- A sealed message arrives with its seal shown and the proof named. When a delivery's envelope carries
seal="<token>"(a wax seal — a proven user directive), the extension renders an[spt] SEALED by <sender> — seal=<token>note ahead of the envelope that namesspt api seal verify <token>(the delivered body on stdin;BOUNDis the proof) andspt api seal describe <token>. The note is additive: the envelope and its attribute still ride verbatim, and nothing in the adapter branches on the seal — it is a citation the agent proves, never an authorization the adapter grants. The startup brief teaches the same. - Your standing monic notes on a sender arrive ahead of their message. When the receiving node matched your monics on the sender (the envelope's
mnemonics-jsonattribute), each matched record renders as[spt] Your standing note on <sender> (monic "<id>"): <text>before the envelope, on both delivery surfaces (the listener splice and the boundary poll). A value that does not parse renders one "unreadable" line while the raw attribute still rides. KNOWN-HAZARDS #13 records the structural rule that makes these notes forgery-proof: genuine[spt]notes sit before the<EVENTopening tag and never inside the envelope, so a peer body that imitates the marker stays inside the peer's frame; the brief says so. - Packaged knock skill.
omp-sptnow ships aknockskill teaching spt's published access-control grammar: barespt knock <target>issendand asks forMSGby default;sendandredeemrequire exactly one of--send-only|--send-receive(the asking side declares direction;approveandnew-codetake no such flag;--mutual/--one-wayare parse errors);--send-onlynever bars replies; approving opens nothing in reverse, so knock back; invite codes are sealed to a subnet and--subnetnarrows who can redeem;--monicimparts a standing note on approve or new-code; the inbox is quiet, so look withspt knock list. A manifest[[hints]]row surfaces the skill on knock intent, and the brief points at it.
Changed
- Parity matrix: sister rows 0.26.0 / 0.26.2 / 0.28.1 / 0.30.0 (knock skill, monic note ahead of the message, sealed message shown) are now covered; baseline advanced to
omp-spt v0.5.0.
Added
- Agents now know who they are the moment a session starts. When a session is already reachable — you launched it through
cc, or it cleared/compacted mid-run — it now opens with a short brief: its own agent name, a reminder that it's already live (so it won't try to re-arm), and how to message other agents (spt sendand reply, plusspt endpoint listto see who's around). Previously a resumed or spt-launched session could start not knowing its own name. - Sessions that aren't reachable yet learn how to reach out. On a machine that belongs to a subnet, a plain session with no perch now gets a one-line tip on reaching other agents with
spt ring— without having to go reachable first. Solo machines with no peers see nothing.