strato
The agent OS — the stratosphere layer, the stable contract above tropo's churn. If tropo is what's true, strato is how an agent works over it: a per-turn loop, one visible state surface, human gates, and the self-improvement that compounds across sessions.
strato is throughline and flywheel fused — they are one loop at two speeds:
- Per turn (throughline):
Ask → retrieve → act → verify → learn → gate, the FW/WS/PRIV/VS/Gate grammar, the visible State Surface, human gates. - Per heartbeat (flywheel): distill what the loop learned into durable memory, a bug-risk playbook (self-healing), and skills extracted on a workflow's third occurrence; audit workspace hygiene.
Design law: strato must be tiny to load. The only always-on file is STRATO.md;
templates load once at bootstrap, module index.md files route progressively, and
the procedures load on demand from the skill. One fact gets one owner; links beat
copies.
Layout
| Path | What it is |
|---|---|
STRATO.md |
The compressed model — the always-on agent OS (read this) |
templates/ |
A workspace's starters: AGENTS.md, SOUL.md, USER/MEMORY/STATE templates, bug-risk-playbook.md |
.claude/skills/strato/ |
The executable: bootstrap / heartbeat / self-improve modes |
strato.py |
The opt-in strato decide --governed facade over vivary-core policy |
.claude/skills/active-context/ |
Optional CocoIndex-code sidecar decision/retrieval policy |
How it's used
strato is the framework; a workspace is the instance. create-vivary lays
the templates down, and the strato skill runs bootstrap, heartbeat, and
self-improve. The workspace's own AGENTS.md is distinct from Vivary's root
AGENTS.md, which governs agents working on Vivary itself.
The runtime facade is deliberately opt-in:
strato decide --governed --json request.json
It validates the request schema, pinned policy version, core-owned actor and authority
class, workspace binding, absolute scope roots bound to the Task Capsule, the capsule's
deterministic identifier and body fingerprint, and caller-supplied timestamps before
delegating the budget/gate/next-loop decision to vivary-core. The compiler and
verifier share the JavaScript-lossless max_claims bound; fabricated capsule IDs,
missing compiler-owned fields, malformed task scopes, and non-canonical or numerically
lossy capsule values fail closed. Requests, capsule observations, and receipts have a
deterministic 300-second freshness window. A verdict is accepted only beside its
receipt. A malformed, invalid, altered, or unsafely nested
envelope returns a vivary.strato-decision-refusal/v0 document and exit 2; a valid
envelope returns
vivary.strato-decision/v0, is advisory, and exits 0. Add --strict to exit 1
when core blocks or requests a gate. Unknown fields and non-string Python mapping keys
are rejected, so free-form status text cannot impersonate a human gate. Omit --json
for a short text summary. The full contract is in
the command reference.
Loop literacy — running the loop unattended — is strato's domain too; see the loops
skill (.claude/skills/loops/).
Versioning
The vivary-strato Python distribution is at version 0.1.3 and requires
vivary-core>=0.2.4. Both shipped in the Vivary Governed Context train. The templates
and skills remain bundled by create-vivary, and the runtime package does not
duplicate or replace them.
Install from the public index:
python -m pip install vivary-strato
To test a local change instead, install the pair from this checkout without consulting a registry:
python -m pip install --no-deps ./packages/core ./packages/strato
Distilled from throughline + flywheel (Jeff's own repos, used read-only). Not a verbatim copy — the overlap (duplicate memory templates, gates, proactivity rules) is collapsed into one model.
Release files for vivary-strato 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vivary_strato-0.1.3.tar.gz | 8.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vivary_strato-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.8 kB
Release files / vivary_strato-0.1.3.tar.gz
| Download URL | vivary_strato-0.1.3.tar.gz |
|---|---|
| Size | 8.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c591cce1c357f795f5faa2e0a61f6780452081d6a133ec300a491ab354d42969
|
|
BLAKE2b-256 checksum How to use checksums |
b9f9e9b5dd7b0cdceff938bb66a991ba346c417a98d9a3d7c5b9a6100d18d242
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / vivary_strato-0.1.3-py3-none-any.whl
| Download URL | vivary_strato-0.1.3-py3-none-any.whl |
|---|---|
| Size | 8.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b2b90a7d316c3dae17742fb8ec7439ddaad76ca4a1744f628468f58444ee19d3
|
|
BLAKE2b-256 checksum How to use checksums |
e3dc56a51a1a4230ba2ecce62ff1120f96f2e6c4c6aebb500c411609fc72c4b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|