Sandbox
handle from your plugin; you can also connect to one directly. Examples are TypeScript; the Python
SDK mirrors them one-for-one in snake_case.
The Sandbox handle
| Member | Signature | What it does |
|---|---|---|
seed | seed(resource, objects) | Silent insert of history. Guide |
reset | reset({ t0? }) | Empty state, rewind clock to t0. |
state | state(resource?) | Introspect the world (debug aid). |
client | client<T>() | The vendor SDK, base-URL repointed at this world. |
lastResolutionTrace | lastResolutionTrace() | Why the last call’s fields resolved as they did. |
faults | — | Force outcomes. ↓ |
world | — | Trigger external causes. ↓ |
clock | — | Advance time. ↓ |
webhooks | — | Register endpoints, run a sink. ↓ |
exogenous | — | Pin out-of-control values. ↓ |
sandbox.faults
sandbox.world
sandbox.clock
sandbox.webhooks
sandbox.exogenous
match is { operation, resource?, credential_id?, source_id?, input? }. Most-specific match wins;
setting a faithful field is rejected. The same surface selects a forceable
branch.
Concept: Setting values & the trace →
Surface omitted from the MVP, by design: sequenced values (“tapes”), freeze/step clock verbs,
replay seeding. They’re reserved in the HTTP contract so the SDK grows into them without breaking v1.