Docs · Start Overview Choose the right entry point and understand the pre-alpha boundary. Docs · Start Getting started Install the pinned toolchain and validate the repository locally. Docs · Start Core contract examples Compile the first Agent, typed Tool, Model stream, and explicit protocol mapping without runtime dependencies. Docs · Start Typed Agent Generate and pin typed schemas, then bind the first-party OpenAI and Anthropic adapters. Docs · Start In-process Agent Run a typed Agent without HTTP while preserving PostgreSQL durability, authorization, recovery, and owned roles. Docs · Start Durable admission Atomically commit authenticated intent, database time, the first event, and the initial checkpoint. Docs · Start Durable runs and results Submit with a durable ingress key, recover the original run, and read a verified public result. Docs · Understand Compile a graph Build a schema-pinned graph, validate its topology, and freeze its canonical digest. Docs · Understand Subgraphs and loops Compose shared-state subgraphs, finite loops, and explicit recovery-safe return paths. Docs · Understand Skill composition Choose capability bundles, shared-state subgraphs, durable child runs, and guarded MCP Skills without creating a second runtime. Docs · Understand Durability model Learn how journal, checkpoint, lease, fence, and recovery evidence fit together. Docs · Understand Durable Graph runtime Register exact executable code, replay noninitial state, and drive deterministic bounded sibling batches under one fence. Docs · Understand Durable Agent Loop Commit lifecycle handoffs and execute one tenant-scoped durable scheduling quantum. Docs · Understand Durable invocations Execute exact model and tool attempts with durable starts, staged ordered Tool coordination, streaming validation, and no-dispatch terminal recovery. Docs · Understand Provider-native Agent Compile and operate the durable multi-turn graph with bounded output repair, ordered parallel read-only Tools, write barriers, policy, accounting, and cancellation evidence. Docs · Integrate Local Rust Tools Generate digest-pinned schemas, register typed local code, and preserve the durable invocation boundary. Docs · Integrate AgentService v1 Authorize and expose exact durable Agent revisions through the versioned embedding boundary. Docs · Integrate Agent HTTP v1 Submit, recover, read and cancel through authenticated bounded JSON HTTP. Docs · Integrate General MCP Tool client Discover and call bounded stateless MCP 2026-07-28 Tools with JSON/SSE, OAuth, custom headers, and mediated MRTR. Docs · Integrate MCP OAuth client Bind one MCP resource to challenge-driven discovery, PKCE, issuer validation, durable credentials, and bounded replay. Docs · Integrate MCP Remote Tool Bind one strict stateless MCP 2026-07-28 Tool with pinned identity, schemas, durable dispatch, and reconciliation. Docs · Integrate MCP Server profile Expose bounded Tools, Resources, Prompts, Completion, and MRTR behind the strict stateless production boundary. Docs · Integrate MCP Skills Publish and activate Final SEP-2640 static Skills with immutable manifests, origin-scoped approval, and verified lazy reads. Docs · Integrate MCP conformance status See the frozen official runner inventory, implemented evidence, and exact boundary of current MCP claims. Docs · Integrate A2A 1.0 Client Discover and pin one agent, call all eleven operations, and reconcile durable unknown sends only through attested remote guarantees. Docs · Integrate Durable artifact storage Materialize terminal A2A parts into immutable PostgreSQL metadata and private integrity-checked object bytes. Docs · Integrate A2A 1.0 Server Expose bounded HTTP+JSON and JSON-RPC/SSE through identity-first policy and a durable service contract. Docs · Integrate A2A conformance status Inspect the frozen official TCK, audited harness patch, exact result, and server-only claim boundary. Docs · Operate Fair scheduling Configure replica-safe weighted tenant selection, exact starvation bounds, rollout, and retention. Docs · Operate PostgreSQL provider Configure, migrate, verify, and test the implemented durability provider. Docs · Operate Host qualification Record bounded capacity, recovery and fault evidence without turning CI into a production SLO claim. Docs · Project Versioning and releases Pin the public alpha exactly and understand compatibility, MSRV, durable-data, and release gates. Docs · Project Implementation status See what is implemented, in progress, and deliberately not claimed. Home Architecture map What exists, what is active, and what remains planned. Home Current cut Implemented slices and explicit gaps. Home Roadmap The path from contracts to a qualified v1. Repository Source code StateKnot/StateKnot on GitHub. Repository RFCs Draft architecture and durable execution contracts. Repository Security policy Private vulnerability reporting and support policy.
↑↓ navigate ↵ open 39 results

Pre-alpha documentation

Call an A2A agent without guessing the outcome.

Freeze an A2A 1.0 Agent Card and egress interface, use every HTTP+JSON or JSON-RPC/SSE operation, and bind outbound sends to PostgreSQL durability.

One operation surface, two bindings

AreaOperationsTransport result
MessageSend, streaming sendTask/message or bounded SSE
TaskGet, list, cancel, subscribeBounded snapshots/pages or SSE
Push configCreate, get, list, deleteSecret-redacted bounded contracts
CardAuthenticated extended cardRevalidated Agent Card

Every request sends A2A-Version: 1.0. The client checks response media, JSON-RPC version and ID, exclusive result/error presence, exact response unions, duplicate JSON keys, resource identity, blocking-send lifecycle, task-page filters/order, SSE event lifecycle, artifact append continuity, idle time, event count, and byte ceilings. It never follows redirects or retries a request.

Freeze discovery before execution

  1. Use verified HTTPS; literal loopback HTTP is an explicit test/sidecar boundary.
  2. Fetch one bounded public Agent Card and optionally verify its RFC 8785 digest.
  3. Select the first supported 1.0 interface in server preference order.
  4. Require its binding and URL to match a local egress pin exactly.
  5. Validate extension, tenant, and a complete anonymous or single-scheme bearer-compatible security choice.
Rust · immutable discovery boundary
let client = A2aClient::discover(
    A2aAgentCardEndpoint::https(
        "https://partner.example/.well-known/agent-card.json",
    )?,
    vec![A2aClientInterfacePin::https(
        "https://partner.example/a2a",
        A2aBinding::HttpJson,
    )?],
    A2aAgentCardTrust::TlsServerIdentity,
    A2aClientSecurity::bearer("oidc", Arc::new(token_provider))?,
    vec![],
    A2aClientOptions::default(),
).await?;

A production bearer provider resolves a short-lived credential for every exact operation, remote routing tenant, task, and scope. Durable sends also expose local tenant, run, invocation, and physical-attempt identity. The implemented profile covers HTTP Bearer, OAuth 2.0, and OpenID Connect token use; unsupported or multi-scheme requirements fail closed. Tokens, response bodies, and remote text never enter public errors or debug output.

The extended card is authenticated and revalidated, but returned as data. It never mutates this immutable client or silently changes egress/security pins; adopting it requires a reviewed, newly constructed binding.

Make PostgreSQL the dispatch authority

Agent Cards do not carry skill argument/result JSON Schemas, and A2A 1.0 has no send field that routes to a skill. The selected skill therefore freezes media and security evidence; a trusted local registry validates input and the standard one-key {"message": ...} or {"task": ...} output.

Rust · durable Tool registration
let recovery = A2aRemoteAgentRecovery::operator_attested_context_task_history(
    4,
    64,
    DurationMillis::new(1_000)?,
)?;

let remote = A2aRemoteAgent::bind_with_recovery(
    descriptor,
    client,
    "answer",
    A2aRemoteAgentDelivery::AtMostOnce,
    recovery,
    schemas,
)?;

let mut tools = ToolProviderRegistryBuilder::new();
tools.register(Arc::new(remote))?;
let tools = tools.build();

The invocation ledger commits executing before the one network send. A valid response is schema-checked before commit. Any uncertain outcome after possible dispatch becomes Unknown + ReconcileFirst; ordinary recovery does not send again.

The adapter sets returnImmediately: true. A returned Task commits message submission plus its durable handle—not remote terminal completion. Waiting for completion is a separately authorized, application-owned get_task or subscribe_to_task workflow.

Do not invent message-ID idempotency

ModeDescriptor truthMessage identity
AtMostOnceNon-idempotent write; unsupported keyPhysical attempt ID
MessageIdDeduplicatedIdempotent write; required keyStable invocation key

A2A itself does not require receivers to deduplicate messageId. The second mode is safe only when operators prove durable remote deduplication across the full local ledger-retention and disaster-recovery window.

Recover only from attested remote facts

ModeRequired deployment evidenceAction
DisabledNoneRemain fail-closed for manual reconciliation
ContextTaskHistoryPreserved client context, complete stable task pagination, retained original message IDBounded ListTasks scan; never resend
MessageIdReplayDurable message-ID deduplication across the complete recovery windowReplay the exact request identity; deduplicated delivery only

Enabled modes require a matching descriptor status-query claim and a bounded polling interval. Context recovery adds a one-way opaque ID to the original message, scans at most 16 pages of 100 tasks with at most 256 history messages, and accepts exactly one match whose role, context, and payload equal the original message. No match becomes Pending; duplicate identities, ambiguous matches, same-ID payload substitution, or exhausted scan bounds fail closed.

The provider-native Agent commits authoritative evidence atomically. A pending probe becomes a durable SafeAfter node retry under a later lease, with the original physical attempt and business-call count unchanged.

Bound every exchange

  • 15-second discovery, 60-second unary/stream-establishment, and 60-second stream-idle defaults.
  • 16 MiB request and 2 MiB unary-response transport defaults.
  • 512 KiB line, 2 MiB event, 64 MiB total, and 4,096-event SSE defaults.
  • Task pages follow A2A's 100-item maximum, inclusive timestamp filtering, and newest-first ordering; push-config pages have a local 256-item ceiling.

Before production, independently restrict DNS/proxy egress, review every card change, use attempt-scoped workload credentials, align local ledger retention with remote deduplication, alert on Unknown outcomes, and test accepted-request/lost-response, cancellation races, malformed streams, database failover, and restore.

Read the evidence, then the limits

Real loopback tests execute all eleven operations over both bindings and exercise strict discovery, authorization, errors, streams, and lost responses. They also prove context/history recovery without resend and exact replay under an explicit deduplication attestation, including rejection of same-ID payload substitution. A separate provider-neutral real PostgreSQL test proves Unknown → Pending → durable retry → Committed with one business call across two probes.

Use the complete production guide and reproduction commands. The official TCK evidence applies to the separate Server profile; Client live-peer and recovery-attestation qualification, gRPC, stable API review, and a complete production release remain separate gates.