A thin, evidence-first control plane for provable execution of AI-initiated state transitions.
The project is built around three questions:
- Was this exact change authorized?
- Did this exact operation own the provider side effect?
- Can an independent verifier prove the resulting state afterwards?
The core authority object is a StateTransition / TransitionPlan, not a prompt, tool call, model session, workflow step, or provider command.
LLM proposes.
Policy decides.
Control Plane authorizes.
Provider executes.
Evidence proves.
Verifier closes the loop.
Agent Control Plane deliberately does not become another Agent framework, MCP gateway, durable workflow engine, sandbox runtime, IAM product, or model serving layer. Those systems remain external. This repository owns the narrow execution boundary where an approved state transition becomes a real side effect and later has to be proven.
Runtime authorization answers an important question:
May principal P call capability C?
That is not enough for high-impact state changes.
A production control plane also has to answer:
Which exact plan was approved?
Was the live resource still the version that was approved?
What happens if the provider committed but the ACK was lost?
Can a retry create a second side effect?
Did this operation actually cause the observed result?
Can that claim be verified without trusting the original Agent process?
Two invariants define the project:
Desired state reached does not imply operation ownership proven.
A provider acknowledgement is not independent outcome evidence.
ObservationSnapshot
-> TransitionPlan
-> PlanAuthorizationBinding
-> PlanExecutionFence
-> durable PREPARED ExecutionAttempt
-> provider side effect
-> COMMITTED | ABORTED | UNKNOWN
-> reconciliation
-> fresh independent ObservationSnapshot
-> VerificationReport
-> IndependentExecutionProof
The LLM, Agent session, workflow history, and hidden reasoning are not authority and are not required to verify a completed execution.
The frozen invariants and explicit non-goals are defined in docs/V0.1_FREEZE.md.
The v0.1 core owns:
- exact-plan authorization;
- execution fencing against stale generation / resource version / lease epoch;
- durable PREPARED and terminal execution identity;
- fail-closed handling of UNKNOWN provider outcomes;
- reconciliation after crash, lost ACK, or takeover;
- fresh provider observation after mutation;
- operation-ownership verification;
- canonical, out-of-process verifiable execution proof.
It does not own:
- Agent planning or chat/session orchestration;
- Temporal/Restate continuation semantics;
- Kubernetes or another sandbox runtime;
- MCP/tool gateway semantics;
- enterprise IAM or a new policy language;
- model serving;
- PKI/signing infrastructure;
- production multi-tenancy, quota, or HA in v0.1.
The live kind acceptance path exercises the full state-transition contract against a real Kubernetes API server:
live Deployment replicas=20
-> acquire/project fenced execution lease
-> fresh live generation/resourceVersion observation
-> freeze EvidenceBundle + StateTransition 20 -> 30
-> deterministic PolicyDecision + signed approval
-> exact TransitionPlan
-> PlanAuthorizationBinding + PlanExecutionFence
-> durable PREPARED ExecutionAttempt
-> kubectl merge PATCH using that exact plan
-> process-boundary reconciliation
-> fresh Deployment + Pods + Events observation
-> ownership markers projected into ObservationSnapshot
-> DesiredStateReached + OperationOwnershipProven
-> VerificationReport
-> IndependentExecutionProof
-> fresh-process verification against trusted statement hash
-> SUCCEEDED
Kubernetes operation ownership is derived from a fresh observation and is bound to durable execution identity through control-plane ownership markers, including operation, action, transition, plan, and authority-reservation hashes. A Deployment that merely happens to reach 30 replicas is insufficient.
The same provider-neutral TransitionPlan / execution identity boundary is also exercised with a GitHub pull-request merge provider. Provider integrations must conform to the same control-plane contract rather than introduce their own authority model.
Requirements: Python 3.11+.
For the deterministic developer path:
make setup
make test
make demoThe demo is useful for local development, but it is not the normative live provider acceptance proof.
For the live Kubernetes acceptance path with a local kind cluster:
export KUBE_CONTEXT=kind-agent-transition
make kind-transition-smokeFor a clean-clone release rehearsal:
make fresh-clone-kind-release-rehearsalNormal unit CI does not imply that a live Kubernetes API was exercised.
A successful Kubernetes Golden Slice must produce:
execution-attestation.json
independent-execution-proof.json
independent-execution-proof.json.sha256
execution-journal.db
execution-leases.db
work-context.db
summary.json
IndependentExecutionProof/v1 is the normative completed-execution artifact.
execution-attestation.json is retained for v0.1 compatibility only.
Verify the serialized proof in a fresh process:
python scripts/verify_execution_proof.py \
.artifacts/kubernetes-transition/independent-execution-proof.json \
--expected-hash-file \
.artifacts/kubernetes-transition/independent-execution-proof.json.sha256Verify the complete artifact directory:
python scripts/verify_v01_acceptance_artifacts.py \
.artifacts/kubernetes-transitionThe required file set, ownership inputs, statement-hash algorithm, and verification rules are frozen in docs/V0.1_ACCEPTANCE_ARTIFACT_CONTRACT.md.
proposal / policy / approval
|
v
+-------------------+
| Agent Control |
| Plane |
|-------------------|
| TransitionPlan |
| Authorization |
| ExecutionFence |
| ExecutionJournal |
| Reconciliation |
| Verification |
| ExecutionProof |
+---------+---------+
|
provider-neutral contract
|
+-------------+-------------+
| |
v v
Kubernetes provider GitHub provider
| |
v v
independent observation independent observation
| |
+-------------+-------------+
|
v
IndependentExecutionProof
External systems can sit around this boundary without being absorbed into the control plane:
- Workflow: Temporal / Restate
- Sandbox: Kubernetes / specialized Agent sandboxes
- Tool transport: MCP / provider APIs
- Policy: OPA / Cedar / existing authorization systems
- Identity: OIDC / workload identity systems
- Signing: DSSE / Sigstore / KMS or another trusted digest channel
- Harness: Codex, Claude Code, or another Agent runtime
The repository supplies narrow bindings and proofs where useful; it does not reimplement those systems.
- Exact-plan authority. Authorization and fences bind the canonical TransitionPlan, not merely a resource or tool name.
- Explicit authority generation. Stale authority generation and stale lease epochs are rejected before provider mutation.
- Authority survives ambiguity. Lease expiry alone does not release an unresolved side-effect window.
- At-least-once execution. Provider adapters use deterministic identity and idempotency; the project does not claim exactly-once side effects.
- UNKNOWN fails closed. Lost ACK or unverifiable provider state cannot be converted into success by retry policy.
- Independent observation. Provider mutation ACKs are not outcome proof.
- Ownership-aware verification. Desired state and operation ownership are separate verification conditions.
- Independent proof. A completed execution can be verified in a fresh process without the original Agent session.
The v0.1 compatibility promise is deliberately narrow and machine-verifiable.
Run:
python scripts/verify_v01_public_contract.pyThe stable surface includes the installed console scripts, documented command
names, snapshotted top-level Python exports and manifest schemas, plus the
IndependentExecutionProof/v1 wire identity.
See docs/V0.1_PUBLIC_COMPATIBILITY.md and release/v0.1-public-contract.json.
Internal coordinator classes, SQLite layouts, provider adapter class APIs, fault-injection helpers, and exact error/log strings are not promoted to v0.1 public compatibility.
The repository contains earlier and adjacent experiments that remain useful for compatibility or integration testing but do not define the v0.1 product boundary:
- AgentBundle / AgentRelease and release-planning fixtures;
- Federation / provider bindings and deterministic ReleaseEvidence demos;
- EvalGate and decision-evaluation artifact ingestion;
- AgentAuthorityEnvelope inventory / admission commands;
- cross-agent work-context and optional MCP handoff;
- AI Factory acceptance-evidence ingestion;
- Temporal and sandbox reference bindings.
These surfaces must not widen the frozen execution semantics before v0.1.0. New Agent lifecycle phases, authority abstractions, orchestration layers, or product surfaces require an explicit post-v0.1 design decision.
The optional work-context path keeps authoritative work state separate from semantic memory and prompt history:
WorkSnapshot + WorkEvent
-> ContextProjection
-> AuthorityHead + ContextOverlay
-> TransitionProposalBinding
-> Policy / approval / authorization
-> exact TransitionPlan
-> provider side effect + reconcile
-> fresh observation
-> IndependentExecutionProof
An optional local MCP server is available for integration experiments:
pip install -e '.[mcp]'
export AGENT_CONTEXT_PRINCIPAL_TYPE=agent
export AGENT_CONTEXT_PRINCIPAL_SUBJECT=claude-code
agent-context-mcpSee docs/CROSS_AGENT_CONTEXT.md.
The release/v0.1.0-hardening line has frozen:
- the provable-execution architecture;
- the Acceptance Artifact Contract;
- the public API/schema/CLI compatibility snapshot;
- Kubernetes and GitHub provider-neutral proof shapes;
- fresh-process proof verification and tamper rejection;
- clean-clone package and Kubernetes acceptance rehearsals.
The release checklist is tracked in RELEASE_READINESS.md. The release branch intentionally accepts only correctness/security fixes, falsification tests, release hardening, and provider adapters that conform to the existing contract.
This repository is the state-transition execution-control layer. Adjacent repositories have narrower responsibilities:
cloud-agent-runtime: reference Run <-> Workflow <-> Sandbox lifecycle binding;agent-decision-lab: bounded-decision benchmark/gateway experiments;gpu-compute-platform: lower-layer accelerator workload control plane;ai-factory-engineering: cross-layer infrastructure commissioning and acceptance.
They may exchange evidence and provenance artifacts, but they do not share execution ownership or a single source of truth.
Useful entry points:
- DEVELOPMENT.md
- docs/V0.1_FREEZE.md
- docs/V0.1_ACCEPTANCE_ARTIFACT_CONTRACT.md
- docs/V0.1_PUBLIC_COMPATIBILITY.md
- RELEASE_READINESS.md
- RELEASE_NOTES.md
Agent Control Plane is not trying to replace Temporal, Restate, Codex, Claude Code, MCP gateways, Kubernetes Agent Sandbox, enterprise IAM/policy systems, or model-serving platforms.
Its job is narrower:
Authorize an exact state transition, fence the real side effect, and produce independently verifiable evidence that the authorized operation owned the observed outcome.