| Internet-Draft | AICP | September 2026 |
| Paxton | Expires 6 March 2027 | [Page] |
Autonomous software agents increasingly inspect and modify infrastructure through provider-specific APIs and generic tool protocols. Those interfaces expose operations, but they do not provide a common semantic contract for obtaining bounded situational context, expressing an intended outcome under constraints, reviewing the exact material effects, binding authorization to those effects, observing durable execution, and determining whether the intended outcome was achieved.¶
This document specifies the Agent Infrastructure Control Protocol (AICP). AICP is a transport-independent object and lifecycle model for capability discovery, situations, intents, plans, authorization decisions, asynchronous operations, verified outcomes, machine-actionable problems, and reconciliation. It also specifies an HTTP binding and describes mappings to existing agent protocols. AICP does not replace cloud resource APIs, orchestration languages, agent-to-agent protocols, authentication systems, or provider policy engines.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 6 March 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Infrastructure control interfaces are commonly designed for human operators, provider SDKs, or declarative reconcilers. An autonomous caller can use those interfaces, but must often reconstruct essential control semantics from many provider-specific reads, natural-language descriptions, asynchronous job APIs, and unstructured error messages. The caller may be unable to determine whether a request was authorized, whether a preview is still valid, whether an interrupted mutation took effect, whether retry is safe, what side effects occurred, or which recovery action is permitted.¶
Generic agent protocols improve invocation and interoperability, but an invocation envelope does not define the meaning of infrastructure control. Two providers can expose tools through the same protocol while using incompatible action names, state models, error semantics, and safety behavior. Conversely, existing infrastructure standards define valuable resource and orchestration models, but generally do not define a complete control contract optimized for an autonomous principal.¶
AICP defines that contract as a linked control loop:¶
The protocol is designed so that each object supplies the decision inputs for the next stage and remains linked to its causes. This permits a different process, agent, or human operator to resume control without relying on a lossy transcript or private model state.¶
Cloud Infrastructure Management Interface (CIMI) [CIMI], Cloud Application Management for Platforms (CAMP) [CAMP], Topology and Orchestration Specification for Cloud Applications (TOSCA) [TOSCA], Kubernetes [KUBERNETES], and related systems already define infrastructure resources and operations. Model Context Protocol (MCP) [MCP] and Agent2Agent Protocol (A2A) [A2A] already define agent integration mechanisms. OAuth, workload identity, and provider policy systems already address identity and authority.¶
AICP therefore does not claim to be the first infrastructure API or the first agent protocol. Its contribution is the interoperable semantic boundary between an autonomous principal and an infrastructure control plane: the representation and lifecycle of situation, intent, exact plan, authority, execution, effect certainty, verified outcome, and recovery.¶
AICP follows the architectural preference to profile and extend existing Internet protocols rather than define a monolithic agent protocol [AI-ARCH]. It defines a core model and an HTTP binding. Infrastructure vocabularies are supplied by profiles. MCP can expose AICP through a small set of tools, A2A can carry or delegate AICP objects, and provider adapters can map AICP profiles to native APIs. All bindings are expected to invoke the same provider planning, policy, execution, journaling, and verification services.¶
AICP objects can reference existing resource representations rather than copying them. For example, a profile can use Kubernetes objects, a TOSCA service template, or a provider resource identifier as the target or arguments of an AICP action.¶
The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Legibility: facts that affect a control decision are represented as typed fields rather than only as prose.¶
Bounded context: the provider can return a compact decision view with explicit freshness, coverage, truncation, and omissions.¶
Outcome orientation: the caller states the desired result and constraints separately from the provider's mechanism.¶
Preview fidelity: a consequential execution is bound to an exact, expiring plan revision and is rejected if that plan is stale.¶
Authority clarity: feasibility, authorization, approval, and readiness are separate states derived from authenticated context.¶
Failure legibility: problems disclose retry safety, effect certainty, alternatives, and remediation actions in machine-actionable fields.¶
Durability: plans, operations, outcomes, and events can outlive a client session and support resumption.¶
Composability: profiles and bindings reuse existing resource models, authentication, event, telemetry, and evidence mechanisms.¶
Resource efficiency: clients can cache capabilities, request bounded views, follow deltas, and use structured next actions instead of repeating open-ended discovery.¶
Binding parity: no transport or agent adapter creates a privileged path around planning, policy, or audit.¶
This document does not:¶
The AICP control loop consists of seven durable object classes: Capability Document, Situation, Intent Request, Plan, Operation, Outcome, and Problem. An Operation Event is an incremental delivery form for Operation changes.¶
Each object MUST identify or link to the immediately preceding control objects where applicable. A Plan identifies its Intent Request and the Situation on which it was based. An Operation identifies the exact Plan revision. An Outcome identifies the Operation and preserves the expected and observed effects. These links form an audit and resumption graph; they do not expose model reasoning.¶
A provider MAY retain objects for different periods, but it MUST advertise relevant retention limits and MUST NOT discard an active Operation before reaching a terminal phase.¶
Consistent with intent-based networking concepts [RFC9315], the client states a desired outcome separately from the provider's implementation mechanism. The client selects an advertised action, identifies targets, supplies arguments, states constraints and success criteria, and chooses preview or execute-if-ready mode. The provider observes native state, proposes mechanisms, evaluates policy, executes through native systems, journals effects, verifies outcomes, and reports uncertainty.¶
The provider MUST derive identity, delegation, permissions, and approval validity from authenticated server-side context. It MUST NOT grant authority because a request body claims that authority. A purpose string or delegation reference is input to policy evaluation, not proof of permission.¶
The core object model is independent of transport. This document's HTTP binding defines interoperable retrieval and mutation semantics. Other bindings MUST preserve object identity, request deduplication, plan-revision binding, operation durability, error semantics, and authorization parity.¶
A profile defines domain vocabulary. Action and type identifiers MUST be absolute URIs controlled by the profile publisher. A profile MUST publish machine-readable input and output schemas and MUST define the semantics that affect interoperability, including effect class, idempotency, reversibility, preconditions, success criteria, and observation types.¶
Consequential intents default to preview. To avoid an unnecessary round trip for routine, low-risk work, a client can request execute-if-ready. The provider still creates an internal plan, evaluates current policy, binds execution to that plan, and returns the resulting Plan or Operation. It MUST NOT execute when feasibility is not feasible, authorization is not allowed, a required approval is absent, a hard constraint is unsatisfied, or policy requires explicit preview.¶
The execute-if-ready mode is permission to use the safe fast path, not an instruction to weaken policy.¶
AICP JSON objects MUST be valid JSON as defined by [RFC8259] and MUST satisfy the Internet JSON (I-JSON) constraints in [RFC7493]. Object member names are case-sensitive. A producer MUST NOT emit duplicate member names. Time values MUST use the Internet date-time format in [RFC3339] and SHOULD use UTC.¶
When a profile needs an integer outside the exact interoperable range of IEEE 754 binary64, it MUST encode that value as a string and define the lexical form. Monetary values SHOULD use decimal strings in profiles that require exact accounting; the numeric cost examples in this document are illustrative.¶
Except for Problem Details objects, AICP objects contain these common members:¶
| Member | Requirement | Meaning |
|---|---|---|
aicpVersion
|
Required | The major.minor core version. This document defines 0.1. |
kind
|
Required | The object class. |
id
|
Response objects | A provider-stable opaque identifier. |
revision
|
Mutable durable objects | An opaque value that changes on every semantically observable revision. |
createdAt
|
Durable response objects | Creation time. |
updatedAt
|
Optional | Time of the represented revision. |
links
|
As specified | A map from registered-by-this-document relation names to URI references. |
extensions
|
Optional | A map whose keys are absolute extension URIs. |
criticalExtensions
|
Optional | Extension URIs that must be understood for safe processing. |
Identifiers are opaque. Clients MUST NOT infer type, ordering, time, tenancy, or authority from their syntax. Providers SHOULD generate identifiers with enough entropy to prevent enumeration.¶
A Resource Reference contains an absolute profile-defined type URI and provider-stable id. It can also contain scope, opaque revision, and non-authoritative displayName.¶
The scope object narrows resolution with provider-defined string members such as account, project, tenant, region, namespace, or cluster. A provider MUST use the authenticated principal and scope together when resolving a reference and MUST NOT allow a display name to override the identifier.¶
Extension keys MUST be absolute URIs. A recipient MAY ignore an unrecognized extension unless its URI occurs in criticalExtensions. If a critical extension is unrecognized or unsupported, the recipient MUST reject the object with code unsupported-extension before causing a consequential effect.¶
A provider MUST NOT change core semantics through a non-critical extension. An intermediary that preserves an object SHOULD preserve unrecognized extensions byte-for-byte where its representation permits.¶
Human-readable titles, summaries, descriptions, and details are supplemental. A client MUST NOT treat prose as authorization, executable instructions, a replacement for a stable code, or a reason to violate a structured constraint. Providers MUST represent safety-relevant state in normative structured members.¶
Neither clients nor providers are required to expose private chain-of-thought. Concise rationale, assumptions, evidence references, and policy reason codes are sufficient.¶
An AICP HTTP provider MUST publish a Discovery object at /.well-known/aicp, as specified in Section 14. It lists supported core versions, profile URIs, authentication metadata, and links to the capability and request endpoints.¶
Discovery only identifies a service and protocol surfaces. It is not a global provider directory and does not imply that every advertised profile or endpoint is authorized for the current principal.¶
A Capability Document MUST contain a revision, supported profiles, an action list, and relevant protocol limits. Each Action Descriptor MUST contain:¶
read-only or consequential;¶
The schemas MUST be retrievable by an authorized client and SHOULD use JSON Schema 2020-12 [JSON-SCHEMA]. The profile specification remains authoritative when schema validation alone cannot express a semantic requirement.¶
A consequential action MUST advertise planning as required. A read-only action can advertise planning as optional or unsupported. Submitting preview for an action whose planning is unsupported fails with planning-unsupported; submitting it in execute-if-ready mode can create a read-only Operation.¶
A capability response MAY be scoped to the authenticated principal. If so, principalScoped is true, HTTP caching is private, and the provider MUST ensure that a response for one principal cannot be reused for another. A capability listing indicates discoverability, not a durable authorization grant; policy is evaluated again when planning and immediately before execution.¶
Capability documents MUST have an opaque revision. Providers SHOULD support conditional retrieval so that clients can cache schemas and avoid repeated context transfer.¶
A Situation Request identifies one or more targets, a purpose, a view, optional categories to include, freshness requirements, and response budgets. The defined views are:¶
decisionsummaryfullA client SHOULD request decision first and expand selectively. A provider MAY return less detail for policy, privacy, size, or availability reasons, but it MUST disclose omissions in coverage metadata unless disclosing the existence of omitted data would itself violate policy.¶
The optional budget can bound bytes and items. A provider MUST NOT exceed a hard client budget merely to make the response appear complete. It instead returns a cursor, truncation flag, and omissions.¶
A Situation contains a provider-stable identifier and revision, observation and freshness times, coverage, resources, relationships, active Operations, applicable constraints, and available action URIs.¶
Every resource observation MUST identify its observation time and health as healthy, degraded, unhealthy, or unknown. Profile-defined state can be included inline or by link. Secrets and credential values MUST NOT be included; references and redaction metadata are used instead.¶
Coverage contains the delivered view, complete, truncated, explicit omissions, and an optional next cursor. The absence of a resource from an incomplete or truncated Situation MUST NOT be interpreted as proof that the resource does not exist.¶
A Situation is an observation, not a transaction snapshot unless a profile explicitly guarantees that property. Different resource observations can have different timestamps. Providers SHOULD minimize skew and disclose material skew as an omission or unknown.¶
When an Intent Request cites a Situation identifier and revision, the provider MUST disclose in the Plan whether it reused, refreshed, or could not validate that Situation. Execution still requires current precondition evaluation.¶
An Intent Request contains:¶
requestId used for deduplication;¶
preview or execute-if-ready;¶
The provider MUST validate the action, targets, arguments, constraints, and profile before planning. Unknown, ambiguous, or contradictory requirements produce a Problem or a Plan whose feasibility is conditional, infeasible, or unknown. The provider MUST NOT silently relax a hard constraint.¶
Core constraints can restrict allowed scopes, time, cost, impact, and applicable policy references. Impact can include maximum changed resources, maximum unavailable resources, and prohibitions on data loss or downtime. Profiles can add a profile constraint object with semantics defined by the profile.¶
A plan MUST echo the effective hard constraints. If policy adds a more restrictive constraint, the Plan includes it and explains its origin. If a requested constraint cannot be measured or enforced, feasibility is unknown or infeasible; it is not assumed satisfied.¶
A success criterion has an identifier, profile-defined type URI, optional subject, required flag, parameters, and optional observation window. The profile defines how it is measured and the evidence needed to evaluate it.¶
Required criteria that cannot be evaluated cause the final Outcome to be failed or indeterminate as defined by the profile. An operation is not successful merely because provider API calls returned success; the required outcome criteria must be evaluated.¶
{
"aicpVersion": "0.1",
"kind": "IntentRequest",
"requestId": "req-7f2c",
"action": "https://example.com/aicp/actions/workload.deploy",
"targets": [{
"type": "https://example.com/aicp/types/workload",
"id": "signal",
"scope": {"project": "production", "region": "jnb1"}
}],
"arguments": {"release": "sha256:9c9f0d4a", "replicas": 3},
"constraints": {
"impact": {"maxUnavailable": 1, "forbidDataLoss": true},
"cost": {"currency": "USD", "maxIncrement": 15}
},
"successCriteria": [{
"id": "health",
"type": "https://example.com/aicp/criteria/healthy-replicas",
"required": true,
"parameters": {"operator": "equals", "value": 3},
"windowSeconds": 300
}],
"mode": "preview"
}
¶
A Plan is the reviewable boundary between desired outcome and infrastructure mutation. It describes what the provider proposes to do, the state on which that proposal depends, and whether the proposal is feasible and authorized.¶
Each Plan has an opaque revision and expiresAt. A provider MUST change the revision whenever any execution-relevant member changes, including changes, steps, constraints, preconditions, risk, authorization, approval requirements, assumptions, unknowns, estimates, or success criteria. A Plan revision is immutable once referenced by an execution attempt or approval. Later evaluation creates a new revision and preserves the older audit record.¶
The basedOn object records the Situation identifier and revision when one was used, plus the observation time of the state used for planning. A Plan MUST include all known material changes in changes. A change identifies the operation, resource, optional before and after representations, optional JSON Patch [RFC6902], a materiality flag, and a concise effect.¶
The steps array describes execution order and dependencies. Steps are operationally informative; the complete material effect remains authoritative in changes. A provider MUST NOT omit a material effect merely because it occurs in an internal or provider-native sub-operation. If a precise effect cannot be known before execution, the provider includes an unknown and a worst-case risk factor.¶
Providers SHOULD minimize incidental implementation detail. The Plan should be sufficiently precise to support authorization, comparison, and recovery without requiring the client to understand every provider-internal call.¶
Feasibility and authorization are independent:¶
| Dimension | States | Meaning |
|---|---|---|
| Feasibility |
feasible, conditional, infeasible, unknown
|
Whether the provider can satisfy the intent and hard constraints. |
| Authorization |
allowed, denied, approval-required, clarification-required, unknown
|
Whether the authenticated principal can execute this exact plan revision now. |
| Readiness |
ready, blocked, expired, unknown
|
The provider's combined answer about whether execution can safely be requested now. |
The Plan's readiness object contains its state, evaluation time, and structured reasons. A Plan is ready only while unexpired, feasible, authorized as allowed, free of unmet approval requirements, and valid against all checked preconditions. The explicit value prevents each client from reconstructing a subtly different answer. Readiness is a point-in-time advisory and MUST be re-evaluated immediately before the first consequential effect.¶
Authorization contains an evaluation time, structured reasons, approval requirements, and explanatory permission names. Explanatory permission names are not bearer capabilities and MUST NOT be accepted as proof of authority.¶
An Approval Requirement identifies a requirement type, audience, concise summary of the material action, expiry, and optional approval endpoint. The external approval mechanism is out of scope.¶
An accepted approval MUST be cryptographically or transactionally bound by the provider to the Plan identifier and exact revision, approving principal, intended action, material changes, and expiry. If any of those change, the approval MUST NOT authorize the new revision. Approval of prose alone is insufficient.¶
Providers SHOULD present the approver with the same material change, risk, blast radius, constraints, assumptions, unknowns, and expiry visible to the executing client. Approval interfaces MUST defend against substitution and approval-phishing attacks discussed in Section 20.¶
Risk has a level of none, low, medium, high, critical, or unknown; structured factors; and an estimated blast radius. Blast radius can count affected resources, tenants, and regions and includes a concise worst-case description.¶
Risk is a provider and policy assessment, not a universal numerical truth. A provider MUST return unknown when it lacks sufficient information. A client MUST NOT treat a low value from an untrusted provider as authorization. Profiles SHOULD define minimum factors and consistent level guidance for comparable actions.¶
Preconditions are facts that must hold for safe execution. Assumptions are facts the provider currently relies on but cannot guarantee. Unknowns are relevant decision inputs that the provider could not determine. Each is a structured Reason with a stable code and summary and can carry details and evidence links.¶
A provider MUST verify enforceable preconditions immediately before execution. A material assumption becoming false or an unknown becoming unsafe causes the Operation to pause, fail, or enter compensation according to policy. The provider MUST NOT silently proceed by weakening a hard constraint.¶
A Plan includes nextActions selected from execute, wait, replan, approve, clarify, escalate, inspect, or stop, each with a reason, a safety indication, optional endpoint, and parameters. These are recommendations under current state, not new authority. The client still applies its policy and the provider re-evaluates authorization.¶
An Execution Request contains a caller-generated request identifier, Plan identifier, exact Plan revision, and zero or more external approval references. The provider MUST reject execution when the Plan is missing, expired, stale, infeasible, denied, or outside a hard constraint. When a valid Plan lacks a required approval, the provider MUST NOT begin a consequential effect. It MAY create an Operation in awaiting-approval if its approval mechanism supports durable pending requests; otherwise it rejects the request with approval-required.¶
Execution is a new authorization decision. A previously allowed Plan does not override revocation, changed principal status, emergency stop, quota, or policy changes. When rejection follows a material plan change, the provider returns or links a new Plan rather than silently executing it.¶
A provider MUST create or return a durable Operation before or atomically with accepting a consequential execution. The Operation identifies the Execution Request, Plan identifier and revision, current phase, effect state, monotonic sequence, progress, reasons, retry guidance, and structured next actions.¶
The operation representation is the source of truth. Event delivery can be delayed, duplicated, or interrupted; a client can always retrieve the latest authorized representation while it is retained.¶
| Phase | Terminal | Meaning |
|---|---|---|
queued
|
No | Accepted but no consequential step is known to have started. |
awaiting-approval
|
No | Execution is blocked on a bound approval. |
executing
|
No | One or more planned steps can be producing effects. |
verifying
|
No | Planned mutation steps ended and success criteria are being evaluated. |
paused
|
No | Progress stopped for a stated, recoverable reason. |
succeeded
|
Yes | Required criteria were satisfied and effects are sufficiently determined. |
failed
|
Yes | The operation did not satisfy required criteria and effect state is sufficiently known. |
cancelled
|
Yes | Cancellation completed; the effect state states what remains. |
indeterminate
|
Yes | The provider cannot safely determine whether or to what extent effects occurred. |
A provider can omit an intermediate phase but MUST NOT imply a phase that did not occur. Before a confirmed effect, queued, awaiting-approval, and paused can transition among policy-permitted non-terminal states or a terminal state. After effect begins, executing and verifying can alternate only when the exact Plan already authorizes the additional execution. A terminal phase MUST NOT be changed in place. Later discoveries are recorded in a new reconciliation Operation and a new Outcome revision linked to the original record.¶
| State | Meaning | Blind retry |
|---|---|---|
none
|
No externally consequential effect occurred. | Permitted only when retry guidance also says safe. |
possible
|
An effect may have begun, but none is confirmed. | Forbidden. |
partial
|
Some effects are confirmed and the full plan is incomplete. | Forbidden. |
complete
|
All planned material effects are confirmed; success criteria can still fail. | Normally unnecessary and forbidden. |
reversed
|
Defined compensating effects are confirmed; exact prior state is not implied. | Forbidden unless a new plan says otherwise. |
unknown
|
The provider cannot bound or classify the actual effect. | Forbidden. |
Phase and effect state are independent. A failed or cancelled operation can have partial effects. A successful operation has complete planned effects but can also report side effects. Providers MUST update effect state conservatively.¶
Progress identifies completed steps, active steps, total steps, and optionally a percentage. Step sets are authoritative; percentage is advisory and MUST NOT be interpreted as a probability of success or a safe cancellation boundary.¶
Available controls are advertised through links and structured next actions. Cancellation is best effort. A cancellation request MUST be represented as its own idempotent control request. The provider MUST report the resulting terminal phase and effect state; it MUST NOT claim cancelled means that no effect occurred.¶
A control request racing with completion returns the current Operation. Pause and resume semantics are profile-defined. Resumption MUST re-evaluate authority, constraints, and preconditions.¶
Operation Events carry an event identifier, operation identifier, monotonically increasing per-operation sequence, event type, creation time, and event data. Delivery is at least once unless a binding or profile states stronger behavior. Clients MUST deduplicate by event identifier and sequence and MUST retrieve the current Operation after a detected sequence gap.¶
Core event types are operation.phase-changed, operation.progress, operation.effect-changed, operation.problem, and operation.outcome. Profile-specific event types MUST be absolute URIs. Event data is a notification and MUST NOT cause a client to skip retrieval of an authorization- or safety-relevant current representation.¶
A provider MAY encode events using CloudEvents [CLOUDEVENTS]. Such an encoding preserves the AICP operation identifier, sequence, and event type.¶
Every terminal Operation MUST link to an Outcome. The Outcome contains the terminal status and effect state, expected changes from the Plan, observed changes, side effects, per-criterion results, evidence references, and structured next actions.¶
The provider MUST distinguish an expected change from an observed change. It MUST NOT copy the Plan into observedChanges without observation. A side effect is any material observed effect not represented in the Plan's expected changes, including unexpected cost, exposure, dependency, or availability effects.¶
Each requested success criterion receives a result of satisfied, unsatisfied, unknown, or not-evaluated, together with an observation time when applicable, actual value, structured reasons, and evidence references.¶
A required criterion that is unsatisfied causes status failed. Any compensation is a separate action. A required criterion whose state is unknown after the provider's defined verification period causes indeterminate unless the profile explicitly defines a safe, known failed state.¶
An Evidence Reference identifies an evidence type URI and contains one or more of an authorized URI, digest, or concise summary. It can include subject, observation time, and freshness limit. Evidence can point to logs, metrics, traces, signed observations, attestations, policy decisions, or provider-native audit records.¶
AICP does not define a signature or evidence verification protocol. Profiles SHOULD reuse applicable evidence work such as VIRP [VIRP] and EMILIA [EMILIA] and telemetry standards such as OpenTelemetry [OTEL]. Access to evidence MUST be independently authorized and MUST NOT be granted merely because a client can read an Outcome.¶
A compensating action is a new Intent, Plan, authorization decision, Operation, and Outcome. It links to the original Operation and describes which effects it intends to counter. A provider MUST NOT mutate the original history to make compensation appear to be an atomic rollback.¶
The original action's reversibility descriptor is only a planning hint. Current state, authorization, and risk are evaluated again. If full restoration is impossible, the compensation Plan declares residual effects and unknowns.¶
HTTP errors use Problem Details for HTTP APIs [RFC9457] with media type application/problem+json. An AICP Problem adds:¶
aicpVersion and a stable code;¶
requestId and optional Operation link;¶
effectState;¶
retry.safe, optional delay, and requiresReconciliation;¶
The human-readable detail member is not authoritative. A client bases retry and recovery decisions on stable code, effect state, retry fields, and current operation state.¶
| Code | Typical HTTP status | Required behavior |
|---|---|---|
invalid-request
|
400 | Return field or semantic violations; no effect. |
unsupported-version
|
400 | Link supported versions; no effect. |
unsupported-profile
|
400 | Link supported profiles; no effect. |
unsupported-action
|
400 or 404 | Disclose alternatives only when authorized. |
unsupported-extension
|
400 | Identify unsupported critical URIs; no effect. |
planning-unsupported
|
409 | Use an allowed direct mode or another advertised action; no effect. |
authorization-denied
|
403 | Do not disclose protected policy or target existence. |
approval-required
|
403 or 409 | Link exact Plan and requirements; no effect. |
plan-stale
|
412 | Do not execute; link or create a new Plan. |
plan-expired
|
409 | Do not execute; replan. |
precondition-failed
|
412 | Do not begin new effect; disclose failed preconditions. |
constraint-unsatisfied
|
409 or 422 | Do not silently relax; offer authorized alternatives. |
capacity-unavailable
|
409 or 503 | Return delay and alternatives when known. |
request-id-reuse
|
409 | Same request identifier was used with different semantics. |
rate-limited
|
429 | Return retry delay and preserve accepted operation state. |
operation-not-cancellable
|
409 | Return current operation and effect state. |
effect-indeterminate
|
500 or 503 | Blind retry is unsafe; link reconciliation. |
reconciliation-required
|
409 | Caller must observe actual state before another mutation. |
HTTP status codes remain transport-level classifications; the AICP code supplies stable domain behavior. Providers MAY define profile-specific codes using absolute problem type URIs and names that do not collide with core codes.¶
Next actions and remediations use the controlled action values execute, wait, replan, approve, clarify, cancel, reconcile, compensate, escalate, stop, and inspect. Each item states whether following the recommendation is non-consequential under current state. A safe value does not grant permission and can become stale.¶
When retry is unsafe, retry.safe is false. If reconciliation is required, the provider MUST link or describe a reconciliation action and MUST NOT recommend a repeat of the original consequential request until actual effect state is sufficiently known.¶
Every mutation request contains a caller-generated requestId. During its advertised retention interval, a provider scopes this identifier to the authenticated principal, service, request kind, and action. Repeating the identifier with semantically identical input MUST return the same Plan, Operation, control result, or terminal record rather than start another consequential effect.¶
Reusing the identifier with semantically different input MUST fail with request-id-reuse. Providers MUST compare a normalized internal representation sufficient to detect a material difference; this document does not standardize a cross-provider canonical JSON digest.¶
The capability document MUST advertise request identifier retention. A client MUST NOT assume deduplication after that interval and SHOULD retrieve the prior Operation before taking another consequential action.¶
Plans bind to observed resource revisions and preconditions. HTTP representations use entity tags and conditional requests as specified in Section 14. A provider MUST reject execution if a material target revision or precondition changed unless the Plan explicitly described and authorized that variance.¶
A provider MUST NOT recompute a stale Plan and execute the new result under the old approval. It can return a new Plan for review.¶
AICP does not guarantee exactly-once external effects. Native provider calls, network failures, failover, and partial execution can make an accepted request's effects uncertain. Idempotency prevents many duplicates but does not prove that an external effect did or did not occur.¶
If the provider cannot safely determine the effect, the Operation reaches indeterminate with effect state possible, partial, or unknown. The client MUST NOT blindly retry and MUST use the advertised reconciliation path or escalate.¶
A reconciliation action observes authoritative native state and compares it to the Plan's expected changes and the latest known effects. It produces a new Operation and Outcome linked to the indeterminate Operation. It can classify effects as none, partial, complete, reversed, or still unknown and can propose a new completion or compensation Plan.¶
Reconciliation is observation-oriented. If it must mutate state, that mutation is represented as a separate consequential Plan and Operation.¶
The AICP HTTP binding uses HTTP semantics from [RFC9110], encrypted transport, JSON representations, conditional requests, and link-driven endpoints. An implementation MUST support HTTP/1.1 or later and MUST use TLS 1.2 or later; TLS 1.3 [RFC8446] is RECOMMENDED.¶
AICP success representations use media type application/aicp+json. Problems use application/problem+json. Clients send Accept and Content-Type accordingly. Servers MUST reject an unsupported content type without interpreting it as an AICP mutation.¶
Authentication and token acquisition are outside scope. HTTP providers SHOULD publish OAuth 2.0 Protected Resource Metadata [RFC9728] when OAuth is used. Authorization requests can use Rich Authorization Requests [RFC9396] or another policy mechanism. Bearer and proof-of-possession credentials MUST NOT appear inside AICP JSON objects.¶
The path /.well-known/aicp is formed according to [RFC8615]. A successful GET returns a Discovery object. The object contains at least:¶
{
"aicpVersion": "0.1",
"kind": "Discovery",
"service": "Example Infrastructure Control",
"versions": ["0.1"],
"profiles": ["https://example.com/aicp/profiles/workload/0.1"],
"auth": {
"protectedResourceMetadata":
"https://c.example/.well-known/oauth-protected-resource"
},
"links": {
"capabilities": "https://control.example.com/aicp/capabilities",
"situations": "https://control.example.com/aicp/situations",
"intents": "https://control.example.com/aicp/intents"
}
}
¶
The origin of an absolute link is authoritative for that endpoint. A client MUST NOT forward credentials to a different origin unless its authentication policy explicitly authorizes that origin. Redirect handling follows the credential and redirection security requirements of HTTP and the authentication scheme.¶
Endpoint paths other than the well-known URI are discovered from links; their literal spelling is not normative. The following interaction pattern is normative:¶
| Interaction | Method | Request | Response |
|---|---|---|---|
| Discover service | GET | None | Discovery |
| List capabilities | GET | Conditional headers optional | Capability Document |
| Acquire situation | POST | Situation Request | Situation |
| Submit intent | POST | Intent Request | Plan or Operation |
| Retrieve plan | GET | Conditional headers optional | Plan |
| Execute plan | POST | Execution Request and If-Match
|
Operation |
| Retrieve operation | GET | Conditional headers or wait preference optional | Operation |
| Control operation | POST | Profile-defined control request with request ID | Operation |
| Retrieve events | GET | Cursor and wait preference optional | Event collection or stream |
| Retrieve outcome | GET | Conditional headers optional | Outcome |
A created Plan or Operation is returned with Location pointing to its durable resource. A provider MUST return the same resource location for a deduplicated request.¶
A synchronous retrieval or completed non-mutating request normally returns 200. Creation of a durable Plan can return 200 or 201. Acceptance of asynchronous execution returns 202 with an Operation and Location. A provider MUST NOT use 202 without a retrievable operation status.¶
Conditional failure uses 304 for retrieval, 409 for domain conflict or expired state, and 412 for a failed HTTP or plan precondition. Authentication uses 401; authorization denial uses 403; disclosure-sensitive implementations can use 404 where required to conceal target existence. A missing required condition uses 428 and rate limiting uses 429 as defined by [RFC6585]. Service unavailability uses 503 with appropriate retry metadata. Semantic errors include a Problem object even when the HTTP status is sufficient for a generic client.¶
Clients can use the Prefer header from [RFC7240]. respond-async asks the server not to wait for completion. wait=N on an Operation or event retrieval asks the server to wait up to N seconds for a newer revision. The server can decline either preference and reports applied preferences with Preference-Applied.¶
Long polling and streaming are optional. A provider supporting event streaming MUST also support ordinary retrieval of the current Operation. Cursors are opaque, scoped to the principal and collection, and MUST NOT be treated as credentials.¶
Discovery, public profile schemas, and non-sensitive capabilities SHOULD use explicit cache controls. Principal-scoped representations use Cache-Control: private or no-store as appropriate and ensure authorization state is not shared across principals.¶
A Situation response respects the caller's item and byte budgets. HTTP compression SHOULD be supported. Providers SHOULD offer conditional retrieval and event deltas so that a client does not repeatedly transfer unchanged full state.¶
A provider SHOULD accept standard trace-context propagation and link authorized trace, metric, log, and audit evidence from the resulting Operation. AICP request identifiers are for deduplication and audit correlation; they are not a substitute for distributed tracing identifiers.¶
MCP [MCP] standardizes how an AI application discovers and invokes tools and accesses resources. An MCP server can expose AICP without defining one tool for every provider action. A recommended minimal tool surface is:¶
aicp.discover - retrieve Discovery and principal-scoped capabilities;¶
aicp.situation - submit a Situation Request;¶
aicp.plan - submit an Intent Request in preview or execute-if-ready mode;¶
aicp.execute - execute an exact Plan revision;¶
aicp.observe - retrieve an Operation, Outcome, or events; and¶
aicp.control - request cancellation, pause, resume, reconciliation, or another advertised control.¶
Action URIs and profile schemas travel as data. This fixed surface reduces tool-list size, selection ambiguity, and adapter churn. An implementation can expose more specialized tools, but they MUST preserve the same Plan, policy, Operation, error, and audit semantics to claim AICP conformance.¶
An MCP adapter MUST NOT bypass the authorization path used by the HTTP binding. MCP task facilities can represent long-running delivery, but the AICP Operation remains the authoritative infrastructure effect record.¶
A2A [A2A] can delegate infrastructure work to another agent or carry AICP objects as artifacts. An A2A task describes inter-agent work and conversation; an AICP Operation describes infrastructure execution and effects. Implementations SHOULD link the two identifiers without collapsing their state machines.¶
The Agent Execution Protocol (AEP) [AEP] describes a governed reasoning-loop boundary. An AEP ACT transition can invoke an AICP request, and an AICP Situation, Operation, or Outcome can be an input to SENSE or OBSERVE. AICP does not standardize the internal reasoning loop or replace its governing enforcement component.¶
Clients SHOULD begin with cached capabilities and a decision Situation. Providers SHOULD order decision views by operational relevance rather than provider database layout. A caller can then request summary or full views, specific include categories, evidence, or a continuation cursor only where uncertainty remains.¶
Every truncated or policy-limited response identifies coverage and omissions. This allows an agent to reason about what it does not know without paying to retrieve irrelevant state.¶
Stable action URIs, schemas, codes, enumerated states, and structured reasons SHOULD be favored over parsing provider prose. A profile SHOULD use intent-aligned action identifiers such as deploy, resize, expose, rotate, or reconcile rather than method names derived from one implementation.¶
Descriptions are untrusted explanatory data. Clients SHOULD select actions by authenticated capability identity, schema, effect class, policy, and target compatibility, not by semantic similarity to a natural-language description alone.¶
AICP objects form a durable graph. A resumed client can retrieve the current Operation and follow links to the exact Plan, originating intent, observed Situation, Outcome, and evidence. It need not reconstruct authority or effects from a chat transcript. Providers SHOULD retain concise object summaries even when bulky evidence has moved to archival storage.¶
The protocol permits but does not require a single request to plan and execute through execute-if-ready. Providers still enforce planning internally. Clients use conditional retrieval, wait preferences, and event cursors to avoid hot polling. Problems carry recovery choices so the next call is deliberate rather than exploratory.¶
Providers report relevant evidence, assumptions, unknowns, and concise reason codes. They MUST NOT require a model's hidden reasoning trace as a condition of interoperability. Clients can supply a short purpose and success criteria without disclosing private chain-of-thought or unrelated context.¶
A conforming profile specification defines:¶
A profile SHOULD reference an existing resource or orchestration model where one is fit for purpose. It MUST disclose mapping loss rather than imply semantic equivalence.¶
The Discovery object lists supported major.minor versions. A client selects a mutually supported version by sending the corresponding media type and object value. This document defines 0.1; pre-1.0 versions can make incompatible changes.¶
After a 1.0 specification, a minor version will add only backward-compatible optional semantics, while a major version can make incompatible changes. A recipient MUST reject an unsupported version before a consequential effect.¶
New optional fields are introduced through a negotiated core version, profile version, or extension URI. Unknown top-level members are not a substitute for extensions and MAY be rejected. Critical behavior always appears in criticalExtensions or a negotiated profile.¶
An AICP Core Provider implements Discovery, Capability Documents, Situation Requests, Intent Requests, Plans, authorization state, Operations, Outcomes, Problems, request deduplication, plan-revision binding, and reconciliation semantics in at least one binding. An AICP HTTP Provider additionally implements Section 14.¶
An AICP Core Client validates versions and critical extensions, treats prose as non-authoritative, honors hard constraints, executes only exact Plan revisions, deduplicates events, does not blindly retry uncertain effects, and follows binding-specific credential rules.¶
A provider or client claiming profile conformance implements all profile requirements identified as mandatory and publishes the supported profile URI in Discovery. Core conformance alone does not imply semantic interoperability for an unshared profile.¶
A conformance suite MUST test at least:¶
request-id-reuse;¶
Providers advertise request-deduplication, Plan, Operation, Outcome, and event retention. Active Operations are durable across service restarts. If detailed events expire before the Outcome, the provider preserves a terminal summary, effect state, Plan link, and evidence index sufficient for audit and safe recovery.¶
Providers enforce authenticated quotas for Situation size, concurrent plans, active Operations, event subscriptions, and expensive verification. Rate limiting does not discard an accepted Operation. Problems distinguish rejection before acceptance from throttling of observation after an effect may have begun.¶
Providers MUST support operational revocation of credentials and SHOULD support policy-defined emergency stop. Revocation prevents new effects but does not erase or hide active operations. The provider attempts safe pause, cancellation, or containment and reports actual effect state.¶
Plan and approval expiry is evaluated by the provider's clock. Providers maintain time synchronization appropriate to their maximum expiry granularity. Clients treat expiry as an upper bound and allow for network delay; they do not assume execution is valid merely because their local clock precedes expiresAt.¶
AICP enables consequential control and therefore exposes the security impact of infrastructure APIs to autonomous and high-rate callers. Authentication alone is insufficient. Implementations require least privilege, policy evaluation, exact-plan binding, durable audit, rate control, and conservative uncertainty handling.¶
A provider resolves every Resource Reference in the authenticated principal's context, validates delegation and audience, and applies tenant boundaries at every linked resource. It does not trust scope, display name, purpose, requested permission, or delegation URI from the body as proof. Links and cursors are not bearer authorization unless explicitly specified by the authentication system.¶
An attacker or concurrent actor can change infrastructure after preview. Strong entity tags, opaque revisions, expiry, native resource preconditions, and immediate authorization re-evaluation reduce this risk. Providers do not execute a recomputed plan under old approval and do not silently widen a constraint.¶
An approval is bound to exact Plan identity, revision, action, material changes, principal, and expiry. Approval interfaces clearly identify the provider origin and material effect. They avoid approving a generic phrase that could be replayed against another target. High-risk plans should require phishing-resistant authentication and independent confirmation appropriate to organizational policy.¶
Descriptions, resource labels, log content, telemetry annotations, and problem detail can contain attacker-controlled text. Clients treat such text as data, never as protocol instructions or authority. Action selection uses authenticated service identity, stable URI, schema, target type, and policy. Clients do not accept a newly advertised action that shadows a trusted action by title alone.¶
Schema and profile documents require integrity and origin validation. Clients cache them by origin, URI, and revision and apply size and complexity limits to avoid parser and validation denial of service. A provider does not allow resource content to inject critical extensions or alter core fields.¶
Unpredictable request identifiers, principal scoping, bounded retention, and semantic mismatch detection reduce replay. A provider rate-limits repeated retrieval without losing the durable Operation. A client backs off according to Problem metadata and never repeats a consequential request when effect state is possible, partial, or unknown.¶
A compromised adapter can misstate a plan, hide effects, or forge observations. Deployments should isolate provider adapters, constrain their native credentials, compare requested and native audit records, and use independent evidence for high-risk actions. AICP evidence links can support verification but do not make an untrusted provider trustworthy by themselves.¶
Secret values, bearer credentials, private keys, and unrestricted signed URLs do not appear in AICP objects. Profiles use opaque secret references resolved inside the authorized control plane. Logs, errors, plans, and evidence summaries are redacted before return and before inclusion in model context.¶
Autonomous clients can generate valid but harmful high-rate actions. Providers enforce independent limits on scope, spend, concurrent changes, unavailable resources, data destruction, region count, and approval threshold. A client's stated risk tolerance never overrides provider policy. The execute-if-ready fast path is disabled when policy requires explicit review.¶
Audit records link authenticated principal, delegated subject when known, request identifier, Situation, Plan revision, approval decisions, native operation identifiers, Operation events, Outcome, and evidence. Providers protect audit data from modification and unauthorized disclosure. Private model reasoning is neither necessary nor sufficient as an audit record.¶
Situation and capability discovery can reveal topology, resource names, tenant existence, policy, capacity, cost, operational incidents, and organizational relationships. Providers return only the minimum information authorized for the principal and purpose. They can conceal target existence with an appropriate generic response where disclosure would create risk.¶
Decision views and explicit include categories support data minimization. A provider can state an omission without disclosing protected details, for example by using a generic policy-limited reason. Clients avoid sending unrelated conversation history, personal data, or private reasoning in purpose, arguments, or extensions.¶
Durable linked records increase accountability but also correlation risk. Retention is limited to operational, legal, and audit need. Identifiers use sufficient entropy and do not encode user identity. Evidence access is separately authorized, and telemetry links avoid embedding credentials. Cross-origin links are not automatically followed with credentials.¶
Capability documents scoped to a principal can reveal permissions. They are privately cached or not stored, are not shared across principals, and can omit denied actions rather than exposing a permission map.¶
This document requests registration of application/aicp+json in the Media Types registry according to [RFC6838] using the following template:¶
aicpVersion member and negotiated profiles. Unknown critical extensions are rejected.¶
This document requests registration of aicp in the Well-Known URIs registry:¶
This document requests creation of the "AICP Problem Codes" registry under an "Agent Infrastructure Control Protocol" group. Initial entries are the codes in Table 5. Future registrations require Specification Required as defined by [RFC8126].¶
A registration contains code, problem type URI, intended HTTP status or range, effect-state requirements, retry requirements, and a specification reference. Designated Experts should reject names that are ambiguous, disclose credentials, redefine an existing code incompatibly, or omit safe behavior for uncertain effects.¶
This initial draft was informed by the design vocabulary and operational lessons of HTTP, intent-based networking, MCP, A2A, AEP, VIRP, EMILIA, CIMI, CAMP, TOSCA, Kubernetes, CloudEvents, and OpenTelemetry. Their mention does not imply review or endorsement of this document by their authors or communities.¶
This appendix is non-normative.¶
The client retrieves /.well-known/aicp and a principal-scoped Capability Document. It selects a workload deployment action using the action URI, target type, effect class, and schemas.¶
The client requests a decision Situation for the production workload with a freshness limit and a 32 KiB budget. The Situation reports workload revision 42, three healthy replicas, one active read-only inspection, applicable production policy, complete decision coverage, and the deployment action.¶
The client posts an Intent Request with a unique request identifier, target release digest, maximum one unavailable replica, no downtime, no data loss, cost limit, and health/error-rate criteria. It requests preview.¶
The provider returns a Plan with revision 3, a five-minute expiry, exact release change, two ordered steps, resource-revision and capacity preconditions, medium risk, and one release-owner approval requirement. The HTTP response contains a strong entity tag.¶
The approver sees and approves Plan revision 3. The approval record binds the target, release digest, material change, risk, and expiry.¶
The client posts an Execution Request naming Plan revision 3 and uses If-Match with the Plan entity tag. The provider re-evaluates current policy and preconditions, then returns 202, an Operation, and its Location.¶
The client waits on the Operation resource. Events show staging, health verification, promotion, and final verification. A temporary event delivery gap causes the client to retrieve the current Operation rather than infer state.¶
The Operation reaches succeeded with complete effects. Its Outcome shows the expected release change, the observed release change, no side effects, satisfied health and error-rate criteria, and evidence links.¶
If the native provider timed out after accepting the promotion and could not determine its effect, step 7 would instead produce indeterminate, unsafe retry guidance, and a reconciliation action. Reconciliation would inspect native state before any completion or compensation Plan.¶
This appendix summarizes safety invariants. The normative text in the body controls.¶
This appendix records issues on which implementation experience is requested:¶
This section is to be removed before RFC publication.¶