ActionRequest values without durable Agent Action IDs. The committed response describes the Pipeline operation, not proof of on-chain confirmation.
The Pipeline API is a callable product surface. The transaction pipeline is the broader build → simulate → sign → broadcast safety model.
Build a transaction with Pipeline
The direct lane takes chain actions you already have and walks them through the full lifecycle: stage them into a Build, simulate that Build on a fork, review the evidence, then cross the explicit commit boundary. Unlike the Agent lane, no UserState travels with these calls — the resource is stateless, so every input is explicit (chain, calls, instructions) and wallet intents come back in the commit response’srequests array. When the Agent drives this same build engine inside a conversation, that lifecycle state rides UserState instead.
- EVM
- SVM
1 · Stage. Staging turns raw calls — a target, calldata, and value — into a chain-specific Build without executing anything:A version 2 staged Build carries its actions, origin, expiry, digest, and server attestation. Preserve the whole object unchanged between requests. It has not touched a chain and has no simulation evidence yet.2 · Simulate. Simulation runs the staged Build against a fork of the live chain and returns what would actually happen:If you do not need the intermediate staged Build, 4 · Commit. After explicit user approval, commit revalidates the simulated Build and invokes its commit operation:TypeScript enforces the lifecycle: a merely staged Build cannot be passed to commit — only a simulated one can.
aomi.pipeline.evm.build({ chainId, calls }) stages and simulates in one call.3 · Review. Render summary, actions, simulation, and any warnings before offering a commit control. This is the approval boundary that belongs to your application:requests contains wallet intents, not persisted Agent Actions. It has no Action IDs to resolve through respondToAction. The caller owns review, signing, submission, and receipt tracking for this stateless lane. Pipeline commit does not automatically call the wallet configured on Aomi, and committed alone does not prove a transaction was broadcast.Commit uses the portable Build digest as its default idempotency key. Supply your own key when it needs to match an application-level request:Read chain state
Each chain namespace also exposes read operations alongside the Build lifecycle, for fetching the state your application composes transactions from. They are curated aliases onto the runtime’s core tool namespaces (evm-core, svm-reads):
List them with
GET /v1/pipeline/evm or GET /v1/pipeline/svm and invoke with POST, like an App operation. For the live input schema, read the underlying tool’s descriptor — GET /v1/pipeline/apps/default/operations/{tool} — which is the guaranteed-schema path; the chain-level GET returns only a pointer descriptor.
The aliases are a curated subset. The rest of the core namespaces — including simulate_batch and sync_chain on EVM — is discoverable and invocable through the default App’s operations catalog at /v1/pipeline/apps/default/operations. The SDK does not yet expose typed methods for any of these; call them through the raw transport or HTTP.
Catalog with Apps and Skills
Do not hard-code a second registry of Apps or skills. Read the catalog exposed by your environment:Browse it like a filesystem
The catalog is a hypermedia tree: everyGET returns a JSON node with a path, a kind, and hrefs you can follow, so a client walks capabilities the same way it would walk directories. Start at GET /v1/pipeline and you get a directory whose children are more directories:
Inspect an operation
Operation descriptors include the current input schema:dummy_echo example accepts a message string when that operation is exposed by your environment. Catalog contents vary by environment, so discover the App and operation before relying on them. The SDK validates Build arguments against the descriptor schema. A read-only operation such as dummy_echo is a discovery example; use an operation that produces chain actions for build().
Build from an App operation
Where the direct lanes take calls or instructions you already built, an App operation builds them for you — the operation resolves your arguments into staged, simulated chain actions:build() returns a simulated EVM or SVM Build — the same object as step 2 of the lifecycle above. Review and commit it exactly the same way.
Read skill instructions
Handle errors
Failed Pipeline calls throw a typedPipelineApiError, which exposes the same status, code, retryable, requestId, and details properties as AgentApiError.
PipelineSchemaError is different: it is thrown locally, before any request, when the supplied arguments do not match the live operation schema.