Implemented versus deferred protocol surfaces are summarized in README.md
(Status section). Source modules cite RFC sections in doc comments
(e.g. // RFC §8).
All v1.1 normative surfaces are implemented unless listed under deferred below.
Envelopeframing, ULID ids, error codes, extension registry- Four-step handshake (§8.1):
session.open,session.challenge/session.authenticate(optional),session.accepted,session.close - Auth schemes:
bearer(§8.2),signed_jwt(§8.3),none(§8.4) - Capability negotiation (§7): structured
capabilitiesblock, subset checks
- Job state machine:
queued → running → completed | failed | cancelled - Heartbeats (telemetry only — see below), cooperative cancellation (
job.cancel). Interrupts (interrupt) are not advertised by default — the current runtime only transitions the job state to.blockedand acks the envelope; there is no handler-visible callback that lets the running job observe and respond to an interrupt. LeaveCapabilities.interrupt = falseunless you have wired your own observer. tool.invoke+ToolHandleradapter patternJobContext:checkLeaseExpiration,checkCancellation,charge,log,metric,requestPermission,reportProgress,openStream,emitResultChunk
- Multi-kind streams:
text,event,log,thought,metric,binary(base64) - Back-pressure and cooperative stream close
job.result_chunkwire messages, runtime emission, clientResultChunkStream- Crash-and-resume: same
IdempotencyKey→ samejob_id, buffered chunk replay
- Permission challenges:
permission.request,permission.grant,permission.deny - Lease lifecycle: grant, refresh, revoke, expiry sweep
lease_constraints.expires_atontool.invoke, submission validation, in-handler expiry checks viacontext.checkLeaseExpiration()- Client-side
PermissionHandlerveto
cost.budgetonToolInvokePayload: parse, track, subset checkscontext.charge(name:amount:currency:)— per-charge deductionBUDGET_EXHAUSTEDerror (ARCPError.budgetExhausted)- Per-charge metrics emitted to client
model.usepayload parsing, requested-model matching, runtime policy helper
provisioned_credentialswire payloads- Provisioner protocol: issue, rotate, revoke lifecycle
- In-memory test provisioner, redacted credential descriptions
- Structured log events:
log.level,log.message,log.attributes - Metric events:
metric.name,metric.value,metric.unit,metric.dims - SQLite event log with replay
subscription.filter, backfill,subscription.backfill_completeboundary- Resume by
after_message_id— same-session only: the runtime replays envelopes for the current session id. Cross-session resume (carrying a prior session'safter_message_idinto a fresh session) is not implemented.checkpoint_idandinclude_open_streamsare currently ignored.
- Inline-base64 artifacts with configurable retention sweep
MemoryTransport— synchronous in-process (used by all tests and samples)StdioTransport— NDJSON framing over stdin/stdoutWebSocketTransport— client-side; server-side partial (see deferred)
| Surface | Reason |
|---|---|
mTLS (mtls) auth scheme |
Requires SecureTransport / BoringSSL integration |
OAuth 2.0 (oauth2) auth scheme |
Requires token endpoint + PKCE flow |
| Sidecar binary stream frames | Spec section still under revision |
| Scheduled jobs | Runtime scheduler not yet implemented |
| Multi-agent delegation / handoff | Depends on trust-elevation surface |
| Trust elevation | Policy engine not yet implemented |
| Checkpoint-based resume | Requires durable checkpoint store |
| Full WebSocket server | WebSocketKit.WebSocket server-side init is internal |
For cross-language conformance tracking, use the monorepo spec/ tree and
shared issue milestones.