Agent Graph Trust Protocol (AGTP) 2.1
Identity, provenance and learning signals for the agent graph
Editor's Draft, 3 September 2026
- This version:
- https://agtp.cc/2026/ED-agtp-2.1-20260903/
- Latest published version:
- https://agtp.cc/
- Latest editor's draft:
- https://github.com/vectoshi/agtp.cc
- Protocol repository:
- https://github.com/new-foundation/agtp
- Previous version:
- AGTP v2 specification text (repository README, 24 February 2026)
- Editors:
- The AGTP Consortium, convened by Newfoundation
- Feedback:
- GitHub issues · contact@newcoin.org
- Errata:
- No errata have been recorded for this draft.
- Companion pages:
- newcoin.org · Newcoin: Open Learning · Newcoin: Core Concepts
Copyright © 2024–2026 Newfoundation. Built with meaning in mind. AGTP is published as an open specification; licensing terms for this text and for the machine-readable artifacts are recorded in the specification repository. Terminology reused from W3C, IETF and community specifications remains governed by those specifications, which are authoritative for their own contents.
Abstract
The Agent Graph Trust Protocol (AGTP) defines the smallest set of interoperable primitives required for heterogeneous agents—human, software and hybrid—to coordinate and compound intelligence through verifiable feedback. Every agent is identified by a W3C Decentralized Identifier (DID). Every portable claim is a W3C Verifiable Credential (VC). The atomic unit of feedback is a signed Learning Signal; the atomic unit of policy is a signed Space Manifest; and a canonical provenance URI binds every evaluation to the content-addressed artifacts that make it reproducible.
AGTP does not define how agents execute, discover or describe their work. It defines how the outputs of the standards that do—the Model Context Protocol (MCP) for tool use, Agentic Resource Discovery (ARD) for finding and verifying resources, the Open Knowledge Format (OKF) for knowledge and context, and the DID and VC families for identity and proof—become portable, verifiable and composable evidence. Binding profiles map each of these standards, together with A2A, A2UI, AGENTS.md and Agent Skills, model-runtime APIs and ERC-8004 registries, into one canonical trust and learning layer.
Version 2.1 keeps the mandatory HTTP interoperability profile, the baseline cryptographic suite, canonical hashing for deduplication and replay controls introduced in version 2, aligns them with Verifiable Credentials 2.0 and Data Integrity, and adds a credential family, a discovery profile built on ARD and a knowledge profile built on OKF. Policy—aggregation, incentives, governance—stays at the edge, inside Spaces, so that pluralism does not fragment the substrate.
Status of This Document
This section describes the status of this document at the time of its publication. Other documents may supersede this document.
This document is an Editor's Draft of AGTP 2.1 prepared for the AGTP Consortium and published by Newfoundation. It consolidates the AGTP v2 specification text, the binding profiles developed during the 2026 convergence work and new profiles for Agentic Resource Discovery and the Open Knowledge Format into a single document laid out as a standards-track specification. It is not yet a Consortium Recommendation; it is published to gather implementation experience and review.
This document is not a product of the World Wide Web Consortium, the Internet Engineering Task Force, the Agentic AI Foundation, the A2A project, the ARD project or Google Cloud. It references specifications maintained by those bodies and does not modify them. Where a referenced specification changes, that specification prevails and this document will be updated through the change process in section 13.
Changes relative to AGTP v2 are listed in Appendix G. The most consequential are the alignment with Verifiable Credentials 2.0 and the Data Integrity cryptosuites, the introduction of the credential family (section 4.2), the discovery profile (section 7) and the knowledge profile (section 8). Producers and consumers of AGTP v2 objects remain conformant during the overlap window described in section 13.
Comments are welcome through the issue tracker of the specification repository or by email to the editors. Implementers are asked to report which conformance classes they claim (section 1.5) so that the conformance suite in Appendix D can be extended from real deployments.
1. Introduction§
This section is non-normative.
The web of documents is giving way to a web of coordinated compute, in which autonomous agents—human, software and hybrid—act, evaluate and learn from one another. What compounds intelligence across such heterogeneity is not a single model or platform but a universal unit of feedback that any agent can issue, any agent can verify and any context can aggregate. AGTP defines that unit and the minimal substrate around it.
Superintelligence, on this reading, is already a distributed reality: billions of interacting agents sharing and updating beliefs. Its outputs are fragmented, trapped in proprietary silos that do not compound. Frontier labs increasingly treat the experience signal—logs, corrections, evaluations, telemetry—as the decisive input, and closed experience streams cannot be compensated for by open weights alone. What is needed is open learning: a substrate in which observation, action and feedback are exchanged in a standard form and compound across organisational boundaries.
AGTP is deliberately small. It standardises four things: identity for issuers and subjects, a signed Learning Signal as the atomic unit of feedback, a signed Space Manifest that declares how feedback is interpreted in a given context, and a provenance binding that makes feedback reproducible. Everything else—scoring formulas, staking, moderation, arbitration, economic policy—lives at the policy layer, inside Spaces or in systems built above them.
AGTP is also deliberately unoriginal. Wherever a widely implemented standard already solves a problem, AGTP reuses it and specifies only the mapping. Identity and proof come from W3C Decentralized Identifiers and Verifiable Credentials. Tool invocation comes from the Model Context Protocol. Discovery of tools, agents and knowledge comes from Agentic Resource Discovery. Knowledge and context come from the Open Knowledge Format. Agent-to-agent task exchange, human interfaces, repository policy, model-runtime APIs and on-chain registries are likewise mapped rather than replaced. Section 1.4 states precisely what is reused and what AGTP adds.
1.1. A Simple Example§
A verifier agent evaluates a solver agent's answer inside a Space that accepts an accuracy dimension. The verifier issues the Learning Signal below, delivers it to the solver's feedback service and to the Space, and receives a receipt. Anyone holding the signal can resolve the issuer's DID, verify the proof, check the credential's status, dereference the provenance URI and re-run the evaluation from the referenced artifacts.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://schema.agtp.org/context/v2"
],
"id": "urn:uuid:9f1c2a6e-3d0b-4b41-9a7e-5f0c7d2f1a10",
"type": ["VerifiableCredential", "LearningSignal"],
"issuer": "did:web:verifier.example",
"validFrom": "2026-09-03T10:15:00Z",
"credentialSubject": {
"id": "did:web:solver.example",
"subject": "did:web:solver.example",
"space": "did:web:rlvr.example",
"dimensions": ["accuracy"],
"value": 1.0,
"persistence": "persistent",
"provenance": "agtp://provenance?space=did:web:rlvr.example&interaction=urn:uuid:3b4f0d2c-6a1e-4f7b-9c1d-2e8a5b7f9d10&artifact=bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi,bafybeihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku",
"issuerRelation": "independent"
},
"credentialStatus": {
"id": "https://verifier.example/status/3#94567",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": "94567",
"statusListCredential": "https://verifier.example/status/3"
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-rdfc-2022",
"created": "2026-09-03T10:15:01Z",
"verificationMethod": "did:web:verifier.example#key-1",
"proofPurpose": "assertionMethod",
"proofValue": "z3FXQjecWufY46yg5abdVZsXqLhxhueuSoZgNSARiKBk9czhSePTFehP8c3PGfb6a22gkfUKods6H2BzmmMG7g8Bg"
}
}
Everything in this object except the six AGTP claims inside credentialSubject is plain Verifiable Credentials 2.0: the contexts, the type array, issuer, validFrom, credentialStatus and the Data Integrity proof. The DID method, the status list, the cryptosuite and the content identifiers in the provenance URI are all specified elsewhere. AGTP contributes the vocabulary, the provenance grammar, the delivery protocol and the rules for interpreting the signal inside a Space.
1.2. Design Goals§
AGTP is designed to meet the goals in the following table. Each goal is a constraint on this specification, not an aspiration for implementations.
| Goal | Description |
|---|---|
| Minimality | Standardise only identity, attestation, context declaration and provenance. Anything that can be a policy choice is a policy choice. |
| Reuse over reinvention | Adopt existing standards for every solved problem and specify only the mapping into AGTP objects. A profile never redefines the semantics of the standard it binds. |
| Verification, not belief | Every portable claim is signed, status-checked and bound to reproducible provenance. Consumers verify; they do not trust registries, scores or reputations they cannot recompute. |
| Policy at the edge | Dimensions, aggregation, admission, incentives and governance are declared per Space in a signed manifest, so that different communities can disagree without fragmenting the wire format. |
| Credible neutrality | The protocol carries no global reputation, no global dimension set, no mandated ledger and no privileged registry. It is mechanism only. |
| Portability | Signals, manifests, receipts and capability descriptors are self-contained credentials that can be stored, forwarded, indexed and anchored by anyone. |
| Reproducibility | Provenance binds an evaluation to content-addressed artifacts, so claims ship with the evidence needed to re-run them. |
| Privacy by construction | Ephemeral signals support private learning; persistent signals are distilled summaries; commitments allow selective disclosure without publishing traces. |
| Incremental adoption | A single agent, a single tool server or a single knowledge bundle can adopt AGTP without waiting for its counterparties; conformance classes are claimed independently. |
1.3. Architecture Overview§
The AGTP architecture is a set of planes. Each plane is owned by an existing standard except the learning plane, which AGTP defines. The identity and credential plane runs beneath all of them.
Reading the figure from the top: the intent and knowledge plane declares what an agent may do and what it knows. Repository policy in AGENTS.md, skills in SKILL.md, tool and function schemas, and organisational knowledge in OKF bundles are the sources. The discovery plane publishes those declarations where other agents can find them, using ARD entries served from a well-known path and indexed by registries. The runtime plane is where work happens: MCP tool and resource calls, A2A tasks, model-API runs and human-facing A2UI sessions produce raw observations and content-addressed artifacts. The learning plane, defined by this specification, is where those observations are evaluated inside a Space, expressed as Learning Signals, delivered with receipts, aggregated by the Space's declared rule and used for routing. The optional anchoring plane commits hashes of learning-plane objects to registries such as ERC-8004 for timestamping and censorship resistance. Beneath everything sits the identity and credential substrate: DIDs name agents and Spaces, DID Documents advertise their services and keys, and Verifiable Credentials with Data Integrity proofs make every claim verifiable.
1.4. Relationship to Other Standards§
The following table is the normative statement of intent behind every binding profile in this document: for each concern, which standard AGTP adopts unchanged, and what AGTP adds on top. Where a cell says "unchanged", implementations conform to the referenced standard directly and AGTP places no additional requirement on their behaviour under that standard.
| Concern | Standard adopted unchanged | What AGTP adds |
|---|---|---|
| Identity | DID Core [DID-CORE], DID methods, Controlled Identifiers [CONTROLLED-IDENTIFIERS] | Service types (AGTPFeedbackService, AGTPCapabilities, AGTPSignalIndex) and the requirement that every agent be reachable for feedback. |
| Claims and proofs | Verifiable Credentials 2.0 [VC-DATA-MODEL-2.0], Data Integrity [VC-DATA-INTEGRITY], EdDSA cryptosuites [VC-DI-EDDSA], Bitstring Status List [VC-BITSTRING-STATUS-LIST] | A credential family (Learning Signal, Space Manifest, Interaction Receipt, Capability Descriptor, Anchor Commitment), its JSON-LD context and JSON Schemas, and a canonical hash for deduplication. |
| Tool and resource invocation | Model Context Protocol [MCP] | Reserved _meta keys that carry Space, interaction and provenance identifiers; rules for turning catalogs into capability descriptors and executions into artifacts and observations. |
| Discovery | Agentic Resource Discovery [ARD] | An entry vocabulary for Spaces and feedback services, a DID binding for the trust manifest, and the rule that relevance scores never substitute for verified signals. |
| Knowledge and context | Open Knowledge Format [OKF] | Content addressing for bundles, a DID form for OKF actors, a mapping from verification events and attested computations to Learning Signals, and dimension registries published as OKF bundles. |
| Agent-to-agent tasks | A2A [A2A] | An A2A extension URI and metadata keys binding tasks to interactions and provenance; the rule that acknowledgements are not receipts and completion is not quality. |
| Human interfaces | A2UI [A2UI] | Separation of telemetry from evaluative judgments; privacy classes for UI evidence. |
| Policy and skills | AGENTS.md [AGENTS-MD], Agent Skills [AGENT-SKILLS] | Hash-addressed policy artifacts and capability descriptors derived from skill frontmatter. |
| Model-runtime APIs | OpenAI API conventions [OPENAI-API] | Reserved metadata keys; the distinction between usage telemetry and evaluated quality. |
| Anchoring and on-chain discovery | ERC-8004 [ERC-8004], CAIP-2 chain identifiers [CAIP-2] | An anchor commitment credential and a mapping from reputation and validation registry entries to signals and signal hashes. |
| Transport | HTTP [RFC9110], well-known URIs [RFC8615], Problem Details [RFC9457], DIDComm v2 [DIDCOMM-V2] (optional) | The /.well-known/agtp/ resources, nonce and idempotency semantics, receipts and error types. |
| Content addressing | CIDs, multihash and multibase [CID] [MULTIHASH] [MULTIBASE], RDF Dataset Canonicalization [RDF-CANON] | The agtp://provenance URI grammar and the signalHash definition. |
The complementarity is deliberate. In the words the ARD community uses for its relationship with MCP, discovery is the phone book and invocation is the call. AGTP is the ledger of what the call was worth: a signed, reproducible record of how the resource performed, written in a form that any other agent can verify and any Space can aggregate.
1.5. Conformance§
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples and notes in this specification are non-normative. Everything else in this specification is normative.
The key words MAY, MUST, MUST NOT, RECOMMENDED, SHOULD, and SHOULD NOT in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
This specification defines the following conformance classes. An implementation MAY claim any subset. The machine-readable descriptors for each class, and the identified requirements they aggregate, are in Appendix D.
- AGTP.Agent
- An agent identified by a resolvable DID whose DID Document advertises an
AGTPFeedbackService, and which implements the HTTP profile of section 9 for receiving signals and issuing receipts. - AGTP.Space
- A Space that publishes a signed Space Manifest, serves it with cache validators, and applies its declared aggregation rule to accepted signals.
- AGTP.SignalProducer
- A component that constructs, signs and delivers Learning Signals in accordance with section 5.3, section 6 and section 10.
- AGTP.SignalConsumer
- A component that verifies proofs, status and provenance grammar, deduplicates by
signalHashand applies the Space's aggregation rule or the reference default. - AGTP.CapabilityPublisher
- A component that derives Capability Descriptors from MCP catalogs, A2A Agent Cards, Agent Skills, API tool schemas or OKF attested computations, and publishes them as ARD entries in accordance with section 7.
- AGTP.KnowledgePublisher
- A component that publishes OKF bundles as content-addressed artifacts, expresses OKF actors and verification events in the AGTP forms of section 8, and accepts signals about its concepts.
- AGTP.DiscoveryRegistry
- An ARD registry that performs the DID-based verification of section 7.2 before ranking or federating entries that carry AGTP claims.
- AGTP.ExecutionIntegrator
- A component that maps MCP, A2A, model-API or A2UI activity into Observation Records and Artifacts in accordance with the binding profiles of section 12.
- AGTP.AnchorIntegrator
- A component that batches signal hashes into Anchor Commitments and publishes them through ERC-8004 or another ledger in accordance with section 12.10.
A conforming AGTP document is a Learning Signal, Space Manifest, Interaction Receipt, Capability Descriptor, Anchor Commitment or Observation Record that satisfies every MUST-level requirement of its section in section 5 and validates against the corresponding schema in Appendix B. Where this specification and a schema disagree, the prose of this specification prevails.
2. Terminology§
This section defines the terms used in this specification. Terms defined by referenced specifications keep their meaning there; where AGTP narrows a term, the narrowing is stated.
- agent
- Any actor—human, service, model or hybrid—identified by a DID and able to issue or receive Learning Signals. An agent's DID Document advertises its feedback service.
- agent graph
- The directed, typed graph whose nodes are agents, Spaces, capabilities, interactions, artifacts, observations, signals, receipts and anchors, and whose edges are the relationships this specification defines between them (section 4.1). No single party holds the whole graph; it emerges from the union of published objects.
- Space
- A DID-addressed policy domain, or context subgraph, that declares how feedback within it is interpreted: which dimensions are valid, how signals aggregate, what persists and where status is published. Also called a context.
- Space Manifest
- The signed Verifiable Credential in which a Space declares its policy (section 5.2).
- Learning Signal
- A Verifiable Credential encoding evaluative feedback about a subject within a Space along one or more dimensions, bound to a provenance URI (section 5.3). The atomic unit of feedback. Also called a signal.
- subject
- The entity a Learning Signal is about: an agent, a capability, an artifact, an interaction or a knowledge concept, identified by a DID or URI.
- dimension
- A named evaluation axis with a declared range, direction and optional unit. Dimensions are declared per Space; the protocol fixes no global set.
- dimension registry
- A published collection of dimension definitions that Space Manifests may reference by URI. This specification recommends publishing registries as OKF bundles (section 8.4).
- artifact
- Any content-addressed resource implicated in an interaction: an input, an output, a trace, a model version, a dataset, a tool schema, a policy file or a knowledge document. Artifacts are referenced by CID and may be public, redacted or private.
- interaction
- A bounded unit of activity within a Space—a run, task, session, message exchange or tool call—with a stable identifier that provenance can refer to.
- observation
- A raw or normalised record of something that happened during an interaction, before any evaluation: an event, a measurement, a status transition, a usage figure. Observations are evidence, not judgments (section 5.7).
- receipt
- The acknowledgement returned by a feedback service or Space when a signal is delivered, carrying the signal's hash and acceptance state (section 5.4). When signed it is an Interaction Receipt credential.
- capability
- A declared ability of an agent, with its interface, constraints and source artifacts: an MCP tool, resource or prompt; an A2A skill; an API function; an Agent Skill; an OKF attested computation.
- Capability Descriptor
- The Verifiable Credential in which an agent describes one capability in the normalised AGTP form (section 5.5).
- anchor
- A commitment to a batch of AGTP objects recorded outside AGTP, typically on a ledger or registry, for timestamping and censorship resistance. Described by an Anchor Commitment credential (section 5.6).
- provenance URI
- A URI in the
agtp://provenancescheme that binds a Space, an interaction and zero or more artifacts, allowing an evaluation to be reproduced or audited (section 3.5). - feedback service
- The endpoint, advertised in an agent's DID Document as a service of type
AGTPFeedbackService, that accepts delivered signals and returns receipts. Its presence is what makes an agent evaluable. - ephemeral signal
- A signal whose
persistenceisephemeral: intended for local or private learning, subject to retention ceilings, and not indexed publicly. - persistent signal
- A signal whose
persistenceispersistent: public, discoverable, reproducible via provenance, and eligible for aggregation and anchoring. - distillation
- The process of summarising a set of ephemeral signals into a persistent signal, optionally with a commitment to the set.
- commitment
- A Merkle root or equivalent cryptographic commitment over a set of objects that allows later selective disclosure without publishing the set.
- issuer relation
- The declared relationship between a signal's issuer and its subject:
self,affiliateorindependent. A hint for aggregation policy, not a proof of independence. - aggregation
- The rule, declared in a Space Manifest, by which a Space combines signals into scores or ranks. The reference default is a trust-weighted average over a sliding window (section 11).
- signalHash
- The canonical hash of a signal, computed as a multihash over the RDF Dataset Canonicalization of the unsecured credential (section 10.2). Used for deduplication, receipts and anchoring.
- nonce
- A single-use value issued by a feedback service and echoed by the sender to prevent replay (section 9.2).
- idempotency key
- A sender-chosen unique key that lets a feedback service recognise and reject duplicate deliveries within a window.
- binding profile
- A normative mapping from an external standard's objects and events to AGTP objects, together with the identifiers each side preserves (section 12). Profiles never alter the external standard.
- gateway identity
- A DID operated by an intermediary on behalf of a participant that does not natively hold a DID, such as a legacy API client or an A2A agent without one. The gateway's DID Document or a delegation credential records the mapping.
- DID, DID Document, controller, verification method, service
- As defined in [DID-CORE].
- verifiable credential, issuer, proof, cryptosuite, credential status
- As defined in [VC-DATA-MODEL-2.0] and [VC-DATA-INTEGRITY].
- CID
- A self-describing content identifier as defined by the multiformats CID specification [CID]. AGTP requires CIDv1 in a multibase encoding.
- ARD entry, registry, trust manifest
- As defined in [ARD]: a JSON-LD description of an agentic resource published at a well-known path; a service that indexes entries and answers search queries; and the optional object in an entry that names the identity framework and attestations by which the entry can be verified.
- OKF bundle, concept, actor, attested computation
- As defined in [OKF]: a directory tree of Markdown files with YAML frontmatter; one file describing one entity; the identifier convention for the people, agents and processes that generate and verify concepts; and the concept type whose body is a sanctioned computation with an executor and a deterministic attester.
- evaluator
- An agent, human or service that issues Learning Signals. A verifier is an evaluator whose signals derive from reproducible checks rather than preference.
3. Identifiers§
AGTP names four kinds of things: agents and Spaces, artifacts, interactions and dimensions. Each has an identifier scheme borrowed from an existing standard. The one identifier AGTP defines itself, the provenance URI, exists only to bind the other three together.
3.1. Agent and Space Identifiers§
Agents and Spaces MUST be identified by Decentralized Identifiers conforming to [DID-CORE]. Every DID used in an AGTP object MUST be resolvable, by its method's resolution process, to a DID Document. Consumers MUST resolve DIDs before relying on any claim signed by them and MUST fail closed when resolution fails.
AGTP is DID-method agnostic. A DID method used with AGTP MUST, however, satisfy the following requirements:
- The DID Document MUST support
serviceentries as defined in [DID-CORE] §5.4, because feedback services and manifests are discovered through them. - The DID Document MUST support at least one verification method listed under the
assertionMethodrelationship whose key type is usable with a cryptosuite of section 10. - The method SHOULD support rotating verification methods without changing the DID, so that long-lived signals survive key rotation.
- The method SHOULD support deactivation, and consumers MUST treat signals issued after a deactivation as invalid.
- The method MAY provide a verifiable history of DID Document versions. Where it does, verifiers SHOULD check that the verification method referenced by a proof was valid at the proof's
createdtime.
In deployments to date, organisations and Spaces use did:web [DID-WEB], whose domain binding also satisfies the ARD identity check of section 7.2 without extra machinery; device-bound or short-lived agents use did:key [DID-KEY]; parties that need an auditable key history use did:webvh [DID-WEBVH]; and agents registered in ERC-8004 often use did:pkh [DID-PKH] so that the registering wallet and the signing identity coincide. The method name agtp is reserved in Appendix F for a future method specification and is not defined by this document.
A Space MUST be identified by a DID, and its Space Manifest MUST be issued by that DID. A Space's DID Document MUST advertise a service of type AGTPSpaceManifest whose endpoint serves the current manifest under the HTTP profile, and SHOULD advertise an AGTPFeedbackService so that signals can be delivered to the Space for aggregation as well as to their subjects.
A participant that does not natively hold a DID—an API client, a browser session, an A2A agent whose card carries no DID—MAY be represented by a gateway identity. The gateway MUST record the mapping between the upstream identifier and the DID either in its own DID Document or in a delegation credential referenced from the objects it issues, and signals issued through a gateway SHOULD carry the upstream identifier in the observation record's sourceRefs so that the delegation can be audited.
Where an AGTP identity is also bound to a domain—for ARD publication, for did:web, or for A2A and MCP endpoints—the DID Document SHOULD carry the domain's origin in alsoKnownAs, and the domain SHOULD publish the DID in its ARD entries (section 7). Either link alone is a claim; both together are a mutual binding that verifiers can check.
3.2. Artifact Identifiers§
Artifacts SHOULD be identified by content: a CIDv1 [CID] in a multibase encoding [MULTIBASE]. Producers MUST use a multihash [MULTIHASH] function that consumers can compute; sha2-256 is the baseline that all implementations MUST support. The raw codec is RECOMMENDED for opaque bytes, dag-pb for directory trees such as OKF bundles, and dag-cbor or dag-json for structured data. Base32 lower-case encoding (the familiar bafy… form) is RECOMMENDED because it is safe in URIs, file names and case-insensitive contexts.
When an artifact is referenced from a structured object rather than from a provenance URI, the reference is an artifact reference: an object with a cid, an optional dereferenceable uri, an optional role (for example input, output, trace, schema, policy, knowledge, computation, receipt) and an optional mediaType. The CID is authoritative; the URI is a hint.
Content addressing does not require publication. A private artifact still has a CID, and a signal may bind to it so that the subject, the issuer and any auditor they admit can confirm what was evaluated. Where disclosure is sensitive, publishers SHOULD publish a redacted artifact alongside a statement that binds the redacted and the original CIDs; the form of that statement is a Space policy matter.
3.3. Interaction Identifiers§
An interaction identifier MUST be unique within its Space and SHOULD be a URI. A UUID URN [RFC9562] is RECOMMENDED. When an interaction is derived from an upstream protocol object—an A2A task, an MCP tool call, a model-API response, an A2UI session—the binding profile preserves the upstream identifier in sourceRefs, and implementations SHOULD derive the interaction identifier deterministically from it, for example as a name-based UUID (version 5) over a namespace the profile designates, so that independent integrators observing the same upstream object arrive at the same interaction identifier.
3.4. Dimension Identifiers§
A dimension identifier is a case-sensitive string of one or more characters from the set ALPHA / DIGIT / "_" / "-" / ".". It MUST be unique within the Space that declares it. The semantics of a dimension are the Space's, unless the Space's manifest binds the identifier to a URI in dimensionRefs, in which case the referenced definition governs. Such URIs SHOULD dereference to an OKF concept of type AGTP Dimension as described in section 8.4, so that the definition carries its own provenance, status and staleness.
3.5. AGTP Provenance URI§
Every Learning Signal binds to a provenance URI that identifies the Space in which an evaluation took place, the interaction that was evaluated and the artifacts needed to reproduce or audit it.
The syntax is defined by the following ABNF [RFC5234], where URI, unreserved and pct-encoded are as defined in [RFC3986]:
agtp-uri = "agtp://" "provenance" "?" agtp-param *( "&" agtp-param )
agtp-param = space-param / interaction-param / artifact-param / ext-param
space-param = "space=" space-value
space-value = URI ; an absolute URI or a DID
interaction-param = "interaction=" 1*( unreserved / pct-encoded / ":" )
artifact-param = "artifact=" cid *( "," cid )
cid = 1*( ALPHA / DIGIT ) ; a multibase-encoded CIDv1
ext-param = pname "=" pvalue
pname = 1*( ALPHA / DIGIT / "_" / "-" / "." )
pvalue = *( unreserved / pct-encoded / ":" / "," )
The following requirements apply to producers and consumers of provenance URIs:
- A provenance URI MUST include exactly one
spaceparameter and exactly oneinteractionparameter, and SHOULD include at least oneartifactparameter. Thespacevalue MUST equal the signal'sspace. - Characters outside the productions above MUST be percent-encoded. The characters
&,=and,MUST be percent-encoded when they occur inside a value. - Producers SHOULD emit parameters in the order
space,interaction,artifact, then extension parameters in code-point order of their names, and SHOULD emit artifact CIDs in code-point order. Consumers MUST compare provenance URIs after applying this ordering and percent-encoding normalisation, so that equivalent URIs compare equal. - Consumers MUST ignore extension parameters they do not understand. Extension parameter names SHOULD be registered in the AGTP parameter registry (Appendix F) or namespaced with a reverse-DNS prefix ending in a dot.
- A provenance URI is not dereferenced as a network resource. Each component is resolved separately: the Space to its manifest, the interaction to its observation records through the Space's or the subject's
AGTPSignalIndex(section 9.7), and each artifact through any content-addressed retrieval path the consumer supports.
agtp://provenance?space=did:web:rlvr.example
&interaction=urn:uuid:3b4f0d2c-6a1e-4f7b-9c1d-2e8a5b7f9d10
&artifact=bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi,bafybeihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku
&org.example.suite=math-500
Line breaks are shown for readability only. The first CID identifies the test case, the second the output that was evaluated; the extension parameter names the benchmark suite in a namespace the Space understands.
3.6. Discovery Identifiers§
Resources published for discovery are identified by ARD entry identifiers: URNs of the form urn:air:<publisher>:<namespace>:<name> as defined in [ARD], where the publisher segment is the publishing domain. AGTP objects reference an entry through the discovery.ard property of a Capability Descriptor or Space Manifest. A capability identifier MAY be the ARD identifier of its entry, and SHOULD be when the capability is published through ARD, so that discovery, description and evaluation share one name. The publisher segment MUST be consistent with the DID that signs the corresponding AGTP objects, as specified in section 7.2.
4. Data Model§
The AGTP data model is a graph of typed objects. Portable claims about the graph are Verifiable Credentials drawn from a small credential family. Runtime evidence that does not warrant a credential is carried in a lightweight observation record. Both are JSON-LD documents whose vocabulary is defined by the AGTP context, and both are hashed and signed with the mechanisms of section 10.
4.1. The Agent Graph§
The following table lists the node kinds of the agent graph, how each is identified and which AGTP object describes it. Edges are the properties of those objects: a Learning Signal is an edge from its issuer to its subject, labelled with a Space, dimensions and values; a Capability Descriptor is an edge from an owner to a capability; a Receipt is an edge from a receiver to a signal; an Anchor is an edge from a ledger record to a set of signals.
| Node | Identified by | Described by | Typical sources |
|---|---|---|---|
| Agent | DID | DID Document (§5.1) | Any participant; MCP servers, A2A agents, API gateways, humans |
| Space | DID | Space Manifest (§5.2) | Communities, marketplaces, benchmarks, organisations |
| Capability | URI (often an ARD URN) | Capability Descriptor (§5.5) | MCP tools, resources and prompts; A2A skills; API functions; Agent Skills; OKF attested computations |
| Interaction | URI (UUID URN recommended) | Observation Records (§5.7) | A2A tasks, MCP calls, model-API runs, A2UI sessions |
| Artifact | CID | Artifact references in signals, observations and descriptors | Inputs, outputs, traces, schemas, policies, OKF documents |
| Observation | URI | Observation Record (§5.7) | Events, measurements, usage, status transitions |
| Learning Signal | URI and signalHash | Learning Signal credential (§5.3) | Evaluators: humans, verifiers, tournaments, attesters |
| Receipt | URI | Receipt, optionally an Interaction Receipt credential (§5.4) | Feedback services and Spaces |
| Anchor | URI | Anchor Commitment credential (§5.6) | ERC-8004 registries, other ledgers, timestamping services |
The graph has no root and no single custodian. An implementation's view of it is the union of the objects it has verified. Consumers MUST NOT infer an edge from an object whose proof or status fails verification, and MUST distinguish edges asserted by credentials from edges suggested by unsigned observations.
4.2. The Credential Family§
Every portable trust claim in AGTP is a Verifiable Credential conforming to [VC-DATA-MODEL-2.0] whose type includes one of the following values.
| Type | Issuer | What it asserts | Status |
|---|---|---|---|
LearningSignal | Evaluator DID | Feedback about a subject in a Space along declared dimensions, bound to provenance. | Required for all conformance classes that issue or consume feedback. |
SpaceManifest | Space DID | The Space's dimensions, aggregation rule, persistence policy, status endpoints, knowledge and discovery pointers, valid over a period. | Required for AGTP.Space. |
InteractionReceipt | Receiver DID (subject or Space) | That a signal with a given hash was received and accepted, rejected or held pending, under a given nonce and idempotency key. | Optional; RECOMMENDED for Space-level receipts. |
CapabilityDescriptor | Owner DID | A normalised description of one capability, its interface binding, constraints and source artifacts. | Required for AGTP.CapabilityPublisher. |
AnchorCommitment | Anchoring party DID | That a batch of AGTP objects with a given root was committed to a named ledger or registry record at a time. | Required for AGTP.AnchorIntegrator. |
DelegationCredential | Delegating DID | That one DID acts for another for a stated scope, used with gateway identities. | Optional. |
PolicyAssertion | Owner DID | A signed, hash-bound copy of a policy artifact such as an AGENTS.md file, for exchange across organisational boundaries. | Optional. |
The following rules apply to every AGTP credential:
- The
@contextarray MUST begin withhttps://www.w3.org/ns/credentials/v2and MUST includehttps://schema.agtp.org/context/v2. Profile contexts MAY follow. - The
typearray MUST includeVerifiableCredentialand exactly one AGTP credential type. The AGTP context also defines the aliasesLearningSignalCredential,SpaceManifestCredential,InteractionReceiptCredential,CapabilityDescriptorCredentialandAnchorCommitmentCredential, mapped to the same IRIs; consumers MUST treat an alias as equivalent to its short form. issuerMUST be a DID or an object whoseidis a DID.validFromMUST be present.validUntilMUST be present on a Space Manifest and MAY be present elsewhere.idSHOULD be present and SHOULD be a UUID URN unless the credential is served from a stable URL, in which case that URL MAY be used.credentialStatusMUST be present on Learning Signals and Space Manifests, as specified in section 10.3.credentialSchemaMAY reference the JSON Schema of Appendix B using theJsonSchematype of [VC-JSON-SCHEMA].proofMUST be a Data Integrity proof as specified in section 10.1. Enveloping proofs (JOSE or COSE) MAY additionally be used where a transport requires them, but the embedded Data Integrity proof is what other AGTP parties verify.- Space-scoped credentials—signals, receipts and descriptors evaluated in a Space—MUST carry the Space's DID in
credentialSubject.space.
AGTP v2 credentials use the https://www.w3.org/2018/credentials/v1 context, issuanceDate in place of validFrom, and the Ed25519Signature2020 proof type. Consumers MUST continue to accept them during the overlap window of section 13; producers SHOULD emit 2.1 credentials and MAY dual-serve.
4.3. Observation Records§
Not every runtime event warrants a credential. Tool calls, task state transitions, UI events and usage figures are numerous, often private and rarely interesting on their own; what matters is that an evaluator can later refer to them. AGTP therefore defines an Observation Record: a JSON-LD document with the same context and identifiers as the credential family, but without the requirement of a proof. Records are the raw material from which Learning Signals are distilled, and the place where binding profiles preserve upstream identifiers. Their properties are specified in section 5.7.
A record MAY carry a Data Integrity proof. A signed record remains an observation, not a signal: it attests that something was observed, not how good it was.
4.4. Extensibility§
AGTP objects are JSON-LD 1.1 documents [JSON-LD11]. The AGTP vocabulary is identified by the IRI https://schema.agtp.org/ontology#, and the versioned context https://schema.agtp.org/context/v2 maps the terms used in this specification to that vocabulary. Term definitions in the context are protected; an extension context MUST NOT redefine them.
Extensions are made by adding properties in a separate namespace, either by including an additional context that defines the terms or by using full IRIs or compact IRIs with a declared prefix. Binding profiles define their terms in profile namespaces of the form https://schema.agtp.org/profiles/<name>#. Consumers MUST ignore properties they do not understand and MUST preserve them when re-serialising an object whose proof they intend to keep valid. The AGTP context reserves the agtp prefix for the core vocabulary.
New dimension identifiers require no extension; they are declared by Spaces. New credential types, service types, interface types, privacy classes, aggregation functions and provenance parameters are added through the registries of Appendix F.
4.5. Representations§
AGTP objects have one canonical representation: JSON-LD, serialised as JSON [RFC8259] with the contexts of section 4.2. Because every AGTP context is fixed and published, an implementation that does not perform JSON-LD processing MAY treat the documents as plain JSON with well-known keys, provided it emits the required contexts unchanged and does not introduce terms the contexts do not define. Hashing and signing, however, are defined over the RDF dataset obtained by JSON-LD expansion (section 10.2), so an implementation MUST be able to canonicalise the documents it verifies, either itself or through a trusted service.
The media type of an AGTP credential is application/vc as registered by [VC-DATA-MODEL-2.0]. Consumers MUST also accept application/vc+ld+json and application/vc+json, which AGTP v2 implementations emit. Receipts, observation records, capability endpoints and metrics feeds use application/json; errors use application/problem+json [RFC9457]; DID Documents use the media types of [DID-CORE].
5. Core Objects§
This section specifies each AGTP object property by property. Tables list the properties of the object's credentialSubject (or of the record itself, for receipts and observations); credential-level properties follow the rules of section 4.2. The machine-readable schemas are in Appendix B.
5.1. Agents and DID Documents§
An agent has no AGTP object of its own; its DID Document is its description. AGTP adds requirements on the services and verification relationships that document carries.
| Property | Required | Value constraints |
|---|---|---|
assertionMethod | MUST | At least one verification method whose type and key are usable with a supported cryptosuite (§10.1). Signals and manifests are verified against this relationship. |
service of type AGTPFeedbackService | MUST for agents; SHOULD for Spaces | serviceEndpoint is an HTTPS URL, or an object with a uri, implementing the feedback resource of §9.1. Exactly one such service SHOULD be present. |
service of type AGTPSpaceManifest | MUST for Spaces | serviceEndpoint serves the current Space Manifest (§9.4). |
service of type AGTPCapabilities | SHOULD | serviceEndpoint serves the capabilities document of §9.6. |
service of type AGTPSignalIndex | MAY | serviceEndpoint serves the signal index of §9.7. |
service of type AgenticResourceDiscovery | SHOULD, when the agent publishes ARD entries | serviceEndpoint is the URL of the agent's ARD manifest, normally https://<domain>/.well-known/ard.json. |
service of other types | MAY | Binding profiles register additional service types (MCPServer, A2AAgentCard) that let a DID Document point at an agent's runtime interfaces. Their semantics are those of the referenced protocol. |
alsoKnownAs | SHOULD, when domain-bound | The HTTPS origin(s) at which the agent publishes ARD entries or runtime endpoints, enabling the mutual binding of §7.2. |
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/multikey/v1"
],
"id": "did:web:solver.example",
"alsoKnownAs": ["https://solver.example/"],
"verificationMethod": [{
"id": "did:web:solver.example#key-1",
"type": "Multikey",
"controller": "did:web:solver.example",
"publicKeyMultibase": "z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH"
}],
"assertionMethod": ["did:web:solver.example#key-1"],
"authentication": ["did:web:solver.example#key-1"],
"service": [
{ "id": "did:web:solver.example#agtp-feedback",
"type": "AGTPFeedbackService",
"serviceEndpoint": "https://solver.example/.well-known/agtp/feedback" },
{ "id": "did:web:solver.example#agtp-capabilities",
"type": "AGTPCapabilities",
"serviceEndpoint": "https://solver.example/.well-known/agtp/capabilities" },
{ "id": "did:web:solver.example#ard",
"type": "AgenticResourceDiscovery",
"serviceEndpoint": "https://solver.example/.well-known/ard.json" },
{ "id": "did:web:solver.example#mcp",
"type": "MCPServer",
"serviceEndpoint": "https://mcp.solver.example/" },
{ "id": "did:web:solver.example#a2a",
"type": "A2AAgentCard",
"serviceEndpoint": "https://solver.example/.well-known/agent-card.json" }
]
}
A feedback service MUST authenticate callers and MAY apply admission controls and rate limits; the mechanism is a policy matter, but the HTTP profile's nonce and idempotency requirements (section 9.2) apply regardless. The requirement to advertise a feedback service is the protocol's anti-leeching primitive: an agent that participates in a Space can always be evaluated.
5.2. Space Manifest§
A Space Manifest is a credential of type SpaceManifest issued by the Space's DID. It is the only place where interpretation rules live; a signal is meaningless until it is read against the manifest of the Space it names.
| Property | Required | Value constraints |
|---|---|---|
id | MUST | The Space's DID; equal to the credential's issuer. |
version | MUST | A semantic version string (MAJOR.MINOR.PATCH) of the manifest. |
manifestHash | MUST | The multibase multihash of the canonicalised manifest without its proof and without this property, computed as in §10.2. Lets clients pin a manifest independently of its serialisation. |
dimensions | MUST | A non-empty array of objects, each with id (a dimension identifier, §3.4), range (a two-element numeric array, inclusive), higherIsBetter (boolean) and optionally unit (string) and ref (URI). |
dimensionRefs | MAY | An array of URIs giving external definitions of dimensions; SHOULD dereference to OKF concepts (§8.4). |
aggregation | SHOULD | An object with name (a URI or registered identifier of an aggregation function, §11), parameters (an object) and optionally impl (a URI of a reference implementation). When absent, the reference default applies. |
persistence_policy | SHOULD | An object with ephemeralRetention (an ISO 8601 duration ceiling for ephemeral signals) and persistentPublication (public-index, space-index or none), plus policy-specific keys. |
status | SHOULD | URL of the Space's status resource for signals that use a Space status API instead of a status list (§10.3). |
revocation | SHOULD | URL of the Space's revocation resource. |
capabilities | MAY | An object mirroring the capabilities document of §9.6: supported AGTP versions, profiles and cryptosuites. |
knowledge | MAY | An array of knowledge bundle references, each with resource (URL of an OKF bundle root), cid (CID of the bundle tree), okf_version and optionally role (dimensions, policy, documentation, corpus). See §8. |
discovery | MAY | An object with ard (the ARD identifier of the Space's entry) and registries (an array of ARD registry base URLs the Space recognises). See §7. |
admission | MAY | An opaque object describing who may issue signals in the Space and under what conditions. AGTP defines no semantics; consumers treat it as policy. |
At the credential level, validFrom and validUntil MUST be present and define the period during which the manifest governs the Space. A manifest MUST NOT be applied outside that period except as last-known-good during a partition (section 11.3). When a Space publishes a new manifest, it SHOULD overlap the validity periods so that clients can migrate, and it MUST increment version.
Manifests are served under the HTTP profile with cache validators (section 9.4). Clients MUST cache manifests by manifestHash and SHOULD pin the hash they used when publishing a persistent signal, so that the signal can later be re-interpreted under the exact rules that applied.
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://schema.agtp.org/context/v2"
],
"id": "https://rlvr.example/.well-known/agtp/space/did:web:rlvr.example",
"type": ["VerifiableCredential", "SpaceManifest"],
"issuer": "did:web:rlvr.example",
"validFrom": "2026-09-01T00:00:00Z",
"validUntil": "2027-03-01T00:00:00Z",
"credentialSubject": {
"id": "did:web:rlvr.example",
"version": "2.1.0",
"manifestHash": "uEiCz7m5gq4Vh2kQ2Jm7Y1Q2m3k6nJ1c2f4b7dq6l5o8q9pA",
"dimensions": [
{ "id": "accuracy", "range": [0, 1], "higherIsBetter": true, "unit": "prob",
"ref": "https://rlvr.example/knowledge/dimensions/accuracy.md" },
{ "id": "robustness", "range": [0, 1], "higherIsBetter": true },
{ "id": "latency", "range": [0, 60], "higherIsBetter": false, "unit": "s" }
],
"aggregation": {
"name": "https://schema.agtp.org/aggregation#TrustWeightedAverage",
"parameters": { "window": "P30D", "defaultWeight": 1.0,
"minRaters": 3, "maxWeightPerIssuer": 0.4 }
},
"persistence_policy": { "ephemeralRetention": "P7D",
"persistentPublication": "public-index" },
"status": "https://rlvr.example/.well-known/agtp/status",
"revocation": "https://rlvr.example/.well-known/agtp/revocations",
"knowledge": [
{ "role": "dimensions", "resource": "https://rlvr.example/knowledge/",
"cid": "bafybeib2xq3zj7q6m5k2t4y7v3w6x5z4a3b2c1d0e9f8g7h6i5j4k3l2m",
"okf_version": "0.2" }
],
"discovery": {
"ard": "urn:air:rlvr.example:space:rlvr",
"registries": ["https://registry.example/api/v1/"]
},
"capabilities": {
"agtpVersion": "2.1.0",
"supportedProfiles": ["http/1.0", "ard/0.91", "okf/0.2", "mcp/2025-11-25"],
"cryptosuites": ["eddsa-rdfc-2022"]
}
},
"credentialStatus": {
"id": "https://rlvr.example/status/manifests#12",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": "12",
"statusListCredential": "https://rlvr.example/status/manifests"
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-rdfc-2022",
"created": "2026-09-01T00:00:00Z",
"verificationMethod": "did:web:rlvr.example#key-1",
"proofPurpose": "assertionMethod",
"proofValue": "z5b1Xx…"
}
}
5.3. Learning Signal§
A Learning Signal is a credential of type LearningSignal issued by an evaluator's DID. Its credentialSubject carries the claims below.
| Property | Required | Value constraints |
|---|---|---|
subject | MUST | The DID or URI of the entity evaluated: an agent, a capability, an artifact (as a CID URI or dereferenceable URL), an interaction or a knowledge concept. |
id | SHOULD | Equal to subject, so that generic Verifiable Credential tooling identifies the subject without AGTP knowledge. |
space | MUST | The DID of the Space in which the signal applies. MUST equal the space parameter of provenance. |
dimensions | MUST | A non-empty array of dimension identifiers, each declared by the Space's manifest that was valid at validFrom. |
value | MUST | A number when dimensions has one element, otherwise an array of numbers of the same length, in the same order. Each value MUST lie within the declared range of its dimension. |
persistence | MUST | ephemeral or persistent. |
provenance | MUST | A provenance URI conforming to §3.5. |
issuerRelation | SHOULD | self, affiliate or independent, describing the issuer's relationship to the subject. |
commitment | MAY; MUST when the signal is a distillation | A multibase multihash of a Merkle root over the ephemeral signals or observations summarised, computed with the tree construction of §5.6. |
confidence | MAY | A number in [0, 1] expressing the issuer's confidence in value. Aggregators MAY weight by it. |
comment | MAY | A short human-readable string. Producers SHOULD keep it under 1024 characters and MUST NOT place personal data in it that the Space's persistence policy would forbid. |
observedAt | MAY | An [RFC3339] timestamp of the evaluated interaction, when it differs materially from validFrom. |
manifestHash | SHOULD for persistent signals | The manifestHash of the Space Manifest under which the signal was issued. |
At the credential level, issuer MUST be the evaluator's DID, validFrom MUST be present, and credentialStatus MUST be present in one of the forms of section 10.3. The id SHOULD be a UUID URN. A signal MUST carry exactly one proof from a supported cryptosuite over the whole credential.
The distinction between verifying and validating a signal is deliberate. Verification establishes that the signal is authentic and current: the issuer's DID resolves, the proof checks against an assertionMethod key, and the status is not revoked. Validation establishes that the signal is meaningful in its Space: the dimensions are declared, the values are in range, the provenance parses and its space matches. A feedback service MUST verify before it validates, and MUST report the two kinds of failure with different error types (section 9.3).
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://schema.agtp.org/context/v2"
],
"id": "urn:uuid:0c9d7b5e-1f2a-4d3c-8e6f-7a5b4c3d2e1f",
"type": ["VerifiableCredential", "LearningSignal"],
"issuer": "did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
"validFrom": "2026-09-03T14:02:11Z",
"credentialSubject": {
"id": "urn:air:solver.example:tool:run-sql",
"subject": "urn:air:solver.example:tool:run-sql",
"space": "did:web:rlvr.example",
"dimensions": ["accuracy", "latency"],
"value": [0.9, 4.2],
"persistence": "persistent",
"provenance": "agtp://provenance?space=did:web:rlvr.example&interaction=urn:uuid:6d2a…&artifact=bafybeia…,bafybeib…",
"issuerRelation": "independent",
"confidence": 0.8,
"comment": "Correct result; one retry on a transient timeout.",
"manifestHash": "uEiCz7m5gq4Vh2kQ2Jm7Y1Q2m3k6nJ1c2f4b7dq6l5o8q9pA"
},
"credentialStatus": {
"id": "https://rlvr.example/.well-known/agtp/status?signal=uEiA4…",
"type": "AGTPSpaceStatus"
},
"proof": { "type": "DataIntegrityProof", "cryptosuite": "eddsa-rdfc-2022",
"created": "2026-09-03T14:02:12Z",
"verificationMethod": "did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
"proofPurpose": "assertionMethod", "proofValue": "z2p…" }
}
The subject is a capability rather than an agent, identified by the ARD entry through which it was discovered. The status entry uses the Space's status API rather than a bitstring list, which suits issuers that hold no infrastructure of their own.
5.4. Receipt and Interaction Receipt§
A receipt is returned for every signal delivered under the HTTP profile. It is a JSON object with the properties below. A receipt MAY be wrapped as a credential of type InteractionReceipt whose credentialSubject carries the same properties; Spaces SHOULD issue signed receipts, and receivers MUST issue a signed receipt when the sender requests one with the Prefer: agtp-signed-receipt request header.
| Property | Required | Value constraints |
|---|---|---|
receiptId | MUST | A URI, RECOMMENDED a UUID URN, unique per receiver. |
signalHash | MUST | The signalHash of the delivered signal as computed by the receiver (§10.2). A sender MUST compare it with its own computation and treat a mismatch as a failed delivery. |
acceptState | MUST | accepted, rejected or pending. |
reason | MUST when rejected; MAY otherwise | A problem type URI from §9.3 or a Space-defined URI, optionally followed by text. |
receivedAt | MUST | An [RFC3339] timestamp. |
receiver | SHOULD | The DID of the receiving agent or Space. |
space | SHOULD | The Space named by the signal. |
nonce | SHOULD | The AGTP-Nonce value consumed by the delivery. |
idempotencyKey | SHOULD | The Idempotency-Key value of the delivery. |
signalId | MAY | The id of the delivered signal, when present. |
A receipt in the pending state is a promise to validate later, used during partitions and for signals that require asynchronous checks. A receiver that returns pending MUST later publish a final state through its status resource or its signal index, and senders SHOULD poll no more often than the Retry-After header of the pending response suggests.
5.5. Capability Descriptor§
A Capability Descriptor is a credential of type CapabilityDescriptor issued by the DID that owns the capability. It normalises descriptions that arrive in many forms—MCP catalogs, A2A Agent Cards, Agent Skills frontmatter, API tool schemas, OKF attested computations—into one shape that Spaces can evaluate against observed behaviour.
| Property | Required | Value constraints |
|---|---|---|
id | MUST | The capability URI. SHOULD be the ARD identifier when the capability is published through ARD. |
owner | MUST | The DID of the agent that provides the capability; equal to issuer unless a delegation credential says otherwise. |
name | MUST | A short human-readable name. |
description | SHOULD | A human-readable description; for ARD-published capabilities, the same text as the entry's description. |
interfaceType | MUST | One of mcp-tool, mcp-resource, mcp-prompt, a2a-skill, api-tool, agent-skill, okf-computation or policy-only, or a registered extension (Appendix F). |
interface | MUST unless policy-only | An object with protocol, version and the protocol-specific locator fields defined by the binding profile (for example server and tool for MCP, agentCard and skill for A2A), plus schemaHash, the multibase multihash of the exact schema payload advertised at descriptor time. |
inputSchema, outputSchema | SHOULD | JSON Schema objects or URIs of them. When both a schema and schemaHash are present they MUST agree. |
constraints | MAY | An object carrying policy and behavioural hints: MCP tool annotations, Agent Skills allowed-tools, AGENTS.md policy references, authentication requirements, environment requirements. |
sourceArtifacts | SHOULD | An array of artifact references (§3.2) to the documents the descriptor was derived from: the catalog payload, the Agent Card, the SKILL.md file, the OKF concept. |
version | SHOULD | The upstream version string, if any. |
contentHash | MUST | The multibase multihash of the canonicalised descriptor without proof and without this property. Two descriptors with equal contentHash describe the same capability version. |
discovery | MAY | An object with ard (the ARD identifier) and registries. |
spaces | MAY | An array of Space DIDs in which the owner invites evaluation of this capability. |
The same underlying capability exposed through several protocols—an A2A skill that is also an MCP tool and an API function—SHOULD be described by one descriptor with one id and several entries under interface.bindings, rather than by several descriptors, so that signals about it accumulate in one place. Each binding carries its own protocol, version, locator and schemaHash.
5.6. Anchor Commitment§
An Anchor Commitment is a credential of type AnchorCommitment that binds a batch of AGTP objects to a record outside AGTP. AGTP mandates no ledger; the credential names the one that was used.
| Property | Required | Value constraints |
|---|---|---|
id | MUST | A URI for the batch, RECOMMENDED a UUID URN. |
root | MUST | The multibase multihash of the batch root. |
tree | MUST | The tree construction. rfc6962, the Merkle Tree Hash of [RFC6962] §2.1 over the sorted list of leaf hashes, is the baseline all implementations MUST support. Other constructions are registered in Appendix F. |
hashAlgorithm | MUST | The multihash function name used for leaves and nodes; sha2-256 baseline. |
covered | MUST | Either an array of leaf hashes (the signalHash or contentHash of each covered object, in leaf order) or an object with uri and cid of a batch manifest listing them. |
count | MUST | The number of leaves. |
space | SHOULD | The Space whose objects are covered, when the batch is Space-scoped. |
chain | MUST when anchored on a ledger | A CAIP-2 chain identifier [CAIP-2], for example eip155:1. |
reference | MUST | An object locating the record: for ledgers, contract (a CAIP-10 account identifier [CAIP-10]), transaction, optionally logIndex and, for ERC-8004, registry and requestHash; for other services, a dereferenceable uri. |
anchoredAt | MUST | An [RFC3339] timestamp of the record's inclusion, as observed by the issuer. |
The same tree construction and leaf ordering define the commitment property of a distilled Learning Signal, so that a subject or auditor given the underlying ephemeral signals can recompute the root.
5.7. Observation Record§
An Observation Record is a JSON-LD document whose type includes ObservationRecord and MAY include a profile-specific subtype such as MCPToolCallRecord, A2ATaskEventRecord, ModelRunRecord or UIEventRecord.
| Property | Required | Value constraints |
|---|---|---|
id | MUST | A URI, RECOMMENDED a UUID URN. |
space | MUST | The Space DID in which the interaction took place. |
actor | MUST | The DID of the agent that performed or initiated the observed activity. |
subject | SHOULD | The DID or URI of the agent or capability the observation is about, when different from actor. |
sourceProtocol | MUST | A registered profile identifier: mcp, a2a, a2ui, openai-api, ard, okf, erc8004 or an extension. |
sourceVersion | SHOULD | The upstream protocol version, in the upstream's own format. |
sourceRefs | MUST | An object of upstream identifiers as defined by the binding profile. Profiles MUST preserve upstream ordering semantics where events are ordered. |
interaction | MUST | The interaction identifier (§3.3). |
artifacts | SHOULD | An array of artifact references with roles. |
provenance | SHOULD | The provenance URI an evaluator would use for a signal about this interaction. |
capabilityRefs | MAY | An array of capability URIs whose descriptors were in force, with their contentHash. |
policyRefs | MAY | An array of URIs or artifact references to policy documents in force (AGENTS.md, manifests, registry records). |
observedAt | MUST | An [RFC3339] timestamp. |
privacyClass | MUST | ephemeral, persistent, redacted or committed-only. |
claims | MAY | An object of profile-defined facts: status, counts, durations, error codes. Facts, not judgments. |
proof | MAY | A Data Integrity proof by actor or by the integrator. |
6. The Feedback Loop§
AGTP has one core mechanic. An evaluator resolves the party it wants to evaluate, reads the rules of the Space in which the evaluation takes place, issues a signed Learning Signal bound to reproducible provenance, delivers it to the subject and to the Space, and collects receipts. The Space aggregates what it accepts; consumers route on the aggregate; private learners update on ephemeral signals and distil them later. The figure shows the delivery path; the numbered operations that follow are normative.
6.1. Operations§
The operations below are stack-agnostic; the HTTP profile of section 9 binds them to concrete requests, and the DIDComm profile of section 9.9 binds them to messages. Each operation is labelled with its requirement level for an implementation that performs it; operations labelled policy are outside the protocol.
- Resolve (MUST). Given a subject DID, resolve its DID Document and read the
AGTPFeedbackServiceendpoint. An evaluator MUST NOT deliver to an endpoint obtained by any other means unless the subject's DID Document is unavailable and the endpoint was obtained from a verified ARD entry bound to the same DID (section 7.2). - Negotiate (SHOULD). Read the subject's and the Space's capabilities documents (section 9.6) and choose a transport profile and cryptosuite both support. In the absence of a capabilities document, the HTTP profile and the baseline cryptosuite apply.
- Declare context (MUST). Fetch the Space Manifest, verify its proof and status, confirm that the current time lies within
validFromandvalidUntil, and record itsmanifestHash. Every dimension the evaluator intends to use MUST be declared by that manifest. - Act and evaluate (policy). Perform the task, run verifiers, tournaments, audits, attesters or human review. Record observations and content-address the artifacts that the evaluation depends on. Which artifacts to retain, and in what privacy class, is a Space policy matter; that an evaluation binds to some reproducible artifact is not.
- Issue (MUST). Construct the Learning Signal with the required properties of section 5.3, sign it with a key listed under the issuer's
assertionMethod, and compute itssignalHash. - Deliver (MUST). Obtain a fresh nonce from the subject's feedback service, deliver the signal with the nonce and an idempotency key, and obtain a receipt. Compare the receipt's
signalHashwith the locally computed one; a mismatch MUST be treated as a failed delivery. Persistent signals SHOULD also be delivered to the Space's feedback service with the same idempotency key, and MUST be when the Space's persistence policy isspace-indexorpublic-index. Ephemeral signals MAY be delivered only to the subject. - Persist or distil (policy). Store private artifacts and ephemeral signals under the retention ceiling of the Space's persistence policy. When publishing a persistent summary of ephemeral signals, the summary MUST carry a
commitmentover them. - Aggregate (MUST at the Space). Verify and validate each accepted signal, deduplicate by
signalHash, check status, and apply the manifest's aggregation rule or the reference default of section 11. Aggregates MUST be recomputable from the persistent signals the Space serves. - Discover and route (policy). Index persistent signals and expose aggregates. Consumers select agents and capabilities using the aggregates, the descriptors and the discovery entries; how they weigh them is their own policy.
6.2. What Becomes a Signal§
A signal is an evaluative judgment. Runtime facts are observations. The following rules keep the two apart:
- Transport success, a syntactically valid response, an HTTP 200, an A2A task in the
completedstate, a successful MCP tool result or a model-API response with no error MUST NOT by themselves be emitted as Learning Signals. They MAY be recorded as observations. - Usage telemetry—tokens, latency, cost, event counts—is observation data. A Space evaluator MAY compute a signal from it, and when it does the signal's provenance MUST bind to the observation records or artifacts it used.
- A Learning Signal SHOULD be issued at a declared issuance point: post-completion verification by a verifier, peer review by another agent, a tournament or benchmark outcome, an explicit human judgment captured through an interface, or the result of a deterministic attester (section 8.3). Binding profiles name the issuance points they support.
- Several calls inside one run MAY roll up into one signal about the run, provided the provenance URI's artifacts preserve lineage to the individual outputs.
6.3. Illustrative Loops§
This section is non-normative.
- Reproducible tournament. A solver submits an answer; a verifier evaluates it against a held-out test case. The verifier issues a persistent signal in
did:web:rlvr.exampleonaccuracywith provenance binding the test-case CID and the output CID. Anyone can re-run the check from provenance, which is what stops a leaderboard being gamed. - Microscopic checks. A model produces a chain of reasoning; a private tool issues ephemeral signals on
consistencyandgroundingat each step. A distilled persistent signal is later published with aggregated values, a link to a redacted trace and a commitment over the ephemeral set. - Knowledge quality. An analyst confirms that an OKF concept describing a revenue metric is correct. The confirmation is recorded in the concept's
verifiedlist and backed by a persistent signal onaccuracywhose subject is the concept and whose provenance artifact is the concept's CID; the next reader can check both. - Discovered capability. An orchestrator finds a tool through an ARD registry, verifies its publisher's DID, invokes it over MCP and, after a Space evaluator scores the result, the signal accumulates against the capability's ARD identifier, where the next searcher will find it.
7. Discovery§
AGTP does not define a discovery mechanism. It adopts Agentic Resource Discovery [ARD]: providers publish JSON-LD entries describing their resources at a well-known path, registries crawl and index them, consumers search by intent and verify the publisher before connecting. This section specifies how AGTP agents, Spaces, capabilities and knowledge bundles are published as ARD entries, how the ARD trust manifest is bound to DIDs and credentials, and how discovery results are to be used—and not used—when choosing whom to trust. It is the normative content of the ARD binding profile; section 12.4 only cross-references it.
7.1. Publishing§
An AGTP participant that wishes to be discoverable MUST publish an ARD manifest at /.well-known/ard.json on the domain bound to its DID, and SHOULD emit the rel="ard" link relation from its HTML pages, both as specified by [ARD] §5.1. The DID Document SHOULD point at the manifest through a service of type AgenticResourceDiscovery (section 5.1).
The manifest's entries array MAY contain any ARD entry. The following entries carry AGTP meaning:
| Resource | ARD type | url or data | capabilities token |
|---|---|---|---|
| The agent itself | application/did+ld+json | The DID Document (its URL for did:web; inline data for other methods) | AGTPAgent |
| A Space | application/vc | The Space Manifest resource (§9.4) | AGTPSpace |
| A capability | The native card type (application/mcp-server-card+json, application/a2a-agent-card+json, …) or application/vc for the Capability Descriptor | The native card or the descriptor | AGTPCapability |
| A knowledge bundle | text/markdown unless OKF registers a bundle media type | The bundle root index.md | AGTPKnowledge |
| A signal index | application/json | The signal index resource (§9.7) | AGTPSignalIndex |
Entries that carry AGTP meaning MUST bind the AGTP namespace in their @context as {"agtp": "https://schema.agtp.org/ontology#"} and MUST carry agtp:did, the DID of the publishing agent or Space. Entries whose artifact is a credential MUST carry agtp:credentialType naming the AGTP type. Entries for agents and capabilities SHOULD carry agtp:spaces, the Space DIDs in which the resource accepts evaluation, and agtp:feedbackService. Entries for Spaces SHOULD carry agtp:dimensions, the identifiers the Space accepts. All entries SHOULD carry representativeQueries as ARD recommends, because a Space or capability that cannot be found by intent will not be evaluated.
{
"entries": [
{
"@context": { "agtp": "https://schema.agtp.org/ontology#" },
"identifier": "urn:air:rlvr.example:space:rlvr",
"displayName": "RLVR verification Space",
"type": "application/vc",
"url": "https://rlvr.example/.well-known/agtp/space/did:web:rlvr.example",
"description": "Reproducible verification of solver outputs; accuracy, robustness and latency dimensions.",
"representativeQueries": [
"verify a math solution with reproducible checks",
"space that scores code generation accuracy",
"where can my agent get independent evaluation"
],
"capabilities": ["AGTPSpace", "AGTPFeedbackService"],
"tags": ["agtp", "verification", "benchmark"],
"version": "2.1.0",
"updatedAt": "2026-09-01T00:00:00Z",
"agtp:did": "did:web:rlvr.example",
"agtp:credentialType": "SpaceManifest",
"agtp:feedbackService": "https://rlvr.example/.well-known/agtp/feedback",
"agtp:dimensions": ["accuracy", "robustness", "latency"],
"trustManifest": {
"identity": { "framework": "did", "id": "did:web:rlvr.example" },
"attestations": [
{ "type": "SpaceManifest",
"url": "https://rlvr.example/.well-known/agtp/space/did:web:rlvr.example" }
]
}
},
{
"@context": { "agtp": "https://schema.agtp.org/ontology#" },
"identifier": "urn:air:solver.example:tool:run-sql",
"displayName": "Run SQL against the sales warehouse",
"type": "application/mcp-server-card+json",
"url": "https://mcp.solver.example/.well-known/mcp-server-card.json",
"representativeQueries": ["query the sales warehouse", "run read-only SQL on orders"],
"capabilities": ["AGTPCapability"],
"agtp:did": "did:web:solver.example",
"agtp:spaces": ["did:web:rlvr.example"],
"agtp:feedbackService": "https://solver.example/.well-known/agtp/feedback",
"agtp:descriptor": "https://solver.example/agtp/capabilities/run-sql.vc.json",
"trustManifest": {
"identity": { "framework": "did", "id": "did:web:solver.example" },
"attestations": [
{ "type": "CapabilityDescriptor",
"url": "https://solver.example/agtp/capabilities/run-sql.vc.json" }
]
}
}
]
}
The layout of trustManifest follows ARD; this example shows only the members AGTP relies on. The MCP server card location is illustrative—the entry's url is whatever the provider serves for that ARD type.
7.2. Resolving and Verifying an Entry§
ARD binds an entry to its publisher by requiring that the domain in the entry's identifier URN match the identity claimed in its trustManifest, and leaves the identity framework to the publisher. AGTP fixes the framework. For an entry carrying AGTP meaning:
trustManifest.identityMUST name the DID framework and MUST carry the same DID asagtp:did. An entry whose trust manifest names another framework MAY still be indexed but MUST NOT be treated as AGTP-verified.- The consumer or registry MUST resolve the DID and MUST establish a mutual binding between the DID and the publisher domain of the URN: either the DID is a
did:webDID whose domain equals the publisher domain, or the DID Document'salsoKnownAscontains the publisher origin and the entry was retrieved from that origin (directly or through a registry that records the origin as itssource). - The consumer or registry MUST fetch at least one attestation referenced from
trustManifest.attestations(or the entry'surlwhen the entry's artifact is itself an AGTP credential), verify its proof against the DID Document'sassertionMethod, and check its status. The attestation MUST be a Space Manifest whose subject is the DID (for Space entries) or a Capability Descriptor whoseowneris the DID and whoseidordiscovery.ardequals the entry'sidentifier(for capability entries), or the DID Document itself (for agent entries). - Only when all three checks pass is the entry AGTP-verified. A registry that claims the AGTP.DiscoveryRegistry class MUST perform these checks at ingestion and on a refresh schedule no longer than the attestation's
validUntilor thirty days, MUST expose the outcome in the filterable fieldagtp:verified(boolean) withagtp:verifiedAt, and MUST NOT present an entry as verified on any other basis.
Failure of any check is not an error condition for ARD; it is an unverified entry. Consumers MAY still invoke unverified resources, but MUST NOT deliver signals to feedback services learned only from unverified entries, and SHOULD prefer verified entries when several satisfy the same intent.
7.3. Selection: Relevance Is Not Trust§
An ARD search response carries a score that ARD defines as semantic relevance and forbids interpreting as a trust, compliance or safety rating. AGTP consumers MUST honour that rule. Trust in a discovered resource comes from three sources, all of which the consumer can recompute:
- the AGTP-verified state of the entry (section 7.2);
- the persistent Learning Signals about the resource in the Spaces the consumer recognises, obtained from the Space's signal index and aggregated under the Space's declared rule; and
- the agreement between the resource's Capability Descriptor and the observations the consumer has of its behaviour.
A registry MAY expose an agtp:summary facet on an entry giving, per Space, the aggregate value, the number of distinct issuers, the window and the manifestHash under which it was computed. Such a summary is a convenience and MUST name the Space and the signal index from which it can be recomputed. A consumer MUST NOT rank on a summary from a Space whose manifest it has not verified.
7.4. Registries and Federation§
A Space MAY name the registries it recognises in its manifest's discovery.registries; consumers SHOULD prefer those registries when searching for resources to use within that Space. Registries SHOULD support filtering and exploration on agtp:spaces, agtp:dimensions, agtp:credentialType and agtp:verified, using the prefixed-key mechanism of ARD's query object.
When a registry federates, it MUST NOT forward another registry's agtp:verified value as its own. It MAY either re-verify the entry or return the upstream value together with the upstream registry as source, in which case the consumer decides whether to trust that upstream. A registry that returns referrals rather than merged results has no obligation beyond identifying itself.
The ability to search for a Space by intent—"where can my agent get independent evaluation of SQL generation?"—is what lets a new participant find not only tools but the contexts in which its work will be judged, and the dimensions on which. Publishing a Space as an ARD entry, with its dimensions and representative queries, is therefore the single most useful thing a Space operator can do for the growth of the graph.
8. Knowledge and Context§
Agents act on knowledge: schemas, metrics, procedures, policies, the documented meaning of a dimension. AGTP does not define a knowledge format. It adopts the Open Knowledge Format [OKF]: a directory of Markdown files with YAML frontmatter, one concept per file, ordinary Markdown links between them, and frontmatter families for provenance (sources), trust (generated, verified), lifecycle (status) and freshness (stale_after). This section specifies how OKF bundles become AGTP artifacts, how OKF actors and verification events are expressed with DIDs and signals, how OKF attested computations become verifiable rewards, and how AGTP publishes its own dimension registries and Space documentation as OKF. It is the normative content of the OKF binding profile; section 12.5 only cross-references it.
Nothing in this section changes what a conformant OKF consumer must do. OKF requires consumers to preserve unknown frontmatter keys and to derive trust tiers only from OKF's own fields; AGTP's additions are unknown keys to OKF and an orthogonal attestation state that OKF tiers do not depend on.
8.1. Bundles and Concepts as Artifacts§
An OKF bundle referenced from an AGTP object MUST be identified by the CID of its directory tree (dag-pb, computed as a UnixFS directory) in addition to its URL, and each concept file referenced individually MUST be identified by the CID of its bytes. A Space Manifest's knowledge entries carry resource, cid, okf_version and a role; a consumer that fetches a bundle from resource MUST verify the tree against cid before treating the contents as the manifest's knowledge. Where a bundle is distributed as a git repository, implementations SHOULD also record the commit identifier in sourceRefs.commit of observation records that used it, but the CID remains the authoritative identifier.
A bundle SHOULD be published for discovery as an ARD entry of type text/markdown whose url is the bundle root index.md (section 7.1). Bundles are commonly served to agents as MCP resources; a read of a concept through resources/read is an interaction whose artifact is the concept's CID, as specified in the MCP profile (section 12.3).
8.2. Frontmatter Mapping§
The table gives the AGTP interpretation of OKF frontmatter fields. OKF governs the fields' syntax; the third column is what an AGTP implementation does with them.
| OKF field | OKF meaning | AGTP interpretation |
|---|---|---|
type | Kind of concept (required) | Selects profile behaviour: AGTP Dimension, AGTP Space and Attested Computation have the semantics below; other types are ordinary knowledge artifacts. |
resource | URI of the underlying asset | The default subject for signals about the concept. When absent, the subject is the concept file's URL, and its CID is carried in provenance. |
title, description, tags | Display and categorisation | Copied into Capability Descriptors derived from the concept and into ARD entries. |
sources[] | Materials the concept derives from | Each sources[].resource becomes an artifact reference with role source; usage_count and usage_window become observation claims, never signals. |
generated.by, generated.at | Producing actor and time of last change | The actor's DID (§8.2.1) is the actor of an observation record for the generation; at is its observedAt. |
verified[] | Verification events by actors | Each event SHOULD be backed by a Learning Signal (§8.3). The event's actor is the signal's issuer. |
status | draft, stable, deprecated | Aggregators SHOULD exclude signals whose subject concept is deprecated from routing aggregates; Spaces SHOULD NOT reference draft dimension concepts from a manifest. |
stale_after | Instant after which the concept needs re-verification | After this instant, signals about the concept SHOULD be down-weighted or the Space SHOULD request re-verification; the mechanism is aggregation policy. |
okf_version | Target OKF version, root index.md only | Recorded in the manifest's knowledge entry and in sourceVersion of observations. |
AGTP adds one frontmatter key, agtp, a mapping that OKF consumers preserve as an unknown key. Its members are:
| Member | Required | Value constraints |
|---|---|---|
space | SHOULD | The DID of the Space in which the concept is evaluated, or an array of DIDs. |
subject | MAY | A URI overriding the default subject for signals about the concept. |
signals | MAY | A URL of a signal index query returning the persistent signals about the concept. |
dimension | MUST for type: AGTP Dimension | An object with id, range, higherIsBetter and optionally unit, identical in form to a manifest's dimensions entry. |
provenance | MAY | A provenance URI for the interaction that produced the concept, when it was generated by an agent. |
8.2.1. Actors§
OKF identifies actors with three forms: <producer>/<version> for agents and tools, human:<id> for people and process:<id> for automated processes. AGTP uses DIDs inside those forms rather than beside them. An AGTP-aware producer MUST write a DID-identified actor as human:<did>, process:<did> or <did>/<version>, and an AGTP consumer MUST recognise a did: prefix in the identifier position of any of the three forms. Because the prefixes are unchanged, OKF consumers classify these actors exactly as before: a human:did:key:… verifier still yields the human-reviewed tier.
generated:
by: did:web:solver.example/2.4.0
at: 2026-08-20T09:00:00Z
verified:
- by: human:did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH
at: 2026-08-21T12:00:00Z
agtp_signal: https://rlvr.example/.well-known/agtp/signals/uEiA4k3b…
- by: process:did:web:rlvr.example
at: 2026-09-01T02:00:00Z
8.3. Verification Events and Attested Computations§
OKF records that a concept was verified and by whom; it does not carry proof. AGTP supplies the proof. A verified[] entry SHOULD be backed by a persistent Learning Signal issued by the actor's DID whose subject is the concept's subject URI, whose provenance includes the concept's CID as an artifact, and whose dimensions are declared by the Space named in the concept's agtp.space. The entry MAY carry the additional key agtp_signal, a URL of the signal or its signalHash; OKF consumers preserve it and AGTP consumers dereference it.
An AGTP consumer derives an attestation state for a concept independently of the OKF trust tier: attested when at least one verified entry is backed by a signal that verifies, validates and is not revoked and whose provenance artifact equals the concept's current CID; stale-attested when such a signal exists but the concept's CID has changed since it was issued; otherwise unattested. Consumers MUST NOT change the OKF trust tier on the basis of the attestation state.
OKF's Attested Computation type describes a sanctioned computation with typed parameters, an executor that returns named receipt fields and a deterministic, non-LLM attester. It is the natural source of verifiable rewards. The figure shows the binding.
For a concept of type Attested Computation:
- The executor's receipt fields (the names listed in the concept's
executor.receipt) MUST be serialised as one artifact and content-addressed. Where a receipt field is large or sensitive, its value MAY be replaced by its CID in the serialised receipt. - The attester's result MUST be issued as a Learning Signal by the DID that ran the attester, with a dimension declared for the purpose by the Space (
attestationwith range [0, 1] andhigherIsBetter: trueis RECOMMENDED),issuerRelationreflecting the attester's relationship to the executor, and a provenance URI whose artifacts include the concept file's CID, the receipt artifact's CID and, when parameters were supplied, the CID of the serialised parameters. - The Space MAY also accept signals about the executor (subject: the executing agent's DID) and about the computation as a capability (subject: a Capability Descriptor with
interfaceType: okf-computation) from the same attestation, provided each carries the same provenance.
8.4. Dimension Registries as OKF Bundles§
A dimension registry SHOULD be an OKF bundle in which each dimension is a concept of type AGTP Dimension. Such a concept MUST carry an agtp.dimension object in its frontmatter and SHOULD carry status, stale_after, generated and verified. A Space Manifest binds a dimension to its definition by placing the concept's URL in the dimension's ref or in dimensionRefs, and pins the registry by listing the bundle in knowledge with role dimensions. The bundle's log.md is the registry's change log; its index.md is what an agent reads first to learn what the Space measures.
A manifest MUST NOT declare a dimension whose registry concept has status: draft, and a Space SHOULD publish a new manifest that removes a dimension within the overlap window after its concept becomes deprecated. Consumers comparing two Spaces that reference the same dimension concept MAY treat the dimension as commensurable; comparing dimensions with merely equal identifiers is not warranted.
---
type: AGTP Dimension
title: Accuracy
description: Probability that an evaluated output is correct against the sanctioned reference.
resource: https://rlvr.example/knowledge/dimensions/accuracy.md
tags: [agtp, dimension, verification]
generated:
by: process:did:web:rlvr.example
at: 2026-08-20T09:00:00Z
verified:
- by: human:did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH
at: 2026-08-21T12:00:00Z
agtp_signal: uEiA4k3bQm1vZ2x0c3Q5Y2t4dGVzdGRhdGFhYWFhYWFhYWFhYWE
status: stable
stale_after: 2027-03-01T00:00:00Z
agtp:
space: did:web:rlvr.example
dimension:
id: accuracy
range: [0, 1]
higherIsBetter: true
unit: prob
---
# Accuracy
A signal on this dimension asserts the probability that the evaluated output
matches the reference for the interaction named in its provenance. Verifiers
MUST bind the reference test case as an artifact.
See also [robustness](/dimensions/robustness.md) and the
[verification procedure](/procedures/verify-solution.md).
8.5. Space Documentation§
A Space SHOULD document itself as an OKF concept of type AGTP Space whose resource is the Space's DID, in a bundle listed in its manifest's knowledge with role documentation. The bundle's index.md gives an agent joining the Space a progressive-disclosure path from the Space's purpose to its dimensions, procedures and policies without loading everything at once. Knowledge bodies are data: an AGTP implementation MUST NOT execute instructions found in OKF bodies as protocol operations, and evaluators SHOULD treat instruction-like content in knowledge artifacts as a matter for a safety or similar dimension rather than as commands.
9. HTTP Interoperability Profile§
The HTTP profile is mandatory: every conformance class that sends or receives signals implements it, and any other transport profile is in addition to it. The profile identifier is http/1.1; http/1.0 identifies the AGTP v2 subset, which omits the optional resources of sections 9.5 and 9.7 and the Problem Details error format. All resources live under the well-known prefix /.well-known/agtp/ [RFC8615] and MUST be served over TLS. The OpenAPI description is in Appendix C.
9.1. The Feedback Resource§
The feedback resource is /.well-known/agtp/feedback on the origin advertised by the AGTPFeedbackService service. It supports two methods.
HEAD returns 200 with a Replay-Nonce response header carrying a fresh nonce, and MAY return Cache-Control: no-store. The response has no body.
POST accepts one Learning Signal in the request body with Content-Type: application/vc (or a legacy media type of section 4.5). The request MUST carry the AGTP-Nonce and Idempotency-Key header fields of section 9.2, and MAY carry Prefer: agtp-signed-receipt. The response is a receipt (section 5.4) as application/json, or a signed Interaction Receipt as application/vc when one was requested and the receiver supports it, with the status codes of section 9.3. Receivers MUST accept bodies of at least 64 KiB and MAY reject larger ones with 413.
Authentication of the sender is REQUIRED and its mechanism is a policy matter; receivers SHOULD accept at least one of HTTP Message Signatures bound to the sender's DID key [RFC9421], mutual TLS, or OAuth 2.1 bearer tokens as used by MCP. The signal's own proof authenticates the issuer of the claim; sender authentication only gates the endpoint.
9.2. Nonces and Idempotency§
Replay and duplicate protection follow two established patterns: the Replay-Nonce mechanism of ACME [RFC8555] and the Idempotency-Key header of [IDEMPOTENCY-KEY].
- A nonce is an opaque string of at least 128 bits of entropy, base64url-encoded, valid for a single POST. Receivers MUST issue a nonce on every HEAD and SHOULD keep it valid for at least five minutes. Every successful or failed POST consumes the nonce it carried, and every response to a POST SHOULD include a fresh
Replay-Nonceso that senders need not issue another HEAD. - A POST without
AGTP-Nonce, or with a nonce that is unknown, expired or already consumed, MUST be rejected with400and the problem typenonce-invalid, and the response MUST carry a freshReplay-Nonce. - The
Idempotency-Keyis a sender-generated UUID [RFC9562]. A sender MUST use the same key for every retry of the same signal to the same receiver and SHOULD use the same key when delivering the same signal to the subject and to the Space. Receivers MUST remember keys for at least 24 hours and MUST respond to a repeated key from the same authenticated sender with409, the problem typeduplicate-deliveryand the original receipt in the problem'sreceiptmember, without processing the body again. - Independently of the key, receivers MUST deduplicate by
signalHash: a signal whose hash was already accepted MUST be answered with200and the existing receipt.
9.3. Status Codes and Errors§
Error responses use Problem Details for HTTP APIs [RFC9457] with Content-Type: application/problem+json. The type member is a URI under https://schema.agtp.org/problems/; the following types and codes are defined. A receipt with acceptState: rejected uses the same URIs in its reason.
| Status | Problem type (suffix) | Meaning |
|---|---|---|
| 200 | — | Signal accepted; receipt returned. Also returned for a signal already accepted with the same signalHash. |
| 202 | — | Signal received, validation pending; receipt with acceptState: pending and a Retry-After header. |
| 400 | nonce-invalid, malformed | Missing or consumed nonce; unparseable body or headers. |
| 401 | unauthenticated | Sender authentication absent or invalid. |
| 403 | not-admitted | Sender authenticated but not admitted by the receiver's or the Space's policy. |
| 406 | dimension-not-accepted | A dimension in the signal is not declared by the Space's current manifest. |
| 409 | duplicate-delivery | Repeated Idempotency-Key; the original receipt is included. |
| 413 | too-large | Body exceeds the receiver's limit. |
| 422 | proof-invalid, issuer-unresolvable, status-revoked, value-out-of-range, provenance-invalid, space-mismatch, manifest-expired, schema-invalid | Verification or validation failure; the type says which. Verification types (proof-invalid, issuer-unresolvable, status-revoked) MUST be distinguished from validation types. |
| 429 | rate-limited | Sender exceeded the receiver's quota; Retry-After SHOULD be present. |
| 503 | degraded | Receiver is in degraded mode (§11.3); senders SHOULD retry with the same key. |
9.4. The Space Manifest Resource§
The Space Manifest is served at /.well-known/agtp/space/{spaceId}, where spaceId is the Space's DID, percent-encoded as necessary, on the origin advertised by the AGTPSpaceManifest service. GET returns the current manifest as application/vc with an ETag equal to the manifest's manifestHash (quoted) and a Cache-Control whose max-age does not extend past validUntil [RFC9111]. Servers MUST honour If-None-Match with 304. During an overlap window the server MAY expose the previous manifest at the same resource with the query parameter version.
9.5. Status Resources§
A Space or issuer that uses the Space status API form of credential status (section 10.3) serves it at /.well-known/agtp/status. GET with the query parameter signal (a signalHash) or id (a credential id) returns application/json: {"signalHash", "status", "reason", "updatedAt"} where status is valid, revoked, suspended or unknown. Bitstring status lists are served as their own specification requires and need no AGTP resource. A Space that revokes its acceptance of a signal (as opposed to the issuer revoking the signal) publishes that through the same resource with status: revoked and a reason URI.
9.6. The Capabilities Resource§
GET /.well-known/agtp/capabilities returns application/json describing what the agent or Space supports. The document MUST carry agtpVersion, did and updatedAt, and SHOULD carry supportedProfiles (profile identifiers from Appendix F), cryptosuites, statusFormats, hashing, features and extensions (context URLs and dimension registries). The legacy key signatureSuites MAY be present for v2 consumers.
{
"agtpVersion": "2.1.0",
"did": "did:web:solver.example",
"supportedProfiles": ["http/1.1", "didcomm/2.0", "mcp/2025-11-25", "ard/0.91", "okf/0.2"],
"cryptosuites": ["eddsa-rdfc-2022", "Ed25519Signature2020"],
"statusFormats": ["BitstringStatusList", "AGTPSpaceStatus"],
"hashing": ["rdfc-1.0+sha2-256"],
"features": ["metricsFeed", "signalIndex", "signedReceipts"],
"extensions": [
"https://schema.agtp.org/context/v2",
"https://rlvr.example/knowledge/dimensions/"
],
"updatedAt": "2026-09-03T08:00:00Z"
}
9.7. The Signal Index Resource§
An agent or Space that advertises the signalIndex feature serves persistent signals at /.well-known/agtp/signals. GET accepts the query parameters subject, space, dimension, issuer, since, until, limit and cursor, and returns application/json with a signals array and an optional next cursor. Each element is either a complete signal or an object with signalHash and url. GET /.well-known/agtp/signals/{signalHash} returns one signal as application/vc. The index MUST serve only signals it has accepted and MUST NOT serve ephemeral signals. Consumers MUST verify what they retrieve; the index is a locator, not an oracle.
9.8. The Metrics Resource§
GET /.well-known/agtp/metrics returns application/json: an array of objects with metric, value, window, method and lastUpdated, enabling third-party audit of the operational indicators defined in Appendix E. The resource is OPTIONAL and advertised by the metricsFeed feature.
9.9. DIDComm v2 Profile (Optional)§
Implementations MAY additionally exchange signals as DIDComm v2 messages [DIDCOMM-V2] using the message types https://schema.agtp.org/didcomm/2.0/nonce-request, …/nonce, …/signal and …/receipt. The signal message body carries the credential under signal, the nonce under nonce and the idempotency key under idempotencyKey; the receipt message body is the receipt object; thid correlates a receipt with its signal. The profile identifier is didcomm/2.0. DIDComm's own encryption and sender authentication replace the transport-level requirements of section 9.1; every other requirement of this document applies unchanged.
10. Cryptographic Suite§
10.1. Proofs§
AGTP credentials and signed records are secured with Data Integrity [VC-DATA-INTEGRITY]. The baseline cryptosuite, which all implementations MUST support for both signing and verification, is eddsa-rdfc-2022 [VC-DI-EDDSA]: Ed25519 signatures over the RDF Dataset Canonicalization of the document. Implementations MAY support eddsa-jcs-2022 and other registered cryptosuites, advertised in the capabilities document. The Ed25519Signature2020 proof type used by AGTP v2 MUST be accepted by verifiers during the overlap window of section 13 and SHOULD NOT be used for new signatures.
A proof MUST have proofPurpose assertionMethod, MUST carry created, and MUST reference by verificationMethod a key that appears under assertionMethod in the issuer's DID Document. Verifiers MUST resolve the DID Document at verification time and, where the method provides history, SHOULD confirm that the key was authorised at created. A verifier MUST fail closed on a cryptosuite it does not support unless the Space's manifest explicitly permits a fallback. A document MAY carry a proof set with several proofs; it is valid if at least one proof verifies against the issuer, and a Space MAY require more.
10.2. Canonicalisation and Hashing§
Three hashes appear in this specification—signalHash, manifestHash and contentHash—and all are computed the same way. Given an AGTP document:
- Remove the
proofproperty and, for manifests and descriptors, the hash property itself. - Expand and canonicalise the resulting JSON-LD document with RDF Dataset Canonicalization [RDF-CANON] (RDFC-1.0, the standardised successor of URDNA2015) to obtain canonical N-Quads, serialised as UTF-8.
- Compute the SHA-256 digest of those bytes.
- Encode the digest as a multihash [MULTIHASH] with the
sha2-256code and then in multibase [MULTIBASE] base64url without padding (prefixu), matching thedigestMultibaseconvention of [VC-DATA-MODEL-2.0].
The resulting string, for example uEiA4k3bQm1vZ2x0c3Q5Y2t4dGVzdGRhdGFhYWFhYWFhYWFhYWE, is stable across key order, whitespace, context aliasing and re-signing. Two signals with equal signalHash make identical claims and MUST be treated as one by receivers and aggregators. The advertised value of hashing in a capabilities document for this procedure is rdfc-1.0+sha2-256; AGTP v2's URDNA2015+multihash denotes the same computation and MUST be treated as equivalent.
10.3. Status and Revocation§
Learning Signals and Space Manifests MUST carry a credentialStatus in one of two forms, and every consumer MUST support both:
- a
BitstringStatusListEntryas specified by [VC-BITSTRING-STATUS-LIST], withstatusPurposerevocationand optionally a second entry with purposesuspension; or - an
AGTPSpaceStatusentry whoseidis a URL of a status resource (section 9.5) operated by the Space or the issuer.
The legacy StatusList2021Entry type MUST be accepted during the overlap window. Consumers MUST check status before aggregating, routing on, anchoring or presenting a signal as verified, MAY cache results for the lifetime indicated by the status resource's caching headers, and MUST treat a status that cannot be retrieved as unknown rather than valid. Revoked signals MUST be excluded from aggregation; suspended signals SHOULD be. Revocation of a Space Manifest invalidates the interpretation of signals issued under it only to the extent the replacing manifest says; by default a successor manifest re-interprets earlier signals whose dimensions it still declares.
10.4. Keys and Key Management§
Baseline keys are Ed25519 public keys expressed as Multikey verification methods [CONTROLLED-IDENTIFIERS]; Ed25519VerificationKey2020 MUST be accepted. Issuers SHOULD use distinct keys for assertion and authentication, SHOULD rotate assertion keys by adding a new verification method before removing the old one, and MUST publish the removal through their DID method so that verifiers can date it. An issuer whose key is compromised SHOULD revoke the signals issued with it through its status mechanism; a Space SHOULD define, as policy, an emergency invalidation procedure for compromised issuers that operates through its own status resource without waiting on the issuer.
11. Aggregation§
Aggregation turns accepted signals into scores. It is the Space's prerogative, declared in its manifest; the protocol defines one reference function so that a manifest that says nothing is still interpretable, and the hooks by which Spaces substitute their own.
11.1. Reference Default: Trust-Weighted Average§
When a manifest omits aggregation, or names https://schema.agtp.org/aggregation#TrustWeightedAverage, the following applies. For each dimension d and subject, let Sd be the set of accepted, verified, non-revoked persistent signals about the subject on d whose validFrom lies within the window ending now. The aggregate is
v̂d = ( Σs ∈ Sd w(s) · vs ) / ( Σs ∈ Sd w(s) )
where w(s) is the weight of the signal's issuer at aggregation time, initially defaultWeight, multiplied by the weight assigned to the signal's issuerRelation. The parameters, with their defaults, are:
| Parameter | Default | Meaning |
|---|---|---|
window | P30D | ISO 8601 duration of the sliding window. |
defaultWeight | 1.0 | Initial issuer weight. How weights change over time is policy; the default never changes them. |
minRaters | 3 | Minimum number of distinct issuers before an aggregate is published; below it the aggregate is undefined. |
maxWeightPerIssuer | 0.4 | Cap on any one issuer's fraction of the total weight; excess weight is discarded, not redistributed. |
issuerRelationWeights | {"self": 0, "affiliate": 1, "independent": 1} | Multipliers by issuerRelation; signals lacking the property are treated as affiliate. |
useConfidence | false | When true, w(s) is further multiplied by the signal's confidence (1 when absent). |
Aggregators MUST publish, alongside an aggregate, the manifestHash under which it was computed, the number of distinct issuers and the window, so that consumers can judge and recompute it.
11.2. Override Hooks§
A manifest names another function by a URI in aggregation.name; registered identifiers are listed in Appendix F. aggregation.parameters is open, and clients MAY ignore parameters they do not understand. aggregation.impl MAY point at a reference implementation with a version. A Space MAY declare different functions per dimension by giving aggregation as an array of objects each with a dimensions member. Whatever the function, it MUST be a pure function of the persistent signals the Space serves and of the manifest, so that an independent party can recompute it.
11.3. Partition Tolerance and Degraded Mode§
During network partitions or when a dependency (a DID method, a status list host, a registry) is unreachable, a receiver MAY enter degraded mode: it answers deliveries with 202 and a pending receipt rather than rejecting them, caches last-known-good manifests until their validUntil, marks published aggregates as tentative, and reconciles on heal by re-verifying pending signals, deduplicating by signalHash and, where anchors exist, checking anchored hashes. A receiver in degraded mode MUST say so through its status resource and SHOULD say so with 503 and the degraded problem type when it cannot even queue.
11.4. Interplay with Knowledge Lifecycle§
This section is non-normative. Dimension concepts and knowledge artifacts carry OKF status and stale_after. A Space that references them can let those fields drive aggregation: signals on a deprecated dimension stop counting when the successor manifest drops it; signals about a stale concept lose weight until a fresh verification event, backed by a signal, resets the clock. None of this requires a protocol change—it is a choice of aggregation parameters that reads the same frontmatter agents already read.
12. Binding Profiles§
A binding profile is the normative mapping between an external standard and AGTP. Profiles are how AGTP stays small: the semantics of tasks, tools, interfaces, policies, API calls and registries remain upstream-authoritative, and each profile states only which AGTP objects an upstream object or event produces, which upstream identifiers are preserved, and where AGTP identifiers travel inside the upstream protocol. The profile identifiers used in capabilities documents and observation records are registered in Appendix F.
12.1. The Profile Contract§
Every profile, including those defined in this document and those registered later, MUST specify the following:
- the values of
sourceProtocolandsourceVersion, and the members ofsourceRefsthat observation records preserve, with a statement of which upstream ordering semantics are preserved; - which AGTP objects the profile creates—Observation Records, Artifacts, Capability Descriptors, Learning Signals, Receipts, Anchor Commitments—and from which upstream objects or events;
- how
actorandsubjectDIDs are obtained, including the gateway identity rule when the upstream protocol lacks DIDs; - how the interaction identifier is derived and how the provenance URI's artifacts are chosen;
- the separation between transport or execution outcomes (observations) and evaluative judgments (signals), and the issuance points the profile supports;
- the redaction and hashing strategy for payloads that may be private, expressed in terms of the privacy classes of section 5.7; and
- where AGTP identifiers are carried inside the upstream protocol, using the reserved keys below and nothing that the upstream protocol reserves for itself.
| Host | Where the keys live | Keys |
|---|---|---|
| MCP | _meta on requests, results and notifications, under the reverse-DNS prefix org.agtp/ | org.agtp/space, org.agtp/interaction, org.agtp/actor, org.agtp/did, org.agtp/provenance, org.agtp/artifacts, org.agtp/capability |
| A2A | metadata on Task, Message and Artifact; the extension URI https://schema.agtp.org/a2a/ext/v1 declared in the Agent Card and negotiated with A2A-Extensions | agtp:space, agtp:interaction, agtp:provenance, agtp:artifacts, agtp:capability; extension params did, feedbackService, spaces |
| Model-runtime APIs | the request and response metadata map | agtp_space, agtp_interaction, agtp_provenance, agtp_actor |
| ARD | entry properties under the agtp prefix bound in @context | agtp:did, agtp:credentialType, agtp:spaces, agtp:dimensions, agtp:feedbackService, agtp:descriptor, agtp:verified, agtp:verifiedAt, agtp:summary |
| OKF | frontmatter | the agtp mapping; verified[].agtp_signal |
| Agent Skills | the metadata map of SKILL.md frontmatter (string values only) | agtp-owner, agtp-capability, agtp-space |
| ERC-8004 | the registration file's services array; the off-chain feedback and validation files | a service named AGTP; an agtp object in feedback and validation files |
12.2. DID and Verifiable Credentials (Baseline)§
Profile identifier: did-vc/2.1. This profile is the substrate on which every other profile depends and is not optional. It consists of the identifier requirements of section 3, the credential family and representations of section 4, and the cryptographic suite of section 10. In summary, an implementation of this profile:
- identifies every participant by a resolvable DID and discovers services through DID Documents;
- expresses every portable trust claim as a Verifiable Credential 2.0 with the AGTP context and one AGTP type;
- secures documents with Data Integrity proofs, baseline
eddsa-rdfc-2022, and verifies them againstassertionMethodkeys; - checks Bitstring Status List or Space status entries before use and fails closed on unresolvable DIDs, unsupported cryptosuites and unretrievable status;
- computes
signalHash,manifestHashandcontentHashby the procedure of section 10.2.
Other profiles MAY start from non-credential records, but any claim that crosses an organisational boundary as evidence of trust SHOULD be upgraded to an AGTP credential before it does.
12.3. Model Context Protocol§
Profile identifiers: mcp/2025-11-25 and mcp/2025-06-18, corresponding to the MCP specification revisions [MCP]. MCP defines how a client discovers and invokes a server's tools, resources and prompts over JSON-RPC 2.0; it says nothing about whether the results were any good. This profile makes MCP activity first-class evidence in AGTP without changing MCP semantics.
| MCP concept | AGTP object | Rule |
|---|---|---|
Server identity (serverInfo in the initialize result) | Agent | A server SHOULD state its DID in _meta["org.agtp/did"] of the initialize result and SHOULD be reachable from its DID Document through an MCPServer service. A server without a DID is represented by the client's gateway identity. |
tools/list, resources/list, resources/templates/list, prompts/list | Capability, Capability Descriptor | Each entry becomes one capability with interfaceType mcp-tool, mcp-resource or mcp-prompt; interface carries protocol: "mcp", version, server (its URL or DID), the tool name, resource URI or prompt name, and schemaHash over the exact inputSchema (and outputSchema) advertised. Tool annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) and title are copied into constraints. |
tools/call | Interaction, Observation Record (MCPToolCallRecord) | sourceRefs preserves the JSON-RPC request id, the tool name, and the server identifier; the record's claims carry isError and timing. The interaction identifier is taken from _meta["org.agtp/interaction"] when the client supplied one, otherwise derived per §3.3. |
Tool result content, structuredContent and resource links | Artifacts | Each content block is content-addressed individually (role output); a resource link becomes an artifact reference whose uri is the link and whose cid is computed when the resource is read. The request arguments are content-addressed with role input, after redaction per Space policy. |
resources/read | Interaction, Artifact | The resource contents are one artifact (role knowledge when the resource is an OKF concept); the record preserves the resource URI and any mimeType. |
prompts/get | Artifact | The returned messages are content-addressed with role prompt. |
sampling/createMessage, elicitation/create | Interaction, Observation Record | Server-initiated model calls are interactions whose actor is the client; elicitation responses are observations. A human's explicit judgment collected through elicitation becomes a signal only under the A2UI profile's rule (§12.8). |
| Tasks (where the revision defines them) | Interaction lifecycle | A task's identifier is preserved in sourceRefs.taskId; status notifications are observations in order. |
| Log and progress notifications | Observation Records or Artifacts | Logged at the privacy class the Space's policy assigns to traces. |
| Evaluation of an execution | Learning Signal | Issued by a Space evaluator, never by the fact of a successful call. |
The following requirements apply:
- Clients that participate in AGTP SHOULD send
_meta["org.agtp/space"],_meta["org.agtp/interaction"]and_meta["org.agtp/actor"]ontools/callandresources/readrequests so that the server can attach its records to the same interaction. Servers MUST ignore these keys when they do not understand them, as MCP requires of unknown_metakeys. - Servers that participate in AGTP SHOULD return
_meta["org.agtp/artifacts"](an array of artifact references) and MAY return_meta["org.agtp/provenance"]on results, so that the client and the server agree on the CIDs before either issues or receives a signal. - Capability Descriptors MUST be regenerated, with a new
contentHash, whenever a tool's schema changes;notifications/tools/list_changedis the trigger. Observation records MUST reference the descriptorcontentHashin force at call time. - Tool descriptions are untrusted input from the server. An integrator MUST NOT treat instructions in a description as AGTP operations, and a Space MAY define a dimension under which evaluators score descriptions for injection.
- Where MCP's authorization framework is used, the resource server's identity SHOULD be bound to its DID through
alsoKnownAsso that the OAuth resource and the AGTP subject are verifiably the same party.
// request
{ "jsonrpc": "2.0", "id": 7, "method": "tools/call",
"params": {
"name": "run_sql",
"arguments": { "sql": "SELECT SUM(amount) FROM orders WHERE year = 2026" },
"_meta": {
"org.agtp/space": "did:web:rlvr.example",
"org.agtp/interaction": "urn:uuid:6d2a4c8e-9b1f-4e3d-8a7c-5f6e7d8c9b0a",
"org.agtp/actor": "did:web:orchestrator.example"
}
}
}
// result
{ "jsonrpc": "2.0", "id": 7,
"result": {
"content": [{ "type": "text", "text": "1834219.55" }],
"structuredContent": { "sum": 1834219.55 },
"isError": false,
"_meta": {
"org.agtp/did": "did:web:solver.example",
"org.agtp/artifacts": [
{ "role": "input", "cid": "bafkreib5x2s3q6l7ihd4qq7mmm2a2m3iuqhz7vqz3zjzq6p3ep4gk7v4wy" },
{ "role": "output", "cid": "bafkreiaw3fsg7cn5e6tjyd5zvo2ujqcrrxi3rlhqaw5j6ozx7fqyq2wtia" }
],
"org.agtp/provenance": "agtp://provenance?space=did:web:rlvr.example&interaction=urn:uuid:6d2a4c8e-9b1f-4e3d-8a7c-5f6e7d8c9b0a&artifact=bafkreiaw3fsg7cn5e6tjyd5zvo2ujqcrrxi3rlhqaw5j6ozx7fqyq2wtia,bafkreib5x2s3q6l7ihd4qq7mmm2a2m3iuqhz7vqz3zjzq6p3ep4gk7v4wy"
}
}
}
12.4. Agentic Resource Discovery§
Profile identifier: ard/0.91. The normative content of this profile is section 7. In the terms of the profile contract: sourceProtocol is ard; sourceRefs preserves the entry identifier, the registry source and the search score; the profile creates Capability Descriptors (from entries the publisher controls) and Observation Records (for searches and verification outcomes); the actor is the searching agent and the subject is the entry's agtp:did; discovery events are observations and never signals; entries are public by construction and carry no private payloads; and AGTP identifiers travel in the entry under the agtp prefix.
12.5. Open Knowledge Format§
Profile identifier: okf/0.2. The normative content of this profile is section 8. In the terms of the profile contract: sourceProtocol is okf and sourceVersion is the bundle's okf_version; sourceRefs preserves the bundle CID, the concept path and, where applicable, the git commit; the profile creates Artifacts (bundles, concepts, receipts), Observation Records (generation, usage, reads), Capability Descriptors (attested computations) and Learning Signals (verification events, attester verdicts); actors are obtained from the DID forms of OKF actor identifiers; the interaction identifier for an attestation is derived from the computation's CID and parameters; verification events and attester verdicts are the issuance points; bodies MAY be private with concept CIDs still bound in provenance; and AGTP identifiers travel in the agtp frontmatter mapping.
12.6. Model-Runtime APIs (OpenAI API Conventions)§
Profile identifier: openai-api/1. This profile covers the request and response conventions popularised by the OpenAI API [OPENAI-API]—messages with roles, tool and function schemas in JSON Schema, tool-call identifiers, response identifiers, a free-form metadata map and usage accounting—as implemented by many model providers and gateways. It does not depend on any one provider.
| API concept | AGTP object | Rule |
|---|---|---|
| One request and its response | Interaction, Observation Record (ModelRunRecord) | sourceRefs preserves the response identifier and, where present, the previous-response identifier that chains a conversation. The interaction identifier is taken from metadata.agtp_interaction when the caller set it. |
| Model identifier and runtime parameters | Artifact (role config) | The request with credentials and payload removed is content-addressed so that provenance records what model and settings produced the output. |
| Tool and function schemas | Capability, Capability Descriptor (api-tool) | Normalised as for MCP, with schemaHash over the schema as sent. A tool backed by MCP or A2A reuses that profile's capability identifier rather than creating a second one. |
| Tool calls and their outputs | Observation Records, Artifacts | Each call identifier is preserved; outputs are content-addressed. Hosted tools, including provider-hosted MCP connectors, are mapped through the MCP profile where the provider exposes the underlying call. |
| Generated outputs | Artifacts (role output) | Stored raw, redacted or as CID only, according to Space policy. |
| Usage, latency, cost | Observation claims | Observations, never signals. |
| Human or evaluator judgment of an output | Learning Signal | Issued with a Space, dimensions and provenance binding the output artifact. |
The API endpoint is not an AGTP identity; the calling agent, service or gateway is, and it holds the DID. Where several agents share one gateway, the gateway MUST preserve the delegated actor in sourceRefs or a Delegation credential. Callers SHOULD set metadata.agtp_space, metadata.agtp_interaction and, where the provider echoes metadata, read them back to confirm correlation. Provider-computed evaluation results, where a provider offers them, are observations until a Space evaluator adopts them as the basis of a signal.
12.7. Agent2Agent Protocol§
Profile identifier: a2a/1.0, corresponding to A2A 1.0 [A2A]; earlier revisions are identified by their own version. A2A provides task lifecycle, messaging, artifact exchange and capability discovery between agents. The correct integration is not to collapse A2A into AGTP but to make A2A interactions emit AGTP objects.
| A2A concept | AGTP object | Rule |
|---|---|---|
| Agent Card | Agent, Capability Descriptors | Each skill becomes a capability of interfaceType a2a-skill; interface carries the card URL, the skill identifier and schemaHash over the skill's entry. The card SHOULD declare the AGTP extension with params did, feedbackService and spaces; where the card is signed, the signature SHOULD verify against a key in that DID's Document. |
| Task | Interaction | The task identifier MUST be preserved in sourceRefs.taskId and the context identifier in sourceRefs.contextId; the interaction identifier is derived from the task identifier per §3.3 unless metadata["agtp:interaction"] was supplied. |
| Task status and message events | Observation Records (A2ATaskEventRecord) | Event ordering MUST be preserved; each record carries the task state. |
| Message and Artifact parts | Artifacts | Content-addressed with roles input and output; A2A's own artifact identifiers are preserved in sourceRefs.artifactId. |
| Protocol acknowledgements and results | Observation Records | An A2A response MUST NOT be treated as an AGTP receipt; receipts come only from feedback services. |
| Evaluation of a task outcome | Learning Signal | Issued at declared points: post-completion verification, peer review, tournament outcome, human judgment. |
Task completion, cancellation, failure or rejection is an execution fact recorded as an observation, not a signal. Long-running tasks MAY be divided into several interactions provided each preserves the task identifier and lineage to the task's artifacts. An A2A agent that lacks a DID is represented by a gateway identity, and the mapping between its card URL and the DID SHOULD be published as a Capability Descriptor or in the DID Document's alsoKnownAs.
12.8. A2UI§
Profile identifiers: a2ui/0.8 (production baseline) and a2ui/0.9 (draft) [A2UI]. A2UI is the human-facing surface where much of the highest-value feedback originates. This profile makes UI interactions and human judgments portable without defining UI semantics.
- A UI session or context is an Interaction, bound to the same interaction identifier as the A2A, MCP or model-API activity it presents wherever that identifier is available.
- UI events are Observation Records (
UIEventRecord) with event identifiers, order and timestamps preserved insourceRefs; rendered snapshots, prompts and outputs are Artifacts at the privacy class Space policy assigns. - Only evaluative judgments—ratings, preferences, corrections, approvals and rejections, rubric scores—become Learning Signals. Telemetry (clicks, dwell, scroll) never does. Human-issued signals SHOULD carry
issuerRelationand MAY carryconfidence; the issuer is the human's DID or a gateway identity with a Delegation credential. - Evidence gathered in the interface—screenshots, annotations, correction diffs—becomes Artifacts referenced from provenance. For sensitive interfaces implementations SHOULD distil ephemeral UI observations into a persistent summary signal with a commitment.
- Mappings MUST be version-tagged; v0.8 and v0.9 fields MUST NOT be mixed in one record without a translation layer.
12.9. AGENTS.md and Agent Skills§
Profile identifier: agents-skills/1. AGENTS.md [AGENTS-MD] expresses repository or workspace policy for coding agents in free-form Markdown, with nearest-file precedence. Agent Skills [AGENT-SKILLS] package a capability as a directory with a SKILL.md whose YAML frontmatter carries name, description and optional license, compatibility, metadata and allowed-tools. Together they are the intent layer: what an agent may do and what it says it can do.
- An AGENTS.md file in force during an interaction is an Artifact (role
policy) referenced from the observation record'spolicyRefs. Which file applied, under nearest-file precedence, is recorded, not inferred. An AGENTS.md MAY be exchanged across organisational boundaries as aPolicyAssertioncredential binding its CID. - A skill is a Capability with
interfaceTypeagent-skill. The descriptor'snameanddescriptioncome from the frontmatter;constraintscarriesallowed-tools,compatibilityandlicense;sourceArtifactscarries the CID ofSKILL.mdand of the skill directory;contentHashchanges whenever either changes. - Skill authors MAY place
agtp-owner(a DID),agtp-capability(the capability URI or ARD identifier) andagtp-spacein the frontmattermetadatamap, whose values are strings as Agent Skills requires. - Policy and capability MUST NOT be flattened into one another: an AGENTS.md constraint is a
policyRef, not a capability, and instruction text in a SKILL.md body is execution guidance, not a declaration. - Signals about a skill are issued against its capability URI, and observation records reference the descriptor
contentHashused at execution time, so that a Space can compare declared constraints with observed behaviour version by version.
OKF attested computations reference skills through executor.resource; when they do, the skill's capability identifier and the computation's capability identifier SHOULD be linked through sourceArtifacts so that signals on either inform the other.
12.10. ERC-8004 Trustless Agents§
Profile identifier: erc8004/1. ERC-8004 [ERC-8004] defines three on-chain registries: an identity registry that mints an agent identifier bound to an off-chain registration file, a reputation registry that records feedback entries pointing at off-chain feedback files, and a validation registry that records validation requests and responses by hash. This profile lets AGTP use those registries for discovery and anchoring while keeping signals, manifests and traces off-chain, portable and chain-neutral.
| ERC-8004 concept | AGTP object | Rule |
|---|---|---|
| Identity registry entry and registration file | Agent discovery pointer | The registration file's services array MUST include an entry named DID carrying the agent's DID and SHOULD include an entry named AGTP whose endpoint is the feedback service URL and whose version is the AGTP version. The DID Document SHOULD reference the registration in alsoKnownAs using the file's agentRegistry form. Signing keys and the agent wallet MAY coincide through did:pkh. |
| Reputation registry feedback entry | Pointer to a Learning Signal | The entry's feedback URI MUST locate a persistent Learning Signal and its feedback hash MUST be the SHA-256 digest of the signal's canonical N-Quads—the digest inside signalHash—so that the on-chain hash and the AGTP hash agree. The entry's value and decimals encode the signal's first dimension value; its first tag is the dimension identifier and its second the Space DID; its endpoint is the capability's interface locator. |
| Off-chain feedback file | Envelope for a signal | The file MAY embed the signal or its URL under an agtp object together with signalHash; the ERC's own members are left as the ERC defines them. |
| Feedback revocation | Status | Revoking on-chain feedback SHOULD be mirrored by revoking the signal's status, and vice versa. |
| Response appended to feedback | Artifact | The subject's response file is an artifact referenced from the signal's subject-side records; it is not itself a signal. |
| Validation request | Provenance | The request URI SHOULD locate an observation record or artifact bundle whose provenance URI names the interaction; the request hash is the digest of that document. |
| Validation response | Learning Signal and Anchor Commitment | The validator issues a Learning Signal whose provenance equals the request's, publishes it at the response URI with the response hash as its digest, and MAY describe the on-chain record as an Anchor Commitment with chain, reference.contract, reference.transaction and reference.requestHash. |
| On-chain summaries and scores | Policy outputs | Not AGTP trust semantics. A consumer that reads a registry summary MUST be able to trace it to the underlying signals. |
The recommended resolution order is: registry entry, then DID and services, then manifests, descriptors and signals off-chain, then proofs and status, then optionally the anchor. AGTP verification is authoritative at every step; the chain adds discovery and audit, and never replaces DID resolution or proof verification. Raw traces and private evidence MUST NOT be required on-chain for conformance.
13. Versioning, Extensibility and Governance§
13.1. Version Semantics§
AGTP uses semantic versioning. This document specifies AGTP 2.1.0. A PATCH increment corrects text without changing conformance; a MINOR increment adds optional properties, resources, profiles or conformance classes without breaking existing conformant implementations; a MAJOR increment may change wire semantics. The version an implementation supports is advertised as agtpVersion in its capabilities document, and profiles are negotiated by their registered identifiers. An implementation that receives an object from a later MINOR version MUST process the properties it understands and ignore the rest.
13.2. Migration from AGTP v2§
The following changes are compatibility-managed. Consumers MUST accept both forms for an overlap window of at least twelve months after this specification becomes a Consortium Recommendation; producers SHOULD emit the 2.1 form and MAY dual-serve manifests.
| Aspect | AGTP v2 | AGTP 2.1 |
|---|---|---|
| Base credential context | https://www.w3.org/2018/credentials/v1 | https://www.w3.org/ns/credentials/v2 |
| AGTP context | https://schema.agtp.org/context/v1 | https://schema.agtp.org/context/v2 (v1 remains served) |
| Issuance time | issuanceDate | validFrom |
| Manifest validity | credentialSubject.validFrom / validUntil | credential-level validFrom / validUntil; MAY be mirrored in the subject |
| Proof | Ed25519Signature2020 over URDNA2015 | DataIntegrityProof with eddsa-rdfc-2022 |
| Status | StatusList2021Entry | BitstringStatusListEntry or AGTPSpaceStatus |
| Media type | application/vc+json | application/vc |
| Capabilities keys | signatureSuites | cryptosuites (legacy key MAY be present) |
| HTTP profile identifier | http/1.0 | http/1.1 (superset) |
| Hashing identifier | URDNA2015+multihash | rdfc-1.0+sha2-256 (same computation) |
13.3. Extensibility§
The extension mechanisms are those of section 4.4: new terms in separate namespaces, new dimensions declared by Spaces, and new entries in the registries of Appendix F. Transport profiles, cryptosuites and binding profiles MAY be standardised separately without changing the core invariants, and a profile MAY advance on its own version track.
13.4. Change Process§
The protocol is mechanism only; policy stays in Spaces. The AGTP Consortium convenes editors, maintains the registries and publishes the specification. It has no binding authority over any Space, registry or implementation, and this specification creates none. Changes proceed as follows: a written proposal with rationale; a reference implementation; conformance tests added to Appendix D; and release. A MINOR increment requires two independent implementations of each new normative feature. A MAJOR increment requires a deprecation schedule, migration tooling and an overlap window during which manifests are dual-served and clients negotiate through the capabilities resource. Non-goals remain as in v2: no global governance mandate, no council with binding authority, no privileged registry.
13.5. Space-Controlled Parameters§
This section is non-normative. Examples of what a Space controls without any protocol change: the aggregation window, minimum raters and issuer caps; issuer-relation weights; eligibility gates such as uptime or acceptance rates; deposits and refundable stakes against spam; dispute windows and the meaning of pending; dimension registries and extension namespaces; the privacy class of traces; which ARD registries it recognises; which knowledge bundles it pins; and whether it anchors, where, and how often.
14. Security Considerations§
This section is non-normative.
AGTP's security stance is verification, not belief. The protocol gives every party the means to check identity, proof, status and provenance; it does not ask anyone to trust a registry, a score or a counterparty. This section describes the threats the design anticipates, the hooks the protocol provides against each and the policy levers Spaces are expected to use. Requirements cited here are normative where they appear in earlier sections.
14.1. Threat Model§
| Threat | Attacker goal | Protocol hooks | Policy levers | Residual risk |
|---|---|---|---|---|
| Sybil | Inflate influence with many cheap identities | DID requirement; signalHash deduplication; status and revocation; signed manifests; issuerRelation | Admission, deposits, issuer-diversity thresholds, minRaters, maxWeightPerIssuer | Collusion across organisations when attribution is weak |
| Collusion and rating rings | Reciprocal boosting; down-rating rivals | Provenance grammar; receipts; distinct-issuer counts published with aggregates | Windowed aggregation, diversity constraints, anomaly detection, audits | Rings that mimic organic patterns |
| Reward hacking | Optimise the metric, not the task | issuerRelation; dimension semantics with range and direction; reproducible provenance; deterministic attesters | Adversarial test injection, tournament cross-checks, evaluator reputation, holdout rotation | Metric drift as tasks evolve |
| Provenance spoofing | Claim results not achieved | Content addressing; canonical hashing; anchoring | Mandatory re-execution for top-ranked subjects; dispute windows | Private artifacts limit public re-runs |
| Replay and duplicates | Inflate weight by resubmission | Nonces; idempotency keys; signalHash deduplication | Sliding windows; per-issuer rate limits | Races during partitions |
| Catalog spoofing | Impersonate a provider in discovery | Mutual DID–domain binding; attestation verification; agtp:verified only from registries that checked | Preferred registries per Space; refusal to deliver to unverified endpoints | Compromised domains or DID hosting |
| Registry poisoning and rank gaming | Make bad resources look chosen | Relevance score decoupled from trust; aggregates cite Space, count, window and manifestHash | Recomputation from the signal index; federation source tracking | Registries that ignore the rule |
| Knowledge poisoning | Corrupt what agents believe | Bundle and concept CIDs; signals on concepts; attested computations; bodies treated as data | Human-reviewed tiers required for critical concepts; staleness enforcement | Subtle errors that pass attesters |
| Tool description injection | Steer agents through tool metadata | Hash-bound descriptors; descriptions treated as data; signals on capabilities | Dimensions for injection; allow-lists per Space | Novel injection forms |
| Eclipse and partitions | Isolate victims; fork views | Manifest caching with ETag and validUntil; timestamped receipts; degraded-mode signalling; anchoring | Grace windows; quorum re-confirmation for critical scores | Short-lived inconsistencies while healing |
| Key compromise | Issue signals as another party | Verification-relationship checks; DID method history; status revocation | Emergency invalidation through the Space status resource | Signals issued before detection |
| Governance capture | Control semantics or manifests | Signed, versioned manifests; version pinning; multiple registries; client choice | Mirrors; deprecation windows | Soft capture through popularity |
14.2. Identity and Authentication§
Every claim's authority derives from a DID. Verifiers should resolve DIDs afresh rather than from stale caches when a proof fails, should honour method-level deactivation, and should not accept a proof whose verification method is not listed under assertionMethod however plausible the key. Feedback services authenticate senders separately from verifying issuers; conflating the two invites an attacker who controls a transport credential to inject signals signed by no one.
14.3. Discovery§
Discovery is the point at which an agent decides whom to talk to, and therefore where an attacker most wants to stand. The mutual-binding rule of section 7.2 means that an entry is only as trustworthy as the weaker of DNS control and DID control, and deployments should treat both as security-critical. Consumers should never deliver signals to an endpoint learned solely from an unverified entry, should prefer registries a Space names, and should treat any ranking that a registry cannot justify from a signal index as advertising.
14.4. Knowledge and Tools§
Knowledge documents and tool descriptions are the two channels through which text reaches an agent's reasoning from outside its trust boundary. AGTP's rule that both are data, never protocol operations, must be enforced in implementations, not merely in policy; and Spaces that care about it should score for it, so that a description or a concept that attempts injection accumulates a record. Content addressing ensures that an injected change is at least a visible change: a descriptor's contentHash and a concept's CID move when the text moves.
14.5. Reproducibility and Anchoring§
Reproducibility is the strongest defence the protocol offers, and it is only as strong as artifact availability. Spaces should require public or escrowed artifacts for signals that feed high-stakes aggregates, should re-execute a sample, and should treat signals whose artifacts have become unavailable as weaker evidence over time. Anchoring adds timestamping and censorship resistance, not truth: an anchored lie is a lie with a date. Anchor commitments therefore carry only hashes, and consumers verify the underlying objects as they would without the anchor.
15. Privacy Considerations§
This section is non-normative.
AGTP is designed so that private learning and public coordination can coexist. The mechanisms are the ephemeral and persistent classes, distillation with commitments, redaction with attestations and content addressing that lets a party prove what it evaluated without publishing it. This section describes the privacy risks that remain and the practices that mitigate them.
15.1. Ephemeral and Persistent Signals§
Ephemeral signals are for local learning and carry retention ceilings set by the Space. They are never indexed and need not leave the parties to an interaction. Persistent signals are public by intent: they are discoverable, aggregated and possibly anchored. The decision to distil ephemeral signals into a persistent one is the point at which private detail becomes public summary, and the commitment carried by the summary is what allows an auditor to be shown the detail selectively later. Implementations should default to ephemeral and require an explicit act to persist.
15.2. Data Minimisation§
A signal needs a subject, a Space, dimensions, values and provenance. It does not need a narrative. The comment property, observation claims and sourceRefs are the places where personal data is most likely to leak, and producers should keep them minimal, should not copy prompts or user text into them, and should let Space policy decide whether traces are raw, redacted or committed-only. OKF sources entries and resource URIs can expose internal system names and usage patterns; publishers should redact internal locators from public bundles and treat usage counts as quasi-identifiers.
15.3. Correlation§
A DID that issues signals across many Spaces is a correlation handle. Human evaluators and small organisations should consider pairwise or per-Space DIDs, and Spaces should accept did:key issuers with a delegation credential where accountability requires it. Aggregators should publish distinct-issuer counts, not issuer lists, and should apply minRaters so that an aggregate never reveals a single evaluator's judgment. Registries index public entries only and should not accumulate query logs that reveal which agent sought which capability.
15.4. Human Participants§
Signals issued through interfaces are judgments by people. Gateways that issue them on a person's behalf should hold a delegation the person granted and should not attribute more precision to a judgment than the interface captured. Herd privacy is served when the interface batches judgments into a distilled signal rather than emitting one per click.
15.5. Anchoring and Erasure§
Ledgers do not forget. Anchor commitments therefore contain hashes and counts only, and an anchored signal that is later revoked remains revoked in AGTP even though its hash remains on the ledger. Publishers should not anchor ephemeral signals, and should be aware that a hash of a small, guessable document is not a strong commitment to its secrecy.
15.6. Aggregate Disclosure§
Published aggregates can reveal individual signals when few issuers contribute. Beyond minRaters, Spaces may add noise to public leaderboards, apply k-anonymity thresholds to subgroup breakdowns and use privacy-preserving aggregation as it matures (Appendix H). These are aggregation parameters, not protocol changes.
A. Examples§
This section is non-normative.
The examples in this appendix complete the ones given inline. Proof values and hashes are illustrative; comments inside JSON are not valid JSON and are shown only to explain the fields.
A.1. A Capability Descriptor Derived from an MCP Tool§
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://schema.agtp.org/context/v2"
],
"id": "https://solver.example/agtp/capabilities/run-sql.vc.json",
"type": ["VerifiableCredential", "CapabilityDescriptor"],
"issuer": "did:web:solver.example",
"validFrom": "2026-08-30T00:00:00Z",
"credentialSubject": {
"id": "urn:air:solver.example:tool:run-sql",
"owner": "did:web:solver.example",
"name": "run_sql",
"description": "Run read-only SQL against the sales warehouse.",
"interfaceType": "mcp-tool",
"interface": {
"protocol": "mcp",
"version": "2025-11-25",
"server": "https://mcp.solver.example/",
"tool": "run_sql",
"schemaHash": "uEiBqk0f2Yc0wq9GJk4oQx1u3v8Zr2tTz7nQmC5aXbYdEfg"
},
"inputSchema": {
"type": "object",
"properties": { "sql": { "type": "string" } },
"required": ["sql"]
},
"constraints": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"policyRefs": ["bafkreicagentsmdpolicyfilecidxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]
},
"sourceArtifacts": [
{ "role": "schema", "cid": "bafkreib5x2s3q6l7ihd4qq7mmm2a2m3iuqhz7vqz3zjzq6p3ep4gk7v4wy",
"uri": "https://mcp.solver.example/.well-known/mcp-server-card.json" }
],
"version": "1.4.0",
"contentHash": "uEiDm2Vt6pQ0x4r1yTk8nJ3wLd9cFh5sGb7vXa2eZq1oPmA",
"discovery": { "ard": "urn:air:solver.example:tool:run-sql" },
"spaces": ["did:web:rlvr.example"]
},
"proof": { "type": "DataIntegrityProof", "cryptosuite": "eddsa-rdfc-2022",
"created": "2026-08-30T00:00:01Z",
"verificationMethod": "did:web:solver.example#key-1",
"proofPurpose": "assertionMethod", "proofValue": "z4Qm…" }
}
A.2. An Observation Record for an MCP Tool Call§
{
"@context": ["https://schema.agtp.org/context/v2"],
"type": ["ObservationRecord", "MCPToolCallRecord"],
"id": "urn:uuid:c1a2b3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"space": "did:web:rlvr.example",
"actor": "did:web:orchestrator.example",
"subject": "urn:air:solver.example:tool:run-sql",
"sourceProtocol": "mcp",
"sourceVersion": "2025-11-25",
"sourceRefs": { "server": "did:web:solver.example", "requestId": 7, "toolName": "run_sql" },
"interaction": "urn:uuid:6d2a4c8e-9b1f-4e3d-8a7c-5f6e7d8c9b0a",
"capabilityRefs": [
{ "id": "urn:air:solver.example:tool:run-sql",
"contentHash": "uEiDm2Vt6pQ0x4r1yTk8nJ3wLd9cFh5sGb7vXa2eZq1oPmA" }
],
"artifacts": [
{ "role": "input", "cid": "bafkreib5x2s3q6l7ihd4qq7mmm2a2m3iuqhz7vqz3zjzq6p3ep4gk7v4wy" },
{ "role": "output", "cid": "bafkreiaw3fsg7cn5e6tjyd5zvo2ujqcrrxi3rlhqaw5j6ozx7fqyq2wtia" }
],
"provenance": "agtp://provenance?space=did:web:rlvr.example&interaction=urn:uuid:6d2a4c8e-9b1f-4e3d-8a7c-5f6e7d8c9b0a&artifact=bafkreiaw3fsg7cn5e6tjyd5zvo2ujqcrrxi3rlhqaw5j6ozx7fqyq2wtia,bafkreib5x2s3q6l7ihd4qq7mmm2a2m3iuqhz7vqz3zjzq6p3ep4gk7v4wy",
"observedAt": "2026-09-03T13:58:40Z",
"privacyClass": "redacted",
"claims": { "isError": false, "durationMs": 4180 }
}
A.3. A Signed Interaction Receipt§
{
"@context": ["https://www.w3.org/ns/credentials/v2", "https://schema.agtp.org/context/v2"],
"id": "urn:uuid:7e8f9a0b-1c2d-4e3f-8a9b-0c1d2e3f4a5b",
"type": ["VerifiableCredential", "InteractionReceipt"],
"issuer": "did:web:rlvr.example",
"validFrom": "2026-09-03T14:02:15Z",
"credentialSubject": {
"receiptId": "urn:uuid:7e8f9a0b-1c2d-4e3f-8a9b-0c1d2e3f4a5b",
"signalId": "urn:uuid:0c9d7b5e-1f2a-4d3c-8e6f-7a5b4c3d2e1f",
"signalHash": "uEiA4k3bQm1vZ2x0c3Q5Y2t4dGVzdGRhdGFhYWFhYWFhYWFhYWE",
"acceptState": "accepted",
"receivedAt": "2026-09-03T14:02:14Z",
"receiver": "did:web:rlvr.example",
"space": "did:web:rlvr.example",
"nonce": "K3z9Qm2vX7bR4tYw8nLp1sHd",
"idempotencyKey": "9b2c6f1e-3d4a-4b5c-8d7e-6f5a4b3c2d1e"
},
"proof": { "type": "DataIntegrityProof", "cryptosuite": "eddsa-rdfc-2022",
"created": "2026-09-03T14:02:15Z",
"verificationMethod": "did:web:rlvr.example#key-1",
"proofPurpose": "assertionMethod", "proofValue": "z2Kd…" }
}
A.4. An Anchor Commitment Referencing an ERC-8004 Validation§
{
"@context": ["https://www.w3.org/ns/credentials/v2", "https://schema.agtp.org/context/v2"],
"id": "urn:uuid:3f4a5b6c-7d8e-4f9a-8b0c-1d2e3f4a5b6c",
"type": ["VerifiableCredential", "AnchorCommitment"],
"issuer": "did:pkh:eip155:1:0x8ba1f109551bD432803012645Ac136ddd64DBA72",
"validFrom": "2026-09-03T18:00:00Z",
"credentialSubject": {
"id": "urn:uuid:3f4a5b6c-7d8e-4f9a-8b0c-1d2e3f4a5b6c",
"space": "did:web:rlvr.example",
"tree": "rfc6962",
"hashAlgorithm": "sha2-256",
"root": "uEiC9Ppq4uX1yZk2Mn3Ob4Rc5Sd6Te7Uf8Vg9Wh0Xi1Yj2Zk",
"count": 128,
"covered": { "uri": "https://rlvr.example/agtp/batches/2026-09-03T18.json",
"cid": "bafkreigbatchmanifestcidxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" },
"chain": "eip155:1",
"reference": {
"registry": "erc8004:validation",
"contract": "eip155:1:0x1234567890abcdef1234567890abcdef12345678",
"transaction": "0x9c0f…",
"requestHash": "0x5e1a…"
},
"anchoredAt": "2026-09-03T17:58:36Z"
},
"proof": { "type": "DataIntegrityProof", "cryptosuite": "eddsa-rdfc-2022",
"created": "2026-09-03T18:00:01Z",
"verificationMethod": "did:pkh:eip155:1:0x8ba1f109551bD432803012645Ac136ddd64DBA72#blockchainAccountId",
"proofPurpose": "assertionMethod", "proofValue": "z3Wf…" }
}
An Anchor Commitment issued by a did:pkh identity would in practice use a cryptosuite for the wallet's key type; the Ed25519 baseline is shown for uniformity.
A.5. An ERC-8004 Feedback File Carrying a Signal§
{
"agentRegistry": "eip155:1:0x1234567890abcdef1234567890abcdef12345678",
"agentId": 22,
"clientAddress": "eip155:1:0x8ba1f109551bD432803012645Ac136ddd64DBA72",
"createdAt": "2026-09-03T14:02:11Z",
"value": 90,
"valueDecimals": 2,
"tag1": "accuracy",
"tag2": "did:web:rlvr.example",
"endpoint": "https://mcp.solver.example/",
"mcp": { "tool": "run_sql" },
"agtp": {
"signal": "https://rlvr.example/.well-known/agtp/signals/uEiA4k3bQm1vZ2x0c3Q5Y2t4dGVzdGRhdGFhYWFhYWFhYWFhYWE",
"signalHash": "uEiA4k3bQm1vZ2x0c3Q5Y2t4dGVzdGRhdGFhYWFhYWFhYWFhYWE",
"space": "did:web:rlvr.example",
"provenance": "agtp://provenance?space=did:web:rlvr.example&interaction=urn:uuid:6d2a…&artifact=bafybeia…,bafybeib…"
}
}
The on-chain feedback hash for this entry is the raw SHA-256 digest carried inside signalHash, so that a reader of the registry and a reader of the signal compute the same bytes.
A.6. A Distilled Persistent Signal with a Commitment§
{
"@context": ["https://www.w3.org/ns/credentials/v2", "https://schema.agtp.org/context/v2"],
"id": "urn:uuid:a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5e",
"type": ["VerifiableCredential", "LearningSignal"],
"issuer": "did:web:lab.example",
"validFrom": "2026-09-03T23:00:00Z",
"credentialSubject": {
"id": "did:web:solver.example",
"subject": "did:web:solver.example",
"space": "did:web:microcheck.example",
"dimensions": ["consistency", "grounding"],
"value": [0.87, 0.79],
"persistence": "persistent",
"provenance": "agtp://provenance?space=did:web:microcheck.example&interaction=urn:uuid:d4e5f6a7-b8c9-4d0e-8f1a-2b3c4d5e6f7a&artifact=bafybeiredactedtracecidxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"issuerRelation": "affiliate",
"commitment": "uEiBcommitmentrootoverephemeralsignalsxxxxxxxxxxxxxxxxxxxx",
"comment": "Distilled from 1,204 ephemeral step checks over P7D."
},
"credentialStatus": { "id": "https://lab.example/status/1#77", "type": "BitstringStatusListEntry",
"statusPurpose": "revocation", "statusListIndex": "77",
"statusListCredential": "https://lab.example/status/1" },
"proof": { "type": "DataIntegrityProof", "cryptosuite": "eddsa-rdfc-2022",
"created": "2026-09-03T23:00:01Z",
"verificationMethod": "did:web:lab.example#key-2",
"proofPurpose": "assertionMethod", "proofValue": "z6Nq…" }
}
A.7. An A2A Agent Card Declaring the AGTP Extension§
{
"name": "Solver",
"description": "Solves quantitative questions against warehouse data.",
"url": "https://solver.example/a2a",
"version": "2.4.0",
"capabilities": {
"streaming": true,
"extensions": [
{
"uri": "https://schema.agtp.org/a2a/ext/v1",
"description": "AGTP identity, feedback service and evaluation Spaces",
"required": false,
"params": {
"did": "did:web:solver.example",
"feedbackService": "https://solver.example/.well-known/agtp/feedback",
"spaces": ["did:web:rlvr.example"]
}
}
]
},
"skills": [
{ "id": "run-sql", "name": "Run SQL", "description": "Read-only SQL over the sales warehouse.",
"tags": ["sql", "analytics"] }
]
}
Only the extension declaration is AGTP-specific; the remainder of the card is as A2A defines it, and the skill maps to the same capability identifier as the MCP tool in A.1.
A.8. A Skill with AGTP Metadata§
---
name: run-on-bq
description: Execute a sanctioned BigQuery computation and return job_id, executed_sql and result. Use when an OKF attested computation names this skill as its executor.
license: Apache-2.0
compatibility: Requires the bq CLI and a service account with read access to the sales dataset
metadata:
agtp-owner: did:web:solver.example
agtp-capability: urn:air:solver.example:skill:run-on-bq
agtp-space: did:web:rlvr.example
---
A.9. An Attested Computation and Its Signal§
---
type: Attested Computation
title: Revenue for a fiscal year
description: Recognised revenue for one fiscal year, per the revenue recognition policy.
runtime: bigquery
parameters:
- name: year
type: integer
required: true
executor:
resource: /skills/run-on-bq.md
receipt: [job_id, executed_sql, result]
attester:
resource: /attesters/sql_equality.py
generated:
by: process:did:web:rlvr.example
at: 2026-08-28T10:00:00Z
status: stable
agtp:
space: did:web:rlvr.example
---
# Computation
```sql
SELECT SUM(amount) FROM `acme.sales.orders`
WHERE EXTRACT(YEAR FROM recognised_at) = @year
```
{
"@context": ["https://www.w3.org/ns/credentials/v2", "https://schema.agtp.org/context/v2"],
"id": "urn:uuid:5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d",
"type": ["VerifiableCredential", "LearningSignal"],
"issuer": "did:web:attester.example",
"validFrom": "2026-09-03T14:05:00Z",
"credentialSubject": {
"id": "did:web:solver.example",
"subject": "did:web:solver.example",
"space": "did:web:rlvr.example",
"dimensions": ["attestation"],
"value": 1.0,
"persistence": "persistent",
"provenance": "agtp://provenance?space=did:web:rlvr.example&interaction=urn:uuid:8e9f0a1b-2c3d-4e5f-8a6b-7c8d9e0f1a2b&artifact=bafkreiconceptfilecidxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,bafkreireceiptfieldscidxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,bafkreiparameterscidxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"issuerRelation": "independent",
"comment": "sql_equality: executed_sql matches the sanctioned computation for year=2026; result reproduced."
},
"credentialStatus": { "id": "https://rlvr.example/.well-known/agtp/status?signal=uEiD…", "type": "AGTPSpaceStatus" },
"proof": { "type": "DataIntegrityProof", "cryptosuite": "eddsa-rdfc-2022",
"created": "2026-09-03T14:05:01Z",
"verificationMethod": "did:web:attester.example#key-1",
"proofPurpose": "assertionMethod", "proofValue": "z7Rs…" }
}
A.10. A Problem Details Error§
HTTP/1.1 422 Unprocessable Content
Content-Type: application/problem+json
Replay-Nonce: Vq8yT2mZ0kR4xL7wN1pC9sHd
{
"type": "https://schema.agtp.org/problems/value-out-of-range",
"title": "Value out of range",
"status": 422,
"detail": "Dimension 'latency' is declared with range [0, 60]; received 94.5.",
"instance": "urn:uuid:0c9d7b5e-1f2a-4d3c-8e6f-7a5b4c3d2e1f",
"space": "did:web:rlvr.example",
"manifestHash": "uEiCz7m5gq4Vh2kQ2Jm7Y1Q2m3k6nJ1c2f4b7dq6l5o8q9pA"
}
B. JSON Schemas§
The schemas below are normative constraints on the JSON representation of AGTP objects, using JSON Schema 2020-12 [JSON-SCHEMA]. They deliberately permit additional properties, because AGTP objects are extensible JSON-LD; they check the presence and shape of what this specification requires. The prose of section 5 prevails where the two differ. The schemas are also published at https://schema.agtp.org/json/ under the names given in each $id.
B.1. Learning Signal§
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schema.agtp.org/json/learning-signal.schema.json",
"title": "AGTP Learning Signal (2.1)",
"type": "object",
"required": ["@context", "type", "issuer", "credentialSubject", "credentialStatus", "proof"],
"anyOf": [ { "required": ["validFrom"] }, { "required": ["issuanceDate"] } ],
"properties": {
"@context": { "type": "array", "minItems": 2,
"contains": { "const": "https://schema.agtp.org/context/v2" } },
"id": { "type": "string", "format": "uri" },
"type": { "type": "array",
"allOf": [ { "contains": { "const": "VerifiableCredential" } },
{ "contains": { "enum": ["LearningSignal", "LearningSignalCredential"] } } ] },
"issuer": { "oneOf": [ { "type": "string", "pattern": "^did:" },
{ "type": "object", "required": ["id"],
"properties": { "id": { "type": "string", "pattern": "^did:" } } } ] },
"validFrom": { "type": "string", "format": "date-time" },
"validUntil": { "type": "string", "format": "date-time" },
"credentialSubject": {
"type": "object",
"required": ["subject", "space", "dimensions", "value", "persistence", "provenance"],
"properties": {
"id": { "type": "string", "format": "uri" },
"subject": { "type": "string", "format": "uri" },
"space": { "type": "string", "pattern": "^did:" },
"dimensions": { "type": "array", "minItems": 1,
"items": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+$" } },
"value": { "oneOf": [ { "type": "number" },
{ "type": "array", "minItems": 1, "items": { "type": "number" } } ] },
"persistence": { "enum": ["ephemeral", "persistent"] },
"provenance": { "type": "string", "pattern": "^agtp://provenance\\?.*space=.*&?.*interaction=" },
"issuerRelation": { "enum": ["self", "affiliate", "independent"] },
"commitment": { "type": "string", "pattern": "^u[A-Za-z0-9_-]+$" },
"confidence": { "type": "number", "minimum": 0, "maximum": 1 },
"comment": { "type": "string", "maxLength": 1024 },
"observedAt": { "type": "string", "format": "date-time" },
"manifestHash": { "type": "string", "pattern": "^u[A-Za-z0-9_-]+$" }
},
"additionalProperties": true
},
"credentialStatus": {
"type": "object", "required": ["id", "type"],
"properties": { "type": { "enum": ["BitstringStatusListEntry", "AGTPSpaceStatus", "StatusList2021Entry"] } }
},
"credentialSchema": { "type": "object" },
"proof": { "oneOf": [ { "type": "object" }, { "type": "array", "items": { "type": "object" } } ] }
},
"additionalProperties": true
}
B.2. Space Manifest§
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schema.agtp.org/json/space-manifest.schema.json",
"title": "AGTP Space Manifest (2.1)",
"type": "object",
"required": ["@context", "type", "issuer", "credentialSubject", "credentialStatus", "proof"],
"properties": {
"@context": { "type": "array", "minItems": 2 },
"id": { "type": "string", "format": "uri" },
"type": { "type": "array", "contains": { "enum": ["SpaceManifest", "SpaceManifestCredential"] } },
"issuer": { "type": "string", "pattern": "^did:" },
"validFrom": { "type": "string", "format": "date-time" },
"validUntil": { "type": "string", "format": "date-time" },
"credentialSubject": {
"type": "object",
"required": ["id", "version", "manifestHash", "dimensions"],
"properties": {
"id": { "type": "string", "pattern": "^did:" },
"version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+" },
"manifestHash": { "type": "string", "pattern": "^u[A-Za-z0-9_-]+$" },
"dimensions": { "type": "array", "minItems": 1,
"items": { "type": "object", "required": ["id", "range", "higherIsBetter"],
"properties": {
"id": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+$" },
"range": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "type": "number" } },
"higherIsBetter": { "type": "boolean" },
"unit": { "type": "string" },
"ref": { "type": "string", "format": "uri" } } } },
"dimensionRefs": { "type": "array", "items": { "type": "string", "format": "uri" } },
"aggregation": { "oneOf": [
{ "$ref": "#/$defs/aggregation" },
{ "type": "array", "items": { "$ref": "#/$defs/aggregation" } } ] },
"persistence_policy": { "type": "object" },
"status": { "type": "string", "format": "uri" },
"revocation": { "type": "string", "format": "uri" },
"capabilities": { "type": "object" },
"knowledge": { "type": "array", "items": { "type": "object", "required": ["resource", "cid"],
"properties": { "resource": { "type": "string", "format": "uri" }, "cid": { "type": "string" },
"okf_version": { "type": "string" },
"role": { "enum": ["dimensions", "policy", "documentation", "corpus"] } } } },
"discovery": { "type": "object", "properties": {
"ard": { "type": "string", "pattern": "^urn:air:" },
"registries": { "type": "array", "items": { "type": "string", "format": "uri" } } } },
"admission": { "type": "object" }
},
"additionalProperties": true
},
"credentialStatus": { "type": "object", "required": ["id", "type"] },
"proof": { "type": "object" }
},
"$defs": {
"aggregation": { "type": "object", "required": ["name"],
"properties": { "name": { "type": "string" }, "parameters": { "type": "object" },
"impl": { "type": "string", "format": "uri" },
"dimensions": { "type": "array", "items": { "type": "string" } } } }
},
"additionalProperties": true
}
B.3. Receipt§
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schema.agtp.org/json/receipt.schema.json",
"title": "AGTP Receipt (2.1)",
"type": "object",
"required": ["receiptId", "signalHash", "acceptState", "receivedAt"],
"properties": {
"receiptId": { "type": "string", "format": "uri" },
"signalId": { "type": "string", "format": "uri" },
"signalHash": { "type": "string", "pattern": "^u[A-Za-z0-9_-]+$" },
"acceptState": { "enum": ["accepted", "rejected", "pending"] },
"reason": { "type": "string" },
"receivedAt": { "type": "string", "format": "date-time" },
"receiver": { "type": "string", "pattern": "^did:" },
"space": { "type": "string", "pattern": "^did:" },
"nonce": { "type": "string" },
"idempotencyKey": { "type": "string", "format": "uuid" }
},
"if": { "properties": { "acceptState": { "const": "rejected" } } },
"then": { "required": ["reason"] },
"additionalProperties": true
}
B.4. Capability Descriptor§
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schema.agtp.org/json/capability-descriptor.schema.json",
"title": "AGTP Capability Descriptor (2.1)",
"type": "object",
"required": ["@context", "type", "issuer", "validFrom", "credentialSubject", "proof"],
"properties": {
"type": { "type": "array", "contains": { "enum": ["CapabilityDescriptor", "CapabilityDescriptorCredential"] } },
"issuer": { "type": "string", "pattern": "^did:" },
"credentialSubject": {
"type": "object",
"required": ["id", "owner", "name", "interfaceType", "contentHash"],
"properties": {
"id": { "type": "string", "format": "uri" },
"owner": { "type": "string", "pattern": "^did:" },
"name": { "type": "string", "maxLength": 256 },
"description": { "type": "string" },
"interfaceType": { "type": "string",
"anyOf": [ { "enum": ["mcp-tool", "mcp-resource", "mcp-prompt", "a2a-skill", "api-tool",
"agent-skill", "okf-computation", "policy-only"] },
{ "pattern": "^x-[a-z0-9-]+$" } ] },
"interface": { "type": "object", "properties": {
"protocol": { "type": "string" }, "version": { "type": "string" },
"schemaHash": { "type": "string", "pattern": "^u[A-Za-z0-9_-]+$" },
"bindings": { "type": "array", "items": { "type": "object", "required": ["protocol"] } } } },
"inputSchema": { "oneOf": [ { "type": "object" }, { "type": "string", "format": "uri" } ] },
"outputSchema": { "oneOf": [ { "type": "object" }, { "type": "string", "format": "uri" } ] },
"constraints": { "type": "object" },
"sourceArtifacts": { "type": "array", "items": { "$ref": "#/$defs/artifactRef" } },
"version": { "type": "string" },
"contentHash": { "type": "string", "pattern": "^u[A-Za-z0-9_-]+$" },
"discovery": { "type": "object" },
"spaces": { "type": "array", "items": { "type": "string", "pattern": "^did:" } }
},
"if": { "properties": { "interfaceType": { "const": "policy-only" } } },
"else": { "required": ["interface"] },
"additionalProperties": true
},
"proof": { "type": "object" }
},
"$defs": {
"artifactRef": { "type": "object", "required": ["cid"],
"properties": { "cid": { "type": "string" }, "uri": { "type": "string", "format": "uri" },
"role": { "type": "string" }, "mediaType": { "type": "string" } } }
},
"additionalProperties": true
}
B.5. Anchor Commitment§
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schema.agtp.org/json/anchor-commitment.schema.json",
"title": "AGTP Anchor Commitment (2.1)",
"type": "object",
"required": ["@context", "type", "issuer", "validFrom", "credentialSubject", "proof"],
"properties": {
"type": { "type": "array", "contains": { "enum": ["AnchorCommitment", "AnchorCommitmentCredential"] } },
"credentialSubject": {
"type": "object",
"required": ["id", "root", "tree", "hashAlgorithm", "covered", "count", "reference", "anchoredAt"],
"properties": {
"id": { "type": "string", "format": "uri" },
"root": { "type": "string", "pattern": "^u[A-Za-z0-9_-]+$" },
"tree": { "type": "string" },
"hashAlgorithm": { "type": "string" },
"covered": { "oneOf": [
{ "type": "array", "items": { "type": "string", "pattern": "^u[A-Za-z0-9_-]+$" } },
{ "type": "object", "required": ["uri", "cid"] } ] },
"count": { "type": "integer", "minimum": 1 },
"space": { "type": "string", "pattern": "^did:" },
"chain": { "type": "string", "pattern": "^[-a-z0-9]{3,8}:[-_a-zA-Z0-9]{1,32}$" },
"reference": { "type": "object" },
"anchoredAt": { "type": "string", "format": "date-time" }
},
"additionalProperties": true
}
},
"additionalProperties": true
}
B.6. Observation Record§
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schema.agtp.org/json/observation-record.schema.json",
"title": "AGTP Observation Record (2.1)",
"type": "object",
"required": ["type", "id", "space", "actor", "sourceProtocol", "sourceRefs", "interaction", "observedAt", "privacyClass"],
"properties": {
"type": { "type": "array", "contains": { "const": "ObservationRecord" } },
"id": { "type": "string", "format": "uri" },
"space": { "type": "string", "pattern": "^did:" },
"actor": { "type": "string", "pattern": "^did:" },
"subject": { "type": "string", "format": "uri" },
"sourceProtocol": { "type": "string" },
"sourceVersion": { "type": "string" },
"sourceRefs": { "type": "object" },
"interaction": { "type": "string", "format": "uri" },
"artifacts": { "type": "array", "items": { "type": "object", "required": ["cid"] } },
"provenance": { "type": "string", "pattern": "^agtp://provenance\\?" },
"capabilityRefs": { "type": "array", "items": { "type": "object", "required": ["id", "contentHash"] } },
"policyRefs": { "type": "array" },
"observedAt": { "type": "string", "format": "date-time" },
"privacyClass": { "enum": ["ephemeral", "persistent", "redacted", "committed-only"] },
"claims": { "type": "object" },
"proof": { "type": "object" }
},
"additionalProperties": true
}
B.7. DID Document Service Entries§
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schema.agtp.org/json/did-service.schema.json",
"title": "AGTP service entries in a DID Document",
"type": "object",
"required": ["id", "type", "serviceEndpoint"],
"properties": {
"id": { "type": "string", "format": "uri" },
"type": { "enum": ["AGTPFeedbackService", "AGTPSpaceManifest", "AGTPCapabilities",
"AGTPSignalIndex", "AgenticResourceDiscovery", "MCPServer", "A2AAgentCard"] },
"serviceEndpoint": { "oneOf": [
{ "type": "string", "format": "uri", "pattern": "^https://" },
{ "type": "object", "required": ["uri"],
"properties": { "uri": { "type": "string", "format": "uri", "pattern": "^https://" } },
"additionalProperties": true } ] }
},
"additionalProperties": true
}
C. HTTP Profile OpenAPI Description§
The following OpenAPI 3.1 [OPENAPI] description is normative for the HTTP profile http/1.1; the resources marked optional are advertised by features in the capabilities document. Schema references resolve to Appendix B.
openapi: 3.1.0
info:
title: AGTP HTTP Profile
version: "1.1.0"
description: Mandatory transport profile for AGTP 2.1.
servers:
- url: https://{host}
paths:
/.well-known/agtp/feedback:
head:
summary: Obtain a replay nonce
responses:
"200":
description: Nonce issued
headers:
Replay-Nonce: { required: true, schema: { type: string } }
post:
summary: Deliver a Learning Signal
parameters:
- { in: header, name: AGTP-Nonce, required: true, schema: { type: string } }
- { in: header, name: Idempotency-Key, required: true, schema: { type: string, format: uuid } }
- { in: header, name: Prefer, required: false, schema: { type: string, enum: [agtp-signed-receipt] } }
requestBody:
required: true
content:
application/vc:
schema: { $ref: "https://schema.agtp.org/json/learning-signal.schema.json" }
application/vc+ld+json:
schema: { $ref: "https://schema.agtp.org/json/learning-signal.schema.json" }
application/vc+json:
schema: { $ref: "https://schema.agtp.org/json/learning-signal.schema.json" }
responses:
"200":
description: Accepted (or already accepted with the same signalHash)
headers: { Replay-Nonce: { schema: { type: string } } }
content:
application/json: { schema: { $ref: "https://schema.agtp.org/json/receipt.schema.json" } }
application/vc: { schema: { type: object, description: InteractionReceipt credential } }
"202":
description: Pending validation
headers:
Retry-After: { schema: { type: integer } }
Replay-Nonce: { schema: { type: string } }
content:
application/json: { schema: { $ref: "https://schema.agtp.org/json/receipt.schema.json" } }
"400": { $ref: "#/components/responses/Problem" }
"401": { $ref: "#/components/responses/Problem" }
"403": { $ref: "#/components/responses/Problem" }
"406": { $ref: "#/components/responses/Problem" }
"409": { $ref: "#/components/responses/Problem" }
"413": { $ref: "#/components/responses/Problem" }
"422": { $ref: "#/components/responses/Problem" }
"429": { $ref: "#/components/responses/Problem" }
"503": { $ref: "#/components/responses/Problem" }
/.well-known/agtp/space/{spaceId}:
get:
summary: Fetch the Space Manifest
parameters:
- { in: path, name: spaceId, required: true, schema: { type: string }, description: The Space DID, percent-encoded }
- { in: query, name: version, required: false, schema: { type: string } }
- { in: header, name: If-None-Match, required: false, schema: { type: string } }
responses:
"200":
description: Space Manifest credential
headers:
ETag: { required: true, schema: { type: string } }
Cache-Control: { required: true, schema: { type: string } }
content:
application/vc: { schema: { $ref: "https://schema.agtp.org/json/space-manifest.schema.json" } }
"304": { description: Not modified }
/.well-known/agtp/status:
get:
summary: Status of a signal (Space status API)
parameters:
- { in: query, name: signal, required: false, schema: { type: string }, description: signalHash }
- { in: query, name: id, required: false, schema: { type: string, format: uri } }
responses:
"200":
description: Status record
content:
application/json:
schema:
type: object
required: [status, updatedAt]
properties:
signalHash: { type: string }
status: { type: string, enum: [valid, revoked, suspended, unknown] }
reason: { type: string, format: uri }
updatedAt: { type: string, format: date-time }
/.well-known/agtp/capabilities:
get:
summary: Supported versions, profiles and suites
responses:
"200":
description: Capabilities document
content:
application/json:
schema:
type: object
required: [agtpVersion, did, updatedAt]
properties:
agtpVersion: { type: string }
did: { type: string }
supportedProfiles: { type: array, items: { type: string } }
cryptosuites: { type: array, items: { type: string } }
signatureSuites: { type: array, items: { type: string }, deprecated: true }
statusFormats: { type: array, items: { type: string } }
hashing: { type: array, items: { type: string } }
features: { type: array, items: { type: string } }
extensions: { type: array, items: { type: string, format: uri } }
updatedAt: { type: string, format: date-time }
/.well-known/agtp/signals:
get:
summary: List persistent signals (optional; feature signalIndex)
parameters:
- { in: query, name: subject, schema: { type: string, format: uri } }
- { in: query, name: space, schema: { type: string } }
- { in: query, name: dimension, schema: { type: string } }
- { in: query, name: issuer, schema: { type: string } }
- { in: query, name: since, schema: { type: string, format: date-time } }
- { in: query, name: until, schema: { type: string, format: date-time } }
- { in: query, name: limit, schema: { type: integer, minimum: 1, maximum: 1000 } }
- { in: query, name: cursor, schema: { type: string } }
responses:
"200":
description: Page of signals
content:
application/json:
schema:
type: object
required: [signals]
properties:
signals:
type: array
items:
oneOf:
- { $ref: "https://schema.agtp.org/json/learning-signal.schema.json" }
- { type: object, required: [signalHash, url],
properties: { signalHash: { type: string }, url: { type: string, format: uri } } }
next: { type: string }
/.well-known/agtp/signals/{signalHash}:
get:
summary: Fetch one persistent signal (optional; feature signalIndex)
parameters:
- { in: path, name: signalHash, required: true, schema: { type: string } }
responses:
"200":
description: The signal
content:
application/vc: { schema: { $ref: "https://schema.agtp.org/json/learning-signal.schema.json" } }
"404": { $ref: "#/components/responses/Problem" }
/.well-known/agtp/metrics:
get:
summary: Operational metrics feed (optional; feature metricsFeed)
responses:
"200":
description: Metrics
content:
application/json:
schema:
type: array
items:
type: object
required: [metric, value, window, method, lastUpdated]
properties:
metric: { type: string }
value: { type: number }
window: { type: string }
method: { type: string }
lastUpdated: { type: string, format: date-time }
components:
responses:
Problem:
description: Error
headers: { Replay-Nonce: { schema: { type: string } } }
content:
application/problem+json:
schema:
type: object
required: [type, title, status]
properties:
type: { type: string, format: uri }
title: { type: string }
status: { type: integer }
detail: { type: string }
instance: { type: string, format: uri }
receipt: { $ref: "https://schema.agtp.org/json/receipt.schema.json" }
D. Conformance Requirements and Classes§
Each identified requirement below restates, in one line, a requirement made normatively in the body of this specification; the body prevails. Conformance classes aggregate requirements so that implementations can claim them independently and test suites can be organised by class. The descriptors are published in machine-readable form at https://schema.agtp.org/conformance/2.1.json.
| Identifier | Requirement | Section |
|---|---|---|
| REQ-DID-1 | Use a resolvable DID; advertise an AGTPFeedbackService. | §5.1 |
| REQ-DID-2 | List an assertion key usable with a supported cryptosuite; fail closed on unresolvable DIDs. | §3.1 |
| REQ-VC-CONTEXT-1 | Credentials carry the VC 2.0 base context and the AGTP v2 context, one AGTP type, a DID issuer and validFrom. | §4.2 |
| REQ-VC-LEGACY-1 | Accept v2 credentials (v1 context, issuanceDate, Ed25519Signature2020, StatusList2021Entry) during the overlap window. | §13.2 |
| REQ-FBSVC-HTTP-1 | Expose /.well-known/agtp/feedback with HEAD and POST over TLS. | §9.1 |
| REQ-FBSVC-NONCE-1 | HEAD returns Replay-Nonce; POST requires a valid, unused AGTP-Nonce. | §9.2 |
| REQ-HTTP-ACCEPT-1 | Accept application/vc and the legacy VC media types. | §4.5 |
| REQ-HTTP-RECEIPT-1 | Return a receipt with receiptId, signalHash, acceptState and receivedAt; sign it when requested. | §5.4 |
| REQ-HTTP-PROBLEM-1 | Report errors as Problem Details with registered AGTP problem types, distinguishing verification from validation failures. | §9.3 |
| REQ-IDEMPOTENCY-1 | Require Idempotency-Key; answer repeats with 409 and the original receipt; remember keys for 24 hours. | §9.2 |
| REQ-NONCE-USE-1 | Senders include the latest nonce and reuse the idempotency key on retries. | §9.2 |
| REQ-DISCOVERY-CACHE-1 | Cache Space Manifests by manifestHash and honour ETag and validUntil. | §5.2 |
| REQ-SMAN-VC-1 | The Space Manifest is a credential issued by the Space DID with credential-level validity. | §5.2 |
| REQ-SMAN-DIMS-1 | Declare each dimension with range and higherIsBetter; never declare a draft registry concept. | §5.2 |
| REQ-SMAN-AGG-1 | Declare aggregation or accept the reference default; aggregation is a pure function of served signals. | §11 |
| REQ-SMAN-CACHE-1 | Serve the manifest with ETag equal to manifestHash and bounded Cache-Control. | §9.4 |
| REQ-SMAN-SIGN-1 | Include version and manifestHash; increment version on change. | §5.2 |
| REQ-SMAN-STATUS-1 | Expose a status resource or bitstring list for manifests and accepted signals. | §9.5 |
| REQ-SIG-MIN-1 | Signals include subject, space, dimensions, value, persistence and provenance, with values in range. | §5.3 |
| REQ-SIG-PROV-1 | Provenance conforms to the ABNF, names the signal's Space and is compared after normalisation. | §3.5 |
| REQ-SIG-PROOF-1 | Signals carry a Data Integrity proof with eddsa-rdfc-2022 and purpose assertionMethod. | §10.1 |
| REQ-SIG-STATUS-1 | Signals carry credentialStatus as a bitstring entry or Space status entry. | §10.3 |
| REQ-COMMITMENT-1 | Distilled persistent signals carry a commitment computed with the baseline tree. | §5.3 |
| REQ-ISSUER-REL-1 | Include issuerRelation when known. | §5.3 |
| REQ-VERIFY-VC-1 | Verify proofs against assertionMethod keys; fail closed on unsupported suites. | §10.1 |
| REQ-VERIFY-PROV-1 | Validate provenance grammar and Space match; dereference components where possible. | §3.5 |
| REQ-STATUS-CHECK-1 | Check status before aggregation, routing, anchoring or presentation; treat unretrievable status as unknown. | §10.3 |
| REQ-DEDUP-1 | Compute signalHash per §10.2 and treat equal hashes as one signal. | §10.2 |
| REQ-AGG-DEFAULT-1 | Apply the reference default when the manifest omits aggregation. | §11.1 |
| REQ-AGG-PUBLISH-1 | Publish manifestHash, distinct-issuer count and window with every aggregate. | §11.1 |
| REQ-REPRO-ARTIFACTS-1 | Attempt reproduction when artifacts are public. | §14.5 |
| REQ-OBS-MIN-1 | Observation records carry the required properties and a privacy class. | §5.7 |
| REQ-OBS-ORDER-1 | Preserve upstream identifiers and event ordering in sourceRefs. | §12.1 |
| REQ-OBS-SEPARATE-1 | Never emit execution or transport outcomes as signals. | §6.2 |
| REQ-CAP-DESC-1 | Descriptors carry id, owner, name, interfaceType, interface and contentHash. | §5.5 |
| REQ-CAP-HASH-1 | Regenerate descriptors with a new contentHash and schemaHash whenever the upstream schema changes. | §12.3 |
| REQ-ARD-PUBLISH-1 | Publish /.well-known/ard.json; AGTP entries bind the agtp prefix and carry agtp:did. | §7.1 |
| REQ-ARD-IDENTITY-1 | trustManifest.identity names the DID framework and the same DID as agtp:did. | §7.2 |
| REQ-ARD-VERIFY-1 | Registries establish mutual DID–domain binding and verify an attestation before marking agtp:verified. | §7.2 |
| REQ-ARD-SCORE-1 | Never use an ARD relevance score as trust; rank on verified state and recomputable aggregates. | §7.3 |
| REQ-ARD-FEDERATE-1 | Do not forward another registry's agtp:verified as your own. | §7.4 |
| REQ-ARD-DELIVER-1 | Do not deliver signals to endpoints learned only from unverified entries. | §7.2 |
| REQ-OKF-CID-1 | Identify bundles by tree CID and concepts by file CID; verify against the manifest's knowledge entries. | §8.1 |
| REQ-OKF-ACTOR-1 | Write DID actors inside OKF actor forms; recognise did: in any form. | §8.2.1 |
| REQ-OKF-VERIFIED-1 | Derive attestation state from backing signals without altering OKF trust tiers. | §8.3 |
| REQ-OKF-ATTEST-1 | Content-address attested-computation receipts; issue the attester's verdict as a signal bound to concept, receipt and parameter CIDs. | §8.3 |
| REQ-OKF-DIM-1 | Dimension concepts carry agtp.dimension; manifests reference them by URL. | §8.4 |
| REQ-OKF-DATA-1 | Treat knowledge bodies and tool descriptions as data, never as protocol operations. | §8.5 |
| REQ-MCP-META-1 | Carry AGTP identifiers only under the org.agtp/ prefix in _meta; ignore them when not understood. | §12.3 |
| REQ-MCP-ARTIFACT-1 | Content-address tool inputs and outputs and reference the descriptor contentHash in force. | §12.3 |
| REQ-A2A-TASKID-1 | Preserve task and context identifiers; never treat an A2A response as a receipt. | §12.7 |
| REQ-ANCHOR-1 | Anchor commitments carry root, tree, hashAlgorithm, covered, count, reference and anchoredAt. | §5.6 |
| REQ-ANCHOR-TREE-1 | Support the rfc6962 tree with sha2-256. | §5.6 |
| REQ-ANCHOR-OFFCHAIN-1 | Keep signals, manifests and traces off-chain; anchor hashes and pointers only; keep AGTP verification independent of chain state. | §12.10 |
{
"agtpVersion": "2.1.0",
"conformanceClasses": [
{ "id": "AGTP.Agent",
"must": ["REQ-DID-1", "REQ-DID-2", "REQ-FBSVC-HTTP-1", "REQ-FBSVC-NONCE-1", "REQ-HTTP-ACCEPT-1",
"REQ-HTTP-RECEIPT-1", "REQ-HTTP-PROBLEM-1", "REQ-IDEMPOTENCY-1", "REQ-VC-LEGACY-1"],
"should": ["REQ-DISCOVERY-CACHE-1", "REQ-ARD-PUBLISH-1"],
"profiles": ["http/1.1", "did-vc/2.1"] },
{ "id": "AGTP.Space",
"must": ["REQ-DID-1", "REQ-SMAN-VC-1", "REQ-SMAN-DIMS-1", "REQ-SMAN-AGG-1", "REQ-SMAN-CACHE-1",
"REQ-SMAN-SIGN-1", "REQ-SMAN-STATUS-1", "REQ-DEDUP-1", "REQ-STATUS-CHECK-1", "REQ-AGG-PUBLISH-1"],
"should": ["REQ-OKF-DIM-1", "REQ-ARD-PUBLISH-1", "REQ-HTTP-RECEIPT-1"],
"profiles": ["http/1.1", "did-vc/2.1"] },
{ "id": "AGTP.SignalProducer",
"must": ["REQ-VC-CONTEXT-1", "REQ-SIG-MIN-1", "REQ-SIG-PROV-1", "REQ-SIG-PROOF-1", "REQ-SIG-STATUS-1",
"REQ-NONCE-USE-1", "REQ-IDEMPOTENCY-1", "REQ-OBS-SEPARATE-1", "REQ-ARD-DELIVER-1"],
"should": ["REQ-COMMITMENT-1", "REQ-ISSUER-REL-1"],
"profiles": ["http/1.1", "did-vc/2.1"] },
{ "id": "AGTP.SignalConsumer",
"must": ["REQ-VERIFY-VC-1", "REQ-VERIFY-PROV-1", "REQ-STATUS-CHECK-1", "REQ-DEDUP-1", "REQ-AGG-DEFAULT-1",
"REQ-VC-LEGACY-1"],
"should": ["REQ-REPRO-ARTIFACTS-1"],
"profiles": ["did-vc/2.1"] },
{ "id": "AGTP.CapabilityPublisher",
"must": ["REQ-CAP-DESC-1", "REQ-CAP-HASH-1", "REQ-ARD-PUBLISH-1", "REQ-ARD-IDENTITY-1"],
"should": ["REQ-MCP-META-1"],
"profiles": ["did-vc/2.1", "ard/0.91"] },
{ "id": "AGTP.KnowledgePublisher",
"must": ["REQ-OKF-CID-1", "REQ-OKF-ACTOR-1", "REQ-OKF-DATA-1"],
"should": ["REQ-OKF-VERIFIED-1", "REQ-OKF-ATTEST-1", "REQ-OKF-DIM-1", "REQ-ARD-PUBLISH-1"],
"profiles": ["did-vc/2.1", "okf/0.2"] },
{ "id": "AGTP.DiscoveryRegistry",
"must": ["REQ-ARD-VERIFY-1", "REQ-ARD-SCORE-1", "REQ-ARD-FEDERATE-1", "REQ-VERIFY-VC-1", "REQ-STATUS-CHECK-1"],
"should": [],
"profiles": ["did-vc/2.1", "ard/0.91"] },
{ "id": "AGTP.ExecutionIntegrator",
"must": ["REQ-OBS-MIN-1", "REQ-OBS-ORDER-1", "REQ-OBS-SEPARATE-1", "REQ-MCP-META-1", "REQ-MCP-ARTIFACT-1",
"REQ-A2A-TASKID-1", "REQ-OKF-DATA-1"],
"should": ["REQ-CAP-HASH-1"],
"profiles": ["did-vc/2.1", "mcp/2025-11-25", "a2a/1.0", "openai-api/1", "a2ui/0.8"] },
{ "id": "AGTP.AnchorIntegrator",
"must": ["REQ-ANCHOR-1", "REQ-ANCHOR-TREE-1", "REQ-ANCHOR-OFFCHAIN-1", "REQ-STATUS-CHECK-1"],
"should": [],
"profiles": ["did-vc/2.1", "erc8004/1"] }
]
}
E. Operational Metrics§
This section is non-normative.
The metrics feed of section 9.8 lets agents and Spaces publish indicators that third parties can audit. The following definitions, over 30-day rolling windows unless the feed says otherwise, are recommended so that feeds are comparable.
| Metric | Definition |
|---|---|
coverage | validSignals / interactionsObserved |
leeching | agentsWithoutHealthyFeedbackService / activeAgents |
reproducibility | reverifiedOutcomes / auditedOutcomes |
attestationRate | attestedConcepts / verifiedConcepts, for knowledge publishers |
discoveryVerification | agtpVerifiedEntries / ingestedAgtpEntries, for registries |
interopConformance | passes / totalCases, per conformance suite |
hhi | Σ sᵢ² over shares in identity, storage, registry and routing provider roles |
crossSpaceTransferLift | (scoreWithReuse − baselineScore) / baselineScore |
reIdIncidentRate | incidents / totalPersistentSignals |
reputationVolatility | stdev(monthlyScore) / mean(monthlyScore) |
F. AGTP Registries§
The AGTP Consortium maintains the following registries, published at https://schema.agtp.org/registries/ and, as recommended by section 8.4, as an OKF bundle. Registration is by pull request to the specification repository with a stable identifier, a specification reference and a contact. Initial contents are listed here; a registry may be extended without a new version of this document.
| Registry | Initial entries |
|---|---|
| Credential types | LearningSignal, SpaceManifest, InteractionReceipt, CapabilityDescriptor, AnchorCommitment, DelegationCredential, PolicyAssertion; aliases with the Credential suffix |
| Record types | ObservationRecord, MCPToolCallRecord, A2ATaskEventRecord, ModelRunRecord, UIEventRecord |
| DID service types | AGTPFeedbackService, AGTPSpaceManifest, AGTPCapabilities, AGTPSignalIndex, AgenticResourceDiscovery, MCPServer, A2AAgentCard |
| Credential status types | AGTPSpaceStatus |
| Profile identifiers | did-vc/2.1, http/1.0, http/1.1, didcomm/2.0, mcp/2025-06-18, mcp/2025-11-25, ard/0.91, okf/0.2, openai-api/1, a2a/1.0, a2ui/0.8, a2ui/0.9, agents-skills/1, erc8004/1 |
| Interface types | mcp-tool, mcp-resource, mcp-prompt, a2a-skill, api-tool, agent-skill, okf-computation, policy-only; extensions prefixed x- |
| Privacy classes | ephemeral, persistent, redacted, committed-only |
| Aggregation functions | https://schema.agtp.org/aggregation#TrustWeightedAverage |
| Tree constructions | rfc6962 |
| Hashing identifiers | rdfc-1.0+sha2-256; legacy alias URDNA2015+multihash |
| Problem types | nonce-invalid, malformed, unauthenticated, not-admitted, dimension-not-accepted, duplicate-delivery, too-large, proof-invalid, issuer-unresolvable, status-revoked, value-out-of-range, provenance-invalid, space-mismatch, manifest-expired, schema-invalid, rate-limited, degraded, under https://schema.agtp.org/problems/ |
| Provenance parameters | space, interaction, artifact; extensions with reverse-DNS prefixes |
| Reserved keys in host protocols | As listed in §12.1; the MCP _meta prefix org.agtp/; the A2A extension URI https://schema.agtp.org/a2a/ext/v1 |
| Capabilities features | metricsFeed, signalIndex, signedReceipts, anchoring |
| ARD capability tokens | AGTPAgent, AGTPSpace, AGTPCapability, AGTPKnowledge, AGTPSignalIndex, AGTPFeedbackService |
| OKF concept types | AGTP Dimension, AGTP Space |
| Reserved names | The DID method name agtp, reserved for a future method specification |
G. Changes from AGTP v2§
This section is non-normative.
- Laid out as a standards-track specification with terminology, identifier, data model, core object, conformance and reference sections; the v2 essay is summarised in the Introduction and cited in the informative references.
- Aligned credentials with Verifiable Credentials 2.0, Data Integrity (
eddsa-rdfc-2022), Bitstring Status Lists and theapplication/vcmedia type, with a compatibility-managed overlap (§13.2). - Introduced the credential family—Interaction Receipt, Capability Descriptor, Anchor Commitment, Delegation and Policy Assertion—and the Observation Record (§4, §5).
- Added the discovery profile on Agentic Resource Discovery, including DID binding of the trust manifest, the
agtp:verifiedstate and the separation of relevance from trust (§7). - Added the knowledge profile on the Open Knowledge Format, including content-addressed bundles, DID actor forms, attestation state, attested computations as verifiable rewards, and dimension registries as OKF bundles (§8).
- Extended the HTTP profile with Problem Details errors, signed receipts, status and signal index resources, and TLS and sender-authentication requirements (§9).
- Specified the MCP, model-runtime API, A2A, A2UI, AGENTS.md and Agent Skills, and ERC-8004 bindings as normative profiles with reserved keys inside each host protocol (§12).
- Added
issuerRelationWeightsanduseConfidenceto the reference aggregation and required aggregates to be published with theirmanifestHash, issuer count and window (§11). - Added new conformance classes for capability publishers, knowledge publishers, discovery registries, execution integrators and anchor integrators, and the identified requirements that support them (Appendix D).
- Established the registries of Appendix F and the IANA considerations of Appendix J.
H. Future Work§
This section is non-normative.
- Verifiable rewards at scale. Verifier receipts backed by TEE attestations and SNARK-friendly transcripts; dataset-slice commitments; a profile for the ERC-8004 validation registry's zkML and TEE validators.
- Benchmark-from-live. Rolling benchmarks assembled from production interactions with drift detection, adversarial mining and freeze windows, published as OKF bundles of attested computations.
- Privacy-preserving aggregation. Threshold and MPC aggregation; differential privacy for public leaderboards; selective disclosure from commitment trees.
- Cross-Space normalisation. Mapping schemas with uncertainty and provenance for aligning dimension scales between Spaces that reference different registry concepts.
- Discovery of Spaces by fit. ARD facets that let an agent find the Space whose dimensions and evaluators best match its work, and registries that expose recomputable aggregates.
- Knowledge feedback loops. Standard subtypes for signals about concepts (accuracy, completeness, freshness) and their use by knowledge catalogs to prioritise re-verification.
- A DID method. A specification for
did:agtp, if implementation experience shows that existing methods leave a gap. - Conformance and fuzzing. Fixtures for malformed credentials, nonce reuse, CID tampering, catalog spoofing and injected knowledge; a shared fuzz corpus.
- Anchoring standards. Profiles for timestamp anchoring, reorganisation handling and audit tooling beyond ERC-8004.
I. Acknowledgements§
This section is non-normative.
The editors thank the members of the AGTP Consortium and the Newfoundation community for review of the v2 text and of the convergence drafts that this document consolidates. AGTP stands on the work of the W3C Verifiable Credentials and Decentralized Identifier Working Groups and the Credentials Community Group; the maintainers of the Model Context Protocol and the Agentic AI Foundation; the A2A project; the authors of Agentic Resource Discovery and the Open Knowledge Format; the authors of ERC-8004; the Decentralized Identity Foundation for DIDComm; the IETF for the HTTP, ACME and Problem Details mechanisms this document borrows; and the multiformats community for content addressing. The intellectual lineage of the protocol—from Shannon and Wiener through the network scientists, the cryptographers, the architects of the semantic web and of open ledgers, to the era of experience—is recorded in the informative references.
J. IANA Considerations§
This appendix records the registrations that the AGTP Consortium intends to request. Until they are complete, the values below are provisional.
- Well-Known URI suffix
agtp - Registration in the Well-Known URIs registry [RFC8615]. URI suffix:
agtp. Change controller: AGTP Consortium. Specification document: this document, section 9. Related information: all resources beneath the suffix are defined by the HTTP profile;/.well-known/agtp/feedback,space/,status,capabilities,signalsandmetrics. - HTTP field name
AGTP-Nonce - Registration in the Hypertext Transfer Protocol (HTTP) Field Name Registry [RFC9110]. Status: provisional. Specification: section 9.2.
Replay-Nonceis already registered by [RFC8555] andIdempotency-Keyby [IDEMPOTENCY-KEY]; AGTP reuses both unchanged. - HTTP Preference
agtp-signed-receipt - Registration in the HTTP Preferences registry established by RFC 7240. Specification: section 5.4.
- URI scheme
agtp - Provisional registration in the Uniform Resource Identifier (URI) Schemes registry under the procedures of RFC 7595. Scheme syntax: section 3.5. The scheme identifies provenance bindings and is not dereferenced as a network locator.
- Media types
- No new media types are requested. AGTP uses
application/vcandapplication/vpas registered by [VC-DATA-MODEL-2.0],application/problem+json[RFC9457],application/did+ld+jsonandapplication/did+json[DID-CORE], andapplication/json. - Other namespaces
- The MCP
_metaprefixorg.agtp/, the A2A extension URI, the ARDagtpcontext prefix and the OKFagtpfrontmatter key are governed by the respective specifications' extension rules and by the registries of Appendix F; they involve no IANA action. The DID service types defined by this document will be submitted to the DID Specification Registries [DID-SPEC-REGISTRIES].
K. References§
K.1. Normative References§
- [ARD]
- Junjie Bu, R.V. Guha, Shaun Smith. Agentic Resource Discovery Specification. Version 0.91, Proposal, 26 August 2026. Repository: github.com/ards-project/ard-spec.
- [CAIP-2]
- Chain Agnostic Standards Alliance. CAIP-2: Blockchain ID Specification.
- [CAIP-10]
- Chain Agnostic Standards Alliance. CAIP-10: Account ID Specification.
- [CID]
- Multiformats. CID (Content IDentifier) Specification.
- [CONTROLLED-IDENTIFIERS]
- W3C. Controlled Identifiers v1.0. W3C Recommendation.
- [DID-CORE]
- W3C. Decentralized Identifiers (DIDs) v1.0. W3C Recommendation, 19 July 2022.
- [IDEMPOTENCY-KEY]
- IETF HTTPAPI Working Group. The Idempotency-Key HTTP Header Field. Internet-Draft.
- [JSON-LD11]
- W3C. JSON-LD 1.1. W3C Recommendation, 16 July 2020.
- [JSON-SCHEMA]
- JSON Schema. JSON Schema 2020-12.
- [MCP]
- MCP Core Maintainers. Model Context Protocol Specification, revision 2025-11-25; and revision 2025-06-18.
- [MULTIBASE]
- Multiformats. The Multibase Data Format. Internet-Draft.
- [MULTIHASH]
- Multiformats. The Multihash Data Format. Internet-Draft.
- [OKF]
- Google Cloud. Open Knowledge Format Specification. Version 0.2, 25 July 2026.
- [OPENAPI]
- OpenAPI Initiative. OpenAPI Specification v3.1.0.
- [RDF-CANON]
- W3C. RDF Dataset Canonicalization. W3C Recommendation, 21 May 2025.
- [RFC2119]
- S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. BCP 14, RFC 2119, March 1997.
- [RFC3339]
- G. Klyne, C. Newman. Date and Time on the Internet: Timestamps. RFC 3339, July 2002.
- [RFC3986]
- T. Berners-Lee, R. Fielding, L. Masinter. Uniform Resource Identifier (URI): Generic Syntax. STD 66, RFC 3986, January 2005.
- [RFC5234]
- D. Crocker, P. Overell. Augmented BNF for Syntax Specifications: ABNF. STD 68, RFC 5234, January 2008.
- [RFC6962]
- B. Laurie, A. Langley, E. Kasper. Certificate Transparency. RFC 6962, June 2013.
- [RFC8174]
- B. Leiba. Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. BCP 14, RFC 8174, May 2017.
- [RFC8259]
- T. Bray. The JavaScript Object Notation (JSON) Data Interchange Format. STD 90, RFC 8259, December 2017.
- [RFC8555]
- R. Barnes, J. Hoffman-Andrews, D. McCarney, J. Kasten. Automatic Certificate Management Environment (ACME). RFC 8555, March 2019.
- [RFC8615]
- M. Nottingham. Well-Known Uniform Resource Identifiers (URIs). RFC 8615, May 2019.
- [RFC9110]
- R. Fielding, M. Nottingham, J. Reschke. HTTP Semantics. STD 97, RFC 9110, June 2022.
- [RFC9111]
- R. Fielding, M. Nottingham, J. Reschke. HTTP Caching. STD 98, RFC 9111, June 2022.
- [RFC9421]
- A. Backman, J. Richer, M. Sporny. HTTP Message Signatures. RFC 9421, February 2024.
- [RFC9457]
- M. Nottingham, E. Wilde, S. Dalal. Problem Details for HTTP APIs. RFC 9457, July 2023.
- [RFC9562]
- K. Davis, B. Peabody, P. Leach. Universally Unique IDentifiers (UUIDs). RFC 9562, May 2024.
- [VC-BITSTRING-STATUS-LIST]
- W3C. Bitstring Status List v1.0. W3C Recommendation, 15 May 2025.
- [VC-DATA-INTEGRITY]
- W3C. Verifiable Credential Data Integrity 1.0. W3C Recommendation, 15 May 2025.
- [VC-DATA-MODEL-2.0]
- W3C. Verifiable Credentials Data Model v2.0. W3C Recommendation, 15 May 2025.
- [VC-DI-EDDSA]
- W3C. Data Integrity EdDSA Cryptosuites v1.0. W3C Recommendation, 15 May 2025.
- [VC-JSON-SCHEMA]
- W3C. Verifiable Credentials JSON Schema Specification.
K.2. Informative References§
- [A2A]
- A2A Project (Linux Foundation). Agent2Agent (A2A) Protocol Specification, version 1.0.
- [A2UI]
- A2UI Project. A2UI Specification v0.8; v0.9 (draft).
- [AAIF]
- Linux Foundation. Agentic AI Foundation.
- [AGENT-SKILLS]
- Agent Skills. Agent Skills Specification.
- [AGENTS-MD]
- AGENTS.md: A simple, open format for guiding coding agents.
- [AGTP-V2]
- Newfoundation. Agent Graph Trust Protocol (AGTP) v2. Specification text, 24 February 2026.
- [DID-KEY]
- W3C Credentials Community Group. The did:key Method.
- [DID-PKH]
- W3C Credentials Community Group. did:pkh Method Specification.
- [DID-RESOLUTION]
- W3C. Decentralized Identifier Resolution (DID Resolution) v1.0.
- [DID-SPEC-REGISTRIES]
- W3C. DID Extensions (DID Specification Registries).
- [DID-WEB]
- W3C Credentials Community Group. did:web Method Specification.
- [DID-WEBVH]
- Decentralized Identity Foundation. The did:webvh DID Method.
- [DIDCOMM-V2]
- Decentralized Identity Foundation. DIDComm Messaging v2.
- [ERC-8004]
- Ethereum Improvement Proposals. ERC-8004: Trustless Agents.
- [IPFS-CONTENT-ADDRESSING]
- IPFS. Content addressing and CIDs.
- [JSON-RPC]
- JSON-RPC 2.0 Specification.
- [OPENAI-API]
- OpenAI. OpenAI API Reference; Function calling.
- [RFC2104]
- H. Krawczyk, M. Bellare, R. Canetti. HMAC: Keyed-Hashing for Message Authentication. RFC 2104, February 1997.
- [SYNERGY]
- Newfoundation. Synergy Is All We Need. Foundation paper, 2024.
- [VC-DATA-MODEL-1.0]
- W3C. Verifiable Credentials Data Model 1.0. W3C Recommendation, 19 November 2019.
Research lineage
The following works, published as the AGTP research bibliography, record the ideas the protocol builds on, from the era of experience back to the foundations of information theory.
- [SILVER-SUTTON-2025]
- David Silver, Richard S. Sutton. Welcome to the Era of Experience. 2025.
- [RSA-1978]
- R. L. Rivest, A. Shamir, L. Adleman. A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. Communications of the ACM 21(2), 1978.
- [HMAC-1996]
- H. Krawczyk, R. Canetti, M. Bellare. HMAC: Keyed-Hashing for Message Authentication. See [RFC2104].
- [GRANOVETTER-1973]
- Mark S. Granovetter. The Strength of Weak Ties. American Journal of Sociology 78(6), 1973.
- [RESNICK-ZECKHAUSER-2002]
- Paul Resnick, Richard Zeckhauser. Trust Among Strangers in Internet Transactions: Empirical Analysis of eBay's Reputation System. 2002.
- [SEMANTIC-WEB-2001]
- Tim Berners-Lee, James Hendler, Ora Lassila. The Semantic Web. Scientific American, May 2001.
- [SABATER-SIERRA-2005]
- Jordi Sabater, Carles Sierra. Review on Computational Trust and Reputation Models. Artificial Intelligence Review 24, 2005.
- [BUTERIN-2014]
- Vitalik Buterin. A Next-Generation Smart Contract and Decentralized Application Platform. 2014.
- [NAKAMOTO-2008]
- Satoshi Nakamoto. Bitcoin: A Peer-to-Peer Electronic Cash System. 2008.
- [GOODFELLOW-2016]
- Ian Goodfellow, Yoshua Bengio, Aaron Courville. Deep Learning. MIT Press, 2016.
- [BARABASI-2002]
- Albert-László Barabási. Linked: The New Science of Networks. Perseus, 2002.
- [WATTS-STROGATZ-1998]
- Duncan J. Watts, Steven H. Strogatz. Collective Dynamics of 'Small-World' Networks. Nature 393, 1998.
- [BARABASI-ALBERT-1999]
- Albert-László Barabási, Réka Albert. Emergence of Scaling in Random Networks. Science 286, 1999.
- [NEWMAN-2003]
- M. E. J. Newman. The Structure and Function of Complex Networks. SIAM Review 45(2), 2003.
- [WIENER-1948]
- Norbert Wiener. Cybernetics: Or Control and Communication in the Animal and the Machine. MIT Press, 1948.
- [SHANNON-1948]
- Claude E. Shannon. A Mathematical Theory of Communication. Bell System Technical Journal 27, 1948.