<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.31 (Ruby 4.0.1) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc compact="yes"?>

<rfc ipr="trust200902" docName="draft-nederveld-adl-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="ADL">Agent Definition Language (ADL)</title>

    <author initials="T." surname="Nederveld" fullname="Terrill Nederveld">
      <organization>Ironstead Group, LLC.</organization>
      <address>
        <email>terry+adl@ironsteadgroup.com</email>
      </address>
    </author>

    <date year="2026" month="February" day="18"/>

    <area>art</area>
    <workgroup>Individual Submission</workgroup>
    <keyword>AI agent</keyword> <keyword>agent description</keyword> <keyword>interoperability</keyword> <keyword>JSON</keyword>

    <abstract>


<?line 81?>

<t>The Agent Definition Language (ADL) provides a standard JSON-based format
for describing AI agents. An ADL document declares an agent's identity,
capabilities, tools, permissions, security requirements, data
classification, and runtime configuration in a single, machine-readable
artifact. ADL enables discovery, interoperability, deployment, and
lifecycle management of AI agents across diverse platforms and runtimes.
This document defines the structure of ADL documents, the semantics of
their members, conformance requirements for implementations, and the
registration of the application/adl+json media type.</t>



    </abstract>



  </front>

  <middle>


<?line 93?>

<section anchor="introduction"><name>Introduction</name>

<section anchor="purpose"><name>Purpose</name>

<t>The Agent Definition Language (ADL) provides a standard format for describing AI agents. ADL documents are JSON objects that describe an agent's identity, capabilities, tools, permissions, and runtime requirements. This specification describes the structure of ADL documents, the semantics of their members, and conformance requirements for implementations.</t>

<t>ADL serves a similar role for AI agents that OpenAPI serves for REST APIs, AsyncAPI for event-driven architectures, and WSDL for web services. It enables:</t>

<t><list style="symbols">
  <t><strong>Discovery:</strong> Agents can be found and understood programmatically.</t>
  <t><strong>Interoperability:</strong> Agents can interact with tools, resources, and other agents using a common description format.</t>
  <t><strong>Deployment:</strong> Runtime environments can provision and configure agents based on declared requirements.</t>
  <t><strong>Security:</strong> Permission boundaries and security requirements are explicitly declared and enforceable.</t>
  <t><strong>Lifecycle:</strong> Agents can be versioned, tracked through operational states, and managed across their entire lifecycle from draft to retirement.</t>
</list></t>

</section>
<section anchor="goals"><name>Goals</name>

<t><list style="symbols">
  <t><strong>Portable:</strong> ADL documents describe agents independent of any specific runtime, platform, or provider.</t>
  <t><strong>Interoperable:</strong> ADL documents can be transformed into other formats (A2A Agent Cards, MCP configurations) and consumed by diverse tooling.</t>
  <t><strong>Extensible:</strong> ADL supports profiles that add domain-specific requirements without changing the core specification.</t>
  <t><strong>Secure:</strong> Permission boundaries, authentication, and security constraints are first-class concepts.</t>
  <t><strong>Machine-readable:</strong> ADL documents are validated against JSON Schema and can be processed programmatically.</t>
  <t><strong>Human-friendly:</strong> Clear naming conventions and structures that are easy to read and author.</t>
</list></t>

</section>
<section anchor="relationship-to-other-specifications"><name>Relationship to Other Specifications</name>

<t>ADL builds upon and interoperates with:</t>

<t><list style="symbols">
  <t>**JSON <xref target="RFC8259"/>  --  ADL documents are valid JSON.</t>
  <t><strong>JSON Schema</strong> <xref target="JSON-SCHEMA"/>  --  ADL documents are validated against JSON Schema; tool parameters use JSON Schema for types.</t>
  <t><strong>A2A Protocol</strong> <xref target="A2A"/>  --  ADL documents can generate A2A Agent Cards.</t>
  <t><strong>Model Context Protocol (MCP)</strong> <xref target="MCP"/>  --  ADL documents can generate MCP server configurations; tools, resources, and prompts align with MCP primitives.</t>
  <t><strong>OpenAPI</strong> <xref target="OPENAPI"/>  --  ADL can reference OpenAPI specifications for HTTP-based tools.</t>
  <t><strong>W3C DIDs</strong> <xref target="W3C.DID"/> / <strong>Verifiable Credentials</strong> <xref target="W3C.VC"/>  --  ADL supports DIDs for cryptographic identity and VCs for attestations.</t>
</list></t>

</section>
</section>
<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<texttable>
      <ttcol align='left'>Term</ttcol>
      <ttcol align='left'>Definition</ttcol>
      <c><strong>ADL document</strong></c>
      <c>A JSON object that conforms to this specification.</c>
      <c><strong>agent</strong></c>
      <c>An AI system capable of autonomous operation within defined boundaries, described by an ADL document.</c>
      <c><strong>tool</strong></c>
      <c>A function or capability that an agent can invoke (equivalent to "function" in function-calling).</c>
      <c><strong>resource</strong></c>
      <c>A data source that an agent can read from (e.g., vector store, knowledge base, file system).</c>
      <c><strong>prompt</strong></c>
      <c>A predefined prompt template that an agent can use.</c>
      <c><strong>profile</strong></c>
      <c>A set of additional requirements and members that extend the core ADL specification for specific domains.</c>
      <c><strong>permission domain</strong></c>
      <c>A category of system access (network, filesystem, etc.) that defines operational boundaries.</c>
      <c><strong>runtime</strong></c>
      <c>The system or environment that executes an agent based on its ADL definition.</c>
      <c><strong>model</strong></c>
      <c>The LLM or other AI model that powers the agent's reasoning.</c>
</texttable>

</section>
<section anchor="document-structure"><name>Document Structure</name>

<section anchor="media-type"><name>Media Type</name>

<t><list style="symbols">
  <t>ADL documents use the media type <strong><spanx style="verb">application/adl+json</spanx></strong>.</t>
  <t>ADL documents <strong>MUST</strong> be encoded in UTF-8.</t>
  <t>ADL documents <strong>MUST</strong> be valid JSON <xref target="RFC8259"/>.</t>
  <t>Member names <strong>MUST</strong> use <strong>snake_case</strong> (lowercase with underscores).</t>
  <t>All timestamps <strong>MUST</strong> be ISO 8601 strings with timezone (e.g., <spanx style="verb">"2026-02-15T14:30:00Z"</spanx>).</t>
  <t>All URIs <strong>MUST</strong> conform to <xref target="RFC3986"/>.</t>
  <t><strong>YAML authoring and JSON canonical form:</strong> YAML is an authoring convenience; JSON is the canonical wire format. When an ADL document is authored in YAML, implementations <strong>MUST</strong> convert it to JSON for processing and validation. The media type <spanx style="verb">application/adl+json</spanx> applies to the JSON canonical form.</t>
</list></t>

</section>
<section anchor="top-level-object"><name>Top-Level Object</name>

<t>An ADL document <strong>MUST</strong> be a single JSON object.</t>

<t><strong>Required members:</strong></t>

<t><list style="symbols">
  <t><spanx style="verb">adl_spec</spanx> (Section 5.1)</t>
  <t><spanx style="verb">name</spanx> (Section 5.3)</t>
  <t><spanx style="verb">description</spanx> (Section 5.4)</t>
  <t><spanx style="verb">version</spanx> (Section 5.5)</t>
  <t><spanx style="verb">data_classification</spanx> (Section 10.4)</t>
</list></t>

<t><strong>Optional members:</strong></t>

<t><list style="symbols">
  <t><spanx style="verb">$schema</spanx>, <spanx style="verb">id</spanx>, <spanx style="verb">provider</spanx>, <spanx style="verb">cryptographic_identity</spanx>, <spanx style="verb">lifecycle</spanx>, <spanx style="verb">model</spanx>, <spanx style="verb">system_prompt</spanx>, <spanx style="verb">tools</spanx>, <spanx style="verb">resources</spanx>, <spanx style="verb">prompts</spanx>, <spanx style="verb">permissions</spanx>, <spanx style="verb">security</spanx>, <spanx style="verb">runtime</spanx>, <spanx style="verb">metadata</spanx>, <spanx style="verb">profiles</spanx></t>
</list></t>

<t>An ADL document <strong>MUST NOT</strong> contain members not defined by this specification, a declared profile, or the extension mechanism.</t>

</section>
<section anchor="extension-mechanism"><name>Extension Mechanism</name>

<t><list style="symbols">
  <t><strong>Profiles:</strong> Add domain-specific requirements and members; declared in <spanx style="verb">profiles</spanx>. See Section 13.</t>
  <t><strong>Extension members:</strong> Custom data without a full profile. Names <strong>MUST</strong> be prefixed with <spanx style="verb">x_</spanx> followed by a namespace identifier (e.g., <spanx style="verb">x_acme_internal_id</spanx>).</t>
</list></t>

<t>Implementations <strong>MUST</strong> preserve extension members when processing but <strong>MAY</strong> ignore their contents. Implementations <strong>MUST NOT</strong> reject documents containing unknown <spanx style="verb">x_</spanx>-prefixed members.</t>

<t>Extension members (prefixed with <spanx style="verb">x_</spanx>) <strong>MAY</strong> appear in any object within an ADL document, including nested objects such as <spanx style="verb">lifecycle</spanx>, <spanx style="verb">provider</spanx>, <spanx style="verb">model</spanx>, <spanx style="verb">permissions</spanx>, and <spanx style="verb">security</spanx>. Extension member names <strong>MUST</strong> match the pattern <spanx style="verb">x_</spanx> followed by a namespace identifier using only lowercase letters, digits, and underscores (e.g., <spanx style="verb">x_acme_internal_id</spanx>). Extension member names <strong>MUST</strong> conform to the <spanx style="verb">ext-member-name</spanx> production in Appendix D.</t>

<t>Example:</t>

<t><spanx style="verb">json
{
  "name": "Invoice Processor",
  "version": "2.0.0",
  "adl_spec": "0.1.0",
  "description": "Processes and routes invoices.",
  "data_classification": { "sensitivity": "confidential" },
  "x_acme_internal_id": "inv-proc-007",
  "x_acme_cost_center": "engineering",
  "model": {
    "name": "acme-large-2024",
    "x_acme_model_tier": "premium"
  }
}
</spanx></t>

</section>
<section anchor="pattern-matching"><name>Pattern Matching</name>

<t>Several ADL members use patterns to specify allowed or denied values. ADL defines a minimal pattern syntax based on a subset of glob matching rules. The following constructs are supported:</t>

<t><list style="numbers" type="1">
  <t><strong>Literal match.</strong> A string with no wildcard characters matches only itself. Matching is case-sensitive unless the underlying system is case-insensitive (e.g., Windows filesystem paths).</t>
  <t><strong>Single-segment wildcard (<spanx style="verb">*</spanx>).</strong> The <spanx style="verb">*</spanx> character matches zero or more characters within a single segment. The segment boundary depends on context:
  <list style="symbols">
      <t><strong>Host patterns</strong> (Section 9.2): segments are separated by <spanx style="verb">.</spanx> (dot). <spanx style="verb">*</spanx> does not match dots. <spanx style="verb">*.example.com</spanx> matches <spanx style="verb">api.example.com</spanx> but does not match <spanx style="verb">deep.sub.example.com</spanx>.</t>
      <t><strong>Environment variable patterns</strong> (Section 9.4): <spanx style="verb">*</spanx> matches any characters in the variable name. <spanx style="verb">APP_*</spanx> matches <spanx style="verb">APP_PORT</spanx> and <spanx style="verb">APP_HOST</spanx>.</t>
      <t><strong>Command patterns</strong> (Section 9.5): <spanx style="verb">*</spanx> matches any characters in the command name.</t>
    </list></t>
  <t><strong>Multi-segment wildcard (<spanx style="verb">**</spanx>).</strong> The <spanx style="verb">**</spanx> sequence matches zero or more path segments including separators. Valid only in filesystem path patterns (Section 9.3). <spanx style="verb">/data/**</spanx> matches <spanx style="verb">/data/</spanx>, <spanx style="verb">/data/foo</spanx>, and <spanx style="verb">/data/foo/bar/baz</spanx>. <spanx style="verb">**</spanx> <strong>MUST NOT</strong> appear in host patterns, environment variable patterns, or command patterns.</t>
  <t><strong>Restrictions.</strong> Patterns <strong>MUST</strong> contain wildcards only in the positions described above. Mid-string wildcards (e.g., <spanx style="verb">foo*bar</spanx>) are <strong>NOT RECOMMENDED</strong>; implementations <strong>MAY</strong> reject them. A bare <spanx style="verb">*</spanx> as an entire pattern (matching everything) is valid but <strong>NOT RECOMMENDED</strong> for security-sensitive domains (<spanx style="verb">allowed_hosts</spanx>, <spanx style="verb">allowed_variables</spanx>). Implementations <strong>SHOULD</strong> warn when a bare <spanx style="verb">*</spanx> wildcard is used in permission patterns.</t>
</list></t>

<t>Implementations <strong>MUST</strong> apply patterns using the rules defined in this section. Implementations <strong>MUST NOT</strong> interpret patterns as regular expressions. Formal grammar productions for pattern elements are defined in Appendix D.</t>

</section>
</section>
<section anchor="core-members"><name>Core Members</name>

<section anchor="adl-specification"><name>ADL Specification</name>

<t>Specifies the ADL specification version the document conforms to.</t>

<t><list style="symbols">
  <t><strong>REQUIRED.</strong> Value <strong>MUST</strong> be a string in semantic versioning format (MAJOR.MINOR.PATCH). The format <strong>MUST</strong> conform to the <spanx style="verb">semver</spanx> production in Appendix D.</t>
  <t>Implementations <strong>MUST</strong> reject documents with an unsupported <spanx style="verb">adl_spec</spanx> version.</t>
  <t>Implementations <strong>SHOULD</strong> support documents with the same MAJOR version and lower or equal MINOR version.</t>
  <t>Pre-release suffixes (e.g., <spanx style="verb">"0.1.0-draft"</spanx>) <strong>MUST NOT</strong> appear in <spanx style="verb">adl_spec</spanx> values. Only release versions are valid for conformance. Pre-release identifiers <strong>MAY</strong> appear in the agent's own <spanx style="verb">version</spanx> member (Section 5.5).</t>
</list></t>

<t>Example: <spanx style="verb">"adl_spec": "0.1.0"</spanx></t>

</section>
<section anchor="schema"><name>$schema</name>

<t>Optional. URI reference to the JSON Schema for validation. <strong>RECOMMENDED</strong> for JSON documents (enables IDE validation). Canonical schema URI for ADL 0.1: <spanx style="verb">https://adl-spec.org/0.1/schema.json</spanx>.</t>

</section>
<section anchor="name"><name>Name</name>

<t>Human-readable name for the agent. <strong>REQUIRED.</strong> Value <strong>MUST</strong> be a non-empty string. For machine identifiers, use <spanx style="verb">id</spanx> (Section 6.1).</t>

</section>
<section anchor="description"><name>Description</name>

<t>Human-readable description of the agent's purpose and capabilities. <strong>REQUIRED.</strong> Value <strong>MUST</strong> be a non-empty string. <strong>SHOULD</strong> be sufficient for users to understand what the agent does without examining tool definitions.</t>

</section>
<section anchor="version"><name>Version</name>

<t>Agent's version. <strong>REQUIRED.</strong> Value <strong>MUST</strong> be a string in semantic versioning format (MAJOR.MINOR.PATCH); the format <strong>MUST</strong> conform to the <spanx style="verb">semver</spanx> production in Appendix D. Agent version changes <strong>SHOULD</strong> follow SemVer (MAJOR: breaking; MINOR: new capabilities; PATCH: fixes, docs).</t>

</section>
<section anchor="lifecycle"><name>Lifecycle</name>

<t>Operational lifecycle status of the agent. <strong>OPTIONAL.</strong> When present, value <strong>MUST</strong> be an object containing at minimum a <spanx style="verb">status</spanx> member.</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>status</c>
      <c>string</c>
      <c>REQUIRED</c>
      <c>Lifecycle state of the agent</c>
      <c>effective_date</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>ISO 8601 timestamp when current status took effect</c>
      <c>sunset_date</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>ISO 8601 timestamp for planned or actual retirement</c>
      <c>successor</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>URI or URN of the replacement agent</c>
</texttable>

<section anchor="status"><name>status</name>

<t><strong>REQUIRED</strong> when <spanx style="verb">lifecycle</spanx> is present. Value <strong>MUST</strong> be one of:</t>

<texttable>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c><spanx style="verb">draft</spanx></c>
      <c>Under development; not ready for production use</c>
      <c><spanx style="verb">active</spanx></c>
      <c>Operational and available for use</c>
      <c><spanx style="verb">deprecated</spanx></c>
      <c>Superseded; discouraged for new use; may be removed</c>
      <c><spanx style="verb">retired</spanx></c>
      <c>End-of-life; no longer operational</c>
</texttable>

<t>When <spanx style="verb">lifecycle</spanx> is omitted, no lifecycle assertion is made. Implementations <strong>MUST NOT</strong> assume a default status.</t>

<t>Runtimes <strong>SHOULD</strong> check <spanx style="verb">lifecycle.status</spanx> before provisioning agents. Runtimes <strong>SHOULD NOT</strong> provision agents with status <spanx style="verb">draft</spanx> in production environments. Runtimes <strong>SHOULD</strong> warn users when provisioning agents with status <spanx style="verb">deprecated</spanx>. Runtimes <strong>MUST NOT</strong> provision or execute agents with status <spanx style="verb">retired</spanx>.</t>

<ul empty="true"><li>
  <t><strong>Note:</strong> "Provision" and "execute" refer to instantiating an agent for operation. Reading, parsing, validating, analyzing, or migrating from an agent definition is unrestricted regardless of lifecycle status.</t>
</li></ul>

</section>
<section anchor="effectivedate"><name>effective_date</name>

<t>When present, value <strong>MUST</strong> be a valid ISO 8601 string with timezone. Indicates when the current <spanx style="verb">status</spanx> took effect.</t>

</section>
<section anchor="sunsetdate"><name>sunset_date</name>

<t>When present, value <strong>MUST</strong> be a valid ISO 8601 string with timezone. Indicates when the agent will be or was retired. Implementations <strong>SHOULD</strong> warn when <spanx style="verb">sunset_date</spanx> is in the future and within 30 days. When <spanx style="verb">sunset_date</spanx> is in the past and <spanx style="verb">status</spanx> is <spanx style="verb">deprecated</spanx>, runtimes <strong>SHOULD</strong> treat the agent as <spanx style="verb">retired</spanx>.</t>

</section>
<section anchor="successor"><name>successor</name>

<t>When present, value <strong>MUST</strong> be a string; <strong>SHOULD</strong> be a URI or URN identifying the replacement agent (see Section 6.1 for identifier formats). <strong>SHOULD</strong> be present when <spanx style="verb">status</spanx> is <spanx style="verb">deprecated</spanx> or <spanx style="verb">retired</spanx>. Implementations <strong>SHOULD</strong> warn if <spanx style="verb">successor</spanx> is present when <spanx style="verb">status</spanx> is <spanx style="verb">active</spanx> or <spanx style="verb">draft</spanx>.</t>

<t>Example:</t>

<t><spanx style="verb">json
{
  "lifecycle": {
    "status": "deprecated",
    "effective_date": "2026-01-15T00:00:00Z",
    "sunset_date": "2026-08-01T00:00:00Z",
    "successor": "https://acme.example.com/agents/research-assistant"
  }
}
</spanx></t>

</section>
</section>
</section>
<section anchor="agent-identity"><name>Agent Identity</name>

<section anchor="id"><name>Id</name>

<t>Unique identifier for the agent. <strong>OPTIONAL.</strong> When present, value <strong>MUST</strong> be a string and <strong>MUST</strong> be a valid URI <xref target="RFC3986"/> or URN <xref target="RFC8141"/>.</t>

<t>Identifier formats, in order of preference:</t>

<t><list style="numbers" type="1">
  <t><strong>HTTPS URI (RECOMMENDED):</strong> <spanx style="verb">https://{domain}/agents/{name}</spanx>  --  Provides ownership verification via TLS, direct resolution to the agent's ADL document, and natural integration with <spanx style="verb">.well-known</spanx> discovery (Section 6.4). The domain authority <strong>SHOULD</strong> serve the ADL document at the identifier URL with media type <spanx style="verb">application/adl+json</spanx>.</t>
  <t><strong>Decentralized Identifier:</strong> <spanx style="verb">did:web:{domain}:agents:{name}</spanx>  --  Provides cryptographic identity binding via the DID Document. Resolution follows the <spanx style="verb">did:web</spanx> method specification <xref target="W3C.DID"/>. <strong>RECOMMENDED</strong> when cryptographic verification of agent identity is required independent of transport.</t>
  <t><strong>URN (offline/catalog use):</strong> <spanx style="verb">urn:adl:{namespace}:{name}:{version}</spanx>  --  Location-independent identifier suitable for air-gapped environments, offline catalogs, and internal registries where network resolution is unavailable. URN identifiers provide naming only; they do not support ownership verification or discovery without an external resolver.</t>
</list></t>

<t>When an agent has both a resolvable identifier (HTTPS URI or DID) and a URN, the resolvable identifier <strong>SHOULD</strong> be used as the primary <spanx style="verb">id</spanx> value. The URN <strong>MAY</strong> be recorded in <spanx style="verb">metadata</spanx> for catalog interoperability.</t>

<ul empty="true"><li>
  <t><strong>Note:</strong> The <spanx style="verb">urn:adl:</spanx> namespace identifier is used as a convention in this specification but is not yet a registered URN namespace per <xref target="RFC8141"/>. Formal registration with IANA will be pursued in a future revision. Implementations <strong>SHOULD NOT</strong> assume that <spanx style="verb">urn:adl:</spanx> URNs are globally resolvable.</t>
</li></ul>

</section>
<section anchor="provider"><name>Provider</name>

<t>Identifies the organization or entity that provides the agent. <strong>OPTIONAL.</strong> When present, value <strong>MUST</strong> be an object:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>name</c>
      <c>string</c>
      <c>REQUIRED</c>
      <c>Provider name</c>
      <c>url</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>Provider website</c>
      <c>contact</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>Contact email</c>
</texttable>

</section>
<section anchor="cryptographic-identity"><name>Cryptographic Identity</name>

<t>Cryptographic identification for the agent. <strong>OPTIONAL.</strong> When present, value <strong>MUST</strong> be an object:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>did</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>Decentralized Identifier <xref target="W3C.DID"/></c>
      <c>public_key</c>
      <c>object</c>
      <c>OPTIONAL</c>
      <c>Public key for signature verification</c>
</texttable>

<t>At least one of <spanx style="verb">did</spanx> or <spanx style="verb">public_key</spanx> <strong>SHOULD</strong> be present. The <spanx style="verb">public_key</spanx> object, when present, <strong>MUST</strong> contain <spanx style="verb">algorithm</spanx> (string, REQUIRED) and <spanx style="verb">value</spanx> (string, Base64-encoded, REQUIRED). Implementations <strong>SHOULD</strong> reject weak algorithms (e.g., RSA below 2048 bits, DSA, ECDSA below P-256). EdDSA (Ed25519, Ed448) is <strong>RECOMMENDED</strong>.</t>

<t>Example (agent identity with DID and public key):</t>

<t><spanx style="verb">json
{
  "id": "https://acme.example.com/agents/invoice-processor",
  "provider": {
    "name": "Acme Corp",
    "url": "https://acme.example.com",
    "contact": "ai-platform@acme.example.com"
  },
  "cryptographic_identity": {
    "did": "did:web:acme.example.com:agents:invoice-processor",
    "public_key": {
      "algorithm": "Ed25519",
      "value": "MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE="
    }
  }
}
</spanx></t>

</section>
<section anchor="discovery"><name>Discovery</name>

<t>Agent discovery enables clients to locate agents published by a domain without prior knowledge of individual agent identifiers. Domains hosting ADL agents <strong>MAY</strong> publish a discovery document at the well-known URI <xref target="RFC8615"/>:</t>

<t><spanx style="verb">
https://{domain}/.well-known/adl-agents
</spanx></t>

<t>The discovery document, when present, <strong>MUST</strong> be a JSON object served with media type <spanx style="verb">application/json</spanx> and <strong>MUST</strong> contain an <spanx style="verb">agents</spanx> array. Each entry in the array <strong>MUST</strong> be an object with at least <spanx style="verb">id</spanx> (string, the agent's identifier per Section 6.1) and <spanx style="verb">adl_document</spanx> (string, URL to the full ADL document). Entries <strong>MAY</strong> include <spanx style="verb">name</spanx>, <spanx style="verb">version</spanx>, <spanx style="verb">description</spanx>, and <spanx style="verb">status</spanx>.</t>

<t>Example discovery document:</t>

<t><spanx style="verb">json
{
  "adl_discovery": "1.0",
  "agents": [
    {
      "id": "https://acme.example.com/agents/invoice-processor",
      "adl_document": "https://acme.example.com/agents/invoice-processor/adl.json",
      "name": "Invoice Processor",
      "version": "2.0.0",
      "status": "active"
    },
    {
      "id": "https://acme.example.com/agents/research-assistant",
      "adl_document": "https://acme.example.com/agents/research-assistant/adl.json",
      "name": "Research Assistant",
      "version": "2.1.0",
      "status": "active"
    }
  ]
}
</spanx></t>

<t>Clients performing discovery <strong>MUST</strong> fetch the discovery document over HTTPS. Clients <strong>SHOULD</strong> validate the TLS certificate chain. The discovery document <strong>SHOULD</strong> be cacheable; servers <strong>SHOULD</strong> set appropriate <spanx style="verb">Cache-Control</spanx> headers.</t>

<ul empty="true"><li>
  <t><strong>Note:</strong> Registration of <spanx style="verb">.well-known/adl-agents</spanx> with IANA per <xref target="RFC8615"/> will be pursued alongside the IETF Internet-Draft submission.</t>
</li></ul>

</section>
</section>
<section anchor="model-configuration"><name>Model Configuration</name>

<section anchor="model"><name>Model</name>

<t>AI model configuration. <strong>OPTIONAL.</strong> When omitted, the runtime determines the model. When present, value <strong>MUST</strong> be an object:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>provider</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>Model provider identifier</c>
      <c>name</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>Model identifier</c>
      <c>version</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>Model version</c>
      <c>context_window</c>
      <c>number</c>
      <c>OPTIONAL</c>
      <c>Max context window (tokens)</c>
      <c>temperature</c>
      <c>number</c>
      <c>OPTIONAL</c>
      <c>Sampling temperature (0.0-2.0)</c>
      <c>max_tokens</c>
      <c>number</c>
      <c>OPTIONAL</c>
      <c>Max output tokens</c>
      <c>capabilities</c>
      <c>array</c>
      <c>OPTIONAL</c>
      <c>Required model capabilities</c>
</texttable>

<t><spanx style="verb">capabilities</spanx> values may include: <spanx style="verb">function_calling</spanx>, <spanx style="verb">vision</spanx>, <spanx style="verb">code_execution</spanx>, <spanx style="verb">streaming</spanx>.</t>

</section>
<section anchor="system-prompt"><name>System Prompt</name>

<t>System prompt for the agent. <strong>OPTIONAL.</strong> Value <strong>MUST</strong> be a string or an object. When an object, it <strong>MUST</strong> contain <spanx style="verb">template</spanx> (string, REQUIRED) and <strong>MAY</strong> contain <spanx style="verb">variables</spanx> (object).</t>

<section anchor="template-variable-syntax"><name>Template Variable Syntax</name>

<t>Variables in templates use the <spanx style="verb">{{variable_name}}</spanx> syntax and <strong>MUST</strong> conform to the <spanx style="verb">template-var</spanx> production in Appendix D. Variable names <strong>MUST</strong> begin with a letter (<spanx style="verb">A</spanx>-<spanx style="verb">Z</spanx> or <spanx style="verb">a</spanx>-<spanx style="verb">z</spanx>) and <strong>MAY</strong> contain letters, digits, and underscores.</t>

<t><strong>Escaping:</strong> To include a literal <spanx style="verb">{{</spanx> in template text without triggering variable substitution, implementations <strong>MUST</strong> support the escape sequence <spanx style="verb">\{{</spanx>. A <spanx style="verb">\{{</spanx> in the template string is rendered as <spanx style="verb">{{</spanx> and is not treated as a variable reference.</t>

<t><strong>Undefined variables:</strong> When a template references a variable name not present in <spanx style="verb">variables</spanx>, the implementation <strong>MUST</strong> treat this as an error (error code ADL-1006) and <strong>MUST NOT</strong> silently substitute an empty string. Implementations <strong>SHOULD</strong> include the undefined variable name in the error detail.</t>

<t>Example:</t>

<t><spanx style="verb">json
{
  "model": {
    "provider": "acme-ai",
    "name": "acme-large-2024",
    "context_window": 200000,
    "temperature": 0.7,
    "max_tokens": 4096,
    "capabilities": ["function_calling", "vision"]
  },
  "system_prompt": {
    "template": "You are a helpful assistant for {{company_name}}. Today is {{current_date}}.",
    "variables": {
      "company_name": "Acme Corp",
      "current_date": "2026-02-18"
    }
  }
}
</spanx></t>

</section>
</section>
</section>
<section anchor="capabilities"><name>Capabilities</name>

<section anchor="tools"><name>Tools</name>

<t>Array of tool objects (functions the agent can invoke). <strong>OPTIONAL.</strong> Each tool <strong>MUST</strong> contain <spanx style="verb">name</spanx> (string, REQUIRED) and <spanx style="verb">description</spanx> (string, REQUIRED). Each tool <strong>MAY</strong> contain: <spanx style="verb">parameters</spanx> (JSON Schema), <spanx style="verb">returns</spanx> (JSON Schema), <spanx style="verb">examples</spanx>, <spanx style="verb">requires_confirmation</spanx> (bool), <spanx style="verb">idempotent</spanx> (bool), <spanx style="verb">read_only</spanx> (bool), <spanx style="verb">annotations</spanx>, <spanx style="verb">data_classification</spanx> (Section 10.4). Tool names <strong>MUST</strong> be unique, <strong>MUST</strong> match <spanx style="verb">^[a-z][a-z0-9_]*$</spanx>, and <strong>MUST</strong> conform to the <spanx style="verb">tool-name</spanx> production in Appendix D. The <spanx style="verb">parameters</spanx> and <spanx style="verb">returns</spanx> objects, when present, <strong>MUST</strong> be valid JSON Schema.</t>

<t>The <spanx style="verb">examples</spanx> member, when present, <strong>MUST</strong> be an array of example objects. Each example object <strong>MAY</strong> contain:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>name</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>Human-readable name for the example</c>
      <c>input</c>
      <c>object</c>
      <c>OPTIONAL</c>
      <c>Example input parameters</c>
      <c>output</c>
      <c>any</c>
      <c>OPTIONAL</c>
      <c>Expected output value</c>
</texttable>

<t>The <spanx style="verb">annotations</spanx> member, when present, <strong>MUST</strong> be an object containing implementation hints and metadata. Annotations is an open object  --  implementations <strong>MAY</strong> add custom keys. Standard annotation members include:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>openapi_ref</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>URI to an OpenAPI specification</c>
      <c>operation_id</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>OpenAPI operation identifier</c>
</texttable>

<t>See Section 15.3 for OpenAPI integration details. Implementations <strong>MUST</strong> preserve all annotation members when processing, including unrecognized keys.</t>

<t>Example:</t>

<t><spanx style="verb">json
{
  "tools": [
    {
      "name": "search_invoices",
      "description": "Search for invoices by vendor name, date range, or amount.",
      "parameters": {
        "type": "object",
        "properties": {
          "vendor": { "type": "string", "description": "Vendor name to search" },
          "date_from": { "type": "string", "format": "date" },
          "date_to": { "type": "string", "format": "date" }
        },
        "required": []
      },
      "returns": {
        "type": "array",
        "items": { "type": "object" }
      },
      "examples": [
        {
          "name": "Search by vendor",
          "input": { "vendor": "Acme Supplies" },
          "output": [{ "id": "INV-001", "amount": 1500.00 }]
        }
      ],
      "idempotent": true,
      "read_only": true,
      "annotations": {
        "openapi_ref": "https://api.acme.example.com/openapi.json",
        "operation_id": "searchInvoices"
      },
      "data_classification": { "sensitivity": "confidential" }
    }
  ]
}
</spanx></t>

</section>
<section anchor="resources"><name>Resources</name>

<t>Array of resource objects (data sources the agent can access). <strong>OPTIONAL.</strong> Each resource <strong>MUST</strong> contain <spanx style="verb">name</spanx> (string, REQUIRED) and <spanx style="verb">type</spanx> (string, REQUIRED). <spanx style="verb">type</spanx> <strong>MUST</strong> be one of: <spanx style="verb">vector_store</spanx>, <spanx style="verb">knowledge_base</spanx>, <spanx style="verb">file</spanx>, <spanx style="verb">api</spanx>, <spanx style="verb">database</spanx>. Each resource <strong>MAY</strong> contain: <spanx style="verb">description</spanx>, <spanx style="verb">uri</spanx>, <spanx style="verb">mime_types</spanx>, <spanx style="verb">schema</spanx>, <spanx style="verb">annotations</spanx>, <spanx style="verb">data_classification</spanx> (Section 10.4). Resource names <strong>MUST</strong> be unique.</t>

<t>The <spanx style="verb">mime_types</spanx> member, when present, <strong>MUST</strong> be an array of strings. Each value <strong>MUST</strong> be a valid MIME type (e.g., <spanx style="verb">"application/json"</spanx>, <spanx style="verb">"text/plain"</spanx>).</t>

<t>The <spanx style="verb">schema</spanx> member, when present, <strong>MUST</strong> be a valid JSON Schema describing the structure of the resource's data.</t>

<t>The <spanx style="verb">annotations</spanx> member, when present, <strong>MUST</strong> be an object. Same semantics as <spanx style="verb">tool.annotations</spanx>  --  an open object for implementation hints that <strong>MUST</strong> be preserved when processing.</t>

<t>Example:</t>

<t><spanx style="verb">json
{
  "resources": [
    {
      "name": "invoice_store",
      "type": "vector_store",
      "description": "Vector store containing indexed invoice documents for semantic search.",
      "uri": "https://store.acme.example.com/invoices",
      "mime_types": ["application/pdf", "application/json"],
      "data_classification": { "sensitivity": "confidential" }
    }
  ]
}
</spanx></t>

</section>
<section anchor="prompts"><name>Prompts</name>

<t>Array of prompt objects (reusable prompt templates). <strong>OPTIONAL.</strong> Each prompt <strong>MUST</strong> contain <spanx style="verb">name</spanx> (string, REQUIRED) and <spanx style="verb">template</spanx> (string, REQUIRED). Each prompt <strong>MAY</strong> contain <spanx style="verb">description</spanx>, <spanx style="verb">arguments</spanx> (JSON Schema). Template arguments use <spanx style="verb">{{argument_name}}</spanx> and <strong>MUST</strong> conform to the <spanx style="verb">template-var</spanx> production in Appendix D. Prompt names <strong>MUST</strong> be unique.</t>

<t>Example:</t>

<t><spanx style="verb">json
{
  "prompts": [
    {
      "name": "summarize_invoice",
      "description": "Summarizes an invoice for a reviewer.",
      "template": "Summarize the following invoice for {{reviewer_role}}:\n\n{{invoice_text}}\n\nHighlight amounts over {{threshold}}.",
      "arguments": {
        "type": "object",
        "properties": {
          "reviewer_role": { "type": "string" },
          "invoice_text": { "type": "string" },
          "threshold": { "type": "number" }
        },
        "required": ["reviewer_role", "invoice_text"]
      }
    }
  ]
}
</spanx></t>

</section>
</section>
<section anchor="permissions"><name>Permissions</name>

<t>The <spanx style="verb">permissions</spanx> member defines the agent's operational boundaries. <strong>OPTIONAL.</strong> When present, value <strong>MUST</strong> be an object containing one or more permission domain members.</t>

<section anchor="permissions-model"><name>Permissions Model</name>

<texttable>
      <ttcol align='left'>Domain</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>network</c>
      <c>Network access boundaries</c>
      <c>filesystem</c>
      <c>Filesystem access boundaries</c>
      <c>environment</c>
      <c>Environment variable access</c>
      <c>execution</c>
      <c>Process execution boundaries</c>
      <c>resource_limits</c>
      <c>Resource consumption limits</c>
</texttable>

<t>Permissions operate on a <strong>deny-by-default</strong> model. Runtimes <strong>MUST</strong> deny any capability not explicitly granted in the <spanx style="verb">permissions</spanx> member. Runtimes <strong>MUST</strong> enforce declared permissions. Runtimes that cannot enforce a specific permission domain <strong>MUST</strong> warn users before execution and <strong>SHOULD</strong> refuse to execute the agent unless the user explicitly acknowledges the limitation.</t>

<t>When the <spanx style="verb">permissions</spanx> member is omitted from an ADL document, no permissions are granted to the agent. Runtimes <strong>MUST</strong> treat the absence of <spanx style="verb">permissions</spanx> as equivalent to an empty <spanx style="verb">permissions</spanx> object  --  the agent has no granted capabilities.</t>

<t>When a specific permission domain (e.g., <spanx style="verb">network</spanx>, <spanx style="verb">filesystem</spanx>) is omitted from the <spanx style="verb">permissions</spanx> object, all operations in that domain are denied. For example, if <spanx style="verb">permissions</spanx> is present but does not contain <spanx style="verb">network</spanx>, the agent <strong>MUST</strong> have no network access.</t>

<t>Runtimes <strong>MUST NOT</strong> infer, assume, or provide default permissions when <spanx style="verb">permissions</spanx> or a permission domain is absent.</t>

<section anchor="conflict-resolution"><name>Conflict Resolution</name>

<t>When a value matches both an <spanx style="verb">allowed_*</spanx> pattern and a <spanx style="verb">denied_*</spanx> pattern within the same permission domain, the <spanx style="verb">denied_*</spanx> pattern <strong>MUST</strong> take precedence. The agent <strong>MUST NOT</strong> be granted access to any value matched by a <spanx style="verb">denied_*</spanx> pattern, regardless of whether it also matches an <spanx style="verb">allowed_*</spanx> pattern. This deny-takes-precedence rule ensures that explicit exclusions cannot be overridden by broad allow patterns.</t>

<t>Example: If <spanx style="verb">allowed_variables</spanx> is <spanx style="verb">["APP_*"]</spanx> and <spanx style="verb">denied_variables</spanx> is <spanx style="verb">["APP_SECRET_*"]</spanx>, the variable <spanx style="verb">APP_SECRET_KEY</spanx> is <strong>denied</strong> even though it matches <spanx style="verb">APP_*</spanx>.</t>

</section>
</section>
<section anchor="network"><name>Network</name>

<t>May contain: <spanx style="verb">allowed_hosts</spanx> (array of host patterns), <spanx style="verb">allowed_ports</spanx>, <spanx style="verb">allowed_protocols</spanx>, <spanx style="verb">deny_private</spanx> (bool). Host patterns support exact match and <spanx style="verb">*.example.com</spanx>.</t>

<t>Host patterns in <spanx style="verb">allowed_hosts</spanx> <strong>MUST</strong> conform to the pattern syntax defined in Section 4.4.</t>

</section>
<section anchor="filesystem"><name>Filesystem</name>

<t>May contain: <spanx style="verb">allowed_paths</spanx> (array of <spanx style="verb">{ path, access }</spanx> where access is <spanx style="verb">read</spanx>, <spanx style="verb">write</spanx>, or <spanx style="verb">read_write</spanx>), <spanx style="verb">denied_paths</spanx>.</t>

<t>Path patterns in <spanx style="verb">allowed_paths[*].path</spanx> and <spanx style="verb">denied_paths</spanx> <strong>MUST</strong> conform to the pattern syntax defined in Section 4.4. The <spanx style="verb">**</spanx> multi-segment wildcard is valid in filesystem path patterns.</t>

</section>
<section anchor="environment"><name>Environment</name>

<t>May contain: <spanx style="verb">allowed_variables</spanx>, <spanx style="verb">denied_variables</spanx> (patterns with wildcards, e.g., <spanx style="verb">APP_*</spanx>).</t>

<t>Variable patterns in <spanx style="verb">allowed_variables</spanx> and <spanx style="verb">denied_variables</spanx> <strong>MUST</strong> conform to the pattern syntax defined in Section 4.4.</t>

</section>
<section anchor="execution"><name>Execution</name>

<t>May contain: <spanx style="verb">allowed_commands</spanx>, <spanx style="verb">denied_commands</spanx>, <spanx style="verb">allow_shell</spanx> (bool).</t>

<t>Command patterns in <spanx style="verb">allowed_commands</spanx> and <spanx style="verb">denied_commands</spanx> <strong>MUST</strong> conform to the pattern syntax defined in Section 4.4.</t>

</section>
<section anchor="resource-limits"><name>Resource Limits</name>

<t>May contain: <spanx style="verb">max_memory_mb</spanx>, <spanx style="verb">max_cpu_percent</spanx>, <spanx style="verb">max_duration_sec</spanx>, <spanx style="verb">max_concurrent</spanx>.</t>

<t>Example (complete permissions object):</t>

<t><spanx style="verb">json
{
  "permissions": {
    "network": {
      "allowed_hosts": ["api.acme.example.com", "*.storage.example.com"],
      "allowed_ports": [443],
      "allowed_protocols": ["https"],
      "deny_private": true
    },
    "filesystem": {
      "allowed_paths": [
        { "path": "/data/invoices/**", "access": "read" },
        { "path": "/tmp/processing/**", "access": "read_write" }
      ],
      "denied_paths": ["/tmp/processing/**/secrets"]
    },
    "environment": {
      "allowed_variables": ["APP_*", "INVOICE_*"],
      "denied_variables": ["APP_SECRET_*"]
    },
    "execution": {
      "allowed_commands": ["python3", "jq"],
      "allow_shell": false
    },
    "resource_limits": {
      "max_memory_mb": 512,
      "max_cpu_percent": 25,
      "max_duration_sec": 300
    }
  }
}
</spanx></t>

</section>
</section>
<section anchor="security"><name>Security</name>

<t>The <spanx style="verb">security</spanx> member defines security requirements. <strong>OPTIONAL.</strong> When present, value <strong>MUST</strong> be an object that <strong>MAY</strong> contain <spanx style="verb">authentication</spanx>, <spanx style="verb">encryption</spanx>, and <spanx style="verb">attestation</spanx>.</t>

<section anchor="authentication"><name>Authentication</name>

<t>May contain: <spanx style="verb">type</spanx> (one of <spanx style="verb">none</spanx>, <spanx style="verb">api_key</spanx>, <spanx style="verb">oauth2</spanx>, <spanx style="verb">oidc</spanx>, <spanx style="verb">mtls</spanx>), <spanx style="verb">required</spanx> (bool). Type-specific members (e.g., OAuth2: <spanx style="verb">scopes</spanx>, <spanx style="verb">token_endpoint</spanx>; OIDC: <spanx style="verb">issuer</spanx>, <spanx style="verb">audience</spanx>) <strong>MAY</strong> be present.</t>

</section>
<section anchor="encryption"><name>Encryption</name>

<t>May contain: <spanx style="verb">in_transit</spanx> (<spanx style="verb">required</spanx>, <spanx style="verb">min_version</spanx>), <spanx style="verb">at_rest</spanx> (<spanx style="verb">required</spanx>, <spanx style="verb">algorithm</spanx>).</t>

</section>
<section anchor="attestation"><name>Attestation</name>

<t>May contain: <spanx style="verb">type</spanx> (one of <spanx style="verb">self</spanx>, <spanx style="verb">third_party</spanx>, <spanx style="verb">verifiable_credential</spanx>), <spanx style="verb">issuer</spanx>, <spanx style="verb">issued_at</spanx>, <spanx style="verb">expires_at</spanx> (ISO 8601), <spanx style="verb">signature</spanx> (object). Implementations <strong>SHOULD</strong> warn when <spanx style="verb">expires_at</spanx> is in the past or within 30 days.</t>

<t><strong>Signature object:</strong> When present, <strong>MUST</strong> contain <spanx style="verb">algorithm</spanx>, <spanx style="verb">value</spanx> (Base64url-encoded), <spanx style="verb">signed_content</spanx> (<spanx style="verb">"canonical"</spanx> or <spanx style="verb">"digest"</spanx>). When <spanx style="verb">signed_content</spanx> is <spanx style="verb">"digest"</spanx>, <strong>MUST</strong> also include <spanx style="verb">digest_algorithm</spanx> and <spanx style="verb">digest_value</spanx>. Supported algorithms include Ed25519 (RECOMMENDED), Ed448, ES256/384/512, RS256, PS256 (RSA &gt;= 2048). Verification: remove signature, serialize with JCS <xref target="RFC8785"/>, verify digest if applicable, resolve public key from <spanx style="verb">cryptographic_identity</spanx>, verify signature.</t>

<t>Example:</t>

<t><spanx style="verb">json
{
  "security": {
    "authentication": {
      "type": "oauth2",
      "required": true,
      "scopes": ["invoices:read", "invoices:write"],
      "token_endpoint": "https://auth.acme.example.com/oauth/token"
    },
    "encryption": {
      "in_transit": { "required": true, "min_version": "TLS1.3" },
      "at_rest": { "required": true, "algorithm": "AES-256-GCM" }
    },
    "attestation": {
      "type": "third_party",
      "issuer": "https://trust.acme.example.com",
      "issued_at": "2026-01-01T00:00:00Z",
      "expires_at": "2027-01-01T00:00:00Z"
    }
  }
}
</spanx></t>

</section>
<section anchor="data-classification"><name>Data Classification</name>

<t>The <spanx style="verb">data_classification</spanx> member declares the sensitivity and categories of data the agent may access, process, or produce. <strong>REQUIRED.</strong> Value <strong>MUST</strong> be an object.</t>

<t>Data classification is required by NIST FIPS 199, NIST SP 800-60, ISO 27001:2022 Annex A.5.12, FedRAMP, SOC 2, and CMMC. It is the foundational step of security categorization across all major compliance frameworks.</t>

<t>This member is a <strong>reusable composable attribute</strong>. In addition to the required top-level declaration, it <strong>MAY</strong> also appear within individual <spanx style="verb">tools[*]</spanx> or <spanx style="verb">resources[*]</spanx> objects to classify specific capabilities. When present on both the top level and a tool or resource, the tool/resource-level classification applies to that capability.</t>

<section anchor="high-water-mark-rule"><name>High-Water Mark Rule</name>

<t>The top-level <spanx style="verb">data_classification.sensitivity</spanx> <strong>MUST</strong> be greater than or equal to the highest <spanx style="verb">sensitivity</spanx> value declared in any tool-level or resource-level <spanx style="verb">data_classification</spanx> within the same document. This follows the FIPS 199 high-water mark principle: a system's overall security categorization is the highest value among its constituent information types.</t>

<t>The sensitivity ordering from lowest to highest is: <spanx style="verb">public</spanx> &lt; <spanx style="verb">internal</spanx> &lt; <spanx style="verb">confidential</spanx> &lt; <spanx style="verb">restricted</spanx>.</t>

<t>Sensitivity levels align with NIST FIPS 199 impact categorization and ISO 27001:2022 Annex A.5.12 information classification.</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>sensitivity</c>
      <c>string</c>
      <c>REQUIRED</c>
      <c>Information sensitivity level</c>
      <c>categories</c>
      <c>array</c>
      <c>OPTIONAL</c>
      <c>Broad information categories handled</c>
      <c>retention</c>
      <c>object</c>
      <c>OPTIONAL</c>
      <c>Data retention requirements</c>
      <c>handling</c>
      <c>object</c>
      <c>OPTIONAL</c>
      <c>Data handling constraints</c>
</texttable>

</section>
<section anchor="sensitivity"><name>sensitivity</name>

<t><strong>REQUIRED</strong> when <spanx style="verb">data_classification</spanx> is present. Value <strong>MUST</strong> be one of:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Definition</ttcol>
      <c><spanx style="verb">public</spanx></c>
      <c>Information approved for unrestricted disclosure</c>
      <c><spanx style="verb">internal</spanx></c>
      <c>Information limited to organizational use</c>
      <c><spanx style="verb">confidential</spanx></c>
      <c>Information requiring protection; unauthorized disclosure could cause harm</c>
      <c><spanx style="verb">restricted</spanx></c>
      <c>Information requiring the highest level of protection; unauthorized disclosure could cause severe harm</c>
</texttable>

</section>
<section anchor="categories"><name>categories</name>

<t>When present, <strong>MUST</strong> be a non-empty array. Each item <strong>MUST</strong> be one of:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Definition</ttcol>
      <c><spanx style="verb">pii</spanx></c>
      <c>Personally Identifiable Information</c>
      <c><spanx style="verb">phi</spanx></c>
      <c>Protected Health Information (HIPAA)</c>
      <c><spanx style="verb">financial</spanx></c>
      <c>Financial data (PCI-DSS, GLBA, SOX scope)</c>
      <c><spanx style="verb">credentials</spanx></c>
      <c>Authentication credentials, secrets, keys</c>
      <c><spanx style="verb">intellectual_property</spanx></c>
      <c>Trade secrets, proprietary algorithms, business-sensitive data</c>
      <c><spanx style="verb">regulatory</spanx></c>
      <c>Data subject to specific regulatory requirements</c>
</texttable>

<t>Profiles <strong>MAY</strong> define additional category values.</t>

</section>
<section anchor="retention"><name>retention</name>

<t>When present, <strong>MUST</strong> be an object. <strong>MAY</strong> contain:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>min_days</c>
      <c>number</c>
      <c>Minimum retention period in days</c>
      <c>max_days</c>
      <c>number</c>
      <c>Maximum retention period in days</c>
      <c>policy_uri</c>
      <c>string</c>
      <c>URI to the governing retention policy</c>
</texttable>

<t>When both <spanx style="verb">min_days</spanx> and <spanx style="verb">max_days</spanx> are present, <spanx style="verb">min_days</spanx> <strong>MUST</strong> be less than or equal to <spanx style="verb">max_days</spanx>.</t>

</section>
<section anchor="handling"><name>handling</name>

<t>When present, <strong>MUST</strong> be an object. <strong>MAY</strong> contain:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>encryption_required</c>
      <c>bool</c>
      <c>Whether data must be encrypted at rest</c>
      <c>anonymization_required</c>
      <c>bool</c>
      <c>Whether data must be anonymized before processing</c>
      <c>cross_border_restricted</c>
      <c>bool</c>
      <c>Whether data may not leave jurisdictional boundaries</c>
      <c>logging_required</c>
      <c>bool</c>
      <c>Whether all access must be logged</c>
</texttable>

</section>
<section anchor="profile-extensions"><name>Profile Extensions</name>

<t>Profiles <strong>MAY</strong> add domain-specific sub-objects within <spanx style="verb">data_classification</spanx> to provide granular classification vocabularies. For example, a healthcare profile may add a <spanx style="verb">healthcare</spanx> sub-object with PHI type enumerations, and a financial profile may add a <spanx style="verb">financial</spanx> sub-object with financial data type enumerations. Multiple profile extensions compose naturally within the same <spanx style="verb">data_classification</spanx> object. See Section 13 for profile composition rules.</t>

<t>Example (top-level and tool-level data classification demonstrating the high-water mark rule):</t>

<t><spanx style="verb">json
{
  "data_classification": {
    "sensitivity": "confidential",
    "categories": ["financial", "pii"],
    "retention": { "max_days": 2555, "policy_uri": "https://acme.example.com/data-retention" },
    "handling": {
      "encryption_required": true,
      "logging_required": true
    }
  },
  "tools": [
    {
      "name": "get_invoice_details",
      "description": "Returns detailed invoice data including PII.",
      "data_classification": {
        "sensitivity": "confidential",
        "categories": ["financial", "pii"]
      }
    },
    {
      "name": "get_invoice_summary",
      "description": "Returns anonymized invoice summary.",
      "data_classification": { "sensitivity": "internal" }
    }
  ]
}
</spanx></t>

<t>The top-level <spanx style="verb">sensitivity</spanx> of <spanx style="verb">"confidential"</spanx> satisfies the high-water mark rule: it equals the highest tool-level value (<spanx style="verb">"confidential"</spanx> for <spanx style="verb">get_invoice_details</spanx>).</t>

</section>
</section>
</section>
<section anchor="runtime-behavior"><name>Runtime Behavior</name>

<t>The <spanx style="verb">runtime</spanx> member configures agent runtime behavior. <strong>OPTIONAL.</strong> When present, value <strong>MUST</strong> be an object.</t>

<section anchor="input-handling"><name>Input Handling</name>

<t>May contain: <spanx style="verb">max_input_length</spanx>, <spanx style="verb">content_types</spanx>, <spanx style="verb">sanitization</spanx>.</t>

<t>The <spanx style="verb">sanitization</spanx> member, when present, <strong>MUST</strong> be an object describing input sanitization rules. It <strong>MAY</strong> contain:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>enabled</c>
      <c>boolean</c>
      <c>OPTIONAL</c>
      <c>Whether input sanitization is active</c>
      <c>strip_html</c>
      <c>boolean</c>
      <c>OPTIONAL</c>
      <c>Whether to strip HTML tags from input</c>
      <c>max_input_length</c>
      <c>number</c>
      <c>OPTIONAL</c>
      <c>Maximum input length in characters</c>
</texttable>

<t>The <spanx style="verb">content_types</spanx> member, when present, <strong>MUST</strong> be an array of strings. Each value <strong>MUST</strong> be a valid MIME type specifying an accepted input content type.</t>

</section>
<section anchor="output-handling"><name>Output Handling</name>

<t>May contain: <spanx style="verb">max_output_length</spanx>, <spanx style="verb">format</spanx>, <spanx style="verb">streaming</spanx> (bool).</t>

<t>The <spanx style="verb">format</spanx> member, when present, <strong>MUST</strong> be a string specifying the default output format. Value <strong>MUST</strong> be one of: <spanx style="verb">"text"</spanx>, <spanx style="verb">"json"</spanx>, <spanx style="verb">"markdown"</spanx>, <spanx style="verb">"html"</spanx>.</t>

</section>
<section anchor="tool-invocation"><name>Tool Invocation</name>

<t>May contain: <spanx style="verb">parallel</spanx> (bool), <spanx style="verb">max_concurrent</spanx>, <spanx style="verb">timeout_ms</spanx>, <spanx style="verb">retry_policy</spanx>.</t>

<t>The <spanx style="verb">retry_policy</spanx> member, when present, <strong>MUST</strong> be an object describing retry behavior for tool invocations. It <strong>MAY</strong> contain:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>max_retries</c>
      <c>number</c>
      <c>OPTIONAL</c>
      <c>Maximum number of retry attempts</c>
      <c>backoff_strategy</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>One of: <spanx style="verb">"fixed"</spanx>, <spanx style="verb">"exponential"</spanx>, <spanx style="verb">"linear"</spanx></c>
      <c>initial_delay_ms</c>
      <c>number</c>
      <c>OPTIONAL</c>
      <c>Initial delay between retries in milliseconds</c>
      <c>max_delay_ms</c>
      <c>number</c>
      <c>OPTIONAL</c>
      <c>Maximum delay between retries in milliseconds</c>
</texttable>

</section>
<section anchor="error-handling"><name>Error Handling</name>

<t>May contain: <spanx style="verb">on_tool_error</spanx> (<spanx style="verb">abort</spanx>, <spanx style="verb">continue</spanx>, or <spanx style="verb">retry</spanx>), <spanx style="verb">max_retries</spanx>, <spanx style="verb">fallback_behavior</spanx>.</t>

<t>The <spanx style="verb">fallback_behavior</spanx> member, when present, <strong>MUST</strong> be an object describing behavior when errors occur and <spanx style="verb">on_tool_error</spanx> does not resolve the situation. It <strong>MAY</strong> contain:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>action</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>One of: <spanx style="verb">"return_error"</spanx>, <spanx style="verb">"use_default"</spanx>, <spanx style="verb">"skip"</spanx></c>
      <c>default</c>
      <c>any</c>
      <c>OPTIONAL</c>
      <c>Default value to return when <spanx style="verb">action</spanx> is <spanx style="verb">"use_default"</spanx></c>
      <c>message</c>
      <c>string</c>
      <c>OPTIONAL</c>
      <c>User-facing message on fallback</c>
</texttable>

<t>Example:</t>

<t><spanx style="verb">json
{
  "runtime": {
    "input_handling": {
      "max_input_length": 32768,
      "content_types": ["text/plain", "application/json"],
      "sanitization": { "enabled": true, "strip_html": true }
    },
    "output_handling": {
      "format": "json",
      "max_output_length": 8192,
      "streaming": false
    },
    "tool_invocation": {
      "parallel": true,
      "max_concurrent": 3,
      "timeout_ms": 30000,
      "retry_policy": {
        "max_retries": 2,
        "backoff_strategy": "exponential",
        "initial_delay_ms": 500,
        "max_delay_ms": 5000
      }
    },
    "error_handling": {
      "on_tool_error": "retry",
      "max_retries": 2,
      "fallback_behavior": {
        "action": "return_error",
        "message": "Invoice processing temporarily unavailable."
      }
    }
  }
}
</spanx></t>

</section>
</section>
<section anchor="metadata"><name>Metadata</name>

<t>The <spanx style="verb">metadata</spanx> member provides additional information. <strong>OPTIONAL.</strong> When present, value <strong>MUST</strong> be an object.</t>

<section anchor="authors"><name>Authors</name>

<t>Array of author objects. Each <strong>MAY</strong> contain <spanx style="verb">name</spanx>, <spanx style="verb">email</spanx>, <spanx style="verb">url</spanx>.</t>

</section>
<section anchor="license"><name>License</name>

<t>String: SPDX license identifier or URI to license document.</t>

</section>
<section anchor="documentation"><name>Documentation</name>

<t>String: URI to documentation.</t>

</section>
<section anchor="repository"><name>Repository</name>

<t>String: URI to source repository.</t>

</section>
<section anchor="tags"><name>Tags</name>

<t>Array of strings. <strong>SHOULD</strong> be lowercase, alphanumeric and hyphens only. Tags <strong>SHOULD</strong> conform to the <spanx style="verb">tag</spanx> production in Appendix D.</t>

</section>
<section anchor="example"><name>Example</name>

<t><spanx style="verb">json
{
  "metadata": {
    "authors": [
      {
        "name": "Platform Team",
        "email": "platform@example.com",
        "url": "https://example.com/team/platform"
      }
    ],
    "license": "Apache-2.0",
    "documentation": "https://docs.example.com/agents/invoice-processor",
    "repository": "https://github.com/example/invoice-processor",
    "tags": ["finance", "invoice", "production"]
  }
}
</spanx></t>

</section>
</section>
<section anchor="profiles"><name>Profiles</name>

<t>The <spanx style="verb">profiles</spanx> member declares which profiles the document conforms to. <strong>OPTIONAL.</strong> Value <strong>MUST</strong> be an array of profile identifiers (URIs or registered names). When a profile is declared: the document <strong>MUST</strong> satisfy all profile requirements, <strong>MAY</strong> use profile-defined members, and validators <strong>SHOULD</strong> check profile-specific rules. Profiles <strong>MUST NOT</strong> redefine core ADL members; they <strong>MAY</strong> add top-level members, add members to existing objects, define validation rules, or require specific values for optional members.</t>

<t><strong>Standard profiles (examples):</strong> Governance (<spanx style="verb">urn:adl:profile:governance:1.0</spanx>), Healthcare, Financial. Additional profiles may be registered (e.g., IANA profile registry).</t>

<t>Example:</t>

<t><spanx style="verb">json
{
  "adl_spec": "0.1.0",
  "name": "Invoice Processor",
  "version": "2.0.0",
  "description": "Processes invoices with governance and financial compliance.",
  "data_classification": {
    "sensitivity": "confidential",
    "categories": ["financial"]
  },
  "profiles": [
    "urn:adl:profile:governance:1.0",
    "urn:adl:profile:financial:1.0"
  ]
}
</spanx></t>

</section>
<section anchor="processing-adl-documents"><name>Processing ADL Documents</name>

<section anchor="parsing"><name>Parsing</name>

<t>Implementations <strong>MUST</strong> parse ADL as JSON <xref target="RFC8259"/>, <strong>MUST</strong> reject invalid JSON, and <strong>MUST</strong> reject documents where the top-level value is not a JSON object.</t>

</section>
<section anchor="validation"><name>Validation</name>

<t>Implementations <strong>MUST</strong> validate ADL documents against the JSON Schema defined in Appendix A. Implementations <strong>MUST</strong> validate the following semantic rules:</t>

<texttable>
      <ttcol align='left'>Rule</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>VAL-01</c>
      <c><spanx style="verb">adl_spec</spanx> MUST match a supported version</c>
      <c>VAL-02</c>
      <c>Tool names MUST be unique</c>
      <c>VAL-03</c>
      <c>Resource names MUST be unique</c>
      <c>VAL-04</c>
      <c>Prompt names MUST be unique</c>
      <c>VAL-05</c>
      <c>Timestamps MUST be valid ISO 8601</c>
      <c>VAL-06</c>
      <c>URIs MUST be valid per RFC 3986</c>
      <c>VAL-07</c>
      <c>JSON Schema in parameters/returns MUST be valid</c>
      <c>VAL-08</c>
      <c>Profile requirements MUST be satisfied</c>
      <c>VAL-09</c>
      <c><spanx style="verb">lifecycle.status</spanx> MUST be a valid status value if present</c>
      <c>VAL-10</c>
      <c><spanx style="verb">lifecycle.effective_date</spanx> MUST be valid ISO 8601 if present</c>
      <c>VAL-11</c>
      <c><spanx style="verb">lifecycle.sunset_date</spanx> MUST be valid ISO 8601 if present</c>
      <c>VAL-12</c>
      <c><spanx style="verb">lifecycle.successor</spanx> MUST be a valid URI if present</c>
      <c>VAL-13</c>
      <c>Tool names MUST match <spanx style="verb">^[a-z][a-z0-9_]*$</spanx></c>
      <c>VAL-14</c>
      <c>Resource <spanx style="verb">type</spanx> MUST be a valid resource type value</c>
      <c>VAL-15</c>
      <c><spanx style="verb">model.temperature</spanx> MUST be between 0.0 and 2.0 if present</c>
      <c>VAL-16</c>
      <c><spanx style="verb">security.authentication.type</spanx> MUST be a valid authentication type if present</c>
      <c>VAL-17</c>
      <c><spanx style="verb">security.attestation.type</spanx> MUST be a valid attestation type if present</c>
      <c>VAL-18</c>
      <c><spanx style="verb">runtime.error_handling.on_tool_error</spanx> MUST be a valid error action if present</c>
      <c>VAL-19</c>
      <c><spanx style="verb">runtime.output_handling.format</spanx> MUST be a valid format value if present</c>
      <c>VAL-20</c>
      <c><spanx style="verb">model.capabilities</spanx> items MUST be valid capability values if present</c>
      <c>VAL-21</c>
      <c>Host patterns MUST conform to Section 4.4 pattern syntax</c>
      <c>VAL-22</c>
      <c>Filesystem path patterns MUST conform to Section 4.4 pattern syntax</c>
      <c>VAL-23</c>
      <c>Environment variable patterns MUST conform to Section 4.4 pattern syntax</c>
      <c>VAL-24</c>
      <c>Attestation <spanx style="verb">signature.signed_content</spanx> value <spanx style="verb">"digest"</spanx> MUST have <spanx style="verb">digest_algorithm</spanx> and <spanx style="verb">digest_value</spanx> present</c>
      <c>VAL-25</c>
      <c><spanx style="verb">data_classification.sensitivity</spanx> MUST be a valid sensitivity level if present</c>
      <c>VAL-26</c>
      <c><spanx style="verb">data_classification.categories</spanx> items MUST be valid category values if present</c>
      <c>VAL-27</c>
      <c><spanx style="verb">data_classification.retention.min_days</spanx> MUST be less than or equal to <spanx style="verb">max_days</spanx> when both are present</c>
      <c>VAL-28</c>
      <c>Top-level <spanx style="verb">data_classification.sensitivity</spanx> MUST be &gt;= the highest <spanx style="verb">sensitivity</spanx> in any tool or resource <spanx style="verb">data_classification</spanx> (high-water mark)</c>
</texttable>

<t>Implementations <strong>MAY</strong> perform additional validation based on declared profiles.</t>

</section>
<section anchor="unknown-members"><name>Unknown Members</name>

<t>Implementations <strong>MUST</strong> preserve unrecognized members when round-tripping. Implementations <strong>MUST NOT</strong> reject documents containing unknown <spanx style="verb">x_</spanx>-prefixed members. Implementations <strong>MAY</strong> warn on unknown non-extension, non-profile members.</t>

</section>
</section>
<section anchor="interoperability"><name>Interoperability</name>

<section anchor="a2a-agent-card-generation"><name>A2A Agent Card Generation</name>

<t>Implementations <strong>SHOULD</strong> support generating A2A Agent Cards from ADL (e.g., name, description, version, tools-&gt;skills, cryptographic_identity.did-&gt;id, security.authentication-&gt;authentication).</t>

</section>
<section anchor="mcp-server-configuration"><name>MCP Server Configuration</name>

<t>Implementations <strong>SHOULD</strong> support generating MCP server configurations (name, description, version, tools, resources, prompts).</t>

</section>
<section anchor="openapi-integration"><name>OpenAPI Integration</name>

<t>Tools that invoke HTTP APIs <strong>MAY</strong> reference OpenAPI specs. The tool <spanx style="verb">annotations</spanx> object <strong>MAY</strong> contain <spanx style="verb">openapi_ref</spanx> (URI) and <spanx style="verb">operation_id</spanx>.</t>

</section>
</section>
<section anchor="errors"><name>Errors</name>

<section anchor="error-format"><name>Error Format</name>

<t>Implementations <strong>SHOULD</strong> return errors in a consistent format, e.g.:</t>

<t><spanx style="verb">json
{
  "errors": [
    {
      "code": "ADL-1001",
      "title": "Invalid JSON",
      "detail": "Unexpected token at line 42, column 15",
      "source": { "pointer": "/tools/0/name" }
    }
  ]
}
</spanx></t>

<t>The <spanx style="verb">source</spanx> object <strong>MAY</strong> contain: <spanx style="verb">pointer</spanx> (JSON Pointer to the error location), <spanx style="verb">line</spanx> (1-indexed), <spanx style="verb">column</spanx> (1-indexed).</t>

</section>
<section anchor="error-codes"><name>Error Codes</name>

<texttable>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Category</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>ADL-1001</c>
      <c>Parse</c>
      <c>Invalid JSON syntax</c>
      <c>ADL-1002</c>
      <c>Parse</c>
      <c>Document is not a JSON object</c>
      <c>ADL-1003</c>
      <c>Schema</c>
      <c>Missing required member</c>
      <c>ADL-1004</c>
      <c>Schema</c>
      <c>Invalid member type</c>
      <c>ADL-1005</c>
      <c>Schema</c>
      <c>Invalid enum value</c>
      <c>ADL-1006</c>
      <c>Schema</c>
      <c>Value does not match pattern</c>
      <c>ADL-2001</c>
      <c>Semantic</c>
      <c>Unsupported ADL version</c>
      <c>ADL-2002</c>
      <c>Semantic</c>
      <c>Duplicate tool name</c>
      <c>ADL-2003</c>
      <c>Semantic</c>
      <c>Duplicate resource name</c>
      <c>ADL-2004</c>
      <c>Semantic</c>
      <c>Duplicate prompt name</c>
      <c>ADL-2005</c>
      <c>Semantic</c>
      <c>Invalid timestamp format</c>
      <c>ADL-2006</c>
      <c>Semantic</c>
      <c>Invalid URI format</c>
      <c>ADL-2007</c>
      <c>Semantic</c>
      <c>Invalid JSON Schema</c>
      <c>ADL-2008</c>
      <c>Semantic</c>
      <c>Invalid tool name pattern</c>
      <c>ADL-2009</c>
      <c>Semantic</c>
      <c>Invalid resource type value</c>
      <c>ADL-2010</c>
      <c>Semantic</c>
      <c>Temperature out of range</c>
      <c>ADL-2011</c>
      <c>Semantic</c>
      <c>Invalid authentication type</c>
      <c>ADL-2012</c>
      <c>Semantic</c>
      <c>Invalid attestation type</c>
      <c>ADL-2013</c>
      <c>Semantic</c>
      <c>Invalid error handling action</c>
      <c>ADL-2014</c>
      <c>Semantic</c>
      <c>Invalid output format</c>
      <c>ADL-2015</c>
      <c>Semantic</c>
      <c>Invalid model capability</c>
      <c>ADL-2016</c>
      <c>Semantic</c>
      <c>Invalid host pattern syntax</c>
      <c>ADL-2017</c>
      <c>Semantic</c>
      <c>Invalid filesystem path pattern</c>
      <c>ADL-2018</c>
      <c>Semantic</c>
      <c>Invalid environment variable pattern</c>
      <c>ADL-2019</c>
      <c>Semantic</c>
      <c>Missing digest fields for digest-mode signature</c>
      <c>ADL-2020</c>
      <c>Semantic</c>
      <c>Invalid data classification sensitivity level</c>
      <c>ADL-2021</c>
      <c>Semantic</c>
      <c>Invalid data classification category</c>
      <c>ADL-2022</c>
      <c>Semantic</c>
      <c>Retention min_days exceeds max_days</c>
      <c>ADL-2023</c>
      <c>Semantic</c>
      <c>Top-level sensitivity below tool/resource sensitivity (high-water mark violation)</c>
      <c>ADL-3001</c>
      <c>Profile</c>
      <c>Profile requirements not satisfied</c>
      <c>ADL-3002</c>
      <c>Profile</c>
      <c>Unknown profile</c>
      <c>ADL-4001</c>
      <c>Security</c>
      <c>Weak key algorithm</c>
      <c>ADL-4002</c>
      <c>Security</c>
      <c>Invalid signature</c>
      <c>ADL-4003</c>
      <c>Security</c>
      <c>Expired attestation</c>
      <c>ADL-5001</c>
      <c>Lifecycle</c>
      <c>Invalid lifecycle status value</c>
      <c>ADL-5002</c>
      <c>Lifecycle</c>
      <c>Successor present on active/draft agent</c>
      <c>ADL-5003</c>
      <c>Lifecycle</c>
      <c>Sunset date in the past with non-retired status</c>
</texttable>

</section>
<section anchor="error-source-examples"><name>Error Source Examples</name>

<t>The <spanx style="verb">source.pointer</spanx> member uses JSON Pointer <xref target="RFC6901"/> to identify the location of the error within the ADL document. The following examples illustrate <spanx style="verb">source</spanx> values for representative error codes from each category:</t>

<t><spanx style="verb">json
// ADL-1003 (Schema): Missing required member "data_classification"
{
  "code": "ADL-1003",
  "title": "Missing required member",
  "detail": "Required member 'data_classification' is missing",
  "source": { "pointer": "" }
}
</spanx></t>

<t><spanx style="verb">json
// ADL-2002 (Semantic): Duplicate tool name at index 2
{
  "code": "ADL-2002",
  "title": "Duplicate tool name",
  "detail": "Tool name 'search_documents' already defined at index 0",
  "source": { "pointer": "/tools/2/name" }
}
</spanx></t>

<t><spanx style="verb">json
// ADL-2016 (Semantic): Invalid host pattern in permissions
{
  "code": "ADL-2016",
  "title": "Invalid host pattern syntax",
  "detail": "Pattern '**' is not a valid host pattern",
  "source": { "pointer": "/permissions/network/allowed_hosts/1" }
}
</spanx></t>

<t><spanx style="verb">json
// ADL-2023 (Semantic): High-water mark violation on a tool
{
  "code": "ADL-2023",
  "title": "High-water mark violation",
  "detail": "Tool 'query_records' has sensitivity 'confidential' which exceeds top-level 'internal'",
  "source": { "pointer": "/tools/1/data_classification/sensitivity" }
}
</spanx></t>

<t><spanx style="verb">json
// ADL-3001 (Profile): Profile requirement not satisfied
{
  "code": "ADL-3001",
  "title": "Profile requirements not satisfied",
  "detail": "Governance profile requires 'compliance' member",
  "source": { "pointer": "/profiles/0" }
}
</spanx></t>

<t><spanx style="verb">json
// ADL-4001 (Security): Weak key algorithm
{
  "code": "ADL-4001",
  "title": "Weak key algorithm",
  "detail": "Algorithm 'RS256' with 1024-bit key does not meet minimum strength requirements",
  "source": { "pointer": "/security/attestation/public_key" }
}
</spanx></t>

<t><spanx style="verb">json
// ADL-5002 (Lifecycle): Successor on active agent
{
  "code": "ADL-5002",
  "title": "Successor present on non-retired agent",
  "detail": "Member 'successor' is only valid when lifecycle.status is 'retired'",
  "source": { "pointer": "/lifecycle/successor" }
}
</spanx></t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="media-type-1"><name>Media Type</name>

<t>This document requests IANA to register the <spanx style="verb">application/adl+json</spanx> media type in the "Media Types" registry in accordance with <xref target="RFC6838"/>.</t>

<t><list style="symbols">
  <t><strong>Type name:</strong> application</t>
  <t><strong>Subtype name:</strong> adl+json</t>
  <t><strong>Required parameters:</strong> None</t>
  <t><strong>Optional parameters:</strong>
  <list style="symbols">
      <t><spanx style="verb">profile</spanx>  --  A comma-separated list of ADL profile identifiers (URIs or registered names from the ADL Profile Registry defined in Section 17.2) that the document conforms to. Each identifier <strong>MUST</strong> be a URI conforming to <xref target="RFC3986"/>. Consumers that do not recognize a profile identifier <strong>MAY</strong> ignore the parameter and <strong>MUST</strong> preserve it when retransmitting the document.</t>
    </list></t>
  <t><strong>Encoding considerations:</strong> binary  --  ADL documents are JSON text sequences encoded in UTF-8 <xref target="RFC8259"/>. No other character encoding is permitted. Consistent with <xref target="RFC8259"/>, UTF-8 without a byte-order mark (BOM) is <strong>RECOMMENDED</strong>.</t>
  <t><strong>Security considerations:</strong> ADL documents declare agent behavior including permission grants, system prompt templates, tool invocation configuration, and cryptographic identity. Processors <strong>MUST</strong> treat content from untrusted sources with appropriate caution. Template variables in <spanx style="verb">system_prompt</spanx> and prompt templates use a <spanx style="verb">{{variable_name}}</spanx> substitution syntax; processors <strong>MUST</strong> sanitize variable values before substitution to prevent prompt injection attacks that could alter agent behavior. ADL documents include URI references in fields such as <spanx style="verb">$schema</spanx>, <spanx style="verb">openapi_ref</spanx>, <spanx style="verb">documentation</spanx>, and <spanx style="verb">repository</spanx>; processors <strong>MUST NOT</strong> automatically dereference these URIs from untrusted documents, as doing so may target internal network resources and enable Server-Side Request Forgery (SSRF). Documents that declare broad permissions (e.g., a bare <spanx style="verb">*</spanx> wildcard in <spanx style="verb">allowed_hosts</spanx>) represent elevated risk and <strong>SHOULD</strong> require explicit human review before deployment. Processors <strong>SHOULD</strong> impose limits on document size, JSON nesting depth, and array lengths to prevent resource exhaustion from adversarially crafted documents. For a comprehensive treatment of all security considerations applicable to this media type, see Section 18.</t>
  <t><strong>Interoperability considerations:</strong> ADL documents <strong>MUST</strong> be processed as JSON <xref target="RFC8259"/> regardless of authoring format. YAML is a common authoring convenience, but processors <strong>MUST</strong> operate on the JSON form; documents intended to be signed using JCS <xref target="RFC8785"/> <strong>MUST</strong> be serialized as JSON before signing. Profile declarations  --  whether via the <spanx style="verb">profile</spanx> optional parameter or the <spanx style="verb">profiles</spanx> document member  --  allow multiple profiles to compose within a single document; consumers that partially implement profile requirements <strong>SHOULD</strong> process the members they recognize and preserve unrecognized members per Section 14.3. Validation against the JSON Schema defined in Appendix A provides a baseline interoperability check. Implementations that generate A2A Agent Cards or MCP server configurations from ADL documents <strong>SHOULD</strong> follow the mappings defined in Section 15. Producers <strong>SHOULD</strong> include the <spanx style="verb">$schema</spanx> member to enable tooling-assisted validation.</t>
  <t><strong>Published specification:</strong> [this document]</t>
  <t><strong>Applications that use this media type:</strong> AI agent platforms, agent registries, development tools, orchestration frameworks, and runtime environments that provision and manage AI agents.</t>
  <t><strong>Fragment identifier considerations:</strong> Fragment identifiers for resources of this type <strong>SHOULD</strong> be interpreted as JSON Pointer expressions <xref target="RFC6901"/> identifying a location within the ADL document object.</t>
  <t><strong>Additional information:</strong>
  <list style="symbols">
      <t>Deprecated alias names for this type: N/A</t>
      <t>Magic number(s): N/A</t>
      <t>File extension(s): <spanx style="verb">.adl.json</spanx>, <spanx style="verb">.adl</spanx></t>
      <t>Macintosh file type code(s): N/A</t>
      <t>Object Identifiers: N/A</t>
    </list></t>
  <t><strong>Person and email address to contact for further information:</strong> See the Author's Address section of this document.</t>
  <t><strong>Intended usage:</strong> COMMON</t>
  <t><strong>Restrictions on usage:</strong> None</t>
  <t><strong>Author:</strong> See the Author's Address section of this document.</t>
  <t><strong>Change controller:</strong> IETF</t>
</list></t>

</section>
<section anchor="profile-registry"><name>Profile Registry</name>

<t>IANA is requested to create and maintain a new registry titled <strong>"ADL Profile Registry"</strong> within a new "Agent Definition Language (ADL)" registry group.</t>

<t><strong>Registration Policy:</strong> Specification Required <xref target="RFC8126"/>. The designated expert reviews registration requests to verify that the profile is documented in a publicly available, stable specification and that all required registration template fields are complete.</t>

<t><strong>Registration Template:</strong> Parties wishing to register a profile <strong>MUST</strong> provide all of the following fields:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>Identifier (URI)</c>
      <c>A URI that uniquely identifies the profile, conforming to <xref target="RFC3986"/>. The URI <strong>SHOULD</strong> be dereferenceable and return a human-readable description of the profile.</c>
      <c>Name</c>
      <c>A short human-readable name for the profile (e.g., "ADL Governance Profile").</c>
      <c>Version</c>
      <c>The profile version string in MAJOR.MINOR.PATCH semantic versioning format.</c>
      <c>Specification Reference</c>
      <c>A stable, publicly accessible URI or document reference for the profile specification. The specification <strong>MUST</strong> define all profile-required members, validation rules, and any additional semantics added by the profile.</c>
      <c>ADL Version Compatibility</c>
      <c>The ADL specification version(s) with which the profile is designed to operate (e.g., "0.1.x").</c>
      <c>Contact</c>
      <c>Name and email address of the person or group responsible for the profile registration.</c>
      <c>Status</c>
      <c>One of: <spanx style="verb">active</spanx> (currently maintained) or <spanx style="verb">deprecated</spanx> (superseded or abandoned).</c>
</texttable>

<t><strong>Initial Registry Contents:</strong></t>

<texttable>
      <ttcol align='left'>Identifier (URI)</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Version</ttcol>
      <c><spanx style="verb">urn:adl:profile:governance:1.0</spanx></c>
      <c>ADL Governance Profile</c>
      <c>1.0.0</c>
      <c><spanx style="verb">urn:adl:profile:portfolio:1.0</spanx></c>
      <c>ADL Portfolio Profile</c>
      <c>1.0.0</c>
      <c><spanx style="verb">urn:adl:profile:healthcare:1.0</spanx></c>
      <c>ADL Healthcare Profile</c>
      <c>1.0.0</c>
      <c><spanx style="verb">urn:adl:profile:financial:1.0</spanx></c>
      <c>ADL Financial Profile</c>
      <c>1.0.0</c>
</texttable>

<t>All initial entries reference Appendix C of this document, target ADL compatibility 0.1.x, are <spanx style="verb">active</spanx>, and list the Author's Address as contact.</t>

<t><strong>Designated Expert Criteria:</strong> The designated expert <strong>SHOULD</strong> evaluate requests against the following criteria:</t>

<t><list style="numbers" type="1">
  <t><strong>Publicly available specification:</strong> The profile specification <strong>MUST</strong> be accessible at a stable, public URI. Specifications behind paywalls or access controls are not acceptable for registration.</t>
  <t><strong>Non-conflict with core ADL:</strong> The profile <strong>MUST NOT</strong> redefine or contradict normative requirements of the core ADL specification. Profiles <strong>MAY</strong> add new members, constrain optional members to a subset of permitted values, or require that optional core members be present.</t>
  <t><strong>Complete registration template:</strong> All required template fields <strong>MUST</strong> be present and non-empty. Incomplete registrations <strong>MUST</strong> be returned to the submitter.</t>
  <t><strong>Stable identifier:</strong> The profile URI <strong>SHOULD</strong> be dereferenceable and <strong>SHOULD</strong> remain stable over time. Ephemeral or frequently changing URIs are not acceptable.</t>
  <t><strong>Legitimate purpose:</strong> The profile <strong>SHOULD</strong> address a genuine domain or deployment need not already covered by an existing active registered profile.</t>
</list></t>

</section>
<section anchor="urn-namespace"><name>URN Namespace</name>

<t>IANA is requested to register the <spanx style="verb">adl</spanx> URN namespace identifier in the "Formal URN Namespaces" registry in accordance with <xref target="RFC8141"/>.</t>

<t><list style="symbols">
  <t><strong>Namespace Identifier:</strong> <spanx style="verb">adl</spanx></t>
  <t><strong>Version:</strong> 1</t>
  <t><strong>Date:</strong> [date of publication]</t>
  <t><strong>Registrant:</strong> See the Author's Address section of this document.</t>
  <t><strong>Purpose:</strong> The <spanx style="verb">urn:adl:</spanx> namespace provides persistent, location-independent identifiers for ADL agents, profiles, and related artifacts. These identifiers are intended for use in offline catalogs, air-gapped environments, and internal registries where network resolution is unavailable. For connected environments, HTTPS URIs (Section 6.1) are the <strong>RECOMMENDED</strong> identifier format.</t>
  <t><strong>Syntax:</strong> URNs in this namespace conform to the following structure: <spanx style="verb">urn:adl:{type}:{namespace}:{name}:{version}</spanx> where <spanx style="verb">{type}</spanx> is one of <spanx style="verb">agent</spanx> or <spanx style="verb">profile</spanx>, <spanx style="verb">{namespace}</spanx> is a lowercase alphanumeric organization identifier, <spanx style="verb">{name}</spanx> is a lowercase alphanumeric resource name with hyphens, and <spanx style="verb">{version}</spanx> is a semantic version string. The formal syntax is defined by the <spanx style="verb">adl-urn</spanx> production in Appendix D.</t>
  <t><strong>Assignment:</strong> Sub-namespace assignment under <spanx style="verb">urn:adl:profile:</spanx> is governed by the ADL Profile Registry (Section 17.2). Sub-namespace assignment under <spanx style="verb">urn:adl:agent:</spanx> is at the discretion of the namespace holder; no central registry is required for agent URNs.</t>
  <t><strong>Security and Privacy:</strong> URN identifiers in this namespace are opaque strings and carry no inherent security properties. Implementations <strong>MUST NOT</strong> infer ownership, trust, or authorization from a <spanx style="verb">urn:adl:</spanx> identifier alone. Verification of agent identity <strong>MUST</strong> rely on the mechanisms described in Section 6.3 (Cryptographic Identity) and Section 10.3 (Attestation). See Section 18 for comprehensive security considerations.</t>
</list></t>

</section>
<section anchor="well-known-uri"><name>Well-Known URI</name>

<t>IANA is requested to register the <spanx style="verb">adl-agents</spanx> well-known URI suffix in the "Well-Known URIs" registry in accordance with <xref target="RFC8615"/>.</t>

<t><list style="symbols">
  <t><strong>URI suffix:</strong> adl-agents</t>
  <t><strong>Change controller:</strong> IETF</t>
  <t><strong>Specification document:</strong> Section 6.4 of [this document]</t>
  <t><strong>Status:</strong> permanent</t>
  <t><strong>Related information:</strong> The well-known URI <spanx style="verb">https://{domain}/.well-known/adl-agents</spanx> returns a JSON document listing all ADL agents published by the domain authority. The document format is defined in Section 6.4. The resource <strong>MUST</strong> be served over HTTPS.</t>
</list></t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="document-integrity"><name>Document Integrity</name>

<t>ADL documents define agent behavior, permission grants, and security requirements. The trust model for an ADL document depends on its provenance and the integrity mechanisms applied to it. Unsigned ADL documents from untrusted or unverified sources <strong>MUST</strong> be treated as potentially malicious.</t>

<t>When a document includes a cryptographic signature in <spanx style="verb">security.attestation.signature</spanx>, implementations <strong>MUST</strong> verify the signature before acting on the document's permission or security declarations. Signature verification requires serializing the document (with the signature object removed) using JCS <xref target="RFC8785"/> to produce a canonical byte sequence, then verifying the resulting digest using the algorithm and public key declared in <spanx style="verb">cryptographic_identity</spanx>. Implementations <strong>MUST</strong> reject documents that claim to be signed but whose signature does not verify. Implementations <strong>SHOULD</strong> warn when processing signed documents whose attestation has expired (<spanx style="verb">expires_at</spanx> is in the past). An ADL document whose permissions or capabilities have been modified after signing will produce a different canonical byte sequence and fail signature verification; this is the intended behavior and provides protection against privilege escalation via document tampering.</t>

</section>
<section anchor="sensitive-data-in-adl-documents"><name>Sensitive Data in ADL Documents</name>

<t>ADL documents <strong>SHOULD NOT</strong> contain secrets, credentials, or other sensitive data in plaintext. Fields such as <spanx style="verb">system_prompt</spanx>, <spanx style="verb">provider.contact</spanx>, <spanx style="verb">metadata.authors</spanx>, and tool parameter examples may inadvertently expose confidential information if documents are logged, cached, or transmitted without adequate access controls.</t>

<t>API keys, passwords, private keys, bearer tokens, and other authentication material <strong>MUST NOT</strong> appear as literal string values in ADL documents. Where agent configuration requires secret values at runtime, implementations <strong>SHOULD</strong> use environment variable references or external secret manager URIs rather than embedding values directly. Implementations <strong>SHOULD</strong> warn when string values match patterns commonly associated with credentials (e.g., values matching the format of known API key prefixes). Organizations <strong>SHOULD</strong> subject ADL documents to the same secret-scanning controls applied to source code repositories before storage or distribution.</t>

</section>
<section anchor="template-injection"><name>Template Injection</name>

<t>The <spanx style="verb">system_prompt</spanx> member (Section 7.2) and <spanx style="verb">prompts[*].template</spanx> members (Section 8.3) support a template substitution syntax using <spanx style="verb">{{variable_name}}</spanx> placeholders. If variable values are derived from untrusted user input and substituted without sanitization, an attacker may be able to alter agent behavior by injecting malicious instructions into the rendered prompt  --  including instructions that override the intended agent behavior or cause the agent to exfiltrate information.</t>

<t>Implementations <strong>MUST</strong> sanitize template variable values before substitution. At minimum, implementations <strong>SHOULD</strong> escape or reject values that contain the template delimiter sequence <spanx style="verb">{{</spanx> or <spanx style="verb">}}</spanx>, and <strong>SHOULD</strong> apply length limits to variable values. Applications that allow end users to supply template variable values <strong>SHOULD</strong> treat such values as untrusted and apply content validation appropriate to the deployment context. Runtimes operating on agents with <spanx style="verb">data_classification.sensitivity</spanx> of <spanx style="verb">confidential</spanx> or <spanx style="verb">restricted</spanx> <strong>SHOULD</strong> log rendered prompts (after variable substitution) to enable post-incident review, subject to applicable privacy constraints.</t>

</section>
<section anchor="information-disclosure"><name>Information Disclosure</name>

<t>ADL documents may reveal infrastructure details that are useful to attackers. The <spanx style="verb">name</spanx>, <spanx style="verb">description</spanx>, and tool <spanx style="verb">description</spanx> fields may disclose the existence of internal services or system architecture. The <spanx style="verb">permissions.network.allowed_hosts</spanx> list may reveal internal hostname patterns, private IP ranges, or internal service naming conventions. The <spanx style="verb">permissions.filesystem.allowed_paths</spanx> list may reveal sensitive directory structures. The <spanx style="verb">provider.url</spanx>, <spanx style="verb">metadata.documentation</spanx>, and <spanx style="verb">metadata.repository</spanx> fields may reference internal systems not intended for public visibility.</t>

<t>ADL documents intended for public distribution <strong>SHOULD</strong> be reviewed to remove or generalize infrastructure-specific information. Host patterns <strong>SHOULD</strong> use registered domain names rather than IP addresses or internal hostnames. Path patterns <strong>SHOULD</strong> avoid exposing sensitive directory names. Documents with <spanx style="verb">data_classification.sensitivity</spanx> of <spanx style="verb">confidential</spanx> or <spanx style="verb">restricted</spanx> <strong>SHOULD</strong> only be distributed to parties with appropriate access authorization and <strong>SHOULD NOT</strong> be published to public registries without thorough review.</t>

</section>
<section anchor="resource-exhaustion"><name>Resource Exhaustion</name>

<t>Implementations that parse and validate ADL documents are susceptible to resource exhaustion from adversarially crafted inputs. Specific attack vectors include: deeply nested JSON Schema in <spanx style="verb">parameters</spanx> and <spanx style="verb">returns</spanx> members (including circular <spanx style="verb">$ref</spanx> chains or exponentially expanding <spanx style="verb">allOf</spanx>/<spanx style="verb">anyOf</spanx> combinators); documents with very large numbers of tools, resources, or prompts; and documents with excessively long string values in <spanx style="verb">system_prompt</spanx>, description fields, or pattern arrays.</t>

<t>Implementations <strong>SHOULD</strong> enforce and document limits on: total document size (recommended maximum: 1 MB); JSON nesting depth (recommended maximum: 32 levels); number of entries in <spanx style="verb">tools</spanx>, <spanx style="verb">resources</spanx>, and <spanx style="verb">prompts</spanx> arrays (recommended maximum: 1000 each); string length for <spanx style="verb">system_prompt</spanx> and description fields (recommended maximum: 1 MB per field); and number of entries in any permission pattern array (recommended maximum: 500 patterns per domain). Implementations <strong>SHOULD</strong> terminate processing with an appropriate error code when any of these limits is exceeded rather than continuing to consume resources.</t>

</section>
<section anchor="pattern-matching-abuse"><name>Pattern Matching Abuse</name>

<t>The permission pattern syntax (Section 4.4) governs access grants across network, filesystem, environment variable, and execution domains. Overly permissive patterns undermine the deny-by-default permission model; patterns that are expensive to evaluate can enable denial-of-service.</t>

<t>A bare <spanx style="verb">*</spanx> as the sole value of an entry in <spanx style="verb">allowed_hosts</spanx> grants access to all hostnames and effectively disables network permission enforcement. Implementations <strong>MUST</strong> warn when a bare <spanx style="verb">*</spanx> wildcard is used in any security-sensitive permission pattern, including <spanx style="verb">allowed_hosts</spanx> and <spanx style="verb">allowed_variables</spanx>. Implementations <strong>SHOULD</strong> require explicit user acknowledgment  --  or refuse to deploy  --  agents that use bare <spanx style="verb">*</spanx> patterns in these domains. Pattern evaluation <strong>SHOULD</strong> be bounded in time and space: implementations that use backtracking pattern matchers <strong>SHOULD</strong> reject or normalize patterns that would require exponential backtracking (e.g., consecutive wildcards such as <spanx style="verb">***</spanx>). The <spanx style="verb">**</spanx> multi-segment wildcard <strong>MUST NOT</strong> appear in host, environment, or command patterns, and implementations <strong>MUST</strong> reject documents in which it does.</t>

</section>
<section anchor="uri-reference-attacks-ssrf"><name>URI Reference Attacks (SSRF)</name>

<t>Multiple ADL fields accept URI values: <spanx style="verb">$schema</spanx>, <spanx style="verb">id</spanx>, <spanx style="verb">provider.url</spanx>, <spanx style="verb">metadata.documentation</spanx>, <spanx style="verb">metadata.repository</spanx>, <spanx style="verb">resource.uri</spanx>, <spanx style="verb">tool.annotations.openapi_ref</spanx>, <spanx style="verb">lifecycle.successor</spanx>, <spanx style="verb">security.attestation.issuer</spanx>, and others defined by profiles. If an implementation automatically dereferences these URIs when processing a document from an untrusted source, an attacker may cause the implementation to issue requests to arbitrary endpoints, including internal services not reachable from the public internet  --  a class of vulnerability known as Server-Side Request Forgery (SSRF).</t>

<t>Implementations <strong>MUST NOT</strong> automatically dereference URI values from ADL documents received from untrusted sources without explicit operator or user consent. Implementations that fetch external schema documents (e.g., via <spanx style="verb">$schema</spanx>) for validation purposes <strong>SHOULD</strong> use an allowlist of trusted schema hosts and <strong>MUST NOT</strong> follow redirects that leave the trusted set. When fetching <spanx style="verb">openapi_ref</spanx> documents for tool description or validation, implementations <strong>SHOULD</strong> verify that the target URI matches a pre-approved allowlist. Implementations <strong>SHOULD</strong> validate that URI values in ADL documents conform to <xref target="RFC3986"/> and <strong>SHOULD</strong> reject URIs with schemes other than <spanx style="verb">https</spanx>, <spanx style="verb">http</spanx>, or <spanx style="verb">urn</spanx> unless the deployment context explicitly allows them.</t>

</section>
<section anchor="canonicalization-attacks"><name>Canonicalization Attacks</name>

<t>ADL supports document integrity verification via cryptographic signatures using JCS canonicalization <xref target="RFC8785"/>. The security of this mechanism depends on all conforming implementations producing identical canonical byte sequences for the same logical document. Subtle differences in JCS implementations  --  such as incorrect handling of Unicode escape sequences, floating-point number serialization, or object member ordering  --  could cause a legitimate signature to fail verification, or, more critically, allow an attacker to construct a document where different implementations produce different canonical forms, potentially enabling a signature verification bypass.</t>

<t>Implementations <strong>MUST</strong> use a conformant JCS <xref target="RFC8785"/> implementation for both signing and verification. Implementations <strong>SHOULD</strong> validate their JCS implementation against the test vectors provided in RFC 8785 before use in a production environment. Implementations <strong>MUST NOT</strong> verify signatures against non-canonical serializations such as pretty-printed JSON or YAML. Implementations that process ADL documents containing IEEE 754 floating-point values in signed content <strong>SHOULD</strong> be aware that platform-specific floating-point representation differences may affect canonicalization and <strong>SHOULD</strong> avoid floating-point values in fields that will be signed when possible.</t>

</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>ADL documents may contain personal information subject to applicable privacy regulations. The <spanx style="verb">provider.contact</spanx> field (Section 6.2) contains a contact email address. The <spanx style="verb">metadata.authors</spanx> array (Section 12.1) may contain author names, email addresses, and URLs. The <spanx style="verb">system_prompt</spanx> member may contain information about intended user roles, user populations, or organizational context. When ADL documents are published to public registries or shared broadly, this information becomes publicly accessible.</t>

<t>Publishers <strong>SHOULD</strong> review ADL documents for personally identifiable information (PII) before public distribution and <strong>SHOULD</strong> use organizational or role-based contact addresses rather than personal email addresses. Implementations that log ADL document contents for debugging or auditing <strong>SHOULD</strong> redact or omit <spanx style="verb">provider.contact</spanx>, <spanx style="verb">metadata.authors</spanx>, and <spanx style="verb">system_prompt</spanx> fields from logs unless there is a documented operational requirement to retain them. Users <strong>SHOULD</strong> be informed when their ADL documents are transmitted to third-party services for validation, indexing, or registry queries.</t>

</section>
<section anchor="privilege-escalation"><name>Privilege Escalation</name>

<t>An ADL document that has been modified  --  whether by a malicious actor during transmission or by a compromised storage or distribution system  --  could grant an agent permissions or capabilities beyond those that were reviewed and approved for deployment. This risk is the primary motivator for the integrity mechanisms described in Section 10.3.</t>

<t>Implementations <strong>SHOULD</strong> verify document integrity (Section 10.3) before enforcing the permissions declared in a document, particularly when documents are retrieved from network locations, shared storage systems, or public registries. Runtimes that cannot verify document integrity <strong>SHOULD</strong> apply compensating controls  --  such as mandatory human review  --  before deploying agents that declare elevated permissions or sensitive data access. When a document's <spanx style="verb">data_classification.sensitivity</spanx> is <spanx style="verb">confidential</spanx> or <spanx style="verb">restricted</spanx>, runtimes <strong>SHOULD</strong> require a verified signature or a verified supply chain (e.g., document retrieved from a trusted registry over an authenticated and integrity-protected channel) before provisioning. Organizations <strong>SHOULD</strong> maintain an inventory of approved ADL documents along with their expected signatures or cryptographic digests, and <strong>SHOULD</strong> treat any discrepancy between the recorded and observed document as a potential security incident.</t>

</section>
<section anchor="cross-origin-and-supply-chain-concerns"><name>Cross-Origin and Supply Chain Concerns</name>

<t>ADL documents may be fetched from remote sources: registries, source control systems, artifact stores, or agent marketplaces. A document tampered with in transit or at the origin could cause a runtime to provision a malicious agent without the operator's knowledge.</t>

<t>ADL documents <strong>SHOULD</strong> be fetched over authenticated, integrity-protected channels (HTTPS with full certificate validation). Implementations <strong>SHOULD</strong> verify document signatures (Section 10.3) when documents are retrieved from remote or third-party sources. Implementations <strong>SHOULD</strong> validate that the signing identity declared in <spanx style="verb">cryptographic_identity</spanx> matches an expected, trusted identity for the document's declared <spanx style="verb">provider</spanx>.</t>

<t>Supply chain integrity requires attention at every reference boundary: the ADL document itself, referenced OpenAPI specifications (<spanx style="verb">openapi_ref</spanx>), and external JSON Schemas (<spanx style="verb">$schema</spanx>). Implementations that automatically resolve external references during provisioning <strong>SHOULD</strong> pin or verify all such references. When accepting ADL documents from third-party sources, implementations <strong>SHOULD</strong> apply an allowlist of trusted providers (based on <spanx style="verb">provider.name</spanx> or <spanx style="verb">id</spanx> URI authority), verify attestation signatures from trusted issuers, and treat documents from unverified sources with the same caution applied to untrusted executable code.</t>

</section>
<section anchor="permission-model-and-defense-in-depth"><name>Permission Model and Defense in Depth</name>

<t>The deny-by-default permission model (Section 9.1) is a foundational security property of ADL: an agent can only access resources and capabilities that its ADL document explicitly permits. However, the effectiveness of this model depends entirely on the runtime correctly enforcing declared permissions. No permission model is a substitute for defense in depth.</t>

<t>Runtimes <strong>MUST</strong> enforce declared permissions and <strong>MUST NOT</strong> allow agents to exceed those permissions under any circumstances, including error conditions or fallback behaviors. Runtimes that cannot enforce a specific permission domain (e.g., because the underlying platform lacks the required isolation primitives) <strong>MUST</strong> warn users before execution and <strong>SHOULD</strong> refuse to execute the agent unless the user explicitly acknowledges the limitation.</t>

<t>Beyond permission enforcement, runtimes <strong>SHOULD</strong> monitor agent behavior during execution: logging tool invocations, recording network destinations contacted, and alerting on anomalous activity such as repeated attempts to access resources outside declared permissions. The ADL document represents intended access boundaries at definition time; runtime monitoring ensures actual behavior remains within those boundaries in production.</t>

<t>Runtimes <strong>SHOULD</strong> validate tool inputs and outputs against the declared JSON Schema (Section 8.1) before passing them to or from the agent. Malformed responses from external tool implementations could inject unexpected data into agent reasoning; runtime-level schema validation provides a defense against malfunctioning or malicious tool backends. Tools annotated with <spanx style="verb">requires_confirmation: true</spanx> <strong>MUST</strong> receive explicit user confirmation before invocation; runtimes <strong>MUST NOT</strong> invoke such tools autonomously regardless of other configuration.</t>

<t>Lifecycle status <strong>MUST</strong> be enforced as a security boundary. Runtimes <strong>MUST NOT</strong> provision or execute agents with <spanx style="verb">lifecycle.status</spanx> of <spanx style="verb">retired</spanx>. Retired agents may have revoked credentials, unpatched vulnerabilities, or stale permission configurations. Agents with <spanx style="verb">lifecycle.status</spanx> of <spanx style="verb">deprecated</spanx> <strong>SHOULD</strong> trigger warnings to operators, who <strong>SHOULD</strong> migrate to the agent identified by <spanx style="verb">lifecycle.successor</spanx> before the <spanx style="verb">sunset_date</spanx> is reached.</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC3986">
  <front>
    <title>Uniform Resource Identifier (URI): Generic Syntax</title>
    <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
    <author fullname="R. Fielding" initials="R." surname="Fielding"/>
    <author fullname="L. Masinter" initials="L." surname="Masinter"/>
    <date month="January" year="2005"/>
    <abstract>
      <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="66"/>
  <seriesInfo name="RFC" value="3986"/>
  <seriesInfo name="DOI" value="10.17487/RFC3986"/>
</reference>
<reference anchor="RFC6838">
  <front>
    <title>Media Type Specifications and Registration Procedures</title>
    <author fullname="N. Freed" initials="N." surname="Freed"/>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <author fullname="T. Hansen" initials="T." surname="Hansen"/>
    <date month="January" year="2013"/>
    <abstract>
      <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="13"/>
  <seriesInfo name="RFC" value="6838"/>
  <seriesInfo name="DOI" value="10.17487/RFC6838"/>
</reference>
<reference anchor="RFC6901">
  <front>
    <title>JavaScript Object Notation (JSON) Pointer</title>
    <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
    <author fullname="K. Zyp" initials="K." surname="Zyp"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <date month="April" year="2013"/>
    <abstract>
      <t>JSON Pointer defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6901"/>
  <seriesInfo name="DOI" value="10.17487/RFC6901"/>
</reference>
<reference anchor="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>
<reference anchor="RFC8141">
  <front>
    <title>Uniform Resource Names (URNs)</title>
    <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="April" year="2017"/>
    <abstract>
      <t>A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that is assigned under the "urn" URI scheme and a particular URN namespace, with the intent that the URN will be a persistent, location-independent resource identifier. With regard to URN syntax, this document defines the canonical syntax for URNs (in a way that is consistent with URI syntax), specifies methods for determining URN-equivalence, and discusses URI conformance. With regard to URN namespaces, this document specifies a method for defining a URN namespace and associating it with a namespace identifier, and it describes procedures for registering namespace identifiers with the Internet Assigned Numbers Authority (IANA). This document obsoletes both RFCs 2141 and 3406.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8141"/>
  <seriesInfo name="DOI" value="10.17487/RFC8141"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
<reference anchor="RFC8615">
  <front>
    <title>Well-Known Uniform Resource Identifiers (URIs)</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
      <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8615"/>
  <seriesInfo name="DOI" value="10.17487/RFC8615"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC8785">
  <front>
    <title>JSON Canonicalization Scheme (JCS)</title>
    <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
    <author fullname="B. Jordan" initials="B." surname="Jordan"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <date month="June" year="2020"/>
    <abstract>
      <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
      <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8785"/>
  <seriesInfo name="DOI" value="10.17487/RFC8785"/>
</reference>

<reference anchor="A2A" target="https://a2a-protocol.org/specification">
  <front>
    <title>Agent-to-Agent Protocol Specification</title>
    <author >
      <organization>A2A Protocol Working Group</organization>
    </author>
    <date year="2025"/>
  </front>
</reference>
<reference anchor="JSON-SCHEMA" target="https://json-schema.org/draft/2020-12/json-schema-core">
  <front>
    <title>JSON Schema: A Media Type for Describing JSON Documents</title>
    <author initials="A." surname="Wright" fullname="Austin Wright">
      <organization></organization>
    </author>
    <date year="2020"/>
  </front>
</reference>
<reference anchor="MCP" target="https://modelcontextprotocol.io/specification">
  <front>
    <title>Model Context Protocol Specification</title>
    <author >
      <organization>Anthropic</organization>
    </author>
    <date year="2024"/>
  </front>
</reference>
<reference anchor="OPENAPI" target="https://spec.openapis.org/oas/v3.1.0">
  <front>
    <title>OpenAPI Specification</title>
    <author >
      <organization>OpenAPI Initiative</organization>
    </author>
    <date year="2024"/>
  </front>
</reference>
<reference anchor="W3C.DID" target="https://www.w3.org/TR/did-core/">
  <front>
    <title>Decentralized Identifiers (DIDs) v1.0</title>
    <author initials="M." surname="Sporny" fullname="Manu Sporny">
      <organization></organization>
    </author>
    <date year="2022"/>
  </front>
</reference>
<reference anchor="W3C.VC" target="https://www.w3.org/TR/vc-data-model/">
  <front>
    <title>Verifiable Credentials Data Model v1.1</title>
    <author initials="M." surname="Sporny" fullname="Manu Sporny">
      <organization></organization>
    </author>
    <date year="2022"/>
  </front>
</reference>


    </references>

</references>


<?line 1371?>

<section anchor="json-schema"><name>JSON Schema</name>

<t>The normative JSON Schema for ADL is available at <spanx style="verb">https://adl-spec.org/0.1/schema.json</spanx> (JSON Schema Draft 2020-12). A minimal required-fields schema is provided in <eref target="./schema.json">schema.json</eref> in this directory.</t>

</section>
<section anchor="examples"><name>Examples</name>

<t>See the <eref target="./examples/">examples/</eref> directory:</t>

<t><list style="symbols">
  <t><strong>Minimal:</strong> <eref target="./examples/minimal.yaml">minimal.yaml</eref></t>
  <t><strong>Agent with tools:</strong> <eref target="./examples/with-tools.yaml">with-tools.yaml</eref></t>
  <t><strong>Production agent:</strong> <eref target="./examples/production.yaml">production.yaml</eref></t>
</list></t>

</section>
<section anchor="profiles-1"><name>Profiles</name>

<t>ADL profiles are maintained in the <eref target="../../profiles/">profiles/</eref> directory. Each profile is versioned independently and declares compatibility with ADL versions.</t>

<section anchor="available-profiles"><name>Available Profiles</name>

<texttable>
      <ttcol align='left'>Profile</ttcol>
      <ttcol align='left'>Identifier</ttcol>
      <ttcol align='left'>Status</ttcol>
      <c><eref target="../../profiles/governance/overview">Governance</eref></c>
      <c><spanx style="verb">urn:adl:profile:governance:1.0</spanx></c>
      <c>Draft</c>
      <c><eref target="../../profiles/portfolio/overview">Portfolio</eref></c>
      <c><spanx style="verb">urn:adl:profile:portfolio:1.0</spanx></c>
      <c>Draft</c>
      <c><eref target="../../profiles/healthcare/overview">Healthcare</eref></c>
      <c><spanx style="verb">urn:adl:profile:healthcare:1.0</spanx></c>
      <c>Draft</c>
      <c><eref target="../../profiles/financial/overview">Financial</eref></c>
      <c><spanx style="verb">urn:adl:profile:financial:1.0</spanx></c>
      <c>Draft</c>
</texttable>

<t>See the <eref target="../../profiles/">profiles/</eref> directory for the full profile index and contribution guidelines.</t>

</section>
</section>
<section anchor="abnf-grammar"><name>ABNF Grammar</name>

<t>This appendix defines formal ABNF grammar productions (RFC 5234 / RFC 7405) for syntactic constructs specified in this document. All productions use ASCII character references consistent with RFC 5234, Appendix B. The core ABNF rules <spanx style="verb">ALPHA</spanx> (letters), <spanx style="verb">DIGIT</spanx> (decimal digits), and <spanx style="verb">VCHAR</spanx> (visible ASCII characters) are defined in RFC 5234 Section 6 (B.1).</t>

<t>&lt;CODE BEGINS&gt;
```abnf
; Semantic Versioning format (Sections 5.1, 5.5)
semver          = 1<em>DIGIT "." 1</em>DIGIT "." 1*DIGIT</t>

<t>; Tool name (Section 8.1)
; All alpha characters MUST be lowercase; satisfies ^[a-z][a-z0-9<em>]*$
tool-name       = lc-alpha *( lc-alpha / DIGIT / "</em>" )
lc-alpha        = %x61-7A          ; a-z (lowercase letters only)</t>

<t>; Extension member name (Section 4.3)
; "x_" prefix followed by a namespace identifier
ext-member-name = "x_" ns-id
ns-id           = 1*( lc-alpha / DIGIT / "_" )</t>

<t>; Template variable (Sections 7.2, 8.3)
; Used in system_prompt templates and prompt templates
template-var    = 2%x7B var-name 2%x7D
var-name        = ALPHA *( ALPHA / DIGIT / "_" )
                  ; First character MUST be a letter (upper or lowercase)</t>

<t>; Tag (Section 12.5)
; Lowercase alphanumeric characters and hyphens
tag             = 1*( lc-alpha / DIGIT / "-" )</t>

<t>; Pattern syntax (Section 4.4)
; An ADL pattern consists of literal characters and optional wildcard tokens
pattern         = 1<em>pattern-element
pattern-element = multi-wildcard / single-wildcard / literal-chars
multi-wildcard  = "**"
                  ; Valid only in filesystem path patterns (Section 9.3)
                  ; MUST NOT appear in host, env-variable, or command patterns
single-wildcard = "</em>"
                  ; Matches within one segment; does not cross "." in host
                  ; patterns or "/" in filesystem path patterns
literal-chars   = 1<em>literal-char
literal-char    = %x21-29 / %x2B-7E
                  ; Printable ASCII except "</em>" (%x2A)
                  ; "/" (%x2F) carries segment-boundary meaning in path patterns
                  ; "." (%x2E) carries segment-boundary meaning in host patterns
```
&lt;CODE ENDS&gt;</t>

<section anchor="cross-reference-summary"><name>Cross-Reference Summary</name>

<texttable>
      <ttcol align='left'>Production</ttcol>
      <ttcol align='left'>Normative Section</ttcol>
      <ttcol align='left'>Usage</ttcol>
      <c><spanx style="verb">semver</spanx></c>
      <c>5.1, 5.5</c>
      <c><spanx style="verb">adl_spec</spanx> and <spanx style="verb">version</spanx> values</c>
      <c><spanx style="verb">tool-name</spanx></c>
      <c>8.1</c>
      <c>Tool <spanx style="verb">name</spanx> values</c>
      <c><spanx style="verb">ext-member-name</spanx></c>
      <c>4.3</c>
      <c>Custom extension member names</c>
      <c><spanx style="verb">template-var</spanx></c>
      <c>7.2, 8.3</c>
      <c><spanx style="verb">{{variable}}</spanx> references in templates</c>
      <c><spanx style="verb">tag</spanx></c>
      <c>12.5</c>
      <c><spanx style="verb">metadata.tags</spanx> array items</c>
      <c><spanx style="verb">pattern</spanx></c>
      <c>4.4, 9.2-9.5</c>
      <c>Permission domain pattern strings</c>
</texttable>

</section>
</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>TBD</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

