Reference
Last updated: 24 February 2026
Invariants
These are the “don’t break this” rules that keep Untether reliable.
These are the “don’t break this” rules that keep Untether reliable.
Runner contract
The runner contract is enforced by tests/test_runner_contract.py:
- Exactly one
StartedEvent - Exactly one
CompletedEvent CompletedEventis lastCompletedEvent.resume == StartedEvent.resume
See also the Plugin API runner contract section.
Per-thread serialization
At most one active run may operate on the same thread/session at a time. This is enforced both by scheduling and by per-resume-token runner locks.
Normative details live in the Specification (§5.2).
Resume lines
Resume lines embedded in chat are the engine’s canonical resume command (e.g. claude --resume <id>).
- The runner is authoritative for formatting and extraction.
- Transports/rendering must preserve the resume line reliably (even when trimming/splitting).
Normative details live in the Specification (§3).
Local contribution hygiene
- Run
just checkbefore code commits.
Was this helpful?
Thanks for your feedback!
Related Articles
How-To GuidesSubscription usage trackingKeep tabs on your Claude Code subscription from anywhere — Untether surfaces usage directly in Telegram. This guide covers checking usage on demand and enabl...How-To GuidesAdding a RunnerThis guide explains how to add a new engine runner to Untether.How-To GuidesWrite a pluginUntether supports entrypoint-based plugins for engines, transports, and commands.