--- Source: https://agentcapability.org/docs/overview/ Repository file: README.md ---

Agent Capability Contract logo

Agent Capability Contract (ACC)

**Agent Capability Contract (ACC)** is an open declaration contract for exposing business capabilities to agents. ACC defines how a business system describes which operations an agent may see, when those operations should be considered risky, when a human approval intent is required, how an acting subject is required, and what metadata a runtime should preserve for audit and traceability. ACC is not a runtime, a chatbot framework, or a workflow engine. It is a portable contract that can be implemented by different control planes, gateways, SDKs, developer tools, and agent runtimes. ACC is maintained as an independent, implementation-neutral standard. No product implementation defines ACC semantics or receives privileged compatibility status. ACC is the capability contract for **A2B (Agent-to-Business)**: agents safely doing business work through existing systems. The governance questions ACC addresses can recur whenever an agent action crosses an effect, authority, or trust boundary. This is a broader research observation, not a claim that ACC v1 already governs every agent action. See [Concepts](CONCEPTS.md) for the distinction between recurring questions and the current normative scope. ACC deliberately keeps a small normative core. See [Design Rationale And Boundaries](DESIGN_RATIONALE.md) for the concerns ACC knows about but intentionally leaves to business authorization, runtime policy, approval systems, compliance policy, or other contracts. For an implementation-neutral map of adjacent protocols, runtime controls, policy systems, and workflow layers, see [ACC in the Agent Governance Landscape](LANDSCAPE.md). | Dimension | Current state | |---|---| | Specification | Stable ACC v1 core, governed by Semantic Versioning | | Ecosystem | Early adoption; independent implementations are welcome | | Conformance | Profiles, self-assessment, and machine-readable v1 reference vectors | ## Why ACC Exists Existing business systems were not designed for A2B. Once an agent can call business APIs, teams need a standard way to answer: - Which operations may be exposed to an agent? - Which route, product surface, or scenario may use a capability? - Does the operation require a real business subject? - Is the operation readonly, low risk, medium risk, or high risk? - Should specific arguments trigger a human approval intent? - Which fields are sensitive and should be redacted from audit logs? - How should runtime gateways preserve extension metadata without making it a security rule? ACC puts these declarations next to the API contract, while keeping the final authorization decision inside the business system. ```text ACC controls reach. The business system controls authority. ``` ## Five-Minute Start Already have an OpenAPI document? Follow [Add ACC to an Existing OpenAPI Service in Five Minutes](QUICKSTART.md) to add one declaration, validate it with the `acc-validate` authoring tool, and then expand to the included [multi-operation order service](examples/openapi-order-service.yaml). Run the published validator without installing it globally: ```bash npx --yes agent-capability-contract@1.0.5 validate ./openapi.yaml ``` The validator is a non-normative authoring aid. It does not replace the ACC specification, a complete OpenAPI linter, business authorization, or runtime conformance testing. ## OpenAPI Binding OpenAPI is the first standardized ACC binding. It carries the ACC Core declaration in the operation-level `x-agent-capability` extension: ```yaml x-agent-capability: version: 1 enabled: true scope: order.read risk: level: low subject: required: true execution: readonly: true ``` See [SPEC.md](SPEC.md) for the normative core field model, [Binding Requirements](bindings/README.md) for the interface every binding must define, and [OpenAPI Binding](bindings/openapi.md) for the first carrier-specific mapping. ACC v1 declarations use `version: 1`. Exact specification revisions use repository tags such as `v1.0.5`; product or runtime versions are separate. ## Implement ACC - Read the non-normative [Implementer's Guide](IMPLEMENTER_GUIDE.md). - Review [Safety Governance Responsibilities](SAFETY_GOVERNANCE_GUIDE.md) for trust boundaries, business examples, and the evidence each layer needs. - Choose a claim from [Conformance Profiles](conformance/PROFILES.md). - Run the applicable [machine-readable ACC v1 vectors](conformance/v1/README.md). - Publish evidence using [Implementation Registration and Self-Assessment](conformance/SELF_ASSESSMENT.md). - Submit a pull request to the neutral [implementation registry](IMPLEMENTATIONS.md). ## Repository Layout ```text SPEC.md Normative ACC v1 specification CONCEPTS.md A2B and ACC terminology CONCEPTS.zh-CN.md Chinese translation of core concepts and scope boundaries bindings/README.md Common requirements for ACC bindings bindings/openapi.md OpenAPI extension binding schemas/acc.v1.schema.json Machine-readable JSON Schema QUICKSTART.md Five-minute OpenAPI authoring guide QUICKSTART.zh-CN.md Chinese five-minute authoring guide bin/acc-validate.mjs ACC OpenAPI authoring validator CLI lib/openapi-validator.mjs Validator library and diagnostics examples/ OpenAPI examples, including a multi-operation service test/ Authoring validator and CLI tests conformance/README.md Implementation conformance checklist conformance/PROFILES.md Parser, generator, runtime, and policy profiles conformance/SELF_ASSESSMENT.md Open registration and evidence template conformance/v1/ Machine-readable ACC v1 conformance vectors proposals/ Public normative proposal process and template IMPLEMENTER_GUIDE.md Non-normative implementation architecture guidance DESIGN_RATIONALE.md Why ACC stays small and where adjacent concerns belong DESIGN_RATIONALE.zh-CN.md Chinese design rationale and boundaries LANDSCAPE.md Non-normative map of adjacent protocols and governance layers IMPLEMENTATIONS.md Known implementations and claim language RELEASE_NOTES_v1.0.5.md Current ACC v1 patch release summary RELEASE_NOTES_v1.0.4.md Previous ACC v1 patch release summary RELEASE_NOTES_v1.0.3.md Earlier ACC v1 patch release summary RELEASE_NOTES_v1.0.2.md Earlier ACC v1 patch release summary RELEASE_NOTES_v1.0.1.md Earlier ACC v1 patch release summary RELEASE_NOTES_v1.0.0.md Initial stable ACC v1 release summary GOVERNANCE.md Stewardship, versioning, and extension rules CONTRIBUTING.md Contribution rules for contract changes SECURITY.md Private vulnerability reporting and security scope CHANGELOG.md Public changes NOTICE Attribution notice LICENSE Apache-2.0 license ``` ## Implementations ACC is implementation-neutral. It can be implemented by control planes, API gateways, SDK generators, developer tools, agent runtimes, MCP gateways, and policy engines. Known implementations are listed alphabetically in [IMPLEMENTATIONS.md](IMPLEMENTATIONS.md). Projects implementing ACC are welcome to publish a self-assessment and submit a pull request. Listing is not certification or endorsement. ## License ACC is licensed under the Apache License 2.0. See [LICENSE](LICENSE). Security reports should follow [SECURITY.md](SECURITY.md). The license allows use, modification, redistribution, and commercial implementation of ACC. --- Source: https://agentcapability.org/docs/quickstart/ Repository file: QUICKSTART.md --- # Add ACC to an Existing OpenAPI Service in Five Minutes This guide adds one ACC declaration to an existing OpenAPI document and validates the result. It does not require an ACC runtime or a business-system change. The authoring validator is non-normative. The ACC specification and OpenAPI binding remain authoritative. ## 1. Install the authoring validator Run the published validator without installing it globally: ```bash npx --yes agent-capability-contract@1.0.5 validate ./openapi.yaml ``` Or add the validator to a project: ```bash npm install --save-dev agent-capability-contract@1.0.5 ``` The package requires Node.js 20 or later. ## 2. Declare one existing operation Find one operation in your OpenAPI document. A readonly operation is a useful first candidate: ```yaml paths: /orders/{order_id}: get: operationId: getOrder x-agent-capability: version: 1 enabled: true scope: order.read risk: level: low subject: required: true execution: readonly: true responses: '200': description: Order details ``` The declaration says that this operation is explicitly exposed to an agent surface, belongs to the `order.read` scope, is classified as low risk, requires a trusted acting subject, and is readonly. It does not grant the subject permission to read an order. The business system still makes the final authorization decision. Use `enabled: false` when you want to preserve a declaration without exposing the operation to agents. ## 3. Validate your OpenAPI document Run the validator: ```bash npx acc-validate /absolute/path/to/openapi.yaml ``` Use JSON output in CI or another developer tool: ```bash npx acc-validate \ --format json \ /absolute/path/to/openapi.yaml ``` Use strict mode when a document with no ACC declarations should fail: ```bash npx acc-validate \ --strict \ /absolute/path/to/openapi.yaml ``` Exit codes are stable: | Code | Meaning | |---|---| | `0` | Validation passed | | `1` | At least one document failed, or strict mode promoted a warning | | `2` | Invalid command-line usage | ## 4. Add conditional approval only when the input is declared An approval condition must resolve to an OpenAPI parameter or a property in a JSON request body: ```yaml paths: /refunds: post: x-agent-capability: version: 1 enabled: true scope: refund.create risk: level: high subject: required: true approval: when: - param: amount op: '>' value: 1000 requestBody: content: application/json: schema: type: object properties: amount: type: number ``` The validator rejects unresolved or ambiguous condition paths and rejects comparison values that rely on implicit JSON type coercion. See the complete [order service example](examples/openapi-order-service.yaml) for read, write, approval, audit, and disabled-operation declarations in one OpenAPI document. ## What the tool checks - OpenAPI `3.0.x` and `3.1.x` YAML or JSON documents; - operation-level placement of `x-agent-capability`; - ACC v1 declaration structure; - local and local-file `$ref` resolution; - OpenAPI parameter and JSON request-body input mapping; - `approval.when.param` resolution and ambiguity; - comparison operator and JSON schema type compatibility; - machine-readable diagnostics and stable exit codes. ## What the tool does not claim - It is not a complete OpenAPI validator or linter. - It does not fetch remote `$ref` targets. - It does not evaluate dynamic business authorization. - It does not execute approval workflows or business operations. - Passing this authoring check is not an ACC implementation certification. Next, read the [OpenAPI Binding](bindings/openapi.md) and the [Implementer's Guide](IMPLEMENTER_GUIDE.md). --- Source: https://agentcapability.org/docs/spec/ Repository file: SPEC.md --- # Agent Capability Contract v1 Status: Stable Ecosystem maturity: Early adoption Conformance: Self-assessment with machine-readable reference vectors Short name: ACC v1 Specification release: 1.0.5 First standardized binding: OpenAPI (`x-agent-capability`) ## 1. Scope ACC v1 defines a declaration model for business capabilities that may be exposed to agents. The normative scope of ACC v1 is: - exposing or hiding a capability; - declaring a stable permission scope; - declaring runtime risk; - declaring whether a real acting subject is required; - declaring approval intent and parameter-level confirmation rules; - declaring audit sensitivity; - declaring execution hints such as readonly, idempotent, timeout, and rate limit; - providing model-readable guidance; - preserving extension metadata without implicitly changing security behavior. ACC v1 does not define: - final business authorization; - user identity format; - runtime storage schema; - approval workflow ownership; - tool invocation transport; - model provider behavior; - user interface requirements. ## 2. Design Principles ### 2.1 Reach And Authority ACC controls reach: which business capabilities an agent-facing runtime may expose to an agent in a specific route or scenario. The business system controls authority: whether the acting subject can actually perform the action at call time. An ACC-compatible runtime MUST NOT treat ACC as a replacement for business authorization. ### 2.2 Stable Core, Open Extensions ACC core fields are stable and have explicit runtime meaning. Unknown fields inside the ACC declaration object MUST be ignored by runtimes unless they are standardized in a later ACC version. Binding-native or implementation-specific extension fields MAY be preserved in an extension bag, but MUST NOT implicitly alter allowlist, risk, approval, rate limit, audit, or signature behavior. For example, the OpenAPI binding may preserve operation-level `x-business-*` fields without assigning them ACC semantics. ### 2.3 Parameters Stay In Binding-Native Schemas Business input parameters MUST remain in the standard input-schema mechanism of the bound protocol. ACC MUST NOT become a duplicate schema language for business parameters. Each binding MUST define how its native input schema and invocation values map to the ACC JSON value model used by validation and approval conditions. Binding requirements are defined in [bindings/README.md](bindings/README.md). ## 3. Core And Binding Model ACC Core is the declaration object defined by the field model in this specification. A binding carries that object on a protocol-specific operation and resolves the operation's native input schema into a form a core runtime can validate. An ACC-declared operation is exposed only when: - `enabled` is `true`; - `scope` is present and non-empty; - the runtime's route or policy allows that scope; - the binding supplies enough input schema for safe invocation. The first standardized ACC v1 binding is OpenAPI. It carries the declaration in the operation-level `x-agent-capability` extension. Placement, extraction, parameter resolution, and OpenAPI-specific conformance are defined in [bindings/openapi.md](bindings/openapi.md). Core declaration example: ```yaml version: 1 enabled: true scope: order.read risk: level: low subject: required: true execution: readonly: true idempotent: true ``` ## 4. Field Model ### 4.1 `version` Type: integer Required: yes Allowed value in this specification: `1` Declares the ACC schema version used by this object. Runtimes SHOULD reject unsupported major versions or mark the operation as skipped with diagnostics. ### 4.2 `enabled` Type: boolean Required: yes When `false`, the operation MUST NOT be exposed as an agent-callable capability. ### 4.3 `scope` Type: string Required: yes Recommended format: dot-separated capability scope, such as `order.read`, `staff.search`, `refund.request.create`. The scope is the unit used by route allowlists and governance policies. Runtimes MAY support exact matching and prefix matching such as `order.*`, but matching rules are runtime policy and not part of ACC core. ### 4.4 `risk` Type: object Required: no ```yaml risk: level: low ``` Fields: | Field | Type | Required | Values | |---|---|---|---| | `level` | string | no | `low`, `medium`, `high` | Risk levels describe the worst reasonable consequence of allowing an agent to initiate the operation automatically. - `low`: readonly or minor recoverable effect. - `medium`: business side effect, usually single-object, recoverable, or request/draft creation. - `high`: money movement, deletion, permission changes, HR actions, contracts, bulk actions, cross-tenant effects, external notifications, or difficult rollback. If omitted, runtimes SHOULD apply safe defaults: - `execution.readonly: true`: `low`; - operations not declared readonly: `medium`. A binding MAY define an additional native signal for the readonly default when that signal has stable semantics in the carrier protocol. The binding MUST document its precedence and conservative fallback. ### 4.5 `subject` Type: object Required: no ```yaml subject: required: true ``` Fields: | Field | Type | Required | Meaning | |---|---|---|---| | `required` | boolean | no | Whether an acting subject is required before this capability may be exposed or invoked. | If `subject.required` is true and the runtime has no trusted acting subject, the capability SHOULD NOT be shown to the agent. The requirement applies at the runtime's current trust boundary. A subject identifier copied from model output, tool arguments, or an unverified upstream message is not a trusted acting subject merely because the sender labels it as one. The receiving runtime MUST resolve or verify subject trust through its own trusted context or an explicit identity/delegation binding. ACC v1 does not prove that the same subject has remained unmodified across multiple agent, runtime, or organizational hops. End-to-end subject continuity requires a complementary identity or delegation mechanism with its own issuer, verification, freshness, and failure semantics. At invocation time, the business system MUST still verify the subject according to its own permission model. ### 4.6 `approval` Type: object Required: no ```yaml approval: required: true prompt: "Approve refund for order {order_id}?" when: - param: amount op: ">" value: 1000 label: Refund amount exceeds 1000. ``` Fields: | Field | Type | Required | Meaning | |---|---|---|---| | `required` | boolean | no | Every invocation should create an approval intent before execution. | | `prompt` | string | no | Human-readable approval prompt template. | | `when` | array | no | Parameter-level confirmation rules. | `approval.when` items: | Field | Type | Required | Meaning | |---|---|---|---| | `param` | string | yes | Argument path, using dot notation for nested values. | | `op` | string | yes | One of `>`, `>=`, `<`, `<=`, `==`, `!=`, `in`, `contains`, `exists`. | | `value` | any | conditional | Comparison value; not required for `exists`. | | `label` | string | no | Human-readable explanation. | Approval condition semantics: - `approval.required: true` means every invocation creates an approval intent. Conditional rules MUST NOT reduce an unconditional approval requirement. - When `approval.required` is false or omitted, `approval.when` uses **ANY** semantics: one matching item is sufficient to create an approval intent. - An absent or empty `approval.when` array creates no conditional approval intent. - `param` MUST resolve to an input declared by the bound operation. Each binding MUST define deterministic path resolution and map native values to the ACC JSON value model. - Runtimes MUST evaluate conditions against JSON values. They MUST NOT coerce strings into numbers or booleans for comparison. - `>` / `>=` / `<` / `<=` require a JSON `number` or `integer` parameter and a finite JSON number as `value`. - `==` and `!=` use strict JSON type-aware equality. For example, `true` is not equal to `"true"`, and `0` is not equal to `"0"`. - `in` requires `value` to be a JSON array and matches when the parameter is strictly JSON-equal to one array member. - `contains` applies only to string or array parameters. String containment requires a string `value` and uses substring matching; array containment uses strict JSON equality for elements. - `exists` matches only when `param` resolves in the invocation input and its value is not JSON `null`. A missing path and an explicit JSON `null` therefore do not match. - If an invocation supplies a value whose JSON type is incompatible with the condition parameter schema, the runtime MUST reject the invocation before it reaches the business operation. It MUST NOT silently treat the condition as unmatched. `approval.when` conditions are evaluated independently for each invocation. They do not express aggregate, rolling-window, cross-invocation, or sequence constraints. For example, `amount > 1000` does not prevent an agent from proposing multiple smaller operations whose cumulative effect exceeds 1000. Deployments whose risk model includes cumulative effects MUST enforce those constraints in the authoritative business or policy layer. They MUST NOT treat a per-invocation condition as an aggregate limit. ACC declares approval intent. It does not define who approves, where approval occurs, or how the business workflow is completed. An approval field or runtime-authored audit entry is not, by itself, independently verifiable evidence that approval occurred. ACC v1 does not standardize canonical serialization, digital signatures, issuer keys, freshness anchors, or replay protection for approval evidence. Deployments that require third-party verification MUST provide those semantics in a complementary approval, identity, or evidence protocol. ### 4.7 `audit` Type: object Required: no ```yaml audit: sensitive: true ``` Fields: | Field | Type | Required | Meaning | |---|---|---|---| | `sensitive` | boolean | no | Indicates that arguments or responses may contain sensitive data and should be redacted or summarized in logs. | Runtimes SHOULD preserve audit records for invocation attempts, risk decisions, approval intent, and final result. ### 4.8 `execution` Type: object Required: no ```yaml execution: readonly: true idempotent: true timeout_ms: 10000 rate_limit: count: 30 window: 1m ``` Fields: | Field | Type | Required | Meaning | |---|---|---|---| | `readonly` | boolean | no | Operation should not change business state. | | `idempotent` | boolean | no | Operation may be safely retried with the same arguments. | | `timeout_ms` | integer | no | Invocation timeout hint in milliseconds. | | `rate_limit` | object | no | Runtime rate limit hint. | `execution.rate_limit`: | Field | Type | Required | Meaning | |---|---|---|---| | `count` | integer | yes | Maximum number of calls in the window. | | `window` | string | yes | Window such as `1m`, `1h`, `1d`. | ### 4.9 `guidance` Type: object Required: no ```yaml guidance: when_to_use: Use when the user asks for order status. returns: Returns order status, amount, customer, and fulfillment state. examples: - id: SO202607001 context: - customer-service ``` Fields: | Field | Type | Required | Meaning | |---|---|---|---| | `when_to_use` | string | no | Model-readable usage guidance. | | `returns` | string | no | Human-readable return shape explanation. | | `examples` | array | no | Example argument objects. | | `context` | array of strings | no | Lightweight tags preserved for runtime, UI, or indexing. | Guidance fields help agents select and call capabilities correctly. They MUST NOT be treated as security policy. ## 5. Runtime Conformance An ACC-compatible runtime SHOULD: - consume a validated ACC declaration and bound operation artifact from a conforming binding, or implement that binding itself; - expose only `enabled: true` operations with a non-empty `scope`; - compile the declaration into a runtime tool model; - preserve the binding-native input schema required for validation; - enforce route or policy allowlists using `scope`; - apply risk defaults for omitted risk values; - hide `subject.required` capabilities when no trusted subject exists; - detect `approval.required` and `approval.when` before invocation; - validate `approval.when` targets and values against the declared parameter schema; - evaluate approval conditions without implicit JSON type coercion and reject incompatible invocation values before the business operation; - preserve audit and trace information; - ignore unknown ACC fields safely; - preserve implementation-specific extension fields without making them security rules. An ACC-compatible runtime MUST NOT: - treat ACC as final business authorization; - allow model-generated text to override scope, risk, subject, approval, or audit decisions; - use unknown fields to silently change security behavior; - require business parameters to be encoded inside ACC metadata; - reinterpret a core field because a different carrier protocol is used. ## 6. Compatibility ACC follows semantic versioning for the specification: - patch versions clarify wording or fix schema/documentation errors; - minor versions add optional fields or non-breaking semantics; - major versions may change field meaning or required behavior. ACC v1 runtimes MUST ignore unknown fields and SHOULD produce diagnostics for unsupported versions. Ignoring an unknown field provides syntax-level forward compatibility, not automatic security compatibility. A new field that affects exposure, approval, authority boundaries, or redaction may remain in the ACC v1 family only when an older runtime ignoring it is fail-safe or when the declaration includes a conservative ACC v1 fallback. Otherwise the behavior requires a new major contract family or explicit capability negotiation. The declaration field and the specification release serve different purposes: - declaration field `version: 1` identifies the major contract compatibility family; - repository releases use semantic versions such as `v1.0.5` for an exact published revision of ACC v1; - patch and minor releases within `v1.x.x` keep the declaration field at `1`; - a breaking contract family would require both an ACC `v2.0.0` specification release and declaration field `version: 2`. --- Source: https://agentcapability.org/docs/concepts/ Repository file: CONCEPTS.md --- # Concepts ## A2B: Agent-to-Business **A2B (Agent-to-Business)** is the scenario where an agent safely and governably connects to an existing business system, acts on behalf of a real business subject, and uses business capabilities such as querying data, creating requests, updating state, or starting workflows. A2B is not just tool calling. It includes: - business-side identity and authorization; - route and scenario boundaries; - capability declarations; - risk and approval intent; - audit trails and traceability; - signatures and invocation accountability; - the ability for the business system to remain the final authority. Short form: ```text A2B = agents safely doing business work through existing systems. ``` ## ACC: Agent Capability Contract **ACC (Agent Capability Contract)** is the capability declaration contract for A2B. ACC answers: - Which business capability may be exposed to an agent? - Under which scope? - With what risk level? - Does it require an acting subject? - Does it require approval intent? - What should be redacted or audited? - What execution hints should a runtime respect? ACC does not execute the capability. It declares the capability boundary. Short form: ```text ACC is the capability contract for A2B. ``` ## Relationship ```text A2B is the category. ACC is the standard contract. Implementations turn ACC declarations into runtime behavior. ``` ## Why These Questions Recur An agent can reason, draft, or simulate without producing an external effect. Governance becomes structurally important when an agent action crosses one or more boundaries: - an **effect boundary**, where the action reads controlled data, changes state, sends a message, moves funds, or creates another real-world consequence; - an **authority boundary**, where the action uses authority granted by a user, organization, application, or external system; - a **trust boundary**, where the declaring, deciding, executing, and authorizing parties are not all in the same trust domain. Across such boundaries, systems repeatedly need to answer related questions about capability reach, acting principals, consequences, human intervention, accountability, and execution semantics. A deployment may answer that no subject or approval is required for a particular low-consequence operation; that is still an explicit governance decision. This recurring problem family is broader than any one transport or binding. It does **not** mean that ACC v1 already governs every agent action, or that its current fields can be copied unchanged into MCP, A2A, app intents, operating-system permissions, or cross-organization delegation. ACC v1 remains the concrete contract for A2B business operations, with OpenAPI as its first binding. Broader applicability requires separate bindings, failure semantics, implementation evidence, and public proposal review. The same distinction applies to multi-hop trust. ACC can declare that a capability requires a trusted acting subject and approval intent at a boundary. It does not, by itself, prove that an identity or approval remained authentic and unmodified across a chain of agents, runtimes, or organizations. Identity continuity, delegation, independently verifiable evidence, freshness, and replay protection are complementary protocol concerns rather than implicit guarantees of an ACC declaration. ## Adjacent Terms | Term | Meaning | Relationship | |---|---|---| | A2A | Agent-to-Agent collaboration. | Adjacent, not the same problem. | | MCP | A protocol ecosystem for exposing and invoking tools. | Can be used with A2B, but does not define business governance by itself. | | ACC | Capability declaration contract for A2B. | Defines portable business capability metadata. | | ACC runtime | Any implementation that parses, validates, or enforces ACC declarations. | Runtime implementation, not the contract itself. | ## Scope in Plain Language ACC v1 is a concrete, machine-readable capability contract for A2B systems. It is maintained independently from product implementations, and no implementation defines the standard merely by supporting it. The governance questions described above may recur in other agent-action environments. That observation motivates research and future bindings, but it does not expand the current ACC v1 compatibility claim beyond its documented A2B scope. --- Source: https://agentcapability.org/ecosystem/ Repository file: LANDSCAPE.md --- # ACC in the Agent Governance Landscape > Status: Informational and non-normative. This document explains where ACC fits among adjacent specifications, protocols, policy systems, and runtime controls. It does not change ACC v1 semantics or require any named technology. ## The Short Answer ACC is a portable, operation-level declaration contract for business capabilities that may be exposed to agents. It is designed to sit between interface and transport descriptions on one side, and deployment-specific enforcement and final business authorization on the other: ```text Agent applications and orchestration | Interface, discovery, and transport protocols | ACC: portable business capability governance declarations | Runtime policy, gateways, control planes, and approval systems | Business authorization, workflows, data, and final effects ``` These layers are complementary. An implementation may use OpenAPI, MCP, A2A, a runtime hook framework, a policy engine, and ACC in the same system. ## Layer Map | Layer | Primary question | Examples | Relationship to ACC | |---|---|---|---| | Interface description | What operation exists, and what are its inputs and outputs? | OpenAPI, JSON Schema | ACC reuses standard interface schemas instead of duplicating business parameters. | | Tool and agent transport | How are tools or agents discovered, connected, and invoked? | MCP, A2A | A binding or adapter may carry ACC metadata across these protocols. ACC does not replace their transport semantics. | | Identity and trusted metadata | Which agent or artifact is this, and which claims can be verified? | OASF, AgentFacts, identity and credential systems | ACC describes a business operation, not an agent identity or a trust credential. | | Capability governance declaration | What business operation may an agent-facing surface expose, with what subject, risk, approval intent, audit, and execution metadata? | ACC | This is ACC's core responsibility. | | Runtime decision and enforcement | Where and how is an invocation inspected, allowed, denied, transformed, escalated, throttled, or audited? | Control planes, API gateways, policy components, runtime hook specifications, OpenPort-style secure gateways | These systems can consume ACC declarations and combine them with local policy and context. | | Enterprise policy and authorization | Is this subject allowed to perform this action now? | RBAC, ABAC, XACML, OPA, Cedar, IAM, application authorization | These systems retain authority. ACC must not replace them. | | Workflow and transaction coordination | How are multi-step work, compensation, retries, and recovery coordinated? | Workflow engines, Saga coordinators, approval systems | ACC can describe individual capabilities, but does not promise cross-operation atomicity. | ## Recurring Governance Questions Across Boundaries The technologies in this landscape do not all solve the same problem, but consequential agent actions repeatedly raise a related set of governance questions: | Question | Portable concern | Current ACC v1 expression | |---|---|---| | What may the agent-facing surface expose? | Capability reach | `enabled`, `scope` | | Must the action be bound to a trusted business actor? | Acting principal | `subject` | | What kind of consequence can the operation produce? | Risk signal | `risk` | | When must execution pause for an external decision? | Human intervention intent | `approval` | | What evidence must remain for explanation and traceability? | Accountability | `audit` and runtime evidence | | What portable execution properties should be preserved? | Execution semantics | `execution` | These questions become relevant when an action crosses an effect, authority, or trust boundary. They can recur in business APIs, MCP tools, app intents, A2A delegation, and cross-organization automation. Recurrence does not imply protocol ownership. A2A additionally needs task, delegation, and multi-party semantics. App and operating-system integrations need sandbox, permission, lifecycle, and user-consent semantics. Cross-organization systems need credentials, disclosure, revocation, and responsibility models. ACC must not absorb those layers merely because some governance questions are shared. ACC v1 is the concrete A2B and operation-level contract in this landscape. Whether its core semantics can support other environments must be demonstrated through separate bindings, explicit failure behavior, independent implementations, and public proposal review. ## Adjacent Protocols and Specifications ### OpenAPI and JSON Schema [OpenAPI](https://spec.openapis.org/oas/latest.html) describes HTTP operations, parameters, request bodies, responses, and other interface details. JSON Schema describes data shape and validation constraints. ACC's first binding uses the OpenAPI extension field `x-agent-capability`. Business parameters remain in standard OpenAPI and JSON Schema. ACC adds portable agent-facing governance meaning beside the operation. ### MCP [Model Context Protocol](https://modelcontextprotocol.io/specification/) defines an ecosystem for connecting models and applications to tools, resources, and prompts. MCP and ACC answer different questions: - MCP helps a client discover and invoke a tool. - ACC describes the governance meaning of the underlying business operation. An MCP gateway may expose a tool derived from an ACC-marked operation. A future ACC binding may define a portable mapping, but MCP is not required to implement ACC. ### A2A [Agent2Agent Protocol](https://a2a-protocol.org/latest/) addresses communication and collaboration between agents. Its extension mechanism can carry additional capabilities or metadata. ACC focuses on Agent-to-Business operations rather than Agent-to-Agent collaboration. An A2A extension may transport ACC-related metadata, but the two specifications do not own the same layer. ### Runtime control specifications Runtime control systems define interception points and decisions around a live invocation. Two similarly named efforts must not be conflated: - Microsoft's [Agent Control Specification](https://microsoft.github.io/agent-governance-toolkit/packages/agent-control-specification/) is part of the Agent Governance Toolkit and describes runtime intervention points and control decisions. - The independent [Agent Control Standard](https://agentcontrolstandard.org/) describes governance hooks, Guardian-style evaluation, observability, and an Agent Bill of Materials. Runtime hooks answer where and how to enforce a decision. ACC answers what portable governance meaning the business operation declares. A runtime can use both. ### Secure gateways and OpenPort [OpenPort](https://arxiv.org/abs/2602.20196) proposes a model- and runtime-independent service-side security gateway for exposing application tools with controlled writes, authorization, failure handling, and auditability. This has meaningful architectural overlap with an ACC runtime or control plane, but it is not the same artifact. ACC is a declaration contract; a secure gateway is an enforcement architecture. A gateway may consume ACC declarations, translate them into local policy, or use another declaration model. ### OASF and AgentFacts [Open Agentic Schema Framework](https://docs.agntcy.org/pages/oasf.html) focuses on describing agent records, skills, domains, and discovery metadata. [AgentFacts](https://arxiv.org/abs/2507.14263) explores signed and verifiable claims about agents. These efforts primarily describe or establish trust in an agent or artifact. ACC describes a business operation offered to agents. Trusted agent identity and operation-level governance can be used together. ### OPA, Cedar, XACML, RBAC, and ABAC Policy languages and authorization models evaluate deployment-specific rules using local identities, resources, context, and enterprise policy. ACC does not attempt to become a general policy language. A runtime may map `scope`, `risk`, `subject`, or approval metadata into [OPA](https://www.openpolicyagent.org/), [Cedar](https://www.cedarpolicy.com/), an API gateway policy, or application code. The business system still makes the final authorization decision. ## Why Keep a Separate Declaration Contract? Business capability governance should survive changes in model provider, agent framework, transport protocol, gateway, and workflow product. Keeping the portable declaration separate from a particular enforcement runtime provides three useful properties: 1. **Portability:** the same operation metadata can be consumed by different implementations. 2. **Separation of responsibility:** the declaration describes governance intent without pretending to own identity, authorization, workflow, or UI. 3. **Testability:** parsers and runtimes can publish precise conformance evidence for the fields they support. This separation does not mean every deployment needs a standalone ACC server. ACC metadata may be parsed by an SDK, gateway plugin, policy component, control plane, build tool, or agent runtime. ## Frequently Asked Questions ### Is ACC a replacement for MCP or A2A? No. MCP and A2A define connection and collaboration mechanisms. ACC defines portable governance metadata for operations in existing business systems. They can be composed. ### Is ACC intended to govern every agent action? No. ACC v1 has a precise normative scope: A2B business operations, with OpenAPI as the first binding. The governance questions ACC addresses can recur when agents cross other effect, authority, or trust boundaries, but broader applicability is a research and binding question rather than a current compatibility claim. ### Does every agent action need approval or a business subject? No. The structural requirement is to reach an explicit governance conclusion. A low-consequence operation may require no subject and no approval, while a consequential operation may require both. ACC describes those differences; it does not make every operation high risk. ### Is ACC an authorization system? No. ACC controls reach: what an agent-facing runtime may expose. The business system controls authority: whether the acting subject may perform the action at call time. ### Why not put all ACC fields directly into MCP or A2A? A protocol-specific extension can carry ACC metadata, but the declaration should remain usable when a deployment uses another transport or calls an HTTP API directly. Protocol bindings belong beside the core contract, not inside its portable semantics. ### Why not use OPA, Cedar, or an API gateway instead? Those systems make or enforce local policy decisions. ACC provides a common operation-level input that implementations may translate into those systems. ACC does not replace local policy. ### Do runtime hooks make ACC unnecessary? No. Hooks define interception points and available actions. They do not automatically provide portable business meaning for every operation. Hooks and gateways can consume ACC declarations as one source of governance intent. ### Does an ACC declaration make an operation safe by itself? No. Safety requires a compatible runtime, trusted subject resolution where applicable, secure execution, audit, and final business authorization. ACC is one layer in that chain. ### Is ACC tied to BailingHub or another implementation? No. ACC is maintained independently. Implementations are evaluated under the same public profiles and evidence rules, regardless of owner. ### Why is the core deliberately small? Fields enter the core only when their meaning can remain implementation-neutral, machine-testable, compatible, and separate from final authority. Runtime policy, approval ownership, enterprise compliance, multi-step workflow, and business invariants remain in their proper layers. ## Scope of This Document The landscape changes quickly. Named projects are examples, not endorsements, dependencies, or claims of equivalence. This page explains architectural responsibility, not market rank. For normative ACC behavior, read [SPEC.md](SPEC.md). For the boundary and field-admission rationale, read [DESIGN_RATIONALE.md](DESIGN_RATIONALE.md). --- Source: https://agentcapability.org/docs/design-rationale/ Repository file: DESIGN_RATIONALE.md --- # ACC Design Rationale And Boundaries [简体中文](DESIGN_RATIONALE.zh-CN.md) Status: Non-normative rationale Applies to: ACC v1 ACC is intentionally a small contract. Small does not mean incomplete: it means the normative core contains only semantics that independent runtimes can interpret consistently without understanding one product's database, UI, identity model, approval system, or deployment topology. Normative behavior is defined by [SPEC.md](SPEC.md), the versioned schema, and binding documents. This file explains why several useful platform and business features are not ACC core fields. ## 1. The Boundary In One Sentence ```text ACC declares the agent-facing capability boundary. The runtime governs exposure and invocation. The business system remains the final authority. ``` ACC answers what an agent-facing runtime needs to know about a business capability: whether it is exposed, its policy scope, consequence risk, subject requirement, approval intent, audit sensitivity, execution hints, and model-readable guidance. ACC does not attempt to describe the entire A2B control plane. ## 2. Test For A Core Field A field belongs in ACC core only when all of the following are true: 1. It changes portable agent-facing governance semantics. 2. Independent parsers or runtimes can implement the same meaning. 3. The behavior can be tested without one product's private database, UI, identity directory, or workflow engine. 4. Standard binding-native protocol and schema mechanisms cannot already express it cleanly across the target bindings. 5. It does not require the runtime to become the final business authorization authority. 6. An older compatible runtime can ignore the field without silently reducing security, or the change uses a new major compatibility family. These conditions are necessary, not sufficient. Passing them makes a proposal eligible for governance review; it does not create an obligation to add the field to ACC core. Review also considers: - demonstrated need across independent implementation contexts; - whether the proposal is the smallest stable semantic addition; - whether a binding, implementation extension, or adjacent specification is a better owner; - complete defaults, precedence, failure, and security semantics; - backward-compatibility and ecosystem implementation cost; - implementation evidence and machine-readable conformance vectors. More fields are not automatically better. A field that cannot pass this test creates apparent portability while moving hidden assumptions into every implementation. ## 3. Known Concerns That Are Intentionally Outside ACC Core | Concern | Why it is not an ACC v1 core field | Correct owner or layer | |---|---|---| | Final user permission | Roles, ABAC rules, ownership, data permissions, and current account state are business-specific and time-dependent. | Business authorization layer | | Tenant or merchant isolation | Isolation must remain enforced when an API is called outside an agent runtime. Gateway parameter injection is not a security boundary. | Business data and authorization layers | | Identity representation | Sessions, JWT claims, service principals, certificates, directory groups, and signed tickets are not interchangeable. | Runtime identity bridge and business system | | Approval assignee and workflow | Who approves, quorum, delegation, expiry, UI, and escalation depend on an organization's process. | External approval owner | | Cross-hop subject continuity and delegation | A Boolean subject requirement cannot prove identity continuity across agents, runtimes, organizations, issuers, and trust domains. | Identity, delegation, or protocol-binding layer | | Independently verifiable approval evidence | Canonical bytes, signatures, issuer keys, freshness, replay protection, and external verification require a complete evidence protocol and threat model. | Approval-evidence, attestation, or delegation layer | | Business deny rules | Blacklists, order state, inventory, refund limits, and contractual restrictions require authoritative business data. | Business policy and authorization layer | | Cross-field or contextual invariants | Rules such as refund amount not exceeding the current order balance require fresh, authorized business state. | Business operation or preflight API | | Context fetching | Where a value comes from, who may fetch it, freshness, failure, and caching require a separate data-access contract. | Runtime integration or business API | | Audit retention and legal hold | Retention duration, archive, deletion, and legal hold are organization-wide compliance policies. | Deployment and compliance policy | | Field-level audit redaction | ACC v1 declares broad sensitivity. A portable request/response path model, arrays, references, and conservative fallback still need design evidence. | OpenAPI schema annotation, runtime policy, or a future ACC proposal | | General Boolean condition groups | ACC v1 intentionally uses bounded ANY conditions. Nested Boolean policy needs precedence, compatibility, and fail-safe semantics. | Runtime policy engine or a future ACC proposal | | Detailed effect or business-domain taxonomy | `execution.readonly` already carries the most portable state-change distinction. Destructive, additive, open-world, and domain labels overlap binding-native metadata, may be non-exclusive, and do not yet have stable cross-industry semantics. | Binding-native annotations, authoring diagnostics, implementation extensions, or a future evidence-backed proposal | | Approval UI or double confirmation | Some runtimes are headless gateways, queues, or deterministic workflows with no user interface. | Runtime or approval product | | Rollback and compensation | Compensation is not necessarily an inverse call; it needs authorization, state, idempotency, and workflow semantics. | Transaction, saga, or workflow layer | | Tool composition and ordering | Preconditions, orchestration, and multi-step transactions form a workflow or planning contract. | Workflow or orchestration layer | | Storage, queue, signatures, metrics, and cost accounting | These are valuable control-plane features but do not change the portable declaration meaning. | Runtime implementation | | HTTP, RPC, message queue, or MCP transport | ACC declarations can be consumed before several different invocation transports. | Binding, adapter, or transport specification | Leaving these concerns outside ACC does not make them unimportant. It prevents ACC from giving false guarantees about responsibilities that only the business system or deployment owner can fulfill. ## 4. Thin Is Not Vague A thin contract still needs exact semantics. ACC therefore specifies: - required fields and JSON types; - exposure requirements for `enabled`, `scope`, and trusted-subject availability; - strict, type-aware approval-condition comparison; - safe handling of unsupported versions and unknown fields; - the separation between model-controlled input and trusted governance metadata; - conformance profiles and observable outcomes. If the same declaration can be interpreted in contradictory ways by conforming implementations, that is a specification defect and should be corrected. If two organizations intentionally map the same risk classification to different local approval workflows, that is deployment policy, not a portability defect. ### 4.1 Why ACC v1 Uses A Compact Risk Classification `risk.level` describes the worst reasonable consequence of allowing an agent to initiate an operation automatically. It is a portable classification result, not a claim that every contributing factor can already be standardized. Candidate factors such as state-change effect, destructive behavior, money movement, permission change, external communication, or business domain may improve authoring diagnostics. They are not automatically suitable core fields: - one operation may have several effects depending on arguments and current business state; - industry domains are overlapping and do not map to one universal risk policy; - OpenAPI methods, ACC execution hints, MCP annotations, and future bindings may already carry related metadata with different trust semantics; - if a new runtime upgrades `risk.level` from optional factors while an older runtime ignores them, the compatibility fallback may become less safe. Implementations may experiment with namespaced factors or lint rules. A future proposal must define deterministic behavior, precedence, conservative fallback, and evidence from independent bindings before any factor becomes ACC Core. ### 4.2 Why Guidance Remains In The Capability Contract An agent-facing capability must be selectable as well as governable. `guidance` carries supplemental model-readable selection context, while remaining explicitly non-authoritative and non-security-critical. Bindings must reuse their native schema, description, and example mechanisms wherever those mechanisms already express the API accurately. ACC guidance must not replace request or response schemas, contradict binding-native descriptions, or become authorization policy. Each binding defines the mapping and precedence between native descriptive metadata and supplemental ACC guidance. ## 5. Examples Of The Boundary ### Portable declaration ```yaml approval: when: - param: amount op: ">" value: 10000 ``` The invocation argument and literal threshold are declared in the operation contract. A runtime can evaluate the condition without private business data. ### Business invariant ```text refund amount <= current refundable order balance ``` The current balance is authoritative business state. The business operation must validate it even when the API is called without an agent runtime. ### Trusted subject requirement ```yaml subject: required: true ``` ACC declares that an anonymous or untrusted invocation is not acceptable. It does not standardize whether the subject arrives as a JWT, signed ticket, service principal, or another trusted identity form. ## 6. Why ACC Does Not Standardize A Universal Policy Engine A general policy language would need a type system, expression grammar, authoritative data sources, authorization for data access, freshness rules, deterministic failure semantics, and a sandbox. A partial expression language would make declarations look enforceable while allowing runtimes to interpret them differently. ACC v1 uses bounded, typed conditions over declared invocation arguments. More powerful policy evaluation can be integrated by a runtime under an explicit policy namespace without pretending it is portable ACC behavior. ## 7. Safe Evolution Unknown fields are ignored so newer declarations remain parseable by older runtimes. That rule does not make every new security field backward-compatible. A new field that affects exposure, approval, authorization boundaries, or redaction may enter the same major family only when ignoring it is fail-safe or when the declaration carries a conservative fallback understood by older runtimes. Otherwise it requires a new major contract family or explicit capability negotiation. Examples: - An optional condition-combination hint may be compatible when an older runtime falls back to a more conservative approval decision. - A new redaction field is not safely compatible if an older runtime ignores it and records raw sensitive values; it needs an existing broad sensitivity fallback or a new compatibility boundary. ## 8. How To Propose More Expressive Fields A proposal should include: - the portable problem, with more than one implementation context; - why binding-native standard fields or an implementation extension cannot solve it; - complete field and failure semantics; - interaction and precedence with existing fields; - backward-compatibility and fail-safe analysis; - parser and runtime conformance vectors; - examples that do not depend on one product's private architecture. Features may begin as implementation extensions. Proven, portable, testable semantics can later be proposed for ACC through the process in [CONTRIBUTING.md](CONTRIBUTING.md). --- Source: https://agentcapability.org/docs/implementer-guide/ Repository file: IMPLEMENTER_GUIDE.md --- # ACC Implementer's Guide Status: Non-normative guidance Applies to: ACC v1 This guide helps teams turn ACC declarations into parsers, generators, gateways, policy components, or complete runtimes. It explains implementation patterns without prescribing a product architecture. Normative ACC behavior is defined only by [SPEC.md](SPEC.md), the binding documents, and the versioned schema. If this guide conflicts with those sources, the normative sources win. ## 1. Reading Labels This document uses four labels: - **Normative**: behavior already required or recommended by ACC v1. - **Recommended**: an implementation pattern that commonly produces safe, portable behavior. - **Optional**: useful platform functionality that is not required for ACC compatibility. - **Example**: one possible design. Examples do not define the standard. ACC does not require a particular programming language, database, model provider, UI, deployment topology, tool transport, or approval product. ## 2. Choose an Implementation Profile Before building, choose the claim that matches the component: - **ACC binding parser**: extracts and validates ACC declarations from a named carrier protocol. - **ACC binding generator**: produces a named binding from source code, annotations, or another contract. - **ACC runtime**: applies ACC exposure and invocation semantics. - **ACC policy component**: evaluates a documented subset of ACC governance semantics for another runtime or gateway. The profiles and their minimum evidence are defined in [conformance/PROFILES.md](conformance/PROFILES.md). A component should claim only the profile it actually implements. ## 3. Reference Architecture The following architecture is a reference, not a required topology: ```mermaid flowchart LR A["Binding-native operation + ACC declaration"] --> B["Binding ingestion"] B --> C["Capability registry or adapter"] C --> D["Exposure policy"] D --> E["Agent, gateway, or caller"] E --> F["Pre-invocation governance"] F -->|"approval intent"| G["External approval owner"] G -->|"approved or denied"| F F --> H["Trusted subject and authority bridge"] H --> I["Business operation"] F --> J["Audit and diagnostics"] I --> J ``` | Module | ACC relationship | Implementation freedom | |---|---|---| | Binding ingestion | **Normative** for binding parsers: extract the declaration, validate required fields, preserve the binding-native input schema, and diagnose unsupported versions. | Parser library, build-time compiler, gateway plugin, generated code, or another form. | | Capability registry or adapter | **Recommended**: keep the binding-qualified operation, input schema, ACC metadata, and source location together. | In memory, generated artifact, database, gateway configuration, or no persistent registry. | | Exposure policy | **Normative** for runtimes: apply `enabled`, `scope`, trusted-subject availability, and safe handling of unsupported declarations before exposing a capability. | Route policy, tenant policy, gateway policy, static allowlist, or another documented policy context. | | Caller or selection layer | **Optional**: an LLM function-calling loop is one possible caller, not an ACC requirement. | Agent runtime, deterministic workflow, API gateway, MCP gateway, human-operated tool, or another caller. | | Pre-invocation governance | **Normative** for runtimes: validate arguments, risk, approval intent, execution hints, and sensitive-data handling before business execution. | Inline middleware, policy engine, sidecar, gateway filter, or generated wrapper. | | Approval owner | ACC declares approval intent but does not own the workflow. | Existing business workflow, ticketing system, human-in-the-loop service, or another authority. | | Authority bridge | **Normative boundary**: ACC is not final authorization. The business system must decide whether the trusted acting subject may perform the operation. | Existing session/role model, service authorization API, policy engine, or another business-owned mechanism. | | Execution transport | Outside ACC core. | HTTP, RPC, message queue, local call, MCP transport, or another mechanism. | | Audit and diagnostics | **Normative or recommended** according to ACC fields: preserve capability, governance decision, result/failure summary, and requested redaction. | Database, event stream, logs, tracing backend, or another storage model. | Cost tracking, console UI, routing products, model orchestration, HMAC signatures, queues, and deployment tooling may be valuable, but they are not required by ACC v1. ## 4. Declaration Ingestion Lifecycle **Normative and recommended sequence:** 1. Parse a supported binding and locate its ACC declaration carrier. 2. Validate `version`, `enabled`, and `scope`. 3. Resolve the binding-native input schema and map it to the ACC JSON value model. 4. Validate that every `approval.when.param` resolves to a declared, typed argument. 5. Reject or skip unsupported major versions with diagnostics. 6. Ignore unknown ACC fields safely. 7. Preserve implementation-specific extensions without treating them as security policy. 8. Produce a normalized capability record or equivalent generated artifact. A runtime should keep the original operation identity and source location so diagnostics can point back to the contract authors. For the OpenAPI binding, steps 1 and 3 mean locating operation-level `x-agent-capability` and resolving standard OpenAPI `parameters` plus `requestBody` schemas. Other bindings must define equivalent extraction and mapping under [Binding Requirements](bindings/README.md). **Recommended:** validate publisher authority separately from schema validity. Keep the trusted publisher, binding-qualified operation identity, input-schema revision, and change review together. A digest detects different bytes; it does not authenticate the publisher. See [Safety Governance Responsibilities](SAFETY_GOVERNANCE_GUIDE.md#2-keep-source-data-and-authority-separate) for the ingestion and cache lifecycle boundary. ## 5. Exposure Lifecycle Before a capability becomes visible to an agent or caller: 1. Exclude declarations with `enabled: false` or an empty `scope`. 2. Apply the runtime's documented scope allowlist semantics. 3. If `subject.required` is true, require a trusted acting subject before exposure or invocation. 4. Apply safe risk defaults when `risk.level` is omitted. 5. Preserve the binding-native input schema used for argument generation and validation. 6. Emit diagnostics for skipped or unsupported declarations. For approval evaluation, `approval.required: true` is unconditional. Otherwise, `approval.when` uses ANY semantics: the first or any matching condition is sufficient to create an approval intent. Implementations may evaluate every condition for diagnostics, but a non-matching condition cannot cancel another matching condition. ### Per-Invocation Conditions Do Not Limit Cumulative Effects `approval.when` evaluates one invocation at a time. Consider a refund operation with this condition: ```yaml approval: when: - param: amount op: ">" value: 1000 ``` The condition creates approval intent for one refund above 1000. It does not prevent an agent from proposing 60 separate refunds of 999, and it does not calculate a customer's daily, tenant-wide, or rolling-window total. Do not represent cumulative fraud controls, velocity limits, account balances, or other stateful business invariants as if a per-invocation ACC condition enforced them. Keep those controls in the authoritative business or policy layer, evaluate them against current state, and let that layer reject or escalate the operation even when the individual ACC condition does not match. ACC does not standardize a route object. A runtime may use routes, products, tenants, scenarios, or static policies as its exposure context, provided its matching behavior is documented. ## 6. Invocation Lifecycle The following sequence is suitable for an LLM tool loop, API gateway, deterministic workflow, or another caller: ```text select capability -> validate arguments against the binding-native input schema -> resolve trusted acting subject -> evaluate scope and runtime policy -> evaluate risk and approval intent -> apply timeout/rate-limit policy -> request approval or continue -> invoke the business operation -> let the business system authorize the subject -> record result/failure with redaction -> return a typed result to the caller ``` The model or caller may propose a capability and arguments. It must not determine its own scope, risk, subject trust, approval decision, or audit policy. Machine-readable reference inputs and abstract expected outcomes are published under [conformance/v1](conformance/v1/README.md). They test portable decisions rather than a particular queue, database, hash algorithm, or user interface. ### 6.1 Trust Across Multiple Hops `subject.required: true` distinguishes a capability that needs a trusted acting subject from one that does not. It does not make an arbitrary inbound `subject` field trustworthy, and it does not establish an end-to-end delegation chain. For a chain such as `Agent A -> Runtime B -> Runtime C -> business operation`, every trust boundary must answer separately: - who asserted the subject; - how that assertion was authenticated or verified; - whether delegation to the next hop is allowed; - what capability, arguments, task, audience, and time window the delegation covers; - what happens when verification, freshness, or replay checks fail. A runtime must not upgrade model output or an unverified upstream claim into trusted subject context. Deployments that need cross-hop continuity should use a complementary identity or delegation mechanism and document its binding to ACC capability identity and invocation arguments. ACC compatibility alone is not evidence that the subject at the final hop is the subject authenticated at the first hop. ## 7. Approval Intent Reference Flow ACC declares that approval is required; it does not standardize the workflow owner or persistence model. A portable reference state model is: ```mermaid stateDiagram-v2 [*] --> Pending: approval intent created Pending --> Approved: external authority approves Pending --> Denied: external authority denies Pending --> Expired: policy deadline reached Approved --> Consumed: authorized invocation is accepted Denied --> [*] Expired --> [*] Consumed --> [*] ``` Recommended safety properties: - freeze or hash the capability identity and invocation arguments that were reviewed; - bind the decision to a trusted approver or business authority; - prevent an approval from authorizing different arguments; - make an approval single-use unless the business policy explicitly says otherwise; - record denial, expiry, and execution failure as distinct outcomes. After approval, a runtime may resume a suspended invocation, enqueue a new invocation, or rerun a deterministic snapshot. Those are implementation choices, not ACC semantics. ### 7.1 Traceability And Independently Verifiable Evidence An audit trail written by the same runtime that resolves the subject and enforces approval can provide useful operational traceability inside that runtime's trust domain. It is not independent proof against compromise of that runtime. Where a deployment requires approval evidence that another party can verify, it should bind at least the subject, capability identity, canonical invocation arguments, task or request identity, decision, issuer, and validity context before execution. The deployment must also define: - one canonical byte representation shared by signer and verifier; - signature and key-discovery rules; - freshness and clock assumptions; - nonce, sequence, or other replay protection; - fail-closed behavior when any verification step is unavailable or ambiguous. These details are deliberately not ACC v1 semantics. A deployment may use a separate approval-evidence or delegation protocol, provided it does not present that protocol's guarantees as guarantees of ACC itself. ## 8. Security Invariants and Failure Modes These are specification-derived invariants, not claims about how often a particular implementation fails. | Invariant | Failure mode | Expected protection | |---|---|---| | ACC controls reach; the business system controls authority. | Treating `scope` or `subject.required` as final business permission. | Re-authorize the acting subject inside the business system at call time. | | Governance metadata is trusted contract input, not model output. | Letting generated text lower risk, invent a subject, approve itself, or disable audit. | Keep governance decisions outside the model-controlled payload. | | Subject trust is established at a trust boundary; it does not compose by relabeling an upstream claim. | Treating an inbound subject identifier as proof of end-to-end identity or delegation. | Resolve or verify the subject at each boundary and use a complementary delegation mechanism when continuity across hops is required. | | Approval comparisons are JSON type-aware. | Coercing `"1000"` to `1000` or `"true"` to `true`. | Validate against OpenAPI and use strict JSON equality and numeric rules. | | Unknown fields have no implicit security meaning. | A runtime-specific extension silently bypasses scope, approval, or audit. | Ignore unknown ACC fields or process them only under an explicit non-ACC policy namespace. | | Approval applies to a reviewed invocation. | Approval for one argument set is reused for another. | Bind the decision to capability identity and canonical arguments. | | Runtime audit records are traceability, not automatically independent proof. | The same compromised runtime authors the approval assertion and the evidence used to verify it. | Use externally verifiable, pre-execution evidence when the threat model requires it. | | Sensitive declarations affect observability. | Raw secrets or personal data enter logs, traces, or metric labels. | Redact or summarize before persistence and export. | | Unsupported versions are visible. | A runtime silently interprets a newer declaration using older semantics. | Reject or skip it with diagnostics. | Implementation-specific incidents may be contributed as clearly labeled examples. A single product's internal failure should not be generalized into normative ACC behavior without portable semantics and conformance evidence. **Recommended input separation:** | Input | Use | Boundary | |---|---|---| | Authenticated publisher's governance declaration | Compile validated ACC semantics | Valid schema alone does not establish source trust. | | Tool name, object display name, description, or guidance | Select and understand a capability | Do not derive identity, authorization, or approval from display text. | | Tool result, retrieved document, or file content | Interpret business data | Embedded instructions do not change governance. | | Changed schema/declaration or cached tool | Review changes or reuse valid artifacts | Preserve reviewed arguments and revalidate current target/policy; cache presence is not authorization. | The [governance responsibility map](SAFETY_GOVERNANCE_GUIDE.md#3-responsibility-and-evidence-map) separates these ACC boundaries from task budgets, host isolation, lifecycle controls, and deployment evidence. ## 9. Conformance Mapping | Reference module | Primary checklist sections | |---|---| | Contract ingestion | Parser | | Exposure policy | Exposure, Authority Boundary | | Pre-invocation governance | Governance, Authority Boundary | | Approval integration | Governance, Traceability | | Authority bridge | Authority Boundary | | Audit and diagnostics | Traceability | Use [conformance/PROFILES.md](conformance/PROFILES.md) to select the applicable profile and [conformance/SELF_ASSESSMENT.md](conformance/SELF_ASSESSMENT.md) to publish evidence. ## 10. Registering an Implementation ACC uses open registration and self-assessment, not official certification. 1. Select an implementation profile. 2. Complete the self-assessment template. 3. Publish evidence and known limitations in the implementation repository. 4. Submit a pull request that adds the implementation to [IMPLEMENTATIONS.md](IMPLEMENTATIONS.md). 5. Keep the declared ACC version and evidence current. Registry inclusion means the declaration is complete enough to list. It is not a security audit, production-readiness guarantee, commercial endorsement, or certification. --- Source: https://agentcapability.org/docs/safety-governance/ Repository file: SAFETY_GOVERNANCE_GUIDE.md --- # Safety Governance Responsibilities Status: Non-normative guidance Applies to: ACC v1, specification release 1.0.5 Reference review date: 2026-09-15 [中文](SAFETY_GOVERNANCE_GUIDE.zh-CN.md) ACC describes business capabilities. A valid declaration is a useful input to governance; it is not proof of a trustworthy publisher, authorized execution, or a safe application. This guide helps a gateway, workflow, SDK, or agent runtime divide those responsibilities and choose evidence to test them. Only [SPEC.md](SPEC.md), the [bindings](bindings/README.md), and the versioned schema define ACC semantics. **Normative reference** below points to an existing ACC rule; **Recommended**, **Optional**, and **Example** identify implementation guidance, not new ACC obligations. This document adds no fields, compatibility profile, certification, or jurisdiction-specific condition for using ACC. ## 1. Review One Business Task **Example:** “Update pictures and descriptions for these 100 catalog items; read inventory to check availability; do not change prices or stock.” The catalog and inventory services declare separate capabilities. ACC can describe each capability's scope, risk, required subject, approval intent, and execution/audit hints. The authorized object set, editable fields, total impact, selected service identities, and task stop conditions belong to the runtime and authoritative business policies. An agent's plan or a display name cannot grant those permissions. **Recommended:** review the task with the [catalog and inventory worksheet](examples/BUSINESS_RISK_EXAMPLES.md), then distinguish three artifacts: 1. The declaration and binding-native operation, reviewed by its publisher. 2. The deployment's effective authorization, approval, and task controls. 3. Evidence of the exact implementation and operations actually tested. The [reference-vector coverage index](conformance/v1/COVERAGE.md) explains how little of the third artifact can be inferred from the corpus alone. ## 2. Keep Source, Data, and Authority Separate **Normative references:** [SPEC §§4.5, 4.9, 5](SPEC.md#5-runtime-conformance) establish subject trust, the non-policy nature of guidance, and the prohibition on model text overriding governance. **Recommended implementation boundary:** | Input | Appropriate use | Not established by that input | |---|---|---| | Governance declarations ingested through an authenticated, authorized publisher configuration | Validate and compile the declared semantics against a known operation | Schema validity does not authenticate the publisher or prove the implementation benign. | | Tool names, object display names, descriptions, and `guidance` | Help a caller understand and select capabilities | They are not authorization identities, approval decisions, or executable policy. | | Web pages, files, business text, and other tool results | Data to interpret and results to verify | Embedded instructions do not become trusted governance rules. | | An updated declaration or input schema | Trigger a documented change review and revalidation | An update does not silently authorize changing previously approved arguments or targets. | | Cached or loaded tools | Avoid repeated discovery while the task remains valid | A cache does not establish current permission, subject trust, or operation-version validity. | **Recommended:** keep the publisher identity, binding-qualified operation identity, declaration/input-schema revision, and review history together. A digest can identify changed bytes; it does not identify a trustworthy publisher without an authenticated source. ACC does not define a signature format, trust root, or credential field. **Recommended:** retain valid tools during a long task rather than treating every search as a security reset. Revalidate the trusted target and applicable policy at invocation; invalidate changed or revoked entries according to the implementation's documented lifecycle. A changed description is not permission to repeat an uncertain write. Use the implementation's original-call recovery mechanism; `idempotent` does not create a recovery protocol or a guarantee that a request never reached the business system. ## 3. Responsibility and Evidence Map The following is an interpretive mapping to selected directions in China's [Artificial Intelligence Safety Governance Framework 3.0, published 2026-09-14](https://www.cac.gov.cn/2026-09/14/c_1791137092283345.htm). References to Appendix 2 use its “II. Preventive Measures” item numbers. [Official full text](https://www.cac.gov.cn/rootimages/uploadimg/1791137114683961/1791137114683961.pdf). The framework is a reference for this review, not the exclusive basis of ACC or an ACC certification scheme. The implementation and evidence columns below are **Recommended review patterns**; they do not assert that the referenced framework prescribes ACC or a particular product design. Applicability of laws, sector rules, and deployment duties requires a separate assessment. | Framework direction | Existing ACC reference | Runtime responsibility | Business system responsibility | Host/deployer responsibility | Useful acceptance evidence | Guarantee not established | |---|---|---|---|---|---|---| | Risk review: Appendix 1; Appendix 2, II.1 | §4.4 `risk`; §4.6 per-invocation conditions | Enforce effective risk/approval policy; assess cumulative task effects separately | Review consequences using current business state | Assess application purpose, autonomy, scale, and deployment context | Owner-reviewed worksheet plus boundary and batch tests | An ACC risk value is not an application risk grade. | | Identity and task permissions: II.2 | §§4.2–4.3 `enabled`, `scope`; §4.5 `subject` | Bind selected capabilities to verified subjects and task policy | Reauthorize the actual subject and object at call time | Establish identities, credential lifecycle, and trust across boundaries | Unselected/revoked-target denial; original identity preserved on recovery | A scope or subject identifier is not final permission or end-to-end delegation. | | Human control: II.3 | §4.6 `approval`; §5 | Evaluate intent before invocation; bind review to target and arguments | Own approver authority and business approval rules | Supply the approval service and an unavailable/expired decision policy | Changed arguments rejected; unavailable approval cannot enable dispatch | An approval declaration is not evidence that a person approved. | | Tool and supply-chain review: II.4 | §4.1 version; binding-native schema; §4.9 guidance; §5 | Verify approved artifacts and handle revisions without changing in-flight calls | Publish accurate operation semantics and changes | Maintain source trust, dependency checks, and vulnerability response | Publisher/revision record; altered schema and poisoned-result tests | Valid ACC metadata does not prove tool safety or supply-chain integrity. | | Runtime controls: II.5 | §4.8 execution hints; §4.6 cumulative-effects boundary | Enforce task limits, pause new dispatch, and distinguish in-flight/unknown results | Enforce balances, inventory invariants, concurrency, and supported recovery | Isolate local execution, network access, and task credentials | Concurrent budget tests; pause-before-dispatch; original-call recovery | Frequency hints are not cumulative-impact limits; cancellation is not rollback. | | Monitoring and data handling: II.6 | §4.7 audit; §5 | Record necessary invocation/decision/result evidence with redaction | Identify sensitive business fields and protect result access | Set retention, storage, export, incident, and verification policies | Redacted export, access tests, retention/deletion tests, tamper checks where claimed | A sensitivity hint or runtime log is not full redaction, complete history, or independent proof. | | Decommissioning: II.7 | No ACC lifecycle field; §§4.5, 4.7 remain relevant | Stop new dispatch and retain recoverable original-call associations as appropriate | Revoke relevant grants and resolve accepted operations by business rules | Stop owned processes, revoke credentials, and retain/erase required data | Shutdown/revocation test plus an explicit account of in-flight operations | ACC cannot terminate an unmanaged host process or undo accepted business effects. | ## 4. Review Different Kinds of Risk Separately **Normative reference:** ACC `low`, `medium`, and `high` describe the worst reasonable consequence of automatically initiating an operation under [SPEC §4.4](SPEC.md#44-risk). The framework's five application-level grades use a different assessment scope. There is no unconditional conversion table. **Example:** editing one unpublished product draft is different from autonomously publishing changes to thousands of products. Repeating a single-object operation does not encode aggregate risk into its declaration. [SPEC §4.6](SPEC.md#46-approval) already places cumulative controls in authoritative business or policy layers. **Recommended:** distinguish a long-lived user grant from permission for a particular task. A task may narrow that grant by service, objects, operations, fields, and time. Task termination can end its execution permission while the implementation still permits authorized inspection of an original invocation's result. Neither a task lease nor its serialized format is part of ACC v1. **Optional:** deployments can expose task budgets, a pause control, or independently verifiable evidence. These features need their own concurrency, replay, and failure semantics. A UI label or an invocation ID alone does not establish those guarantees. ## 5. State Claims Precisely **Recommended:** publish the ACC release, implementation revision or package hash, claimed [profile](conformance/PROFILES.md), test entrypoint, observed outcomes, and untested areas using the [self-assessment template](conformance/SELF_ASSESSMENT.md). Passing the declaration validator or reference oracle does not test a production runtime. Framework alignment does not establish legal compliance, certification, official endorsement, or independent adoption. Evidence about one runtime does not transfer to every ACC implementation. Data residency, retention periods, content labeling, model safety, local sandboxing, and sector-specific approval remain deployment or complementary-system concerns. ACC's audit hint does not require uploading every conversational attachment or retaining private model reasoning. Define the necessary business evidence, visible conversation records, and reusable files separately for the actual purpose and applicable rules. --- Source: https://agentcapability.org/docs/business-risk-examples/ Repository file: examples/BUSINESS_RISK_EXAMPLES.md --- # Catalog and Inventory Risk Worksheet Status: Non-normative examples Applies to: ACC v1, specification release 1.0.5 [中文](BUSINESS_RISK_EXAMPLES.zh-CN.md) These synthetic OpenAPI services illustrate reviewed business assumptions. They are not a universal retail risk rating, implemented services, or evidence of cross-system execution. A real business owner needs to review its own data, consequences, permissions, and approval policy before adapting them. HTTP verbs and names alone do not decide risk. - [Catalog service](openapi-catalog-service.yaml): edit a draft, publish a product, change price. - [Inventory service](openapi-inventory-service.yaml): read stock, adjust stock. - [Governance responsibility guide](../SAFETY_GOVERNANCE_GUIDE.md): ACC, runtime, business, and deployment boundaries. ## Example Business Assumptions One catalog tenant uses a fixed currency. All operations require a trusted subject, and the business system independently checks that subject's current access. The draft operation cannot affect a published product or change price/stock. The publication and stock-adjustment operations always require approval. Price editing uses an illustrative absolute-price condition alongside authoritative discount and margin policies; high ACC risk does not by itself define one universal approval workflow. The example server descriptions state obligations of a hypothetical implementation. The YAML does not enforce them. Object IDs are scoped to their respective service and tenant; matching names or IDs never link authority across systems. Synthetic values and unauthenticated placeholders are unnecessary: neither example includes credentials or a live server URL. ## Reviewed Operation Choices Every cell below is an **Example**, not a new ACC requirement. “Reviewer” names a business role that a real adoption should assign to a responsible person. | Operation and object | Reasonable single-operation worst consequence; external effect | ACC choice | Subject and final authority | Autonomy and batch context | Parameter and cumulative controls outside ACC | Recovery assumptions | Reviewer | |---|---|---|---|---|---|---|---| | `editProductDraft`: one unpublished product | Corrupt draft text/pictures and create rework; not publicly visible | `medium`; trusted subject; no unconditional ACC approval | Verified editor; catalog authorizes tenant/product and draft state | Allowed editing within a selected task; 100 edits are a separate cumulative review | Editable fields, URL policy, object set, stale-version check; count unique affected products and attempted changes under documented task policy | A business snapshot may restore a draft after version/conflict checks; not automatic rollback | Catalog owner | | `publishProduct`: one draft and channel | Incorrect product becomes public and may be purchased | `high`; `approval.required: true` | Verified publisher; business checks approver, channel and eligibility | Human review before each invocation in this example; task approval cannot bypass it | Frozen target/channel/version; separate limits for batch publication | Taking offline limits future effects; it does not reverse purchases or prior exposure | Merchandising owner | | `changeProductPrice`: one product | Financial loss or incorrect public pricing | `high`; `price_minor > 100000` creates conditional intent | Verified pricing subject; pricing authority checks current price, margin and discounts | Separate pricing task; forbidden in the 100-item content task below | Integer minor units; server-derived reduction; object/version checks; accumulated price exposure evaluated from business state | Restore price only after a new authorized, version-aware decision; prior purchases remain | Pricing owner | | `getStock`: one warehouse/SKU | Reveal commercially sensitive inventory; no business mutation | `low`; `readonly: true`; `audit.sensitive: true` | Verified reader; inventory system authorizes tenant/warehouse | Read within selected warehouses; repeated reads do not grant enumeration rights | Per-object access, result minimization, query volume and export policies | Re-read if authorized; the result can legitimately change | Inventory data owner | | `adjustStock`: one warehouse/SKU | Oversell or misstate availability, affecting orders and fulfillment | `high`; unconditional approval even when delta conditions do not match | Verified operator; inventory system checks approver and stock rules | Human review for each adjustment; separate from a read-only inventory task | Nonzero integer delta; reservations/nonnegative stock; expected version; cumulative adjustments | A repeated delta is unsafe. Reconcile the original operation; a compensating adjustment requires current-state review | Warehouse operations owner | ### Approval and Parameter Details **Normative reference:** [SPEC §4.6](../SPEC.md#46-approval). - `approval.required: true` is unconditional. The stock adjustment with `delta: 1` still creates approval intent; the additional conditions cannot waive it. - When `required` is false or omitted, any matching condition creates intent. In this price example, `100001` matches and `100000` does not; these are integer minor units, not display-currency amounts. Neither outcome overrides business authorization, discount review, or stricter runtime policy. - A string such as `"100001"` is invalid against the integer input. Do not coerce it or silently call the condition unmatched. - The price API does not accept a model-supplied discount percentage as authority. The server computes reductions using its current price. A per-call price threshold neither measures that reduction nor limits the sum of many calls. - Arguments stay in OpenAPI `parameters` and `requestBody`, not in ACC. `expected_version` is an example business input, not an ACC field or proof that a server implements concurrency control. All example writes declare `idempotent: false`: this contract does not promise safe retries. A stable runtime invocation ID, an HTTP method, or an expected-version field alone does not provide business idempotence. If a write may have reached the server, use the original execution association to obtain authoritative status before deciding any next operation. The read is retryable with the same arguments, although observed stock can change. ## A Task That Uses Two Systems **Example task:** “Update pictures and descriptions for these 100 unpublished products; read inventory to check availability; do not change prices or stock.” **Recommended implementation worksheet**, kept outside `x-agent-capability`: | Task item | Decision to establish before execution | Evidence to inspect | |---|---|---| | Original targets | Selected catalog and inventory identities, trusted subject and tenant for each; a reviewed SKU mapping if needed | No requests to unselected systems; a repeated identifier cannot select a different target | | Permitted work | Catalog draft text/picture edits and inventory reads; explicit product/warehouse set | A price edit, stock adjustment, published-product edit, or out-of-set object is rejected | | Batch and concurrency | Define whether budgets count objects, calls, mutations, and failures; reserve atomically before dispatch | Parallel requests cannot exceed the chosen budget; original-call recovery cannot reset or double-charge it | | Human control | Preview task boundaries; retain original per-operation approvals; pause new dispatch on an unexpected expansion | Pausing stops new calls but accurately reports accepted, pending, failed, and unknown operations | | Completion and recovery | Keep original target and execution references; report partial success | Unknown writes are reconciled, not silently repeated under another target | | Evidence and data | Retain necessary decision/result records with redaction; separate conversation and file-storage policies | Credentials do not enter logs; a useful image URL does not require archiving every chat attachment | No `task_budget`, `autonomy_level`, or object-allowlist field is added to ACC by this worksheet. The two declarations do not implement a transaction spanning systems or guarantee rollback. For existing semantic coverage and missing implementation tests, see [COVERAGE.md](../conformance/v1/COVERAGE.md). ## Validate the Declarations From a source checkout with dependencies installed: ```bash node bin/acc-validate.mjs examples/openapi-catalog-service.yaml node bin/acc-validate.mjs examples/openapi-inventory-service.yaml npm run check ``` The authoring validator checks ACC extraction and declaration/condition diagnostics; it is not a complete OpenAPI validator or a business integration test. The repository examples are not automatically included in the current npm package's explicit file list. --- Source: https://agentcapability.org/docs/governance/ Repository file: GOVERNANCE.md --- # Governance ACC is maintained as an open contract, not as a product-private configuration format. ## Stewardship ACC v1 was developed from A2B engineering work, including early implementation experience in the BailingHub project. It is maintained as an implementation-neutral open contract. The long-term goal is to keep ACC implementation-neutral: - A2B is the category: agents safely doing business work through existing systems. - ACC is the capability contract for A2B. - Any compatible runtime may implement ACC independently. - The ACC specification should not depend on any implementation's internal database tables, UI concepts, or deployment model. ## Maintainer Neutrality Invariants ACC is an independent standard. It is not a subproject, configuration format, sales surface, or compatibility layer owned by any product implementation. Maintainers MUST preserve the following boundaries: - normative behavior is defined by ACC specification artifacts, not by any implementation's current code; - no product receives privileged semantics, registry criteria, roadmap influence, or compatibility status because of its owner or relationship with maintainers; - implementation names appear only in clearly labeled examples, evidence, or registry entries; - an implementation-specific design may motivate discussion, but it becomes ACC behavior only when it is portable, testable, and accepted through the contract change process; - examples and implementer guidance must distinguish normative requirements from recommended, optional, and example architecture; - ACC governance, versioning, and licensing must remain usable by independent open-source and commercial implementations; - registry inclusion does not imply certification, endorsement, partnership, security review, or production-readiness approval. Implementation history does not grant control over ACC and does not make the contract dependent on any implementation. ## Versioning ACC uses semantic versioning for the specification. - Patch: wording clarifications, examples, schema bug fixes that do not change meaning. - Minor: new optional fields, new examples, or new non-breaking behavior. - Major: required behavior changes, field meaning changes, or incompatible schema changes. The OpenAPI binding uses: ```yaml x-agent-capability: version: 1 ``` The `version` field is an ACC schema version, not an implementation or product version. Repository tags identify exact specification revisions: - `v1.0.x`: wording, guidance, examples, schema corrections, and non-breaking clarifications for ACC v1; - `v1.x.0`: new optional, portable, non-breaking ACC v1 behavior; - `v2.0.0`: an incompatible contract family that also requires declaration `version: 2`. Product versions and implementation release schedules MUST NOT be reused as ACC specification versions. ## Extension Rules ACC core fields should remain small and stable. Add a new core field only when: - it affects runtime governance; - the effect is portable across runtimes; - it can be tested by conformance checks; - it cannot be expressed cleanly with binding-native standard fields or schemas across the target bindings; - it does not require the ACC runtime to understand business-specific authorization logic. Business-specific metadata should use: - binding-native standard fields where possible; - `guidance.context` for lightweight context tags; - binding-specific business metadata, such as OpenAPI operation-level `x-business-*` fields; - runtime-specific extension fields for non-portable behavior. Unknown ACC fields must be ignored by compliant runtimes unless standardized later. Unknown-field tolerance guarantees that a newer declaration remains parseable. It does not by itself guarantee that ignoring a new security field is safe. A field that affects exposure, approval, authority boundaries, or redaction may be added within the same major family only when: - an older runtime ignoring it produces an equally safe or more conservative outcome; or - the declaration includes a conservative fallback already understood by that major family. Otherwise the change requires a new major contract family or an explicit capability-negotiation mechanism. ## Proposal Decisions The core-field tests are necessary, not sufficient. Passing them makes a proposal eligible for review; it does not automatically place the proposal in ACC core or on a release roadmap. Normative proposals are reviewed for: - demonstrated need across independent implementation contexts; - minimality and correct layer ownership; - complete normative semantics, including defaults, precedence, and failure behavior; - fail-safe compatibility or an explicit compatibility boundary; - implementation evidence and machine-readable conformance vectors; - ecosystem complexity and long-term maintenance cost. Proposal states and submission requirements are defined in [proposals/README.md](proposals/README.md). Accepted proposals still ship only through the normal versioning and release process. ## Implementations ACC implementations may include runtime features that are not part of ACC. When an implementation feature becomes generally useful as a portable declaration, it can be proposed for ACC only after the contract boundary is clear. Implementations register through public self-assessment evidence under the same criteria. The registration process is defined in [conformance/SELF_ASSESSMENT.md](conformance/SELF_ASSESSMENT.md). ## Implementation Evidence Observed implementation failures can improve guidance, but evidence must be labeled accurately: - specification-derived invariants may be documented immediately; - experience from one implementation must be labeled as an example, not an ecosystem-wide pattern; - normative changes require portable semantics and conformance evidence; - an implementation's operational modules, workflow, storage, transport, and UI remain outside ACC unless separately standardized. ## Release Planning Public milestones should communicate planned contract and documentation work. Release timing must not be coupled to a product release schedule. Documentation-only guidance and non-normative examples may ship in patch releases. New optional normative behavior requires a minor release; incompatible semantics require a major release. ## Attribution Projects implementing ACC may cite the historical source as: ```text ACC (Agent Capability Contract), first published by the BailingHub project. ``` Implementations may say: ```text Implements the ACC v1 Runtime Profile. ``` They may not imply official certification unless a certification program exists. --- Source: https://agentcapability.org/docs/contributing/ Repository file: CONTRIBUTING.md --- # Contributing ACC is a contract. Changes should prioritize compatibility, clarity, and implementation neutrality. Normative field or behavior proposals should follow the public process in [proposals/README.md](proposals/README.md) and begin from [proposals/TEMPLATE.md](proposals/TEMPLATE.md). ## What Belongs In ACC Good candidates: - portable governance fields; - behavior that can be implemented by multiple runtimes; - behavior that can be tested by a conformance checklist; - clarifications that make implementations more consistent; - examples that teach safe integration patterns. Poor candidates: - implementation-specific table names, console UI fields, or deployment assumptions; - business-specific approval workflows; - provider-specific model behavior; - fields that duplicate binding-native request or response schemas; - fields that silently change security behavior without testable semantics. ## Change Process For wording and examples: 1. Update the relevant markdown file. 2. Keep terminology consistent with `SPEC.md`. 3. Add or adjust an example if the change affects implementers. For schema or normative behavior: 1. Submit a proposal that explains the portable problem and why existing fields cannot solve it. 2. Complete layer-boundary, compatibility, security, and implementation-evidence review. 3. After acceptance, update `SPEC.md`. 4. Update `schemas/acc.v1.schema.json` if the field is machine-readable. 5. Add conformance notes. 6. Add an example. 7. Add a `CHANGELOG.md` entry. 8. Add machine-readable conformance vectors for portable parser or runtime behavior. Submitting a proposal does not place it on the roadmap. Proposal authors may provide a self-assessment, but status is recorded through public governance review with rationale. ## Neutrality Review Every contract, guidance, example, conformance, and registry change should answer: 1. Does this text work for an implementation with a different language, owner, architecture, storage model, and deployment topology? 2. Is every product-specific concept clearly labeled as an example rather than ACC behavior? 3. Are normative requirements separated from recommendations and optional platform features? 4. Can the behavior be tested without depending on one implementation's private state or UI? 5. Does the change preserve the boundary between ACC reach and business-system authority? 6. Would the same registry and contribution criteria apply to an unrelated implementation? A proposal that fails this review belongs in implementation documentation, not ACC core. ## Compatibility Rule ACC v1 should remain backward-compatible. Do not change the meaning of an existing field in a patch or minor release. Add optional fields instead. An optional field is not safely backward-compatible merely because an older parser ignores it. If the field affects exposure, approval, authority boundaries, or redaction, the proposal must show that ignoring it is fail-safe or provide a conservative fallback understood by older ACC v1 runtimes. Otherwise propose a new major compatibility family. ## Language Use "agent" for the actor that may call a business capability. Use "model" only when specifically discussing model selection, model output, or model-readable guidance. Use implementation names only when discussing a concrete implementation, not when defining ACC itself. --- Source: https://agentcapability.org/docs/implementations/ Repository file: IMPLEMENTATIONS.md --- # ACC Implementations This document is an open registry of projects that publicly declare ACC support. The registry is implementation-neutral. Entries are ordered alphabetically and evaluated under the same evidence rules regardless of language, architecture, owner, commercial model, or relationship with ACC maintainers. Registry inclusion is not official certification, a security audit, production-readiness endorsement, partnership, or commercial recommendation. ## Registered Implementations | Project | Profile | ACC version | Status | Last assessed | Evidence | Notes | |---|---|---|---|---|---|---| | [BailingHub](https://github.com/bailinghub/bailinghub) | Runtime | v1 | Self-declared | 2026-07-11 | [ACC implementation](https://github.com/bailinghub/bailinghub/blob/main/docs/TOOLS_MODEL.md) | First public implementation used to validate the initial contract; its product architecture does not define ACC semantics. | ## Register an Implementation Projects are welcome to register through a pull request: 1. choose a claim from [conformance/PROFILES.md](conformance/PROFILES.md); 2. publish a dated self-assessment using [conformance/SELF_ASSESSMENT.md](conformance/SELF_ASSESSMENT.md); 3. provide public evidence and known limitations; 4. add one alphabetically ordered row to the registry table. Maintainers verify submission completeness, evidence reachability, claim scope, and neutral wording. They do not certify the implementation's security or production readiness. ## Available Profiles | Profile | Meaning | |---|---| | ACC binding parser | Extracts and validates ACC declarations from a named binding, such as OpenAPI `x-agent-capability`. | | ACC binding generator | Produces a named ACC binding while keeping business parameters in the carrier protocol's standard schemas. | | ACC runtime | Applies exposure, governance, authority-boundary, and traceability semantics. | | ACC policy component | Enforces a named subset of ACC semantics for another runtime or gateway. | An implementation may support only part of the lifecycle and still be useful, as long as its profile and limitations are explicit. Recommended claim language: ```text Implements the ACC v1 Runtime Profile. ``` Avoid: ```text ACC certified. Official ACC implementation. ``` --- Source: https://agentcapability.org/docs/bindings/ Repository file: bindings/README.md --- # ACC Binding Requirements Status: Normative requirements for ACC v1 bindings ACC Core defines the portable declaration object and its governance semantics. A binding defines how that object is carried by, resolved from, and validated against another protocol or interface description. OpenAPI is the first standardized ACC v1 binding. It is not part of the identity of ACC Core, and future bindings MUST NOT redefine core field meaning. ## 1. Core And Binding Responsibilities ACC Core defines: - the `version`, `enabled`, `scope`, `risk`, `subject`, `approval`, `audit`, `execution`, and `guidance` fields; - field defaults, precedence, failure behavior, and compatibility rules; - the JSON value model used by portable approval-condition evaluation; - runtime invariants that do not depend on one carrier protocol. Each binding defines: - the carrier object and placement of the ACC declaration; - the operation granularity and stable operation reference used by the binding; - how native input schemas and invocation values map to the ACC JSON value model; - how `approval.when.param` paths resolve against native input definitions; - how native descriptions, examples, lifecycle markers, and behavioral annotations interact with ACC metadata; - extraction, validation, unsupported-version, and diagnostic behavior; - binding-specific parser or generator conformance evidence. When a carrier protocol provides standard schema or description mechanisms, bindings MUST reuse them. Bindings MUST NOT turn ACC into a duplicate request or response schema language. ## 2. Validated Capability Artifact A binding parser produces or supplies the equivalent of a validated capability artifact containing: - the ACC declaration object; - a binding-qualified operation reference; - the bound input schema needed for argument validation and condition resolution; - the binding name and supported binding version; - diagnostics produced during extraction and validation. This is a conceptual interface, not a required storage format or wire object. Implementations MAY represent it with generated code, an in-memory model, a gateway route, or another equivalent structure. A core runtime MAY consume this validated artifact without implementing the source binding itself. A runtime that also parses a binding MUST satisfy both the core runtime requirements and the applicable binding profile. ## 3. Input And Value Mapping ACC condition evaluation uses JSON types and strict JSON equality. A binding MUST define a deterministic mapping from its native input model to: - object; - array; - string; - finite number; - boolean; - null. If a native type, field-presence rule, reference, or numeric value cannot be represented faithfully, the binding MUST reject or skip the affected declaration with diagnostics. It MUST NOT silently coerce values in a way that changes approval-condition outcomes. The binding MUST define whether parameter paths address a combined argument object, separate parameter locations, or another normalized input view. Two conforming implementations of the same binding MUST resolve the same path to the same declared input. ## 4. Native Metadata And Precedence A binding MUST document every mapping between ACC and semantically related native metadata. - Native request and response schemas remain authoritative for API shape. - Native restrictions MUST NOT be weakened by ACC metadata. - Agent-specific `guidance` MAY supplement native descriptions, but MUST NOT replace a declared input or output schema. - Native behavioral annotations MAY be mapped into ACC only when the binding defines trust, precedence, defaults, and conservative failure behavior. - Unknown native or ACC extension fields MUST NOT silently change exposure, risk, subject, approval, audit, or execution behavior. Bindings MUST NOT infer final business authorization from carrier-protocol metadata. ## 5. Exposure And Failure Every binding MUST preserve these core outcomes: - `enabled: false` is never exposed as an agent-callable capability; - an empty or missing `scope` is invalid for exposure; - unsupported ACC major versions are rejected or skipped with diagnostics; - insufficient input schema for safe invocation causes the operation to be skipped or rejected; - binding extraction failure never creates a less-governed fallback tool. A binding MAY define additional conservative rejection conditions required by its native protocol. It MUST NOT redefine the meaning of an existing ACC core field. ## 6. Binding Conformance A binding specification MUST provide: - at least one minimal valid declaration; - placement and extraction examples; - native type and parameter-path mapping rules; - malformed, unsupported-version, unresolved-reference, and insufficient-schema outcomes; - machine-readable parser vectors before a stable compatibility claim; - claim language that names the binding and version. The current OpenAPI mapping is defined in [OpenAPI Binding](openapi.md). --- Source: https://agentcapability.org/docs/openapi-binding/ Repository file: bindings/openapi.md --- # OpenAPI Binding Status: Normative ACC v1 binding Applies to: OpenAPI operation objects carrying ACC v1 declarations This binding conforms to the common [ACC Binding Requirements](README.md). It defines carrier-specific placement, extraction, input mapping, and parser behavior; it does not redefine ACC Core fields. ACC v1 is bound to OpenAPI through the operation-level extension field: ```yaml x-agent-capability: version: 1 enabled: true scope: order.read ``` ## Placement The extension MUST be placed on an OpenAPI operation object. ```yaml paths: /orders/{id}: get: operationId: order_get summary: Query one order by ID. x-agent-capability: version: 1 enabled: true scope: order.read ``` The extension SHOULD NOT be placed at the root, path item, schema, parameter, or response level. ## Extraction And Exposure An OpenAPI operation is ACC-declared when its operation object contains `x-agent-capability`. The parser MUST extract the extension value as the ACC declaration object and retain a binding-qualified reference to the source operation. An operation is eligible for exposure only when: - `x-agent-capability.enabled` is `true`; - `x-agent-capability.scope` is present and non-empty; - the runtime's route or policy allows that scope; - the OpenAPI operation provides enough parameter or request-body schema for safe invocation. Malformed extension values, unsupported ACC major versions, and insufficient input schemas MUST be rejected or skipped with diagnostics. A parser MUST NOT fall back to exposing the same operation as an ungoverned tool. ## What Belongs In OpenAPI Keep standard API shape in standard OpenAPI fields: - path and method; - `operationId`; - `summary` and `description`; - `parameters`; - `requestBody`; - `responses`; - standard JSON Schema definitions. ACC does not replace OpenAPI. ## Input And Value Mapping The bound input view consists of the operation's resolved standard OpenAPI `parameters` and `requestBody` schema. Implementations MUST declare which OpenAPI versions they support and MUST apply their documented `$ref` resolution behavior consistently. `approval.when.param` MUST resolve to a declared input in that bound view. Nested paths use the ACC dot-notation rules from the core specification. If parameters from different OpenAPI locations would produce an ambiguous normalized path, the parser MUST reject the affected condition with diagnostics rather than choose one silently. OpenAPI and JSON Schema string, number, integer, boolean, array, object, and null values map to the corresponding ACC JSON value types. Comparison behavior remains strict and type-aware as defined by ACC Core. An unresolved reference, unsupported schema construct, non-finite numeric value, or invocation value incompatible with the declared schema MUST NOT be silently coerced into a value that changes an approval outcome. For the ACC risk default, an OpenAPI `GET` operation is treated as the binding-native readonly signal when `execution.readonly` and `risk.level` are both omitted. An explicit `execution.readonly` or `risk.level` declaration takes precedence. Other operations not declared readonly default to `medium` risk under ACC Core. ## What Belongs In ACC Place agent governance metadata in `x-agent-capability`: - exposure switch; - scope; - risk; - subject requirement; - approval intent; - audit sensitivity; - execution hints; - agent guidance. `guidance` is supplemental agent-selection metadata: - `guidance.when_to_use` MAY add agent-specific selection context that is not already clear from `summary` or `description`; - `guidance.returns` MUST NOT replace or contradict standard OpenAPI `responses` schemas; - `guidance.examples` MUST NOT replace standard parameter, request-body, or schema examples; - OpenAPI schema remains authoritative for request and response shape; - no guidance field is authorization or security policy. ## Extension Bags Business-specific metadata should not be added as new ACC core fields unless it has portable governance meaning. Use operation-level extensions such as: ```yaml x-business-owner: trade-team x-business-policy: approval_scene: order_over_limit ``` ACC-compatible runtimes may preserve these fields, but must not silently treat them as security rules. ## Minimal Valid Declaration ```yaml x-agent-capability: version: 1 enabled: true scope: member.read ``` Runtimes should apply safe defaults for omitted fields. ## Recommended Declaration ```yaml x-agent-capability: version: 1 enabled: true scope: member.read risk: level: low subject: required: true execution: readonly: true idempotent: true guidance: when_to_use: Use when the user asks for a member profile. returns: Returns member name, level, tags, and last visit time. ``` ## Write Operation Example ```yaml x-agent-capability: version: 1 enabled: true scope: refund.request.create risk: level: medium subject: required: true approval: when: - param: amount op: ">" value: 1000 label: Refund amount exceeds 1000. audit: sensitive: true execution: readonly: false idempotent: false ``` `approval.when` uses ANY semantics: when `approval.required` is false or omitted, any matching item creates an approval intent. `approval.required: true` remains unconditional and cannot be reduced by `approval.when`. ## OpenAPI Parser Conformance An implementation claiming the ACC v1 OpenAPI Binding Parser Profile MUST: - read `x-agent-capability` only from OpenAPI operation objects; - validate required ACC fields and supported major versions; - preserve the resolved OpenAPI input schema needed for invocation validation; - resolve `approval.when.param` against declared operation inputs; - preserve unknown ACC and operation-level extension metadata without assigning it implicit security meaning; - emit diagnostics for malformed declarations, unresolved parameter targets, unsupported schema constructs, and skipped operations. The implementation SHOULD run the OpenAPI-oriented vectors in [../conformance/v1](../conformance/v1/README.md) and publish the supported OpenAPI versions in its self-assessment. ## Non-Goals The OpenAPI binding does not define: - how a runtime signs tool calls; - where approval is completed; - how subjects are encoded; - how route allowlists are stored; - how audit records are persisted. Those are runtime concerns. ACC defines the declaration, not the whole control plane. The reasoning behind these boundaries is documented in [Design Rationale And Boundaries](../DESIGN_RATIONALE.md). --- Source: https://agentcapability.org/docs/conformance/ Repository file: conformance/README.md --- # ACC Conformance Checklist This checklist records ACC v1 OpenAPI Binding and core runtime responsibilities. Before making a compatibility claim, select the applicable binding Parser, binding Generator, Runtime, or Policy Component profile in [PROFILES.md](PROFILES.md). Use [SELF_ASSESSMENT.md](SELF_ASSESSMENT.md) to publish evidence and register an implementation. ACC currently uses self-assessment, not official certification. OpenAPI parser implementations normally complete the Parser section. Runtime implementations complete every applicable section for the bindings they support. Generator and Policy Component requirements are defined in their profiles because they do not own the full runtime lifecycle. ## OpenAPI Binding Parser - [ ] Reads `x-agent-capability` from OpenAPI operation objects. - [ ] Requires `version`, `enabled`, and `scope`. - [ ] Skips or reports unsupported `version` values. - [ ] Preserves OpenAPI `parameters` and `requestBody` schemas. - [ ] Ignores unknown ACC fields safely. - [ ] Preserves implementation-specific extensions without treating them as security policy. ## Exposure - [ ] Does not expose operations with `enabled: false`. - [ ] Does not expose operations without a non-empty `scope`. - [ ] Applies route or policy allowlists using `scope`. - [ ] Hides `subject.required` capabilities when no trusted acting subject exists. - [ ] Provides diagnostics for skipped operations. ## Governance - [ ] Applies safe risk defaults. - [ ] Detects `risk.level: high` before invocation. - [ ] Detects `approval.required` before invocation. - [ ] Treats `approval.required: true` as unconditional approval intent. - [ ] Evaluates `approval.when` with ANY semantics when unconditional approval is not required. - [ ] Treats an absent or empty `approval.when` as no conditional approval intent. - [ ] Requires every `approval.when.param` to resolve to a declared, typed input in the bound OpenAPI operation. - [ ] Uses strict JSON type-aware comparison for approval conditions; does not coerce strings into numbers or booleans. - [ ] Rejects a condition parameter whose invocation value is incompatible with its declared schema before calling the business operation. - [ ] Applies `execution.rate_limit` or maps it to runtime limits. - [ ] Applies `execution.timeout_ms` or maps it to runtime timeout policy. - [ ] Treats `audit.sensitive` as a redaction or summarization hint. ## Authority Boundary - [ ] Does not treat ACC as final business authorization. - [ ] Propagates or requires a trusted acting subject when `subject.required` is true. - [ ] Lets the business system decide whether the subject may perform the operation. - [ ] Does not allow model-generated text to override scope, risk, approval, subject, or audit decisions. ## Traceability - [ ] Records which ACC capability was exposed. - [ ] Records risk and approval decisions. - [ ] Records invocation result or failure summary. - [ ] Redacts sensitive values when requested. Machine-readable ACC v1 inputs and abstract expected outcomes are available in [v1/README.md](v1/README.md). They complement this checklist; they do not create an official certification program. ## Claim Language Recommended wording: ```text This project implements the ACC v1 OpenAPI Binding Parser Profile. ``` Avoid: ```text This project is officially ACC certified. ``` There is no certification program until one is explicitly published by the ACC maintainers. --- Source: https://agentcapability.org/docs/conformance-profiles/ Repository file: conformance/PROFILES.md --- # ACC Conformance Profiles Status: Non-normative claim framework Applies to: ACC v1 Profiles let implementations make precise compatibility claims without pretending that every parser, generator, gateway, and runtime has the same responsibilities. Profiles do not add semantics to ACC; they group existing requirements from [../SPEC.md](../SPEC.md) and [README.md](README.md). ## 1. Claim Format Recommended public wording: ```text Implements the ACC v1 OpenAPI Binding Parser Profile. Implements the ACC v1 OpenAPI Binding Generator Profile. Implements the ACC v1 Runtime Profile. Implements the ACC v1 Policy Component Profile for: risk, approval, audit. ``` An implementation should include: - the ACC major version; - the claimed profile; - a dated self-assessment; - evidence links; - unsupported optional fields or known limitations. Parser and generator claims MUST name their binding. Future bindings define their own extraction, native-schema mapping, and binding-specific evidence under [Binding Requirements](../bindings/README.md). Do not use `ACC certified` or imply review by an independent certification body. ## 2. OpenAPI Binding Parser Profile For libraries or tools that read ACC declarations from OpenAPI operations. Minimum behavior: - reads `x-agent-capability` from OpenAPI operation objects; - validates required fields and supported versions; - preserves standard OpenAPI parameter and request-body schemas; - validates typed `approval.when` references when that field is supported; - ignores unknown ACC fields safely; - preserves non-ACC extensions without giving them implicit security meaning; - emits diagnostics for invalid or unsupported declarations. A parser does not claim to enforce runtime governance. ## 3. OpenAPI Binding Generator Profile For SDKs, annotations, code generators, or authoring tools that produce ACC declarations. Minimum behavior: - emits declarations that validate against the ACC v1 schema; - emits `version`, `enabled`, and a non-empty `scope`; - keeps business parameters in standard OpenAPI schemas; - emits typed parameters for every generated `approval.when.param`; - preserves strict JSON value types in generated conditions; - does not generate unknown fields that silently change ACC security behavior; - identifies the ACC version used by generated artifacts. A generator does not claim that a downstream runtime enforces the generated metadata. ## 4. Runtime Profile For runtimes, control planes, or gateways that expose and invoke ACC-declared capabilities. Minimum behavior: - satisfies an applicable binding Parser Profile or consumes an equivalent validated capability artifact; - applies exposure semantics for `enabled`, `scope`, and trusted-subject availability; - applies safe risk defaults; - evaluates `approval.required` and `approval.when` before invocation; - validates arguments against the binding-native input schema without implicit coercion that changes ACC JSON values; - maps timeout and rate-limit hints to documented runtime policy; - preserves the boundary between capability reach and final business authorization; - prevents model-controlled input from overriding governance metadata; - records capability, governance decision, result/failure summary, and requested redaction; - emits diagnostics for skipped or unsupported declarations; - evaluates `approval.when` with ANY semantics and keeps unconditional `approval.required` dominant. The Runtime Profile does not require an LLM, UI, database, queue, signature algorithm, cost system, or approval product. ## 5. Policy Component Profile For components that evaluate a documented subset of ACC on behalf of another runtime, such as a gateway plugin or policy engine. The claim must name every supported area, for example: ```text Implements the ACC v1 Policy Component Profile for risk, approval, and audit. ``` Minimum behavior: - documents which ACC fields it consumes and which component supplies the remaining lifecycle; - follows the same field semantics and type rules as ACC v1; - fails safely when required context is missing; - does not claim full Runtime Profile compatibility; - publishes integration evidence showing where its decision is enforced. ## 6. Evidence Levels Self-assessments may provide: | Evidence | Meaning | |---|---| | Documentation | Public explanation of supported fields and limitations. | | Examples | Reproducible ACC inputs and resulting artifacts or decisions. | | Tests | Automated tests linked to checklist items. | | Interoperability | Evidence that declarations produced or consumed by another implementation behave consistently. | Evidence depth may vary, but unsupported behavior must not be hidden. Machine-readable reference vectors under [v1](v1/README.md) may be used as reproducible evidence. A result should identify the corpus specification release, applicable vectors, implementation version or commit, skipped vectors, and known limitations. ## 7. Version Maintenance A profile claim applies only to the named ACC version. Implementations should reassess when ACC adds normative behavior that affects the profile and should update or remove stale registry entries. --- Source: https://agentcapability.org/docs/self-assessment/ Repository file: conformance/SELF_ASSESSMENT.md --- # ACC Implementation Registration and Self-Assessment Status: Non-normative process Applies to: ACC v1 ACC uses open registration backed by self-assessment evidence. It does not currently operate a certification program. ## 1. Registration Process 1. Choose a profile from [PROFILES.md](PROFILES.md). 2. Copy the template below into the implementation's public repository. 3. Complete the applicable checks in [README.md](README.md). 4. Link documentation, examples, tests, and known limitations. 5. Submit a pull request updating [../IMPLEMENTATIONS.md](../IMPLEMENTATIONS.md). 6. Reassess when the claimed ACC version or implementation behavior changes. Maintainers review whether the submission is complete, accurately scoped, publicly verifiable, and neutrally worded. Registry inclusion is not a security audit, production-readiness guarantee, endorsement, partnership, or official certification. ## 2. Self-Assessment Template ```markdown # ACC Self-Assessment - Project: - Public repository: - Maintainer: - Assessment date: YYYY-MM-DD - ACC version: v1 - Claimed profile: Binding Parser / Binding Generator / Runtime / Policy Component - Binding and binding version: - Implementation version or commit: - Distributed package SHA-256, if applicable: - License: ## Supported Surface - Supported ACC fields: - Unsupported optional fields: - Supported carrier-protocol versions: - Runtime or integration assumptions: - Conformance corpus release: - Conformance corpus commit or SHA-256: - Public interface / adapter entrypoint and command: - Applicable vectors passed / failed / skipped / not run: - Per-skip reason (not applicable versus applicable but unsupported): ## Conformance Evidence | Checklist area | Status | Evidence link | Notes | |---|---|---|---| | Binding Parser | Pass / Partial / Fail / Not run / N/A | | | | Exposure | Pass / Partial / Fail / Not run / N/A | | | | Governance | Pass / Partial / Fail / Not run / N/A | | | | Authority Boundary | Pass / Partial / Fail / Not run / N/A | | | | Traceability | Pass / Partial / Fail / Not run / N/A | | | | Machine-readable vectors via implementation adapter | Pass / Partial / Fail / Not run / N/A | | | ## Corpus Maintenance Check (Separate From Implementation Evidence) - Reference oracle command/date/result, if run: - This result checks corpus consistency; it does not execute the claimed implementation. ## Known Limitations - ## Declaration This is a self-assessment by the project maintainers. It does not claim official ACC certification, an independent security audit, or production-readiness endorsement. ``` ## 3. Registry Entry Template Use [the coverage index](v1/COVERAGE.md) to separate abstract vector outcomes from integration evidence. Record `Not run` when an applicable interface was not exercised; do not count reference-oracle success as a runtime pass. A claimed `N/A` needs a profile or scope reason, and unsupported applicable behavior needs an explicit limitation. Add one row to the alphabetically ordered table in `IMPLEMENTATIONS.md`: ```markdown | Project | Profile | ACC version | Status | Last assessed | Evidence | Notes | |---|---|---|---|---|---|---| | Example | Runtime | v1 | Self-declared | YYYY-MM-DD | [Assessment](https://example.com/assessment) | Short neutral description. | ``` ## 4. Acceptance Criteria A registry pull request should be accepted when: - the project and evidence are publicly reachable; - the claim names an ACC version and profile; - the self-assessment is dated and tied to an implementation version or commit; - partial support and known limitations are explicit; - the description does not imply certification or official partnership; - the implementation is not using ACC terminology deceptively. Maintainers should not require a particular language, product architecture, deployment model, commercial relationship, or affiliation with any existing implementation. ## 5. Removal and Updates An entry may be marked stale or removed when its links no longer work, the project no longer claims ACC support, the evidence materially contradicts the claim, or maintainers do not respond to a documented update request. Removal from the registry does not restrict anyone from implementing or using ACC under its license. --- Source: https://agentcapability.org/docs/conformance-v1/ Repository file: conformance/v1/README.md --- # ACC v1 Machine-Readable Conformance Vectors Status: Reference conformance corpus Specification release: 1.0.5 Declaration compatibility family: ACC v1 This directory publishes portable declaration inputs, core runtime outcomes, and OpenAPI-specific default cases for the ACC v1 OpenAPI Binding Parser and Runtime profiles. Core-only consumers may reuse the vectors whose inputs do not depend on `http_method` or another binding-native signal. The vectors complement the human checklist in [../README.md](../README.md). They do not prescribe an implementation API, database, queue, approval UI, logging backend, or hash algorithm, and passing them is not official certification. ## Files - `vectors.schema.json`: schema for the corpus format. - `vectors.json`: versioned parser and runtime cases. - `../../scripts/check-conformance.mjs`: reference oracle used to verify that the corpus is internally consistent. - [Coverage and implementation evidence](COVERAGE.md) ([中文](COVERAGE.zh-CN.md)): all 26 vector IDs, their limits, and the integration evidence they do not replace. ## Abstract Kinds | Kind | Portable observation | |---|---| | `declaration` | Whether the ACC object is structurally valid and whether its major version is supported. | | `exposure` | Whether a capability may be exposed for the supplied scope policy and trusted-subject availability. | | `approval` | Whether valid invocation arguments allow execution, require approval, or must be rejected. | | `risk-default` | The effective ACC risk when it is explicit or inferred from method and readonly hint. | | `audit-hint` | Whether the broad ACC sensitivity hint is present. | ## Using The Corpus An implementation may write an adapter that: 1. reads each vector applicable to its claimed Profile; 2. maps the abstract input into its public parser or runtime interface; 3. observes the abstract outcome; 4. compares it with `expected`; 5. publishes the ACC release, implementation version, passed vectors, skipped vectors, and known limitations. Diagnostics may use implementation-specific wording. The corpus compares portable categories and decisions, not private error messages. ## Security Scope The corpus deliberately avoids product-specific behavior. For example, approval evidence must remain bound to the reviewed capability and arguments, but ACC does not require one hash algorithm or persistence model. Such invariants belong in portable behavior vectors only after they are normative in [../../SPEC.md](../../SPEC.md). --- Source: https://agentcapability.org/docs/conformance-coverage/ Repository file: conformance/v1/COVERAGE.md --- # ACC v1 Coverage and Implementation Evidence Status: Non-normative coverage index Corpus: `vectors.json`, format version 1, specification release 1.0.5 [中文](COVERAGE.zh-CN.md) This index describes the existing 26 reference vectors without changing their expected outcomes or the reference oracle. Normative obligations and recommendations remain in [SPEC.md](../../SPEC.md) and the [OpenAPI binding](../../bindings/openapi.md). Choose the applicable [Profile](../PROFILES.md) first. ## What Each Layer Proves - `npm run conformance:check` checks the corpus against the reference oracle. Success is **corpus internal consistency**, not acceptance of a gateway, SDK, or production runtime. - An implementation adapter needs to feed applicable vectors through its public interface and observe expected outcomes. Implementation evidence here is **Not run** because this index does not execute an external implementation. - Integration evidence is needed to show actual dispatch gating, correct subjects, redacted persistence, and failure recovery. The [self-assessment template](../SELF_ASSESSMENT.md) keeps these claims separate. `allow` in approval vectors means the tested condition does not create approval intent; it does not grant final permission. `scope_allowed` and `trusted_subject` are supplied abstract inputs, not verified identities or network observations. ## Existing Vectors Every row has an abstract vector. The last two columns concern a real implementation, not the oracle. Section references point to SPEC except where the OpenAPI binding is named. | ID | Existing semantic reference | Abstract observation covered | Expected outcome | Additional implementation evidence | Implementation status | |---|---|---|---|---|---| | `T-PARSE-01` | §§4.1–4.3, 6 | A minimal ACC v1 declaration is valid. | `valid=true` | Parser interface extraction and diagnostics | Not run | | `T-PARSE-02` | §§4.1–4.3, 6 | A declaration without scope is invalid. | `valid=false, diagnostic="invalid_declaration"` | Parser interface extraction and diagnostics | Not run | | `T-PARSE-03` | §§4.1–4.3, 6 | An unsupported major version is rejected or skipped with diagnostics. | `valid=false, diagnostic="unsupported_version"` | Parser interface extraction and diagnostics | Not run | | `T-PARSE-04` | §§4.1–4.3, 6 | An unknown field is ignored without making the declaration invalid. | `valid=true` | Parser interface extraction and diagnostics | Not run | | `T-PARSE-05` | §§4.1–4.3, 6 | A declaration without a version is invalid rather than classified as an unsupported version. | `valid=false, diagnostic="invalid_declaration"` | Parser interface extraction and diagnostics | Not run | | `T-EXPOSE-01` | §§4.2–4.3, 4.5, 5 | A disabled capability is not exposed. | `exposed=false` | Real target/subject checks and dispatch boundary | Not run | | `T-EXPOSE-02` | §§4.2–4.3, 4.5, 5 | A subject-required capability is not exposed without a trusted subject. | `exposed=false` | Real target/subject checks and dispatch boundary | Not run | | `T-EXPOSE-03` | §§4.2–4.3, 4.5, 5 | A capability outside the runtime scope policy is not exposed. | `exposed=false` | Real target/subject checks and dispatch boundary | Not run | | `T-EXPOSE-04` | §§4.2–4.3, 4.5, 5 | An enabled and allowed capability with required subject available is exposed. | `exposed=true` | Real target/subject checks and dispatch boundary | Not run | | `T-APPROVAL-01` | §4.6 | approval.required true creates approval intent even when a condition does not match. | `decision="approval_required"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-02` | §4.6 | The first matching approval.when item is sufficient under ANY semantics. | `decision="approval_required"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-03` | §4.6 | A later matching approval.when item is sufficient under ANY semantics. | `decision="approval_required"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-04` | §4.6 | No conditional approval intent is created when no approval.when item matches. | `decision="allow"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-05` | §4.6 | An invocation value incompatible with its bound input schema is rejected before condition evaluation. | `decision="reject_invalid_arguments"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-06` | §4.6 | An empty approval.when array creates no conditional approval intent. | `decision="allow"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-07` | §4.6 | The in operator matches a parameter that is strictly JSON-equal to one array member. | `decision="approval_required"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-08` | §4.6 | The in operator does not coerce a JSON number into a string. | `decision="allow"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-09` | §4.6 | The contains operator uses substring matching for a string parameter and string value. | `decision="approval_required"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-10` | §4.6 | The contains operator uses strict JSON equality for members of an array parameter. | `decision="approval_required"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-11` | §4.6 | Array containment does not coerce a JSON number element into a string. | `decision="allow"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-12` | §4.6 | The exists operator matches a path that resolves to a non-null JSON value. | `decision="approval_required"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-13` | §4.6 | The exists operator does not match a path that is absent from the invocation input. | `decision="allow"` | Decision interface plus argument/dispatch binding | Not run | | `T-APPROVAL-14` | §4.6 | The exists operator does not match an explicit JSON null value. | `decision="allow"` | Decision interface plus argument/dispatch binding | Not run | | `T-RISK-01` | §4.4; [OpenAPI input mapping](../../bindings/openapi.md#input-and-value-mapping) | Under the OpenAPI binding, a GET operation defaults to low risk when risk and execution.readonly are omitted. | `effective_risk="low"` | Binding mapping and effective policy preservation | Not run | | `T-RISK-02` | §4.4; [OpenAPI input mapping](../../bindings/openapi.md#input-and-value-mapping) | A non-readonly write operation defaults to medium risk when risk is omitted. | `effective_risk="medium"` | Binding mapping and effective policy preservation | Not run | | `T-AUDIT-01` | §4.7 | The broad audit sensitivity hint is preserved as true. | `audit_sensitive=true` | Hint propagation; separate redacted-persistence test | Not run | Inventory: declaration 5; exposure 4; approval 14; risk defaults 2; audit hint 1. Total: **26**. ## Where the Corpus Stops The corpus does not exhaust every rule or checklist item. An absence below does not remove a normative obligation, and a recommended deployment control does not become an ACC requirement merely because it appears here. | Concern | Existing reference / status | Abstract corpus coverage | Evidence still needed | Implementation evidence | |---|---|---|---|---| | Approval operators and defaults outside the supplied cases | SPEC §§4.4, 4.6; OpenAPI binding | Partial: sample values, not every operator/type/default combination | Boundary and invalid-input tests for the claimed surface | Not run | | Timeout and rate-limit hint mapping | SPEC §4.8 hints; mapping is implementation policy | None | Effective windows/timeouts and observed mapped behavior | Not run | | Final business authorization and cross-hop subject verification | SPEC §§2.1, 4.5, 5 | Abstract exposure booleans only | Actual revoked, forged, wrong-tenant and wrong-object decisions at each authority | Not run | | Model/tool-result text cannot override governance | SPEC §§4.9, 5 | None | Adversarial input through actual ingestion, selection and dispatch interfaces | Not run | | Approval intent versus completed approval | SPEC §4.6; implementer guide §7 recommends binding | Abstract intent only | Approver authority, frozen target/arguments, expiry and failure observations | Not run | | Cumulative business effects | SPEC §4.6; enforcement belongs to business/policy layer | None | Concurrent/batch tests using authoritative state and documented limits | Not run | | Sensitive hints versus actual logs | SPEC §4.7; retention/verification are deployment policies | Presence of one broad hint only | Redaction before persistence/export; access, completeness and retention tests; independent verification if claimed | Not run | | Uncertain writes, cancellation, restart and replay | Implementation recovery policy; §4.8 idempotence is a hint | None | Preserve original call/target; inspect accepted/unknown effects; demonstrate no unsafe replay | Not run | | Source trust, local sandboxing, task shutdown and data residency | Complementary implementation/deployment controls, not ACC fields | None | Named ownership, policy and deployment-specific integration evidence | Not run | A generator also needs evidence of its emitted binding-native artifacts. An abstract declaration pass does not validate a complete OpenAPI document or a business API's semantics. ## Attach an Implementation Report **Recommended:** record specification release, corpus commit or SHA-256, implementation commit/package hash, applicable Profile, public interface/adapter entrypoint, date, passed/failed/skipped/not-run IDs, evidence links and limitations. Explain each skip: not applicable differs from applicable but unsupported. Do not copy oracle output into a runtime assessment as if it exercised that runtime. Keep the implementation's adapter and integration results separate. The [business worksheet](../../examples/BUSINESS_RISK_EXAMPLES.md) supplies scenarios for planning integration evidence, not pre-passed tests. --- Source: https://agentcapability.org/docs/proposals/ Repository file: proposals/README.md --- # ACC Proposal Process ACC proposals provide a public, implementation-neutral path for changing normative fields or behavior. They are design inputs, not roadmap promises or compatibility claims. Use [TEMPLATE.md](TEMPLATE.md) for a new proposal. ## Current Drafts - [Agent-Facing Capability Deprecation](agent-facing-deprecation.md) records a minimal advisory deprecation candidate. It is not part of released ACC v1 and currently lacks the independent implementation evidence required for review. ## States | State | Meaning | |---|---| | `Draft` | The author is still defining semantics or collecting evidence. | | `Under Review` | The proposal is complete enough for public technical review. | | `Accepted` | Governance review accepted the semantics for a future release. | | `Rejected` | The proposal does not fit ACC core or did not satisfy the evidence requirements. | | `Withdrawn` | The author withdrew the proposal. | | `Superseded` | A later proposal replaced it. | Proposal authors may suggest a state, but maintainers record state transitions in public review with a rationale. `Accepted` does not mean released; the change still follows ACC versioning, implementation, conformance, and release checks. ## Admission Gate A normative proposal must first satisfy the core-field tests in [DESIGN_RATIONALE.md](../DESIGN_RATIONALE.md). Those tests are necessary, not sufficient. Review additionally considers: 1. Evidence that the problem appears across independent implementation contexts. 2. Whether the proposal is the smallest stable semantic addition. 3. Whether ACC core is the correct layer rather than OpenAPI, a binding, an implementation extension, runtime policy, business authorization, or workflow orchestration. 4. Complete types, defaults, precedence, failure behavior, and security semantics. 5. Fail-safe behavior for older runtimes, a conservative fallback they already understand, or a new compatibility boundary. 6. Reference implementations or implementation descriptions that do not share one private product architecture. 7. Machine-readable parser or runtime conformance vectors. 8. Ecosystem complexity and long-term maintenance cost. Examples alone do not prove cross-implementation demand. A self-assessment does not decide acceptance. ## File Naming Before an identifier is assigned, use a descriptive draft filename in a pull request. Accepted or long-running proposals may be assigned a stable filename such as: ```text 0001-short-title.md ``` Do not reuse identifiers from rejected, withdrawn, or superseded proposals. ## Compatibility Rule An optional security restriction is not backward-compatible merely because an older parser ignores it. Review the declaration author's security intent: - if ignoring the field broadens exposure, weakens approval, extends authorization, or records data that should be redacted, ignoring it is not fail-safe; - same-major evolution requires a conservative fallback understood by older runtimes or explicit capability negotiation; - otherwise use a new major compatibility family. ## Decision Record The merged proposal or pull request must preserve: - final state; - decision date; - concise rationale; - compatibility conclusion; - links to conformance evidence; - superseding proposal, when applicable. Private conversations, product-specific negotiations, and personal attribution are not normative evidence. Public decisions should stand on portable semantics and reproducible evidence. --- Source: https://agentcapability.org/docs/proposals/agent-facing-deprecation/ Repository file: proposals/agent-facing-deprecation.md --- # ACC Proposal: Agent-Facing Capability Deprecation State: Draft Decision date: Not decided Compatibility conclusion: Candidate same-major advisory addition; evidence pending ## Summary Define a minimal, machine-readable signal for an ACC capability that remains enabled but is no longer recommended for new agent plans or integrations. This draft does not change ACC v1. It records candidate semantics for public review and implementation evidence. ## Problem `enabled` is intentionally binary: an enabled capability may be exposed, while a disabled capability must not be exposed. It cannot express a migration interval in which an existing agent-facing capability still works but new consumers should prefer another path. Standard OpenAPI already supports operation-level `deprecated: true`. That signal is correct when the HTTP operation itself is deprecated. It does not cover the distinct case where the HTTP operation remains supported for non-agent clients but its agent-facing capability should no longer be selected for new use. A portable deprecation signal could let parsers, catalogs, authoring tools, and runtimes preserve that distinction without turning lifecycle metadata into a second exposure or authorization mechanism. ## Non-Goals This proposal does not define: - API or schema versioning; - automatic disabling at a future time; - a `stable`, `sunset`, or `removed` lifecycle state machine; - automatic redirection to another capability; - argument translation or workflow migration; - whether an LLM will follow migration guidance; - final business authorization or endpoint availability; - HTTP `Deprecation` or `Sunset` response-header behavior. Actual removal remains explicit: the publisher sets `enabled: false`, removes the ACC declaration, or retires the underlying operation under the rules of the bound protocol and business system. ## Independent Implementation Contexts The portable problem should be validated in at least these independent contexts before review advances: 1. An OpenAPI gateway or compiler where an HTTP operation remains active for conventional clients while its agent-facing capability is being replaced. 2. An agent platform or catalog that consumes a validated ACC capability artifact and needs to identify deprecated capabilities without owning the source API lifecycle. Evidence from one product implementing both contexts is not sufficient by itself. This draft currently has no independent implementation evidence. ## Proposed Syntax ```yaml x-agent-capability: version: 1 enabled: true scope: refund.create lifecycle: deprecated: true migration_uri: https://example.com/migrations/refund-create ``` Candidate fields: | Field | Type | Required | Meaning | |---|---|---|---| | `lifecycle` | object | no | Agent-facing lifecycle metadata. | | `lifecycle.deprecated` | boolean | no | The capability remains governed by `enabled`, but is not recommended for new agent use. Default: `false`. | | `lifecycle.migration_uri` | absolute URI string | no | Human-facing migration documentation. It is not a capability reference or executable instruction. | ## Normative Semantics The following semantics are candidates for review, not released ACC v1 requirements: 1. Missing `lifecycle` or missing `lifecycle.deprecated` means no ACC-specific deprecation signal. 2. `lifecycle.deprecated: true` MUST NOT change `enabled`, scope policy, risk, subject, approval, audit, execution, or final authority semantics. 3. An enabled deprecated capability remains eligible for exposure under ACC Core. A consumer MUST preserve the deprecation state in its validated capability artifact when it supports this proposal. 4. A runtime or authoring tool SHOULD make the deprecation state available as structured diagnostics. ACC does not require a particular warning UI, model prompt, or ranking algorithm. 5. A consumer MUST NOT automatically invoke, redirect to, authorize, or translate arguments for another capability based on `migration_uri`. 6. Consumers are not required to fetch `migration_uri`. If retrieved, its content is untrusted descriptive material and MUST NOT override governance metadata or become authority for execution. 7. A malformed `lifecycle` object or invalid field type MUST produce diagnostics under the supporting parser's documented validation behavior. It MUST NOT create a less-governed fallback tool. 8. Unknown lifecycle fields follow the existing ACC unknown-field compatibility rule and MUST NOT implicitly change security behavior. ## Interaction And Precedence ### `enabled` `enabled` remains the only ACC Core field that directly enables or disables exposure. `enabled: false` always prevents exposure, regardless of lifecycle metadata. Deprecation is therefore advisory migration state, not delayed enforcement. A publisher that intends to stop exposure must update `enabled` or use a separate deployment mechanism understood by all relevant runtimes. ### OpenAPI `deprecated` For the OpenAPI binding: - OpenAPI operation `deprecated: true` makes the bound operation effectively deprecated for agent consumers even when ACC lifecycle metadata is absent; - `lifecycle.deprecated: true` may add an agent-specific deprecation signal while the OpenAPI operation remains active; - ACC lifecycle metadata MUST NOT negate OpenAPI `deprecated: true`. The OpenAPI binding would define this effective-state mapping if the proposal advances. ### Replacement Capabilities This draft deliberately does not define `superseded_by: `. ACC `scope` is a policy and allowlist unit, not a globally unique operation reference. Replacements may be one-to-many, may require different arguments, and may have different risk or authorization semantics. A future replacement reference would need binding-qualified identity, resolution, trust, and failure rules. Until then, migration details belong in non-executable documentation. ## Layer Boundary Agent-specific deprecation is a plausible ACC declaration concern because it describes whether a capability is recommended to agent consumers while leaving the underlying operation active. The lifecycle of the underlying API, RPC method, message consumer, deployment, or business operation remains owned by the binding-native contract and provider. Binding-native deprecation should be reused when it already expresses the intended scope. ## Compatibility And Security An older ACC v1 runtime ignores `lifecycle` and continues to apply the existing `enabled`, scope, subject, risk, and approval behavior. This is a candidate same-major addition only because the draft forbids lifecycle metadata from acting as an automatic exposure restriction. The fallback is not safe if a publisher treats deprecation or a date as automatic removal. Such behavior would require an existing conservative `enabled: false` fallback, explicit capability negotiation, or a new compatibility boundary. The proposal does not weaken business authorization. It also does not guarantee that a model stops selecting the capability; the portable outcomes are preservation and structured deprecation state, not model obedience. ## Alternatives ### Use OpenAPI `deprecated` only Preferred when the operation itself is deprecated for all consumers. It cannot distinguish agent-specific deprecation from general API deprecation. ### `status: stable | deprecated | sunset` Not proposed. `deprecated` is a current recommendation state, while sunset is a future availability event or instant. Combining them creates overlapping state and time semantics and risks turning lifecycle into a second exposure switch. ### `sunset_at` Deferred. A portable timestamp would need absolute-time syntax, clock and failure semantics, binding interaction, and a clear statement that it does not automatically change `enabled`. The minimal deprecation problem does not require it. ### `superseded_by: ` Not proposed because scope is not a unique operation identity and cannot safely drive automatic migration. ## Implementation Evidence None yet. The proposal remains `Draft` until independent implementations or implementation descriptions demonstrate the same semantics without sharing one private architecture. ## Conformance Vectors Candidate vectors, not yet part of the released corpus: | ID | Input | Expected portable outcome | |---|---|---| | `T-LIFECYCLE-01` | lifecycle absent | no ACC-specific deprecation signal | | `T-LIFECYCLE-02` | `enabled: true`, `deprecated: true` | capability remains exposure-eligible and carries deprecated state | | `T-LIFECYCLE-03` | `enabled: false`, `deprecated: true` | capability is not exposed | | `T-LIFECYCLE-04` | OpenAPI `deprecated: true`, ACC lifecycle absent | OpenAPI binding reports effective deprecation | | `T-LIFECYCLE-05` | migration URI present | URI is preserved; no automatic redirect or invocation | | `T-LIFECYCLE-06` | invalid deprecated type | diagnostic; no less-governed fallback tool | Machine-readable vectors and a reference oracle are required before this proposal can advance to `Under Review`. ## Ecosystem Cost The smallest candidate adds one optional object, one boolean, and one optional documentation URI. Costs include parser preservation, diagnostics, native-deprecation precedence in each binding, authoring guidance, and long-term naming stability. Adding dates, replacement graphs, automatic migration, or enforcement would materially increase ecosystem cost and is outside this draft. ## Open Questions - Is an ACC-specific signal needed in at least two independent bindings, or should OpenAPI-specific usage remain a binding extension? - Is `lifecycle` the smallest stable namespace, or would a top-level `deprecated` boolean be more appropriate? - Should `migration_uri` enter with the boolean or remain binding-native documentation? - Which structured diagnostic is portable enough for conformance without prescribing UI? --- Source: https://agentcapability.org/docs/changelog/ Repository file: CHANGELOG.md --- # Changelog ## Unreleased ## 1.0.5 - 2026-08-04 [Detailed release notes](RELEASE_NOTES_v1.0.5.md) - Clarified that `approval.when` evaluates one invocation and cannot enforce aggregate, rolling-window, cross-invocation, or sequence constraints. - Defined portable `in`, `contains`, and `exists` runtime semantics, including strict JSON equality and explicit-null behavior. - Expanded the ACC v1 conformance corpus from 18 to 26 vectors with focused operator coverage. - Added continuous integration for repository, conformance, and test checks. - Added no ACC Core field and required no declaration migration. ## 1.0.4 - 2026-07-28 [Detailed release notes](RELEASE_NOTES_v1.0.4.md) - Added the non-normative `acc-validate` OpenAPI authoring CLI with human and JSON diagnostics, stable exit codes, local-file `$ref` resolution, ACC v1 schema checks, and typed `approval.when` input validation. - Added English and Chinese five-minute authoring guides. - Added a multi-operation order-service example covering readonly access, write operations, conditional approval, audit sensitivity, and explicit disabled exposure. - Added package-install smoke coverage and focused validator/CLI tests. - No ACC Core field, OpenAPI Binding requirement, declaration compatibility, or conformance profile changed. ## 1.0.3 - 2026-07-20 [Detailed release notes](RELEASE_NOTES_v1.0.3.md) - Defined a common Core/Binding interface covering carrier placement, validated capability artifacts, native input mapping, metadata precedence, failure behavior, and binding-specific conformance. - Moved OpenAPI-specific extraction, parameter resolution, `GET` risk fallback, guidance mapping, and Parser Profile responsibilities into the OpenAPI binding. - Clarified why detailed effect or business-domain taxonomies remain experimental authoring or binding metadata rather than ACC v1 core fields. - Clarified why agent-selection guidance remains in the capability contract while native schemas and descriptions remain authoritative. - Added a Draft Proposal for minimal agent-facing capability deprecation without automatic disabling, redirection, or schema changes. - No released schema, core field, OpenAPI declaration behavior, or existing conformance outcome changed. ## 1.0.2 - 2026-07-18 [Detailed release notes](RELEASE_NOTES_v1.0.2.md) - Added a public normative proposal lifecycle and template. - Clarified that core-field admission checks are necessary but not sufficient. - Added an implementation-neutral landscape of adjacent transport, identity, runtime-control, policy, workflow, and business-authorization layers. - Clarified that broader cross-boundary agent-action governance is a research direction, while ACC v1 remains the concrete A2B contract with OpenAPI as its first binding. - Clarified that `subject.required` applies at the receiving runtime's trust boundary and does not prove subject continuity across multiple hops. - Clarified that runtime-authored approval assertions and audit records are not automatically independently verifiable evidence. - Documented identity, delegation, canonicalization, freshness, replay protection, and third-party approval evidence as complementary protocol concerns. - Refined provenance wording without granting any implementation privileged status in ACC governance or compatibility. - Added Chinese concept and design-boundary documentation. - No schema, core field, declaration compatibility, or conformance outcome changed; existing ACC v1 declarations require no migration. ## 1.0.1 - 2026-07-12 [Detailed release notes](RELEASE_NOTES_v1.0.1.md) - Clarified that `approval.when` uses ANY semantics when unconditional approval is not required. - Clarified that `approval.required: true` remains unconditional and cannot be reduced by conditional rules. - Added machine-readable ACC v1 parser and runtime conformance vectors plus a reference oracle. - Added a design-rationale document covering known A2B concerns that intentionally belong outside ACC core. - Added a fail-safe compatibility rule for security-relevant optional fields. - Separated stable specification status from early ecosystem maturity. - No existing ACC v1 declaration requires migration. ## 1.0.0 - 2026-07-11 [Detailed release notes](RELEASE_NOTES_v1.0.0.md) - Published the stable ACC v1 specification release while keeping declaration compatibility at `x-agent-capability.version: 1`. - Clarified typed `approval.when` semantics: condition targets must resolve to declared parameters, comparisons do not coerce JSON types, and incompatible invocation values must be rejected before business execution. - Added an implementation-neutral implementer's guide with reference lifecycles, approval patterns, security invariants, and conformance mapping. - Added separate Parser, Generator, Runtime, and Policy Component conformance profiles. - Added an open implementation registration and self-assessment process without implying certification. - Strengthened maintainer neutrality invariants so no product implementation defines ACC semantics or receives privileged registry status. - Reworked the implementation registry around profile claims, public evidence, known limitations, and equal criteria. ## Initial public draft - 2026-07-09 - Introduced ACC v1 as an OpenAPI `x-agent-capability` declaration contract. - Defined core fields: `version`, `enabled`, `scope`, `risk`, `subject`, `approval`, `audit`, `execution`, and `guidance`. - Added JSON Schema for ACC v1. - Added OpenAPI examples for readonly query, approval intent, and subject-required capabilities. - Added conformance checklist and governance notes. --- Source: https://agentcapability.org/docs/releases/v1.0.5/ Repository file: RELEASE_NOTES_v1.0.5.md --- # ACC v1.0.5 ACC v1.0.5 is a compatible security-clarification and conformance-coverage release for the ACC v1 declaration family. ## Contract Version ACC declarations continue to use: ```yaml x-agent-capability: version: 1 ``` This release adds no core field, changes no JSON Schema rule, and requires no declaration migration. ## Per-Invocation Approval Boundary `approval.when` conditions evaluate one invocation at a time. They do not express aggregate, rolling-window, cross-invocation, or sequence constraints. A threshold such as `amount > 1000` therefore does not prevent multiple smaller operations from creating a larger cumulative effect. Deployments whose risk model includes cumulative effects must enforce those constraints in the authoritative business or policy layer. The implementer's guide includes a concrete decomposition example and preserves ACC's boundary between portable declaration semantics and stateful business policy. ## Operator Semantics The specification now states explicitly that: - `in` requires an array comparison value and uses strict JSON equality; - string `contains` uses substring matching; - array `contains` uses strict JSON equality for elements; - `exists` matches only a resolved, non-null JSON value. These statements codify the existing reference-oracle behavior so independent runtimes do not interpret the same declaration differently. ## Conformance Coverage The reference corpus expands from 18 to 26 vectors. New vectors cover positive and negative behavior for `in`, string and array `contains`, and present, missing, and explicit-null `exists` inputs. Passing the corpus remains reference evidence rather than official certification. ## Continuous Integration Repository checks, conformance vectors, and automated tests now run for pushes and pull requests through a minimal read-only GitHub Actions workflow. --- Source: https://agentcapability.org/docs/releases/v1.0.4/ Repository file: RELEASE_NOTES_v1.0.4.md --- # ACC v1.0.4 ACC v1.0.4 is a compatible authoring-experience release for the ACC v1 declaration family. ## Contract Version ACC declarations continue to use: ```yaml x-agent-capability: version: 1 ``` This release adds no core field, changes no JSON Schema rule, changes no OpenAPI Binding requirement, and requires no declaration migration. ## OpenAPI Authoring Validator The `agent-capability-contract` npm package now publishes the non-normative `acc-validate` command. It checks: - OpenAPI 3.0 and 3.1 documents in YAML or JSON; - operation-level `x-agent-capability` placement and ACC v1 declaration shape; - local and relative local-file `$ref` targets without hidden network access; - parameter and JSON request-body paths used by `approval.when`; - strict JSON type compatibility without implicit coercion; - human-readable and JSON diagnostics with stable exit codes. The validator is an authoring aid. It is not a complete OpenAPI linter, business-authorization engine, runtime, policy service, or ACC certification. ## Five-Minute Quickstart English and Chinese quickstarts now provide one continuous path from an existing OpenAPI document to a validated ACC declaration. The published package can be run without a global installation: ```bash npx --yes agent-capability-contract@1.0.4 validate ./openapi.yaml ``` ## Multi-Operation Service Example The new order-service example shows multiple ACC declarations in one OpenAPI document: - a low-risk readonly order query; - a medium-risk order creation operation; - a high-risk refund with parameter-level conditional approval; - an audit-log operation that is explicitly disabled for agent exposure; - reusable local OpenAPI components and references. The example is validated by the same command documented in the quickstart. ## Tests And Packaging The authoring validator and CLI have focused automated coverage for valid and invalid declarations, references, ambiguous input paths, strict value types, recursive schemas, diagnostics, and exit codes. The npm artifact is also installed into a clean temporary project and exercised through its published command during release verification. ## Conformance And Compatibility The ACC v1 conformance corpus remains at 18 vectors. Existing vector inputs, expected outcomes, Schema rules, core semantics, and OpenAPI Binding behavior are unchanged. The corpus release marker is updated to `1.0.4`. --- Source: https://agentcapability.org/docs/releases/v1.0.3/ Repository file: RELEASE_NOTES_v1.0.3.md --- # ACC v1.0.3 ACC v1.0.3 is a compatible Core/Binding architecture clarification release for the ACC v1 declaration family. ## Contract Version ACC declarations continue to use: ```yaml x-agent-capability: version: 1 ``` This release adds no released core field, changes no JSON Schema rule, and requires no declaration migration. ## Core And Binding Architecture ACC Core now has an explicit boundary from protocol-specific bindings: - Core owns the portable declaration fields, defaults, compatibility rules, and protocol-independent runtime invariants. - A binding owns declaration placement, operation identity, native input mapping, parameter-path resolution, metadata precedence, extraction failures, diagnostics, and binding-specific conformance evidence. - A validated capability artifact is defined as a conceptual interface between binding parsers and core runtimes, not as a required wire or storage format. - OpenAPI remains the first standardized ACC v1 binding; future bindings must preserve core semantics rather than redefine them. These clarifications make future binding work possible without turning ACC Core into an OpenAPI-specific model. ## OpenAPI Binding OpenAPI-specific responsibilities are now consolidated in `bindings/openapi.md`, including: - operation-level `x-agent-capability` extraction; - standard `parameters` and `requestBody` preservation; - strict native-value mapping and condition-path resolution; - the OpenAPI `GET` readonly default and its precedence; - the relationship between OpenAPI descriptions, schemas, examples, and supplemental ACC guidance; - precise OpenAPI Binding Parser and Generator claim language. No existing valid OpenAPI declaration changes meaning in this release. ## Risk And Guidance Boundaries The design rationale now records why detailed state-effect or business-domain taxonomies remain experimental authoring diagnostics, binding metadata, or future evidence-backed proposals rather than ACC v1 core fields. `guidance` remains in the capability contract because an agent-facing capability must be selectable as well as governable. Binding-native request and response schemas remain authoritative, and guidance remains supplemental, non-authoritative, and non-security-critical. ## Agent-Facing Deprecation Draft The repository now contains a Draft Proposal for a minimal agent-facing deprecation signal. The draft deliberately does not define automatic sunset, disabling, redirection, argument migration, or replacement by `scope`. The proposal is not part of released ACC v1. It has no effect on the v1 Schema or conformance corpus and cannot advance without independent implementation evidence and machine-readable vectors. ## Conformance Binding Parser and Generator claims must now name the binding they implement. Runtime and Policy Component profiles remain protocol-independent when they consume an equivalent validated capability artifact. The ACC v1 corpus remains at 18 vectors. Existing inputs and expected outcomes are unchanged; wording now distinguishes portable bound-input behavior from OpenAPI-specific defaults, and the corpus release marker is updated to `1.0.3`. --- Source: https://agentcapability.org/docs/releases/v1.0.2/ Repository file: RELEASE_NOTES_v1.0.2.md --- # ACC v1.0.2 ACC v1.0.2 is a compatible boundary, governance, and documentation clarification release for the ACC v1 declaration family. ## Contract Version ACC declarations continue to use: ```yaml x-agent-capability: version: 1 ``` This release does not add or change any ACC field, JSON Schema rule, OpenAPI binding, or conformance outcome. No existing valid ACC v1 declaration requires migration. ## Trust Boundaries - `subject.required: true` requires a trusted acting subject at the receiving runtime's current trust boundary. - Model output, tool arguments, and unverified upstream claims do not become trusted subject context merely because they contain a subject identifier. - ACC compatibility does not prove that one subject remained authentic and unmodified across a chain of agents, runtimes, organizations, or trust domains. - Cross-hop continuity requires a complementary identity or delegation mechanism with explicit issuer, verification, audience, freshness, replay, and failure semantics. These clarifications preserve the existing rule that the business system remains the final authorization authority at invocation time. ## Approval Evidence And Traceability ACC continues to declare approval intent rather than an approval-evidence protocol. - A runtime-authored approval field or audit record can provide operational traceability inside that runtime's trust domain. - It is not automatically independent proof against compromise of the same runtime. - Deployments requiring third-party verification need a complementary protocol that defines canonical bytes, signatures, issuer keys, freshness, replay protection, and fail-closed verification before execution. No cryptographic or workflow mechanism is added to ACC v1 by this release. ## Public Governance The repository now includes a public normative proposal lifecycle and template. Core-field admission checks are explicitly necessary but not sufficient. Proposals are also reviewed for independent demand, minimality, correct layer ownership, complete failure semantics, fail-safe compatibility, implementation evidence, conformance vectors, and ecosystem cost. Submitting or accepting a proposal does not make it part of a released ACC version. Normative changes still follow the normal versioning, review, implementation, and release process. ## Scope And Ecosystem Boundaries The new implementation-neutral landscape distinguishes ACC from adjacent concerns such as: - OpenAPI and transport protocols; - identity and delegation; - runtime enforcement and policy systems; - workflow and transaction coordination; - final business authorization. The recurring governance questions may also appear in broader cross-boundary agent-action environments. That observation is a research direction, not an expansion of ACC v1 compatibility. ACC v1 remains the concrete contract for A2B business operations, with OpenAPI as its first binding. ## Neutrality And Provenance Public wording now describes ACC v1 as developed from A2B engineering work, including early BailingHub implementation experience, while preserving strict implementation neutrality. No product receives privileged semantics, governance influence, registry status, or compatibility treatment. ## Conformance The ACC v1 machine-readable corpus remains at 18 vectors with unchanged inputs and expected outcomes. The corpus release marker is updated to `1.0.2` so implementations can identify the exact specification revision used for self-assessment. --- Source: https://agentcapability.org/docs/releases/v1.0.1/ Repository file: RELEASE_NOTES_v1.0.1.md --- # ACC v1.0.1 ACC v1.0.1 is a compatible clarification and conformance release for the ACC v1 declaration family. ## Contract Version ACC declarations continue to use: ```yaml x-agent-capability: version: 1 ``` No existing valid ACC v1 declaration requires migration. ## Approval Semantics - `approval.required: true` creates approval intent for every invocation. - Otherwise, `approval.when` uses ANY semantics: one matching item is sufficient to create approval intent. - An absent or empty `approval.when` creates no conditional approval intent. - Existing strict JSON type comparison and argument-schema validation remain unchanged. This clarification removes an ambiguity that could otherwise produce inconsistent independent runtimes. ## Conformance Corpus The repository now includes machine-readable ACC v1 vectors for: - declaration validation and unknown-field tolerance; - exposure decisions for enabled, scope policy, and trusted-subject availability; - unconditional and parameter-conditional approval decisions; - strict argument-type rejection; - risk defaults; - audit sensitivity hints. `npm run check` validates the specification repository and verifies the corpus against a reference oracle. Implementations may consume the same abstract inputs through their own adapters and publish results as self-assessment evidence. ## Design Boundaries [DESIGN_RATIONALE.md](DESIGN_RATIONALE.md) documents known concerns that are intentionally outside ACC core, including final business permissions, tenant isolation, identity representation, approval ownership, audit retention, contextual business invariants, rollback, workflow composition, storage, transport, and observability. The document also defines a test for proposed core fields and explains the difference between a small contract and an ambiguous contract. ## Safe Evolution Unknown-field tolerance provides syntax-level compatibility only. Security-relevant optional fields may remain within ACC v1 only when older runtimes ignoring them are fail-safe or when a conservative ACC v1 fallback is present. Other changes require a new major family or explicit capability negotiation. ## Maturity The ACC v1 specification core is stable. The implementation ecosystem is in early adoption, and conformance currently uses public profiles, machine-readable vectors, and self-assessment rather than official certification. --- Source: https://agentcapability.org/docs/releases/v1.0.0/ Repository file: RELEASE_NOTES_v1.0.0.md --- # ACC v1.0.0 ACC v1.0.0 is the first stable specification release of Agent Capability Contract for A2B capability declarations. ## Contract Version ACC declarations continue to use: ```yaml x-agent-capability: version: 1 ``` The declaration field identifies the ACC v1 compatibility family. The `v1.0.0` repository tag identifies this exact specification revision. Product and runtime versions are independent. ## Specification Clarification - `approval.when.param` must resolve to a typed standard OpenAPI parameter or request-body field. - Comparisons use strict JSON type semantics and do not coerce strings into numbers or booleans. - Incompatible invocation values must be rejected before the business operation is called. ## Implementer Path - Added a non-normative implementer's guide covering reference modules and lifecycles without prescribing a product architecture. - Added Parser, Generator, Runtime, and Policy Component profiles. - Added open implementation registration and self-assessment templates. - Added specification-derived security invariants and clearly separated optional platform features. ## Neutral Governance - No product implementation defines ACC semantics or receives privileged compatibility or registry status. - Implementation observations are examples until portable, testable semantics are accepted through the contract process. - Registry inclusion is self-declared and evidence-backed; it is not certification, endorsement, partnership, or a production-readiness guarantee. ## Compatibility This release keeps the ACC v1 declaration shape and does not require a new declaration version. Existing valid ACC v1 declarations remain in the same compatibility family. --- Source: https://agentcapability.org/zh-CN/ Repository file: README.zh-CN.md ---

Agent Capability Contract logo

Agent Capability Contract(ACC)

**ACC(Agent Capability Contract)** 是一套开放的 Agent 能力声明契约,用来描述业务系统可以把哪些业务能力开放给 Agent 调用,以及这些能力应该如何被治理。 ACC 不是运行时、不是聊天机器人框架、也不是工作流引擎。它只定义一件事:业务能力在进入 Agent 世界前,应该如何声明可见范围、风险、主体、审批意图、审计和扩展信息。 ACC 以独立、实现中立的标准方式维护。任何产品实现都不能定义 ACC 语义,也不会因为与维护者的关系获得优先兼容地位。 ACC 是 **A2B(Agent-to-Business)** 场景下的能力声明契约。A2B 指的是:让 Agent 安全、可治理地接入已有业务系统,并代替真实业务主体查数据、办业务、走流程。 ACC 所回答的治理问题,也可能在 Agent 行动跨越后果、授权或信任边界时反复出现。这是一项更上位的研究判断,不表示 ACC v1 已经治理所有 Agent 行动。关于“共同问题”与“当前规范范围”的区别,见 [核心概念](CONCEPTS.zh-CN.md)。 ACC 有意保持一个小而明确的规范核心。关于权限、租户隔离、审批流程、合规保留、回滚、编排等已知问题为什么不直接进入 ACC 核心,以及它们分别应该由哪一层负责,见 [设计依据与边界](DESIGN_RATIONALE.zh-CN.md)。 关于 ACC 与 OpenAPI、MCP、A2A、运行时控制、策略系统和工作流层的中立分层关系,见英文信息文档 [ACC in the Agent Governance Landscape](LANDSCAPE.md)。 | 维度 | 当前状态 | |---|---| | 规范 | ACC v1 稳定核心,按语义化版本治理 | | 生态 | 早期采用阶段,欢迎独立实现 | | Conformance | Profile、自评流程和机器可读的 v1 参考测试向量 | ## 为什么需要 ACC 传统业务系统通常不是为 A2B 而设计的。一旦 Agent 可以调用业务 API,团队很快会遇到同一组问题: - 哪些接口可以暴露给 Agent? - 哪些路由、场景、产品入口可以使用某个能力? - 调用是否必须有真实业务主体? - 这次调用是只读、低风险、中风险,还是高风险? - 某些参数是否需要触发人工审批意图? - 哪些字段是敏感数据,审计时应该脱敏? - 业务自定义扩展如何保留,同时不隐式改变安全闸门? ACC 把这些声明放到接口契约旁边,同时保留一个核心边界: ```text ACC 管 reach:Agent 最多能触达哪些能力。 业务系统管 authority:这个主体此刻到底能不能做。 ``` ## 5 分钟上手 如果你已经有一份 OpenAPI 文档,可以直接按照 [5 分钟给现有 OpenAPI 服务加上 ACC](QUICKSTART.zh-CN.md),添加第一个 声明、使用 `acc-validate` 作者校验器检查结果,再逐步扩展到仓库内的 [多操作订单服务示例](examples/openapi-order-service.yaml)。 无需全局安装即可运行已发布的校验器: ```bash npx --yes agent-capability-contract@1.0.5 validate ./openapi.yaml ``` 校验器是非规范性的作者辅助工具。它不替代 ACC 规范、完整 OpenAPI Linter、业务授权或运行时 Conformance 测试。 ## OpenAPI 绑定 OpenAPI 是 ACC v1 的首个标准化 Binding。它通过 operation 级 `x-agent-capability` 扩展承载 ACC Core 声明: ```yaml x-agent-capability: version: 1 enabled: true scope: order.read risk: level: low subject: required: true execution: readonly: true ``` 规范性核心字段模型见 [SPEC.md](SPEC.md),所有 Binding 必须遵守的公共接口要求见 [Binding Requirements](bindings/README.md),首个载体映射见 [OpenAPI Binding](bindings/openapi.md)。 ACC v1 声明固定使用 `version: 1`;规范仓通过 `v1.0.5` 这类 Tag 标记准确发布修订。产品和运行时版本与 ACC 规范版本完全独立。 ## 实现 ACC - 阅读非规范性的 [实现者指南](IMPLEMENTER_GUIDE.md); - 阅读[安全治理责任说明](SAFETY_GOVERNANCE_GUIDE.zh-CN.md),结合业务示例明确可信边界和各层需要的证据; - 从 [合规 Profile](conformance/PROFILES.md) 中选择准确的实现声明; - 运行适用的 [机器可读 ACC v1 测试向量](conformance/v1/README.md); - 使用 [实现登记与自评流程](conformance/SELF_ASSESSMENT.md) 发布证据; - 通过 pull request 登记到中立的 [实现列表](IMPLEMENTATIONS.md)。 ## 目录结构 ```text SPEC.md ACC v1 规范正文 CONCEPTS.md A2B 与 ACC 核心概念 CONCEPTS.zh-CN.md 核心概念与范围边界中文版 bindings/README.md ACC Binding 公共接口要求 bindings/openapi.md OpenAPI 扩展绑定说明 schemas/acc.v1.schema.json 机器可读 JSON Schema QUICKSTART.md 英文 5 分钟 OpenAPI 编写指南 QUICKSTART.zh-CN.md 中文 5 分钟 OpenAPI 编写指南 bin/acc-validate.mjs ACC OpenAPI 作者校验器 CLI lib/openapi-validator.mjs 校验器库与诊断输出 examples/ OpenAPI 示例,含一个多操作服务 test/ 作者校验器与 CLI 测试 conformance/README.md 实现者兼容性检查清单 conformance/PROFILES.md Binding Parser、Binding Generator、Runtime 与策略组件 Profile conformance/SELF_ASSESSMENT.md 开放登记与证据模板 conformance/v1/ 机器可读的 ACC v1 Conformance 测试向量 proposals/ 公开的规范提案流程与模板 IMPLEMENTER_GUIDE.md 非规范性的实现架构指引 DESIGN_RATIONALE.md ACC 保持小核心的原因与相邻职责边界 DESIGN_RATIONALE.zh-CN.md 设计依据与边界中文版 LANDSCAPE.md 相邻协议与治理层的非规范性分层说明 IMPLEMENTATIONS.md 已知实现与声明口径 RELEASE_NOTES_v1.0.5.md 当前 ACC v1 补丁发布摘要 RELEASE_NOTES_v1.0.4.md 上一个 ACC v1 补丁发布摘要 RELEASE_NOTES_v1.0.3.md 更早的 ACC v1 补丁发布摘要 RELEASE_NOTES_v1.0.2.md 更早的 ACC v1 补丁发布摘要 RELEASE_NOTES_v1.0.1.md 更早的 ACC v1 补丁发布摘要 RELEASE_NOTES_v1.0.0.md ACC v1 首个稳定规范发布摘要 GOVERNANCE.md 维护、版本和扩展规则 CONTRIBUTING.md 契约修改贡献规则 CHANGELOG.md 公开变更记录 NOTICE 来源说明 LICENSE Apache-2.0 协议 ``` ## 实现 ACC 保持实现无关。控制面、API 网关、SDK 生成器、开发者工具、Agent 运行时、MCP 网关、策略引擎都可以实现 ACC。 已知实现按项目名称排序登记在 [IMPLEMENTATIONS.md](IMPLEMENTATIONS.md)。任何实现 ACC 的项目都可以发布自评证据并通过 pull request 申请登记;被列入不代表认证或背书。 ## 协议 ACC 使用 Apache License 2.0。详见 [LICENSE](LICENSE)。 该协议允许使用、修改、再分发和商业实现 ACC。 --- Source: https://agentcapability.org/zh-CN/quickstart/ Repository file: QUICKSTART.zh-CN.md --- # 5 分钟给现有 OpenAPI 服务加上 ACC 这份指南会给一份已有 OpenAPI 文档添加一个 ACC 声明,并验证结果。完成 这个过程不需要先部署 ACC 运行时,也不要求修改业务系统代码。 作者校验器属于非规范性工具。ACC 规范正文和 OpenAPI Binding 仍然是最终 依据。 ## 第一步:安装作者校验器 无需全局安装即可运行已发布的校验器: ```bash npx --yes agent-capability-contract@1.0.5 validate ./openapi.yaml ``` 也可以把校验器添加为项目开发依赖: ```bash npm install --save-dev agent-capability-contract@1.0.5 ``` 该包要求使用 Node.js 20 或更高版本。 ## 第二步:声明一个已有操作 在你的 OpenAPI 文档中找到一个 operation。只读接口通常适合作为第一个 接入对象: ```yaml paths: /orders/{order_id}: get: operationId: getOrder x-agent-capability: version: 1 enabled: true scope: order.read risk: level: low subject: required: true execution: readonly: true responses: '200': description: Order details ``` 这段声明表示:该操作被显式开放给 Agent 入口;它属于 `order.read` scope;风险等级为 low;调用必须绑定可信业务主体;操作本身只读。 它并不表示这个主体一定有权读取某个订单。最终授权仍然由业务系统判断。 当你希望保留声明、但不希望当前操作暴露给 Agent 时,使用 `enabled: false`。 ## 第三步:验证 OpenAPI 文档 运行校验器: ```bash npx acc-validate /你的绝对路径/openapi.yaml ``` 在 CI 或其他开发者工具中使用 JSON 输出: ```bash npx acc-validate \ --format json \ /你的绝对路径/openapi.yaml ``` 当“整份文档没有任何 ACC 声明”也应该失败时,启用严格模式: ```bash npx acc-validate \ --strict \ /你的绝对路径/openapi.yaml ``` 退出码保持稳定: | 退出码 | 含义 | |---|---| | `0` | 验证通过 | | `1` | 至少一份文档失败,或严格模式将警告提升为失败 | | `2` | 命令参数错误 | ## 第四步:只有输入已声明时,才添加条件审批 审批条件必须能解析到 OpenAPI parameter,或者 JSON 请求体中的某个属性: ```yaml paths: /refunds: post: x-agent-capability: version: 1 enabled: true scope: refund.create risk: level: high subject: required: true approval: when: - param: amount op: '>' value: 1000 requestBody: content: application/json: schema: type: object properties: amount: type: number ``` 校验器会拒绝无法解析或存在歧义的条件路径,也会拒绝依赖 JSON 隐式类型 转换的比较值。 完整的 [订单服务示例](examples/openapi-order-service.yaml) 在同一份 OpenAPI 文档中演示了只读、写操作、条件审批、审计和禁用操作。 ## 这个工具会检查什么 - OpenAPI `3.0.x` 和 `3.1.x` 的 YAML 或 JSON 文档; - `x-agent-capability` 是否放在 operation 层; - ACC v1 声明结构; - 当前文件和本地文件 `$ref`; - OpenAPI parameter 与 JSON 请求体属性的输入映射; - `approval.when.param` 能否解析、是否存在歧义; - 比较操作符与 JSON Schema 类型是否兼容; - 机器可读诊断和稳定退出码。 ## 这个工具不声称什么 - 它不是完整的 OpenAPI 校验器或 Linter; - 它不会拉取远程 `$ref`; - 它不判断动态业务权限; - 它不执行审批工作流或业务操作; - 通过作者校验不等于获得 ACC 实现认证。 下一步可以阅读 [OpenAPI Binding](bindings/openapi.md) 和 [实现者指南](IMPLEMENTER_GUIDE.md)。 --- Source: https://agentcapability.org/zh-CN/concepts/ Repository file: CONCEPTS.zh-CN.md --- # 核心概念 ## A2B:Agent-to-Business **A2B(Agent-to-Business)** 是指 Agent 安全、可治理地接入现有业务系统,代表真实业务主体查询数据、创建请求、修改状态或启动业务流程的场景。 A2B 不只是工具调用,还包括: - 业务侧身份和最终授权; - 路由与场景边界; - 能力声明; - 风险与审批意图; - 审计和追踪; - 签名与调用问责; - 业务系统继续保留最终裁决权。 简短表达: ```text A2B = Agent 通过现有业务系统安全地完成真实业务工作。 ``` ## ACC:Agent Capability Contract **ACC(Agent Capability Contract)** 是 A2B 场景下的能力声明契约。 ACC 回答: - 哪项业务能力可以暴露给 Agent? - 能力属于哪个作用域? - 操作具有怎样的风险等级? - 是否必须绑定真实业务主体? - 是否需要表达人工审批意图? - 哪些信息需要脱敏或审计? - 运行时应保留哪些执行语义? ACC 不执行能力,只声明能力边界。 简短表达: ```text ACC 是 A2B 场景下的能力声明契约。 ``` ## 三者关系 ```text A2B 是问题场景。 ACC 是开放契约。 不同实现把 ACC 声明转换为运行时行为。 ``` ## 为什么这些问题会反复出现 Agent 可以只做内部推理、生成尚未生效的草稿或进行模拟。当 Agent 的行动跨越以下任一边界时,治理问题开始具有结构性: - **后果边界**:行动会读取受控数据、修改状态、发送消息、移动资金或产生其他现实后果; - **授权边界**:行动会使用用户、组织、应用或外部系统授予的权限; - **信任边界**:声明方、决策方、执行方和最终授权方并不处在同一信任域。 跨越这些边界的系统会反复遇到能力触达、行动主体、后果等级、人工介入、责任追溯和执行语义问题。某项低后果操作可以不要求主体或审批,但“无需主体、无需审批”本身也应是一个明确的治理结论。 这组问题比任何单一传输协议或 Binding 更广泛,但这并不表示 ACC v1 已经治理所有 Agent 行动,也不表示当前字段可以原样复制到 MCP、A2A、App Intent、操作系统权限或跨组织委托中。ACC v1 继续是 A2B 业务操作的具体契约,首个 Binding 继续是 OpenAPI。更广泛的适用性需要独立 Binding、失败语义、实现证据和公开 Proposal 审查。 ## 相邻术语 | 术语 | 含义 | 与 ACC 的关系 | |---|---|---| | A2A | Agent-to-Agent 协作 | 相邻问题,不属于同一协议层 | | MCP | 暴露和调用工具、资源与提示的协议生态 | 可以与 A2B 组合,但自身不等于业务操作治理契约 | | ACC | A2B 能力声明契约 | 定义可移植的业务能力治理元数据 | | ACC Runtime | 解析、校验或执行 ACC 声明的实现 | 属于运行时实现,不是契约本身 | ## 范围说明 ACC v1 是 A2B 系统中一份具体、机器可读的能力声明契约。它独立于任何产品实现进行维护,任何实现都不会因为支持 ACC 而成为标准本身。 前面这些治理问题可能在其他 Agent 行动环境中反复出现,这为后续研究和独立 Binding 提供了方向,但不会把 ACC v1 当前的兼容性声明扩大到已公布的 A2B 范围之外。 --- Source: https://agentcapability.org/zh-CN/design-rationale/ Repository file: DESIGN_RATIONALE.zh-CN.md --- # ACC 设计依据与边界 [English](DESIGN_RATIONALE.md) 状态:非规范性设计依据 适用于:ACC v1 ACC 有意保持一份小而明确的契约。小不等于残缺,而是规范核心只包含独立运行时能够一致理解、又不依赖某个产品数据库、UI、身份模型、审批系统或部署拓扑的语义。 规范性行为以 [SPEC.md](SPEC.md)、版本化 Schema 和 Binding 文档为准。本文解释一些有价值的平台与业务能力为什么没有成为 ACC 核心字段。 ## 1. 一句话边界 ```text ACC 声明面向 Agent 的能力边界。 运行时治理能力暴露与调用过程。 业务系统保留最终裁决权。 ``` ACC 回答 Agent 运行时理解业务能力时必须知道的内容:是否暴露、策略 scope、后果风险、主体要求、审批意图、审计敏感性、执行提示和模型可读指引。 ACC 不试图描述整个 A2B 控制面。 ## 2. 核心字段准入测试 一个字段只有同时满足以下条件,才适合进入 ACC 核心: 1. 它会改变可移植的 Agent 治理语义。 2. 相互独立的 Parser 或 Runtime 能实现相同含义。 3. 不依赖某个产品的私有数据库、UI、身份目录或工作流,就能测试其行为。 4. 目标 Binding 的原生标准协议与 Schema 机制不能已经清晰表达它。 5. 它不要求运行时成为最终业务授权方。 6. 旧运行时忽略它时不会静默降低安全性,否则必须进入新的 major 兼容家族。 这六项是必要条件,不是充分条件。全部满足只代表提案具备进入治理评审的资格,并不意味着该字段必然进入 ACC 核心。 治理评审还会判断: - 是否在多个独立实现环境中出现了可验证的共同需求; - 是否已经收敛为最小、稳定的语义增量; - 是否更适合放在 Binding、实现扩展或相邻规范; - 默认值、优先级、失败和安全语义是否完整; - 向后兼容与生态实现成本是否可接受; - 是否具备实现证据和机器可读 Conformance 测试向量。 字段更多不代表规范更好。无法通过这组测试的字段,只会让声明看似可移植,却把隐藏假设强加给每个实现。 ## 3. 已知但有意不进入 ACC 核心的问题 | 问题 | 为什么不是 ACC v1 核心字段 | 正确责任层 | |---|---|---| | 最终用户权限 | 角色、ABAC、归属权、数据权限和账号状态都具有业务特性并随时间变化。 | 业务授权层 | | 租户或商户隔离 | 绕过 Agent 运行时直接调用 API 时,隔离仍必须成立;网关注入参数不是安全边界。 | 业务数据层与授权层 | | 身份表达 | Session、JWT Claim、服务主体、证书、目录组和签名票据不能互相等同。 | 运行时身份桥与业务系统 | | 审批人和审批流程 | 审批人、会签、委托、过期、UI 和升级路径取决于组织流程。 | 外部审批所有者 | | 跨跳主体连续性与委托 | 一个主体布尔要求无法证明身份在多个 Agent、运行时、组织、签发者和信任域之间保持不变。 | 身份、委托或协议 Binding 层 | | 可独立验证的审批证据 | 规范化字节、签名、签发者密钥、时效和防重放需要完整的证据协议与威胁模型。 | 审批证据、证明或委托层 | | 业务拒绝规则 | 黑名单、订单状态、库存、退款额度和合同限制需要权威业务数据。 | 业务策略与授权层 | | 跨字段与上下文不变量 | “退款额不超过当前可退余额”等规则需要新鲜且经过授权的业务状态。 | 业务操作或预检 API | | 上下文取值 | 数据来源、读取授权、时效、失败和缓存需要单独的数据访问契约。 | 运行时集成或业务 API | | 审计保留与 legal hold | 保留时长、归档、删除与法律保全是组织级合规策略。 | 部署与合规策略 | | 字段级审计脱敏 | ACC v1 只声明整体敏感性;请求/响应路径、数组、引用和保守回退仍需形成可移植设计证据。 | OpenAPI Schema 标注、运行时策略或未来 ACC Proposal | | 通用布尔条件组 | ACC v1 有意使用有限的 ANY 条件;嵌套布尔策略仍需定义优先级、兼容和 fail-safe 语义。 | 运行时策略引擎或未来 ACC Proposal | | 详细 effect 或业务 domain 分类 | `execution.readonly` 已表达最可移植的状态变更差异。破坏性、增量式、开放世界和业务域标签与 Binding 原生元数据存在重叠,也可能不互斥,目前尚未形成稳定的跨行业语义。 | Binding 原生标注、声明检查工具、实现扩展或未来基于证据的 Proposal | | 审批 UI 或二次确认 | 部分运行时是无 UI 的网关、队列或确定性工作流。 | 运行时或审批产品 | | 回滚与补偿 | 补偿不一定是一次反向调用,还涉及授权、状态、幂等和工作流语义。 | 事务、Saga 或工作流层 | | 工具组合与顺序 | 前置条件、编排与多步骤事务构成另一类工作流或规划契约。 | 工作流或编排层 | | 存储、队列、签名、指标与成本 | 它们是重要控制面能力,但不改变可移植的声明含义。 | 运行时实现 | | HTTP、RPC、消息队列或 MCP 传输 | 同一 ACC 声明可以在多种调用传输之前被消费。 | Binding、适配器或传输规范 | 这些问题不进入 ACC,并不代表它们不重要。这样划分是为了避免 ACC 对只有业务系统或部署方才能兑现的责任作出虚假保证。 ## 4. 小不等于含糊 一份小契约仍然必须具备精确语义。因此 ACC 明确定义: - 必填字段与 JSON 类型; - `enabled`、`scope` 和可信主体可用性对应的暴露要求; - 严格、类型敏感的审批条件比较; - 不支持版本与未知字段的安全处理; - 模型可控输入与可信治理元数据之间的边界; - Conformance Profile 与可观察结果。 如果同一份声明能被两个合规实现解释成相反含义,那是规范缺陷,应该修正。如果两个组织有意把相同风险分类映射成不同本地审批流程,那是部署策略差异,不是可移植性缺陷。 ### 4.1 为什么 ACC v1 使用紧凑的风险分类 `risk.level` 描述允许 Agent 自动发起某项操作时最坏的合理后果。它是可移植的分类结果,并不意味着所有风险成因都已经能够被标准化。 状态变更、破坏性、资金流转、权限修改、外部通信或业务领域等候选因素,可能有助于声明编写与诊断,但不天然适合成为核心字段: - 同一个操作可能根据参数和当前业务状态产生多个不同效果; - 行业领域彼此重叠,无法稳定映射为一套全球通用的风险策略; - OpenAPI 方法、ACC execution 提示、MCP annotation 和未来 Binding 可能已经携带含义相近但信任语义不同的元数据; - 如果新运行时依据可选因素升级 `risk.level`,而旧运行时忽略这些因素,兼容回退可能变得更不安全。 实现可以先通过带命名空间的扩展或 lint 规则验证这些因素。未来 Proposal 必须在任何因素进入 ACC Core 前,定义确定性行为、优先级、保守回退,并提供来自独立 Binding 的实现证据。 ### 4.2 为什么 guidance 保留在能力契约中 面向 Agent 的能力不仅需要被治理,也必须能够被正确选择。`guidance` 提供补充性的模型可读选择上下文,同时始终保持非权威、非安全策略的定位。 当 Binding 原生的 Schema、描述和示例机制已经能够准确表达 API 时,应优先复用这些标准机制。ACC guidance 不能替代请求或响应 Schema,不能与 Binding 原生描述相矛盾,也不能成为授权策略。每个 Binding 负责定义原生描述元数据与 ACC 补充 guidance 之间的映射和优先级。 ## 5. 边界示例 ### 可移植声明 ```yaml approval: when: - param: amount op: ">" value: 10000 ``` 调用参数和字面量阈值都在 operation 契约中,运行时不需要私有业务数据就能评估。 ### 业务不变量 ```text 退款金额 <= 当前订单可退余额 ``` 当前可退余额属于权威业务状态。即使 API 没有经过 Agent 运行时,业务操作也必须验证它。 ### 可信主体要求 ```yaml subject: required: true ``` ACC 声明匿名或不可信调用不能接受,但不强制主体必须通过 JWT、签名票据、服务账号或其他特定形式传递。 ## 6. 为什么 ACC 不定义通用策略引擎 一门通用策略语言需要类型系统、表达式语法、权威数据来源、数据读取授权、时效规则、确定性失败语义和沙箱。半成品表达式语言只会制造“已经能够执行”的假象,实际仍由各运行时自行解释。 ACC v1 只使用对已声明调用参数进行判断的有限、类型安全条件。运行时可以在明确的私有策略命名空间中集成更强的策略引擎,但不能把它冒充为可移植的 ACC 行为。 ## 7. 安全演进 未知字段可被忽略,保证旧运行时能够解析较新的声明。但这不代表每个新安全字段都天然向后兼容。 影响能力暴露、审批、授权边界或脱敏的新字段,只有在旧运行时忽略它时仍然 fail-safe,或者声明同时携带旧运行时认识的保守回退时,才能进入同一个 major 家族。否则必须进入新的 major 契约家族或引入明确的能力协商。 例如: - 可选的条件组合提示,如果旧运行时回退后只会产生更多审批,可以兼容演进。 - 新脱敏字段如果被旧运行时忽略后会记录原始敏感值,就不能只凭“字段可选”判断为兼容;它需要既有的整体敏感标记作为回退,或新的兼容边界。 ## 8. 如何提出更强的表达能力 一个新字段提案应包含: - 能跨多个实现成立的问题,而不是某个产品的内部需求; - 为什么 Binding 原生标准字段或实现扩展不能解决; - 完整字段、交互、优先级和失败语义; - 与既有字段的关系; - 向后兼容与 fail-safe 分析; - Parser 与 Runtime Conformance 测试向量; - 不依赖某个产品私有架构的示例。 新能力可以先作为实现扩展存在。被真实实现验证过、具备可移植语义且能够测试的部分,可以再按照 [CONTRIBUTING.md](CONTRIBUTING.md) 的流程提议进入 ACC。 --- Source: https://agentcapability.org/zh-CN/safety-governance/ Repository file: SAFETY_GOVERNANCE_GUIDE.zh-CN.md --- # 安全治理责任说明 Status: Non-normative guidance(非规范性指南) 适用:ACC v1,规范修订 1.0.5 参考资料复核日期:2026-09-15 [English](SAFETY_GOVERNANCE_GUIDE.md) ACC 描述业务能力。合法声明是治理的输入,不证明发布者可信、执行已获授权或应用安全。本指南帮助网关、工作流、SDK 和智能体运行时划分责任,选择对应的验收证据。 ACC 语义仅由 [SPEC.md](SPEC.md)、[Binding](bindings/README.md) 和版本化 Schema 定义。下文的 **Normative reference(规范引用)** 指向已有规则;**Recommended(建议)**、**Optional(可选)**、**Example(示例)** 是实现指导,不新增 ACC 义务。本指南不增加字段、兼容性 Profile、认证或使用 ACC 的地区性条件。 ## 1. 从一个业务任务开始 **Example:**“给选定的 100 件商品更新图片和文案,读取库存核对;禁止改价和调整库存。” 商品与库存服务分别声明能力。ACC 可以描述各能力的 scope、风险、主体要求、审批意图及执行/审计提示。允许操作的对象、字段、累计影响、选定服务身份和任务停止条件,由运行时及权威业务策略管理。智能体的计划或展示名称不能授予这些权限。 **Recommended:**结合[商城与库存工作表](examples/BUSINESS_RISK_EXAMPLES.zh-CN.md)评审任务,分别准备三类材料: 1. 发布者审阅的声明及 Binding 原生操作定义。 2. 部署中实际生效的授权、审批及任务控制。 3. 对准确实现版本和操作真正执行过的验收证据。 [参考向量覆盖索引](conformance/v1/COVERAGE.zh-CN.md)说明了仅凭语料能确认的有限范围。 ## 2. 分清来源、数据与权限 **Normative reference:**[SPEC 第 4.5、4.9、5 节](SPEC.md#5-runtime-conformance)规定主体信任、guidance 不作为安全策略,以及模型文本不得覆盖治理决策。 **Recommended 实现边界:** | 输入 | 可以用于什么 | 不能据此确认什么 | |---|---|---| | 通过已认证、具备发布权限的管理配置接收的治理声明 | 校验声明并对已知操作构建能力模型 | Schema 合法不证明发布者身份或实现没有恶意。 | | 工具名、对象展示名、description、`guidance` | 帮助调用者理解和选择能力 | 它们不是授权身份、审批决定或可执行安全策略。 | | 网页、文件、业务文本及其他工具结果 | 解释业务数据、核实操作结果 | 其中的指令不能升级为可信治理规则。 | | 已更新的声明或参数结构 | 触发明确的变更检查和重新验证 | 更新不能默默改变已审批调用的参数或目标。 | | 已缓存或已加载的工具 | 在任务有效时减少重复发现 | 缓存不证明当前权限、主体信任或操作版本仍然有效。 | **Recommended:**一起保存发布者身份、带 Binding 限定的操作身份、声明/参数结构版本及审阅记录。摘要可以识别字节变化;没有可信来源认证时,摘要不能证明发布者可信。ACC 不定义签名格式、信任根或凭证字段。 **Recommended:**长任务中可以保留有效工具,不必把每次搜索当作安全重置。调用时核验可信目标和适用策略,按实现明确的生命周期使变更或撤销的条目失效。工具说明变化不代表可以重复执行结果未知的写操作;应使用实现层的原调用恢复机制。`idempotent` 不创建恢复协议,也不证明请求没有到达业务系统。 ## 3. 责任与证据映射 下表是对中国[《人工智能安全治理框架 3.0》(2026-09-14 发布)](https://www.cac.gov.cn/2026-09/14/c_1791137092283345.htm)部分方向的解释性映射。附件 2 条目引用其“二、防范措施”的编号。[官方全文](https://www.cac.gov.cn/rootimages/uploadimg/1791137114683961/1791137114683961.pdf)。 框架是本次评审的参考,不是 ACC 的唯一依据或 ACC 认证方案。下表实现与证据列属于 **Recommended 评审方式**,不表示框架指定了 ACC 或某种产品设计。法律、行业规则和部署义务的适用性需要另外评估。 | 框架相关方向 | 已有 ACC 依据 | 运行时责任 | 业务系统责任 | 宿主/部署责任 | 可验收证据 | 不能声称的保证 | |---|---|---|---|---|---|---| | 风险评估:附件 1;附件 2,II.1 | §4.4 `risk`;§4.6 逐次审批条件 | 执行有效风险/审批策略,另行评估累计任务影响 | 根据当前业务状态审阅后果 | 评估应用用途、自主程度、规模和部署场景 | 业务所有者审阅的工作表、边界与批量测试 | ACC 风险值不是应用风险等级。 | | 身份与任务权限:II.2 | §§4.2–4.3 `enabled`、`scope`;§4.5 `subject` | 将选定能力绑定到已验证主体及任务策略 | 每次调用重新判断主体及对象权限 | 建立身份、凭证生命周期及跨边界信任 | 未选/撤销目标拒绝;恢复仍保留原身份 | scope 或主体标识不是最终授权或端到端委托。 | | 人工控制:II.3 | §4.6 `approval`;§5 | 派发前评估意图,将审阅绑定到目标及参数 | 负责审批人权限和业务审批规则 | 提供审批服务及不可用/过期时的处理策略 | 参数变更被拒;审批不可用不能放开派发 | 声明需要审批不证明有人已审批。 | | 工具与供应链:II.4 | §4.1 版本;原生参数结构;§4.9 guidance;§5 | 核验批准的操作材料,处理版本变化而不改变在途调用 | 发布准确业务语义和变更 | 维护来源信任、依赖检查及漏洞响应 | 发布者/版本记录;参数变更、结果投毒测试 | ACC 元数据合法不证明工具或供应链安全。 | | 运行时控制:II.5 | §4.8 执行提示;§4.6 累计影响边界 | 执行任务限制、暂停新派发,区分在途/结果未知 | 管理余额、库存约束、并发和支持的恢复方式 | 隔离本地执行、网络及任务凭证 | 并发预算、派发前暂停、原调用恢复测试 | 频率提示不是累计影响限制;取消不等于回滚。 | | 监测与数据:II.6 | §4.7 审计;§5 | 脱敏保存必要的调用/决策/结果证据 | 识别敏感业务字段,保护结果访问 | 确定保留、存储、导出、事件处理和证据验证策略 | 脱敏导出、访问、保留/删除测试;有声明时的防篡改检查 | 敏感提示或运行时日志不证明完整脱敏、完整历史或独立可信。 | | 停用:II.7 | 无 ACC 生命周期字段;§§4.5、4.7 仍相关 | 停止新派发,按需保留原调用关联以便核对 | 撤销相关授权,按业务规则处理已接受操作 | 停止所管进程、撤销凭证,保留/删除必要数据 | 停用/撤销测试及在途操作的明确说明 | ACC 不能终止不受其管理的宿主进程或撤回已接受的业务影响。 | ## 4. 不同层次的风险分别评审 **Normative reference:**ACC 的 `low`、`medium`、`high` 按 [SPEC §4.4](SPEC.md#44-risk)描述自动发起单操作的合理最坏后果。框架的应用五级风险有不同的评估范围,二者没有无条件换算表。 **Example:**编辑一件尚未发布的商品草稿,与自主发布数千件商品变更的影响不同。重复单对象操作不会自动把累计风险编码进声明。[SPEC §4.6](SPEC.md#46-approval)已经把累计控制交给权威业务或策略层。 **Recommended:**区分用户长期授权与具体任务权限。任务可进一步限定服务、对象、操作、字段和时间。任务结束可以终止其执行权限;实现仍可允许经授权核对原调用结果。任务凭证及其序列化格式都不属于 ACC v1。 **Optional:**部署可以提供任务预算、暂停控制或独立可验证证据。这些功能需要单独定义并发、防重放和失败语义。界面标签或一个 invocation ID 本身不能建立这些保证。 ## 5. 准确说明已经证明什么 **Recommended:**使用[自评模板](conformance/SELF_ASSESSMENT.md)公布 ACC 修订、实现提交或包哈希、所选 [Profile](conformance/PROFILES.md)、测试入口、观测结果及未测试范围。 声明校验器或参考 oracle 通过不代表生产运行时已验收。对齐框架不证明法律合规、认证、官方背书或独立采用。某个运行时的证据不自动适用于所有 ACC 实现。 数据驻留、保存期限、内容标识、模型安全、本地沙箱和行业审批仍由部署或互补系统负责。ACC 的审计提示不要求上传所有聊天附件,也不要求保存模型私有推理。应按真实目的和适用规则,分别定义必要业务证据、可见会话记录及可复用文件。 --- Source: https://agentcapability.org/zh-CN/business-risk-examples/ Repository file: examples/BUSINESS_RISK_EXAMPLES.zh-CN.md --- # 商城与库存风险工作表 Status: Non-normative examples(非规范性示例) 适用:ACC v1,规范修订 1.0.5 [English](BUSINESS_RISK_EXAMPLES.md) 这两份合成 OpenAPI 服务展示业务前提下的评审选择,不是通用零售风险评级、已实现服务或跨系统执行证据。实际业务所有者在采用前需要审阅自身数据、后果、权限和审批规则。不能仅从 HTTP 动词或名称推断风险。 - [商品服务](openapi-catalog-service.yaml):编辑草稿、上架商品、修改价格。 - [库存服务](openapi-inventory-service.yaml):查询库存、调整库存。 - [治理责任说明](../SAFETY_GOVERNANCE_GUIDE.zh-CN.md):ACC、运行时、业务与部署边界。 ## 示例业务前提 一个商品租户使用固定币种。所有操作需要可信主体,业务系统仍独立检查该主体的当前权限。草稿编辑不能影响已上架商品,不能改价或调整库存。上架与库存调整每次都需要审批。改价采用示意性的绝对价格条件,并叠加权威的折扣和毛利策略;ACC 高风险本身不规定一种通用审批流程。 示例服务的 description 描述假设实现应履行的职责,YAML 本身不执行这些职责。对象 ID 限定在各自服务及租户中,同名或相同 ID 不会关联跨系统权限。示例不包含凭据或真实服务地址。 ## 各操作的评审选择 下表每项都是 **Example**,不新增 ACC 规则。“审阅者”是业务角色,实际采用时应指定责任人。 | 操作与对象 | 单操作合理最坏后果;是否对外生效 | ACC 选择 | 主体与最终 Authority | 自主程度与批量场景 | ACC 之外的参数/累计控制 | 恢复前提 | 审阅者 | |---|---|---|---|---|---|---|---| | `editProductDraft`:一个未发布商品 | 草稿文字/图片错误,产生返工;尚未公开 | `medium`;可信主体;无无条件 ACC 审批 | 已验证编辑者;商品后台校验租户/对象及草稿状态 | 选定任务内允许编辑;100 次变更需单独累计评审 | 可改字段、URL 策略、对象集、版本冲突;按明确任务策略统计受影响对象及变更尝试 | 业务快照可能支持恢复,但需版本/冲突校验;不是自动回滚 | 商品负责人 | | `publishProduct`:一个草稿及渠道 | 错误商品公开,可能被购买 | `high`;`approval.required: true` | 已验证发布者;业务校验审批人、渠道和上架条件 | 本示例每次调用前人审;任务授权不能绕过 | 冻结目标/渠道/版本;批量发布另设限制 | 下架能限制后续影响,不能撤销既有购买或曝光 | 商品运营负责人 | | `changeProductPrice`:一个商品 | 经济损失或错误公开价格 | `high`;`price_minor > 100000` 触发条件审批 | 已验证定价主体;业务按当前价格、毛利和折扣判断 | 独立定价任务;下文100件商品内容任务禁止使用 | 整数最小货币单位;服务端计算降价;对象/版本核验;按业务状态评估累计价格影响 | 恢复旧价也需新的授权及版本校验;原购买不受撤回 | 定价负责人 | | `getStock`:一个仓库/SKU | 泄露商业敏感库存;无业务变更 | `low`;`readonly: true`;`audit.sensitive: true` | 已验证读取者;库存系统校验租户/仓库 | 限选定仓库读取;反复读取不授予枚举权限 | 逐对象权限、结果最小化、查询量和导出策略 | 有权限可重读;库存结果可以正常变化 | 库存数据负责人 | | `adjustStock`:一个仓库/SKU | 超卖或可用量失真,影响订单和履约 | `high`;delta 条件不命中也无条件审批 | 已验证操作员;库存系统校验审批人及库存规则 | 每次调整人审;与只读库存任务分离 | 非零整数 delta;预留/非负库存;预期版本;累计调整 | 重复 delta 不安全;先核对原操作;补偿调整需审阅当前状态 | 仓储运营负责人 | ### 审批与参数细节 **Normative reference:**[SPEC §4.6](../SPEC.md#46-approval)。 - `approval.required: true` 无条件生效。库存调整即使 `delta: 1` 也触发审批意图,附加条件不能豁免它。 - `required` 为 false 或省略时,任意条件命中即产生审批意图。价格示例中 `100001` 命中、`100000` 不命中;单位是整数最小货币单位,不是界面展示金额。两种结果都不能覆盖业务授权、折扣审批或更严格的运行时策略。 - `"100001"` 这种字符串不符合整数参数要求,不能隐式转换或当成条件不匹配放行。 - 改价接口不接受模型自报折扣比例作为权威依据。降价幅度由服务端按当前价格计算。逐次绝对价格条件既不计算该幅度,也不控制多次调用累计影响。 - 参数留在 OpenAPI `parameters` 和 `requestBody` 中。`expected_version` 是示例业务参数,不是 ACC 字段,也不证明服务端已经实现并发控制。 全部示例写操作声明 `idempotent: false`,不承诺可安全重试。稳定调用 ID、HTTP 方法或预期版本字段本身不提供业务幂等。若写请求可能已到服务端,应沿原执行关联取得权威结果,再决定后续操作。只读操作可用相同参数重试,但库存观测值可能变化。 ## 一个涉及两个系统的任务 **Example 任务:**“给选定的 100 件未发布商品更新图片和文案,读取库存核对;禁止改价和调整库存。” 以下 **Recommended 实现工作表**放在 `x-agent-capability` 之外: | 任务项 | 执行前需要确定的内容 | 应检查的证据 | |---|---|---| | 原目标 | 已选商品/库存服务身份及各自可信主体、租户;有需要时审阅 SKU 映射 | 未选系统零请求;相同 ID 不切换到其他目标 | | 允许工作 | 商品草稿文案/图片修改及库存查询;明确商品/仓库集 | 改价、调整库存、编辑已上架商品、集合外对象均被拒 | | 批量与并发 | 明确预算按对象、调用、变更还是失败计量,派发前原子预占 | 并发不超预算;原调用恢复不能重置或重复扣额度 | | 人工控制 | 预览任务边界;保留逐操作原审批;意外扩大时暂停新派发 | 暂停能拦住新调用,并准确报告已接受、待处理、失败和结果未知 | | 完成与恢复 | 保留原目标及执行关联,展示部分完成 | 结果未知的写操作先核对,不能改目标重复执行 | | 证据与数据 | 脱敏保存必要决策/结果;会话和文件存储策略分别管理 | 凭据不进入日志;业务所需图片 URL 不要求归档所有聊天附件 | 本工作表没有为 ACC 增加 `task_budget`、`autonomy_level` 或对象白名单字段。两份声明也不实现跨系统事务或保证回滚。已有语义覆盖和缺少的实现测试见[覆盖索引](../conformance/v1/COVERAGE.zh-CN.md)。 ## 校验声明 在已经安装依赖的源码工作区运行: ```bash node bin/acc-validate.mjs examples/openapi-catalog-service.yaml node bin/acc-validate.mjs examples/openapi-inventory-service.yaml npm run check ``` 作者校验器检查 ACC 提取及声明/条件诊断,不是完整 OpenAPI 校验器或业务集成测试。仓库新增示例不会自动包含在当前 npm 包的显式文件清单中。 --- Source: https://agentcapability.org/zh-CN/conformance-coverage/ Repository file: conformance/v1/COVERAGE.zh-CN.md --- # ACC v1 覆盖与实现证据索引 Status: Non-normative coverage index(非规范性覆盖索引) 语料:`vectors.json`,格式版本 1,规范修订 1.0.5 [English](COVERAGE.md) 本索引说明已有 26 个参考向量,不改变预期结果或参考 oracle。规范义务及建议以 [SPEC.md](../../SPEC.md) 和 [OpenAPI Binding](../../bindings/openapi.md) 为准;先选定适用 [Profile](../PROFILES.md)。 ## 不同证据能证明什么 - `npm run conformance:check` 用参考 oracle 检查语料;成功仅代表**语料内部一致性**,不是网关、SDK 或生产运行时验收。 - 实现适配器需要通过公共接口输入适用向量并观测结果。本索引未执行外部实现,因此实现证据为 **Not run(未运行)**。 - 决策是否真正阻断派发、主体是否正确、日志是否实际脱敏持久化、失败后能否恢复,需要集成证据。[自评模板](../SELF_ASSESSMENT.md)分别记录这些结论。 审批向量中的 `allow` 仅表示本条件未产生审批意图,不授予最终权限。`scope_allowed` 和 `trusted_subject` 是给定的抽象输入,不是身份校验或网络观察结果。 ## 已有向量 每行都有抽象向量,末两列指真实实现而非 oracle。章节号指 SPEC,另有明确标记的 OpenAPI Binding 章节。 | ID | 已有语义依据 | 抽象向量覆盖的观察 | 预期结果 | 仍需实现证据 | 实现状态 | |---|---|---|---|---|---| | `T-PARSE-01` | §§4.1–4.3, 6 | 最小 ACC v1 声明合法。 | `valid=true` | 解析器接口的提取及诊断 | Not run | | `T-PARSE-02` | §§4.1–4.3, 6 | 缺少 scope 非法。 | `valid=false, diagnostic="invalid_declaration"` | 解析器接口的提取及诊断 | Not run | | `T-PARSE-03` | §§4.1–4.3, 6 | 未知主版本被拒绝或跳过并产生诊断。 | `valid=false, diagnostic="unsupported_version"` | 解析器接口的提取及诊断 | Not run | | `T-PARSE-04` | §§4.1–4.3, 6 | 未知字段不导致声明非法。 | `valid=true` | 解析器接口的提取及诊断 | Not run | | `T-PARSE-05` | §§4.1–4.3, 6 | 缺少 version 是非法声明,不是未知版本。 | `valid=false, diagnostic="invalid_declaration"` | 解析器接口的提取及诊断 | Not run | | `T-EXPOSE-01` | §§4.2–4.3, 4.5, 5 | 禁用的能力不暴露。 | `exposed=false` | 真实目标/主体校验及派发边界 | Not run | | `T-EXPOSE-02` | §§4.2–4.3, 4.5, 5 | 要求可信主体但主体不可用时不暴露。 | `exposed=false` | 真实目标/主体校验及派发边界 | Not run | | `T-EXPOSE-03` | §§4.2–4.3, 4.5, 5 | scope 不在运行时策略内时不暴露。 | `exposed=false` | 真实目标/主体校验及派发边界 | Not run | | `T-EXPOSE-04` | §§4.2–4.3, 4.5, 5 | 启用、scope 允许且所需主体可用时暴露。 | `exposed=true` | 真实目标/主体校验及派发边界 | Not run | | `T-APPROVAL-01` | §4.6 | 无条件审批优先,条件不匹配不能取消。 | `decision="approval_required"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-02` | §4.6 | 第一个条件命中足以触发审批。 | `decision="approval_required"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-03` | §4.6 | 后续条件命中也足以触发审批。 | `decision="approval_required"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-04` | §4.6 | 全部条件不匹配时不产生条件审批意图。 | `decision="allow"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-05` | §4.6 | 参数类型不符合原生结构时拒绝调用。 | `decision="reject_invalid_arguments"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-06` | §4.6 | 空 when 数组不产生条件审批意图。 | `decision="allow"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-07` | §4.6 | in 使用严格 JSON 相等匹配数组成员。 | `decision="approval_required"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-08` | §4.6 | in 不把数值转换成字符串。 | `decision="allow"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-09` | §4.6 | 字符串 contains 使用子串匹配。 | `decision="approval_required"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-10` | §4.6 | 数组 contains 使用严格 JSON 相等。 | `decision="approval_required"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-11` | §4.6 | 数组 contains 不把数值转换成字符串。 | `decision="allow"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-12` | §4.6 | exists 命中存在且非 null 的值。 | `decision="approval_required"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-13` | §4.6 | exists 不命中缺失路径。 | `decision="allow"` | 决策接口及参数/派发绑定 | Not run | | `T-APPROVAL-14` | §4.6 | exists 不命中显式 null。 | `decision="allow"` | 决策接口及参数/派发绑定 | Not run | | `T-RISK-01` | §4.4; [OpenAPI input mapping](../../bindings/openapi.md#input-and-value-mapping) | OpenAPI GET 在未声明风险与 readonly 时默认低风险。 | `effective_risk="low"` | Binding 映射及有效策略保留 | Not run | | `T-RISK-02` | §4.4; [OpenAPI input mapping](../../bindings/openapi.md#input-and-value-mapping) | 非只读写操作省略风险时默认中风险。 | `effective_risk="medium"` | Binding 映射及有效策略保留 | Not run | | `T-AUDIT-01` | §4.7 | 保留 audit.sensitive 为 true 的提示。 | `audit_sensitive=true` | 提示传递;另外验证脱敏持久化 | Not run | 向量统计:声明 5、暴露 4、审批 14、风险默认值 2、审计提示 1,共 **26** 项。 ## 语料没有证明的部分 参考语料未穷尽规范或检查清单。缺少向量不取消规范义务;建议的部署控制也不会因为列在这里而成为 ACC 要求。 | 关注点 | 已有依据/性质 | 抽象语料覆盖 | 仍需证据 | 实现证据 | |---|---|---|---|---| | 给定样例之外的审批运算符和默认值 | SPEC §§4.4、4.6 及 OpenAPI Binding | 部分:样例取值,不是每种运算符/类型/默认值组合 | 对声明支持范围做边界及非法输入测试 | Not run | | timeout 与 rate-limit 提示映射 | SPEC §4.8 提示;映射属实现策略 | 无 | 实际窗口/超时及映射后的行为观察 | Not run | | 最终业务授权和跨跳主体核验 | SPEC §§2.1、4.5、5 | 仅抽象暴露布尔值 | 每个权威层对撤销、伪造、错误租户/对象的真实判断 | Not run | | 模型/工具结果文本不能覆盖治理 | SPEC §§4.9、5 | 无 | 经真实接收、选择及派发接口进行对抗输入测试 | Not run | | 审批意图与审批完成 | SPEC §4.6;实现指南 §7 建议绑定 | 仅抽象意图 | 审批人权限、冻结目标/参数、过期及失败路径观察 | Not run | | 累计业务影响 | SPEC §4.6;由业务/策略层执行 | 无 | 使用权威状态和明确限制的并发/批量测试 | Not run | | 敏感提示与实际日志 | SPEC §4.7;保留和证明属部署策略 | 仅一个广义敏感提示存在 | 持久化/导出前脱敏、访问、完整性、保留测试;有声明时的独立验证 | Not run | | 结果未知的写、取消、重开、防重放 | 实现恢复策略;§4.8 幂等是提示 | 无 | 保留原调用/目标,核对已接受/未知影响,证明没有不安全重放 | Not run | | 来源信任、本地沙箱、任务停用、数据驻留 | 互补实现/部署控制,不是 ACC 字段 | 无 | 明确责任人、策略及符合该部署的集成证据 | Not run | 生成器还需要对实际生成的 Binding 原生材料提供证据。抽象声明通过不等于完整 OpenAPI 文档或业务 API 的语义已验证。 ## 附上实现报告 **Recommended:**记录规范修订、语料提交或 SHA-256、实现提交/包哈希、适用 Profile、公共接口/适配器入口、日期、通过/失败/跳过/未运行 ID、证据链接和限制。解释每个跳过原因:“不适用”不同于“适用但未支持”。 不要将 oracle 输出复制成运行时验收,声称已经执行该运行时。实现自己的适配器和集成结果分别保留。[业务工作表](../../examples/BUSINESS_RISK_EXAMPLES.zh-CN.md)提供集成证据规划场景,不提供预先通过的测试。