Context
agent-sdk#146 phase 1 shipped (agent-provider-tangle@0.7.0): capability claims now derive from a probed SDK surface, and the provider claims retained control only when cancelRun is proven. The ADC server surface it needs also landed on agent-dev-container develop:
- authenticated
GET /capabilities (PR #5316) — the deployed run-control facts.
- durable interaction-response ledger (PR #5317) — retry-safe answer/permission/plan with replay and conflict acknowledgements.
Remaining work (phase 2)
- Consume
GET /capabilities instead of inferring from SDK method presence. The provider must call box.capabilities() (or the SDK wrapper) and gate its capability document on the deployed sidecar's reported facts, not the linked SDK class. box.capabilities() returns null on a pre-capability sidecar — treat null as fail-closed (no retained control claim).
- Implement
respondToInteraction over the retained SandboxSession, mapping canonical InteractionResponseCommand (question / permission / plan) to session.answer / respondToPermission / approvePlan / rejectPlan, returning InteractionAcknowledgement (applied / already_resolved_same / already_resolved_different / binding_mismatch). Stop deleting interactions from the capability document; emit an InteractionCapabilities document narrowed by what the session exposes. The server ledger already gives retry-safe semantics.
- Fresh-process reconstruction proof: today the retained-control tests reconnect in-process. Add a proof that
provider.get reconstructs the exact environment and session in a fresh process using only the persisted control reference.
Not in scope (separate issues)
- Workspace branching — no idempotent server surface exists yet.
- Create receipt (new vs idempotent replay) — needs a new agent-interface contract.
Refs #146
Context
agent-sdk#146 phase 1 shipped (
agent-provider-tangle@0.7.0): capability claims now derive from a probed SDK surface, and the provider claims retained control only whencancelRunis proven. The ADC server surface it needs also landed onagent-dev-containerdevelop:GET /capabilities(PR #5316) — the deployed run-control facts.Remaining work (phase 2)
GET /capabilitiesinstead of inferring from SDK method presence. The provider must callbox.capabilities()(or the SDK wrapper) and gate its capability document on the deployed sidecar's reported facts, not the linked SDK class.box.capabilities()returns null on a pre-capability sidecar — treat null as fail-closed (no retained control claim).respondToInteractionover the retainedSandboxSession, mapping canonicalInteractionResponseCommand(question / permission / plan) tosession.answer/respondToPermission/approvePlan/rejectPlan, returningInteractionAcknowledgement(applied / already_resolved_same / already_resolved_different / binding_mismatch). Stop deletinginteractionsfrom the capability document; emit anInteractionCapabilitiesdocument narrowed by what the session exposes. The server ledger already gives retry-safe semantics.provider.getreconstructs the exact environment and session in a fresh process using only the persisted control reference.Not in scope (separate issues)
Refs #146