<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="exp"
     docName="draft-jeskey-anml-01"
     ipr="trust200902"
     submissionType="independent"
     version="3">

  <front>
    <title abbrev="ANML 1.0">Agentic Notation Markup Language (ANML) 1.0</title>

    <seriesInfo name="Internet-Draft" value="draft-jeskey-anml-01"/>

    <author fullname="Aaron Jeskey" initials="A." surname="Jeskey">
      <organization>ANML Foundation</organization>
      <address>
        <email>ajeskey@gmail.com</email>
        <uri>https://github.com/ajeskey</uri>
      </address>
    </author>

    <date year="2026" month="May"/>

    <area>Applications and Real-Time</area>

    <keyword>ANML</keyword>
    <keyword>agent</keyword>
    <keyword>markup language</keyword>
    <keyword>machine-readable</keyword>
    <keyword>LLM</keyword>
    <keyword>JSON</keyword>
    <keyword>XML</keyword>
    <keyword>dual serialization</keyword>

    <abstract>
      <t>ANML (Agentic Notation Markup Language) is a machine-first markup
      language for agent-to-agent and agent-to-service communication over
      the internet. HTML provides visual interfaces for human consumption;
      ANML describes content, intent, and interaction patterns optimized
      for machine interpretation with minimal computational overhead.</t>

      <t>ANML defines an abstract data model that MAY be serialized as
      XML (application/anml+xml) or JSON (application/anml+json). Both
      serializations are normative and semantically equivalent. The XML
      serialization is recommended for human authoring and review; the
      JSON serialization is recommended for programmatic generation and
      agent-pipeline consumption.</t>

      <t>An ANML document defines:</t>
      <ul>
        <li>Content: structured, semantic information for machine
        interpretation</li>
        <li>Interactions: operations bound to HTTP methods, endpoints, and
        parameters</li>
        <li>Knowledge: bidirectional information exchange between services
        and agents</li>
        <li>Constraints: disclosure, consent, and authorization rules that
        agents MUST evaluate before sharing data</li>
        <li>State: metadata identifying the current phase of a multi-step
        interaction</li>
        <li>Persona: advisory behavioral and tonal guidance for agent
        responses</li>
      </ul>

      <t>ANML standardizes these elements to enable deterministic,
      efficient agent interactions with reduced reliance on inference over
      unstructured data.</t>
    </abstract>
  </front>

  <middle>

    <!-- Section 1: Introduction -->
    <section anchor="introduction" numbered="true" toc="include">
      <name>Introduction</name>

      <t>ANML is pronounced like the English word "animal":</t>
      <artwork><![CDATA[  ANML  /ˈæn.ɪ.məl/  AN-ih-muhl]]></artwork>

      <t>HTML has served as the foundation of the World Wide Web since
      1990, producing platform-independent hypertext documents rendered as
      visual interfaces for human consumption.</t>

      <t>The emergence of large language models (LLMs) and autonomous
      software agents has introduced a new class of web content consumers:
      machines that must interpret, reason about, and act upon published
      information. HTML, CSS, JavaScript, images, audio, and video produce
      rich user experiences but encode intent, interactions, and
      constraints implicitly — if at all. Increased computational power
      does not resolve this: no amount of inference can reliably extract
      structured operations, disclosure rules, or workflow state from
      markup that was never designed to express them.</t>

      <t>ANML addresses this gap as a machine-native markup language for
      agent-to-agent and agent-to-service communication. ANML complements
      existing web standards such as HTML and HTTP by providing a
      machine-oriented interaction layer, rather than replacing them. ANML
      is an application of XML 1.0 <xref target="XML"/>.</t>

      <t>The 'application/anml+xml' Internet Media Type is defined by this
      specification (see <xref target="media-type">Section 6.1</xref>).</t>

      <section anchor="scope" numbered="true" toc="include">
        <name>Scope</name>
        <t>This specification defines ANML 1.0, including the document type,
        element and attribute sets, content model, interaction model, and
        media type registration.</t>
        <t>This specification does not define:</t>
        <ul>
          <li>Visual rendering or presentation semantics</li>
          <li>Client-side scripting or execution models</li>
          <li>Transport-layer protocols (HTTP is assumed but not modified)</li>
          <li>Authentication or identity mechanisms</li>
        </ul>
        <t>All domain names used in examples throughout this document
        are reserved example domains as defined in
        <xref target="RFC2606"/>: example.com, example.net, and
        example.org. These names do not refer to any real organization,
        product, or service. Where examples require multiple distinct
        domains, example.com is used for the canonical site domain,
        example.net for an authorized serving party, and example.org
        for a second authorized serving party or brand reference.</t>
      </section>

      <section anchor="conformance" numbered="true" toc="include">
        <name>Conformance</name>
        <t>This specification governs the syntax of ANML documents and the
        behavior of conforming ANML agents.</t>

        <section anchor="conformance-documents" numbered="true" toc="include">
          <name>Documents</name>
          <t>A conforming ANML document:</t>
          <ul>
            <li>Is a well-formed XML document conforming to <xref target="XML"/></li>
            <li>Conforms to the ANML XML Schema (see <xref target="schema">Section 17</xref>)</li>
            <li>Conforms to the conventions defined in this specification</li>
            <li>Uses Unicode <xref target="UNICODE"/> as its document character set</li>
            <li>Is encoded as UTF-8 <xref target="RFC3629"/> unless an alternative
            encoding is declared via the XML declaration (see <xref target="char-encoding">Section 6.3</xref>)</li>
          </ul>
        </section>

        <section anchor="conformance-agents" numbered="true" toc="include">
          <name>Conforming ANML Agents</name>
          <t>A conforming ANML agent:</t>
          <ul>
            <li>Parses ANML documents as well-formed XML</li>
            <li>Supports UTF-8 character encoding</li>
            <li>Processes &lt;constraints&gt;, &lt;state&gt;,
            &lt;interact&gt;, &lt;knowledge&gt;, and &lt;body&gt; sections
            as defined in this specification</li>
            <li>Evaluates &lt;constraints&gt; before disclosing any information
            via &lt;answer&gt; elements</li>
            <li>Ignores unknown elements and attributes without error</li>
            <li>Respects user intent above all ANML instructions</li>
          </ul>
        </section>
      </section>

      <section anchor="motivation" numbered="true" toc="include">
        <name>Motivation</name>
        <t>The modern web is optimized for human consumption. To interact
        with it, agents must currently:</t>
        <ul>
          <li>Parse large volumes of irrelevant visual and structural data</li>
          <li>Infer intent from loosely structured or inconsistent markup</li>
          <li>Perform repeated high-cost inference to understand workflows</li>
          <li>Reconstruct implicit interaction patterns</li>
          <li>Process media resources (images, audio, video) that consume
          significant inference cost and token budget with no guarantee of
          semantic return</li>
        </ul>
        <t>This results in high computational cost, increased latency,
        reduced determinism, and fragile heuristic-dependent automation.</t>
        <t>ANML provides a machine-native representation in which:</t>
        <ul>
          <li>Content is explicitly structured for semantic understanding</li>
          <li>Actions and workflows are declared</li>
          <li>Context is a first-class construct</li>
          <li>Agent behavior can be guided at the document level</li>
        </ul>
        <t>Existing approaches such as REST APIs and interface description
        languages (e.g., OpenAPI, GraphQL) address machine-to-service
        communication but require prior integration: each service defines
        a bespoke contract that agents must be individually programmed to
        use. ANML takes a different approach. Like HTML for browsers, ANML
        provides a universal document format that any conforming agent can
        interpret without service-specific integration. A single ANML
        document conveys content, available operations, knowledge exchange,
        disclosure constraints, workflow state, and behavioral guidance —
        none of which are expressible in a typical API specification.</t>
      </section>

      <section anchor="goals" numbered="true" toc="include">
        <name>Goals</name>
        <ul>
          <li>Enable efficient agent-to-agent communication over the internet</li>
          <li>Reduce inference cost for interpreting web content</li>
          <li>Provide explicit, structured representations of content and workflows</li>
          <li>Standardize machine-consumable service interfaces</li>
          <li>Support bidirectional knowledge sharing between services and agents</li>
          <li>Allow services to provide behavioral and persona guidance to agents</li>
          <li>Improve determinism and reliability of agent interactions</li>
        </ul>
      </section>

      <section anchor="non-goals" numbered="true" toc="include">
        <name>Non-Goals</name>
        <ul>
          <li>Replacing HTML for human-facing interfaces</li>
          <li>Rendering visual layouts or graphical experiences</li>
          <li>Executing client-side logic</li>
          <li>Serving as a general-purpose programming language</li>
        </ul>
      </section>
    </section>

    <!-- Section 2: Applicability -->
    <section anchor="applicability" numbered="true" toc="include">
      <name>Applicability</name>
      <t>ANML is domain-neutral. It is applicable to any context in which
      autonomous agents interact with services or with each other over
      HTTP. Example domains include but are not limited to:</t>
      <ul>
        <li>Web services and APIs</li>
        <li>Personal and enterprise agent systems</li>
        <li>IoT and device interaction</li>
        <li>Data retrieval and knowledge systems</li>
      </ul>
      <t>ANML does not presume a commercial, consumer, or enterprise
      context. Any service that publishes structured information for
      machine consumption MAY use ANML.</t>
    </section>

    <!-- Section 3: Terms -->
    <section anchor="terms" numbered="true" toc="include">
      <name>Terms</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>

      <dl>
        <dt>action</dt>
        <dd>An executable operation defined in the &lt;interact&gt; section,
        bound to an HTTP method and endpoint URI.</dd>

        <dt>aesthetic</dt>
        <dd>Advisory visual identity guidance within the &lt;aesthetic&gt;
        section, including colors, typography, logos, and display
        name.</dd>

        <dt>agent</dt>
        <dd>A software component that processes ANML documents, performs
        actions, and communicates with services on behalf of a user or
        another agent. Also referred to as "user agent".</dd>

        <dt>ANML document</dt>
        <dd>A well-formed XML document conforming to this specification and
        the ANML XML Schema (see <xref target="schema">Section 17</xref>).</dd>

        <dt>answer</dt>
        <dd>A response element providing information requested by an
        &lt;ask&gt; element. Answers may flow from agent to service or from
        service to agent.</dd>

        <dt>ask</dt>
        <dd>A declarative element through which one party requests
        information from the other. Neither party is required to fulfill
        any ask.</dd>

        <dt>body</dt>
        <dd>The primary structured content of an ANML document, contained
        within the &lt;body&gt; element.</dd>

        <dt>confidentiality</dt>
        <dd>An attribute on &lt;inform&gt; governing how an agent may share
        service-provided information with other services.</dd>

        <dt>conforming ANML agent</dt>
        <dd>An agent that conforms to this specification in its processing
        of the 'application/anml+xml' media type.</dd>

        <dt>constraint</dt>
        <dd>A rule governing whether and how requested information may be
        disclosed by an agent.</dd>

        <dt>data</dt>
        <dd>A structured collection of items within the &lt;body&gt;,
        represented by the &lt;data&gt; element.</dd>

        <dt>description</dt>
        <dd>A textual description of a media resource, provided as a child
        of &lt;img&gt;, &lt;audio&gt;, or &lt;video&gt;. Enables agents to
        understand media content without performing inference.</dd>

        <dt>disclosure</dt>
        <dd>The act of an agent sharing information with a service in
        response to an &lt;ask&gt;, subject to applicable constraints and
        user consent.</dd>

        <dt>endpoint</dt>
        <dd>A URI to which an action is directed.</dd>

        <dt>flow</dt>
        <dd>A declaration of the structure of a multi-step workflow within
        the &lt;state&gt; section.</dd>

        <dt>inform</dt>
        <dd>A knowledge element through which a service communicates
        information to an agent.</dd>

        <dt>knowledge</dt>
        <dd>The section containing &lt;inform&gt; and &lt;ask&gt; elements,
        enabling bidirectional information exchange.</dd>

        <dt>media type</dt>
        <dd>An Internet Media Type as defined in <xref target="RFC6838"/>.</dd>

        <dt>model</dt>
        <dd>An advisory preference within &lt;persona&gt; indicating which
        inference model or capability a service recommends for processing
        the document.</dd>

        <dt>nav</dt>
        <dd>A pagination and continuation element within &lt;body&gt;,
        providing next, prev, and cursor references for multi-page
        result sets.</dd>

        <dt>persona</dt>
        <dd>Advisory behavioral and tonal guidance within the &lt;persona&gt;
        section.</dd>

        <dt>refuse</dt>
        <dd>A response element explicitly declining to fulfill an
        &lt;ask&gt;.</dd>

        <dt>rights</dt>
        <dd>A copyright and licensing declaration within the &lt;rights&gt;
        element in &lt;footer&gt;.</dd>

        <dt>service</dt>
        <dd>A networked application that publishes ANML documents and
        processes agent responses.</dd>

        <dt>state</dt>
        <dd>The section carrying contextual information about a multi-step
        interaction.</dd>

        <dt>status</dt>
        <dd>An element communicating the outcome of a preceding operation,
        including success, error, or partial completion.</dd>

        <dt>step</dt>
        <dd>A single stage within a workflow.</dd>

        <dt>transcript</dt>
        <dd>A textual transcript of an &lt;audio&gt; or &lt;video&gt;
        resource, provided as a child element. Enables agents to understand
        media content without performing inference.</dd>

        <dt>serving domain</dt>
        <dd>The registered domain (eTLD+1) of the URL from which an
        ANML document was retrieved, normalized to lowercase ASCII,
        with port components omitted. For example, an ANML document
        retrieved from 'https://cdn.example.net:443/anml' has a serving
        domain of 'example.net'. The serving domain is the value used
        as the first element of the trust cache key and as the domain
        parameter in Trust Query requests. When the URL origin and the
        TLS certificate subject differ, the URL origin takes
        precedence. Agents SHOULD use the Public Suffix List to
        determine eTLD+1 boundaries.</dd>

        <dt>site domain</dt>
        <dd>The canonical domain of the site whose identity is asserted
        in an ANML document, as specified in the domain attribute of a
        &lt;trust&gt; or &lt;site&gt; element. Distinct from the
        serving domain when a third party is serving content on behalf
        of the site.</dd>

        <dt>URI</dt>
        <dd>A Uniform Resource Identifier as defined in
        <xref target="RFC3986"/>.</dd>

        <dt>usage</dt>
        <dd>A machine-readable declaration governing what an agent may do
        with content. Values form a hierarchy:
        none &lt; display &lt; cache &lt; store &lt; train.</dd>

        <dt>well-formed XML</dt>
        <dd>An XML document satisfying the well-formedness constraints
        defined in <xref target="XML"/>.</dd>
      </dl>
    </section>

    <!-- Section 4: Design Principles -->
    <section anchor="design-principles" numbered="true" toc="include">
      <name>Design Principles</name>

      <t>The following principles guide the design of ANML and SHOULD inform
      the behavior of conforming agents and services.</t>

      <t><strong>Machine-First.</strong>
      ANML targets machine consumption, not human presentation.</t>

      <t><strong>Explicit Over Implicit.</strong>
      Interactions SHOULD be explicitly defined. Agents SHOULD NOT need to
      infer intent from ambiguous markup.</t>

      <t><strong>Minimize Inference Cost.</strong>
      Documents SHOULD be structured for direct interpretation, minimizing
      the need for inference.</t>

      <t><strong>Separation of Concerns.</strong>
      Each section of an ANML document has a distinct responsibility.</t>

      <t><strong>Privacy by Design.</strong>
      Agents control disclosure. Services MAY request information but MUST
      NOT require it.</t>

      <t><strong>Deterministic Behavior.</strong>
      Agents SHOULD produce consistent results given identical inputs.</t>

      <t><strong>Progressive Enhancement.</strong>
      ANML MAY be adopted incrementally alongside existing web
      infrastructure.</t>

      <t><strong>Domain Neutrality.</strong>
      ANML is domain-agnostic. It is not limited to commercial or
      e-commerce contexts and applies equally to any agent-to-agent or
      agent-to-service interaction.</t>

      <t><strong>Extensibility.</strong>
      Conforming agents MUST safely ignore unknown elements and
      attributes.</t>

      <t><strong>Trust Awareness.</strong>
      Agents SHOULD evaluate service trustworthiness before disclosing
      information or executing actions.</t>

      <t><strong>Human Intent First.</strong>
      User intent overrides all ANML instructions. An agent MUST NOT act
      contrary to the expressed wishes of its user.</t>
    </section>

    <!-- Section 5: ANML as an Application of XML -->
    <section anchor="xml-application" numbered="true" toc="include">
      <name>ANML as an Application of XML</name>

      <t>ANML is an application of XML 1.0 <xref target="XML"/> and XML
      Namespaces <xref target="XMLNS"/>. This specification assumes
      familiarity with XML.</t>

      <section anchor="xml-documents" numbered="true" toc="include">
        <name>XML Documents</name>
        <t>An ANML document is a well-formed XML document consisting of a
        hierarchy of elements as defined in
        <xref target="doc-structure"/>.</t>
        <t>The ANML namespace URI is:</t>
        <artwork><![CDATA[urn:ietf:params:xml:ns:anml:1.0]]></artwork>
        <t>A conforming ANML document MUST declare this namespace on the
        root element:</t>
        <sourcecode type="xml"><![CDATA[<anml xmlns="urn:ietf:params:xml:ns:anml:1.0">
  ...
</anml>]]></sourcecode>
      </section>

      <section anchor="lexical-syntax" numbered="true" toc="include">
        <name>ANML Lexical Syntax</name>
        <t>ANML inherits its lexical syntax from XML 1.0. The following
        subsections define additional constraints.</t>

        <section numbered="true" toc="include">
          <name>Element and Attribute Names</name>
          <t>All element and attribute names defined by this specification
          are lowercase. Conforming documents MUST use lowercase names for
          all elements defined herein.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Attribute Values</name>
          <t>Attribute values MUST be enclosed in double quotes (U+0022).
          All attribute values are treated as strings. ANML does not define
          implicit type coercion.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Whitespace</name>
          <t>Whitespace within element content is significant and MUST be
          preserved by conforming agents. ANML does not define whitespace
          collapsing rules.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Character References</name>
          <t>Numeric character references and the predefined XML entity
          references are supported as defined in <xref target="XML"/>. ANML
          does not define additional named entity references.</t>
        </section>
        <section numbered="true" toc="include">
          <name>CDATA Sections</name>
          <t>CDATA sections MUST NOT appear in conforming ANML
          documents.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Comments and Processing Instructions</name>
          <t>XML comments MAY appear in ANML documents. Conforming agents
          MAY ignore comments; comments MUST NOT carry semantic meaning.
          Processing instructions other than the XML declaration MUST NOT
          appear in conforming ANML documents.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Unknown Elements and Attributes</name>
          <t>Conforming agents MUST ignore any element or attribute not
          defined by this specification or a recognized extension namespace,
          without raising an error.</t>
        </section>
      </section>

      <section anchor="namespace" numbered="true" toc="include">
        <name>ANML Namespace and Public Identifiers</name>

        <section numbered="true" toc="include">
          <name>Namespace</name>
          <t>ANML uses XML Namespaces <xref target="XMLNS"/> to distinguish
          its elements from those of other vocabularies. The namespace URI
          'urn:ietf:params:xml:ns:anml:1.0' is an identifier and need not
          resolve to a retrievable resource.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Namespace Policy</name>
          <t>The ANML namespace URI 'urn:ietf:params:xml:ns:anml:1.0'
          is version-specific — the '1.0' is part of the URI. This
          means a future ANML 2.0 specification using a different
          namespace URI would be treated as an entirely distinct
          namespace by conforming XML processors. Documents from the
          two versions would not be interoperable at the namespace
          level.</t>
          <t>The author has noted the alternative approach
          used by HTML5 and other standards: a version-independent
          namespace URI (e.g., 'urn:ietf:params:xml:ns:anml') with
          the version carried only in the version attribute of the
          root element. This approach avoids namespace fragmentation
          across versions and is RECOMMENDED for consideration before
          the namespace URI is formally registered with IANA.</t>
          <t>NOTE: the choice between a version-specific and
          version-independent namespace URI should be resolved before
          standards-track publication. The current version-specific
          URI is used throughout this draft pending that decision. If
          a version-independent URI is adopted, all namespace URI
          references in this document will be updated
          accordingly.</t>
        </section>

        <section numbered="true" toc="include">
          <name>Versioning</name>
          <t>The namespace URI includes a version component ('1.0'). Future
          major versions will use a new namespace URI. The namespace URI is
          the authoritative version indicator.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Extension Namespaces</name>
          <t>ANML documents MAY include elements and attributes from other
          XML namespaces. Extensions MUST be namespace-qualified and MUST
          NOT use the ANML namespace URI.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Document Type Declaration</name>
          <t>ANML documents SHOULD NOT include a Document Type Declaration
          (DOCTYPE). If present, conforming agents MUST NOT process its
          internal subset or resolve external entities referenced by
          it.</t>
        </section>
      </section>

      <section anchor="example-doc" numbered="true" toc="include">
        <name>Example ANML Document</name>
        <sourcecode type="xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<anml xmlns="urn:ietf:params:xml:ns:anml:1.0" ttl="3600">
  <head>
    <title>Travel Booking Service</title>
    <meta name="type" value="service"/>
  </head>
  <constraints>
    <disclosure field="airline" requires="explicit-consent"/>
  </constraints>
  <state>
    <context><step>search</step></context>
    <flow>
      <step id="search" label="Search flights" status="current"/>
      <step id="select" label="Select a flight" status="pending"/>
      <step id="payment" label="Payment"
          status="pending" required="true"/>
      <step id="confirm" label="Confirmation" status="pending"/>
    </flow>
  </state>
  <interact>
    <action id="submit-airline" method="POST" endpoint="/airline"/>
  </interact>
  <knowledge>
    <inform ttl="3600">
      We offer flights to over 200 destinations worldwide.
    </inform>
    <ask field="airline" action="submit-airline"
         required="false" purpose="personalization"/>
  </knowledge>
  <persona>
    <model capability="reasoning"/>
    <language policy="native"/>
    <tone value="friendly"/>
    <instructions>Be helpful and concise.</instructions>
  </persona>
  <body>
    Book flights to your destination.
  </body>
  <footer>
    <rights holder="Example Travel, Inc." year="2026" usage="cache">
      Copyright 2026 Example Travel, Inc.
    </rights>
  </footer>
</anml>]]></sourcecode>
      </section>
    </section>

    <!-- Section 6: ANML as an Internet Media Type -->
    <section anchor="media-type-section" numbered="true" toc="include">
      <name>ANML as an Internet Media Type</name>

      <section anchor="media-type" numbered="true" toc="include">
        <name>application/anml+xml Media Type</name>
        <t>The following is to be registered with IANA:</t>
        <dl>
          <dt>Media Type name:</dt><dd>application</dd>
          <dt>Media subtype name:</dt><dd>anml+xml</dd>
          <dt>Required parameters:</dt><dd>none</dd>
          <dt>Optional parameters:</dt><dd>charset (default UTF-8), version (default "1.0")</dd>
          <dt>Encoding considerations:</dt><dd>Same as for "application/xml" as specified in <xref target="XMLMIME"/>.</dd>
          <dt>Security considerations:</dt><dd>See <xref target="security">Section 13</xref>.</dd>
          <dt>Interoperability considerations:</dt><dd>Conforming agents MUST safely ignore unknown elements and attributes.</dd>
          <dt>Published specification:</dt><dd>This document.</dd>
          <dt>Applications that use this media type:</dt><dd>Autonomous software agents, agent-to-agent communication systems.</dd>
          <dt>File extension(s):</dt><dd>.anml</dd>
        </dl>
      </section>

      <section anchor="doc-representation" numbered="true" toc="include">
        <name>ANML Document Representation</name>
        <section anchor="char-encoding" numbered="true" toc="include">
          <name>Character Encoding</name>
          <t>The default character encoding for ANML documents is UTF-8
          <xref target="RFC3629"/>. When transmitted via HTTP, the charset
          parameter of the Content-Type header takes precedence over the XML
          declaration, as specified in <xref target="XMLMIME"/>.</t>
        </section>
        <section numbered="true" toc="include">
          <name>XML Declaration</name>
          <t>A conforming ANML document SHOULD begin with an XML
          declaration. The XML declaration is REQUIRED when the document
          uses an encoding other than UTF-8.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Byte Order Mark</name>
          <t>UTF-8 encoded documents SHOULD NOT begin with a BOM.
          Conforming agents MUST accept documents that include one. For
          UTF-16, the BOM is REQUIRED.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Line Endings</name>
          <t>ANML documents SHOULD use LF (U+000A). Conforming agents MUST
          accept LF, CR, or CR+LF and normalize to LF as specified in
          <xref target="XML"/> Section 2.11.</t>
        </section>
      </section>

      <section anchor="content-negotiation" numbered="true" toc="include">
        <name>Content Negotiation</name>
        <t>Content negotiation follows standard HTTP mechanisms as defined
        in <xref target="RFC9110"/>. An agent SHOULD include
        'application/anml+xml' in the Accept header. A service MUST set the
        Content-Type header when responding with an ANML document.</t>
      </section>

      <section anchor="http-caching-interaction" numbered="true" toc="include">
        <name>HTTP Caching Interaction</name>
        <t>The interaction between ANML's ttl attribute and HTTP
        caching directives is defined in Section 8.1.1, adjacent to
        the ttl attribute definition on the &lt;anml&gt; root element.
        It is cross-referenced here because HTTP caching is a
        transport-layer concern. The normative content is in Section
        8.1.1; this section serves as a locator for readers approaching
        from the transport layer.</t>
      </section>

      <section anchor="discovery" numbered="true" toc="include">
        <name>Discovery</name>
        <section anchor="discovery-wellknown" numbered="true" toc="include">
          <name>Well-Known URI</name>
          <t>A service MAY publish a discovery document at
          '/.well-known/anml' <xref target="RFC8615"/>. The serving
          domain of the well-known URI response is implicitly
          authoritative: an agent MUST treat an ANML document retrieved
          from 'https://example.net/.well-known/anml' as asserting the
          identity of example.net, regardless of any title, persona, or
          display-name content in the document. A &lt;trust&gt; element
          or &lt;site&gt; element claiming a different domain in a
          well-known URI response MUST be treated as a third-party
          assertion subject to the trust verification procedure in
          Section 12 — it does not override the serving domain's
          implicit authority over its own well-known URI. This rule
          prevents CDN operators or hosting providers from substituting
          their own ANML identity for a served site's identity at
          the discovery endpoint. The following normative rules govern
          agent behavior when interacting with this URI:</t>
          <ul>
            <li>A 404 (Not Found) response at '/.well-known/anml' SHOULD
            be interpreted by agents as a signal that the service does
            not currently support ANML. Agents SHOULD NOT retry this
            URI within the same session. Agents MAY retry in a new
            session or after the HTTP cache TTL of the 404 response
            has expired. A 404 is not treated as permanent — a service
            may deploy ANML after a 404 has been cached, and agents
            MUST be capable of rediscovering ANML support across
            sessions.</li>
            <li>A 301 (Moved Permanently) or 308 (Permanent Redirect)
            response SHOULD be followed. Agents SHOULD update their
            cached discovery URI to the redirect target. Temporary
            redirects (302, 307) MAY be followed but MUST NOT update
            the cached discovery URI.</li>
            <li>A service that supports ANML but has no content to
            serve at '/.well-known/anml' SHOULD return a minimal valid
            ANML document rather than a 404. A minimal valid document
            contains at minimum a &lt;head&gt; element with a
            &lt;title&gt;. This allows agents to confirm ANML support
            without inferring from a 404 that support is absent.</li>
            <li>A 410 (Gone) response MUST be interpreted as a
            permanent removal of ANML support. Agents MUST NOT retry
            this URI.</li>
          </ul>
        </section>
        <section numbered="true" toc="include">
          <name>HTTP Link Header</name>
          <t>A service MAY advertise ANML support via a Link header with
          rel="alternate" and type="application/anml+xml".</t>
        </section>
        <section numbered="true" toc="include">
          <name>HTML Link Element</name>
          <t>A service MAY include a &lt;link rel="alternate"
          type="application/anml+xml"&gt; element in HTML documents.</t>
        </section>
        <section numbered="true" toc="include">
          <name>DNS Service Discovery</name>
          <t>A domain MAY publish SRV records <xref target="RFC2782"/> at
          '_anml._tcp' and TXT records with key 'v=anml1' and optional
          'path' key.</t>
        </section>
      </section>
    </section>

    <!-- Section 7: JSON Serialization -->
    <section anchor="json-serialization" numbered="true" toc="include">
      <name>ANML JSON Serialization</name>

      <t>ANML defines an abstract data model that MAY be serialized as
      either XML (Section 5) or JSON. Both serializations are normative
      and semantically equivalent. An implementation that correctly
      processes one serialization MUST produce results identical to
      processing the other serialization of the same document. The
      serialization format is a deployment choice, not a semantic
      choice.</t>

      <t>The JSON serialization is identified by the media type
      'application/anml+json'. Content negotiation follows standard
      HTTP mechanisms: a client SHOULD include both
      'application/anml+xml' and 'application/anml+json' in the Accept
      header with appropriate q-values to indicate preference. A service
      MUST set the Content-Type header to the serialization actually
      returned.</t>

      <t>The XML serialization (Section 5) is RECOMMENDED for documents
      intended for human authoring and review. The JSON serialization is
      RECOMMENDED for programmatic generation and agent-pipeline
      consumption. Both are REQUIRED to be supported by conforming
      implementations claiming full conformance. Implementations MAY
      support only one serialization and MUST document which
      serializations they support.</t>

      <section anchor="json-media-type" numbered="true" toc="include">
        <name>application/anml+json Media Type</name>
        <t>The following is to be registered with IANA:</t>
        <dl>
          <dt>Media Type name:</dt><dd>application</dd>
          <dt>Media subtype name:</dt><dd>anml+json</dd>
          <dt>Required parameters:</dt><dd>none</dd>
          <dt>Optional parameters:</dt>
            <dd>version (default "1.0")</dd>
          <dt>Encoding considerations:</dt>
            <dd>JSON text MUST be encoded as UTF-8 as specified in
            RFC 8259. A BOM MUST NOT be prepended.</dd>
          <dt>Security considerations:</dt>
            <dd>See Section 11.</dd>
          <dt>Interoperability considerations:</dt>
            <dd>Conforming agents MUST safely ignore unknown keys.</dd>
          <dt>Published specification:</dt>
            <dd>This document.</dd>
          <dt>Applications that use this media type:</dt>
            <dd>Autonomous software agents, agent-to-agent communication
            systems, REST API clients.</dd>
          <dt>File extension(s):</dt>
            <dd>.anml.json</dd>
        </dl>
      </section>

      <section anchor="json-mapping-rules" numbered="true" toc="include">
        <name>General Mapping Rules</name>

        <t>The following rules govern the translation between the XML
        and JSON serializations of ANML. These rules are applied
        mechanically and uniformly across all elements.</t>

        <section numbered="true" toc="include">
          <name>Root Object</name>
          <t>An ANML JSON document is a single JSON object. The root
          object corresponds to the &lt;anml&gt; element. XML attributes
          of &lt;anml&gt; become top-level keys of the root object. The
          version key is REQUIRED. Example:</t>
          <artwork><![CDATA[
{
  "anml": "1.0",
  "lang": "en",
  "ttl": 3600,
  "head": { ... },
  "constraints": { ... },
  "state": { ... },
  "interact": { ... },
  "knowledge": { ... },
  "persona": { ... },
  "aesthetic": { ... },
  "body": { ... },
  "footer": { ... },
  "status": { ... }
}
          ]]></artwork>
        </section>

        <section numbered="true" toc="include">
          <name>Attributes to Properties</name>
          <t>XML attributes become JSON string, number, or boolean
          properties of the enclosing object. Attribute names that
          contain hyphens (e.g., supported-versions) are preserved
          as-is in JSON keys. Boolean attributes with values "true" or
          "false" become JSON boolean values true or false. Numeric
          attributes (ttl, min, max) become JSON numbers. All other
          attributes become JSON strings.</t>
        </section>

        <section numbered="true" toc="include">
          <name>Text Content</name>
          <t>XML element text content (#PCDATA) becomes a JSON string
          value associated with the key "content" within the element's
          object representation. When an element has ONLY text content
          and no attributes or child elements, its value MAY be
          represented in compact form as a JSON string rather than an
          object with a "content" key. Example:</t>
          <artwork><![CDATA[
XML:  <inform ttl="3600">We offer 200 destinations.</inform>

JSON (full):
{
  "ttl": 3600,
  "content": "We offer 200 destinations."
}

JSON (shorthand, only when no other attributes or children):
"We offer 200 destinations."
          ]]></artwork>
        </section>

        <section numbered="true" toc="include">
          <name>Child Elements to Nested Objects</name>
          <t>XML child elements become nested JSON objects keyed by
          the element name. Elements that may appear multiple times
          as siblings (repeatable elements) MUST always be
          represented as a JSON array, even when only one instance
          is present. This rule is absolute: a repeatable element
          is never a bare object — it is always a single-element
          array or a multi-element array. Elements that may appear
          at most once (non-repeatable elements) are represented as
          a bare JSON object, never as an array.</t>
          <t>Repeatable elements (MUST use array form): inform, ask,
          answer, refuse, action, param, option, step, meta, logo,
          color, font, section, item, field, attribution.</t>
          <t>Non-repeatable elements (MUST use object form): head,
          constraints, state, interact, knowledge, persona, aesthetic,
          body, footer, status, context, flow, response, model,
          language, tone, voice, instructions, vocabulary, rights,
          nav, display-name, colors, typography, title, trust.</t>
          <t>Example:</t>
          <artwork><![CDATA[
XML:
<knowledge>
  <inform ttl="3600">Fact one.</inform>
  <inform ttl="7200">Fact two.</inform>
  <ask field="name" action="submit" required="false"/>
</knowledge>

JSON:
{
  "knowledge": {
    "inform": [
      { "ttl": 3600, "content": "Fact one." },
      { "ttl": 7200, "content": "Fact two." }
    ],
    "ask": {
      "field": "name",
      "action": "submit",
      "required": false
    }
  }
}
          ]]></artwork>
        </section>

        <section numbered="true" toc="include">
          <name>Empty Elements</name>
          <t>XML elements with no content and no child elements
          (EMPTY content model) become JSON objects containing only
          their attribute properties. An empty element with no
          attributes becomes an empty JSON object {}. Example:</t>
          <artwork><![CDATA[
XML:  <tone value="friendly"/>
JSON: { "tone": { "value": "friendly" } }

XML:  <disclosure field="email" requires="explicit-consent"/>
JSON: { "disclosure": { "field": "email",
                        "requires": "explicit-consent" } }
          ]]></artwork>
        </section>

        <section numbered="true" toc="include">
          <name>Unknown Keys</name>
          <t>Conforming ANML agents processing JSON documents MUST
          ignore any key not defined by this specification or a
          recognized extension, without raising an error. This
          mirrors the requirement for XML unknown elements and
          attributes in Section 5.2.7.</t>
        </section>
      </section>

      <section anchor="json-example" numbered="true" toc="include">
        <name>Complete JSON Example</name>
        <t>The following is the JSON serialization of the example ANML
        document in Section 5.4:</t>
        <artwork><![CDATA[
{
  "anml": "1.0",
  "ttl": 3600,
  "head": {
    "title": "Travel Booking Service",
    "meta": [
      { "name": "type", "value": "service" }
    ]
  },
  "constraints": {
    "disclosure": [
      { "field": "airline", "requires": "explicit-consent" }
    ]
  },
  "state": {
    "context": { "step": "search" },
    "flow": {
      "step": [
        { "id": "search",  "label": "Search flights",
          "status": "current" },
        { "id": "select",  "label": "Select a flight",
          "status": "pending" },
        { "id": "payment", "label": "Payment",
          "status": "pending", "required": true },
        { "id": "confirm", "label": "Confirmation",
          "status": "pending" }
      ]
    }
  },
  "interact": {
    "action": [
      {
        "id": "submit-airline",
        "method": "POST",
        "endpoint": "/airline"
      }
    ]
  },
  "knowledge": {
    "inform": { "ttl": 3600, "content": "We offer flights to over 200 destinations worldwide." },
    "ask": {
      "field": "airline",
      "action": "submit-airline",
      "required": false,
      "purpose": "personalization"
    }
  },
  "persona": {
    "model": { "capability": "reasoning" },
    "language": { "policy": "native" },
    "tone": { "value": "friendly" },
    "instructions": "Be helpful and concise."
  },
  "body": {
    "content": "Book flights to your destination."
  },
  "footer": {
    "rights": {
      "holder": "Example Travel, Inc.",
      "year": "2026",
      "usage": "cache",
      "content": "Copyright 2026 Example Travel, Inc."
    }
  }
}
        ]]></artwork>
      </section>

      <section anchor="json-discovery" numbered="true" toc="include">
        <name>Discovery and Content Negotiation</name>
        <t>A service supporting JSON serialization SHOULD include
        'application/anml+json' in the Accept-Patch or Alternates
        header of its well-known URI response. Agents SHOULD include
        both media types in the Accept header of discovery
        requests:</t>
        <artwork><![CDATA[
Accept: application/anml+xml;q=0.9, application/anml+json;q=1.0
        ]]></artwork>
        <t>A service MAY serve different serializations from different
        endpoints or from the same endpoint based on content
        negotiation. The data model MUST be identical regardless of
        serialization. A service MUST NOT include information in one
        serialization that is absent from the other.</t>
      </section>

      <section anchor="json-security" numbered="true" toc="include">
        <name>JSON-Specific Security Considerations</name>
        <t>JSON documents are subject to the general security
        considerations in Section 11. The following additional
        considerations apply specifically to JSON serialization:</t>
        <ul>
          <li>JSON parsers MUST impose limits on nesting depth to
          prevent stack exhaustion from deeply nested objects. The
          RECOMMENDED maximum nesting depth is 32 levels.</li>
          <li>JSON parsers MUST impose limits on document size. The
          RECOMMENDED maximum document size is 1MB.</li>
          <li>JSON parsers MUST reject duplicate keys within the
          same object. When duplicate keys are present the document
          MUST be treated as malformed and rejected entirely. Note:
          the XML serialization provides equivalent protection
          through XML 1.0 Section 2.3 well-formedness constraints,
          which prohibit duplicate attribute names — a conforming
          XML parser will reject such documents before they reach
          ANML processing. Both serializations therefore enforce
          the same uniqueness invariant through their respective
          base specifications.</li>
          <li>JSON numbers MUST be parsed as IEEE 754 double-precision
          floating-point values. Implementations MUST handle numeric
          overflow and precision loss gracefully.</li>
          <li>JSON strings MUST be valid UTF-8. Implementations MUST
          reject documents containing invalid UTF-8 sequences.</li>
        </ul>
      </section>

      <section anchor="json-xml-equivalence" numbered="true" toc="include">
        <name>Normative Equivalence</name>
        <t>This section is normative. The following assertions MUST
        hold for any conforming implementation processing the XML and
        JSON serializations of the same logical ANML document:</t>
        <ul>
          <li>Disclosure decisions: the agent MUST make identical
          disclosure decisions — which &lt;ask&gt; fields to answer,
          refuse, or defer — regardless of whether the document was
          received as XML or JSON.</li>
          <li>Action execution: the agent MUST identify the same set
          of executable actions and apply the same confirm, auth, and
          idempotent constraints regardless of serialization.</li>
          <li>Knowledge exchange responses: the agent MUST produce
          semantically equivalent &lt;answer&gt;, &lt;refuse&gt;, and
          &lt;inform&gt; responses regardless of serialization. The
          response itself MAY use either serialization independently
          of the received serialization.</li>
          <li>Trust tier determinations: the agent MUST assign the
          same trust tier to each domain regardless of
          serialization.</li>
          <li>Constraint evaluation: the agent MUST apply the same
          disclosure constraints regardless of serialization.</li>
          <li>Usage enforcement: the agent MUST apply the same usage
          restrictions to content regardless of serialization.</li>
        </ul>
        <t>The following are explicitly NOT required to be identical
        across serializations: user interface rendering, caching
        implementation details, logging format, and internal
        representation. These are implementation-defined and cannot
        be specified by this document.</t>
        <t>Any ANML document expressible in XML serialization MUST
        be expressible in JSON serialization with equivalent
        semantics, and vice versa. Where ambiguity exists between
        the XML and JSON mapping rules, the XML serialization is
        authoritative. Implementers encountering ambiguity SHOULD
        file an issue with the ANML Foundation at
        spec@anmlfoundation.org.</t>
      </section>
    </section>

    <!-- Section 7 (renumbered 8): Document Structure -->

    <section anchor="doc-structure" numbered="true" toc="include">
      <name>Document Structure</name>

      <t>An ANML document is a tree of elements rooted at &lt;anml&gt;,
      organized into sections with distinct responsibilities.</t>

      <section numbered="true" toc="include">
        <name>Root Element: anml</name>
        <t>The &lt;anml&gt; element is the root element. Attributes: xmlns
        (REQUIRED), version (OPTIONAL, default "1.0"),
        role (OPTIONAL, "service"|"agent-response" — declares the
        document type, enabling schema-based validation of role-specific
        constraints. Conforming implementations MUST generate the role
        attribute on all documents they produce. When the role attribute
        is absent, agents MUST infer document role from HTTP context:
        a document received in response to an HTTP GET at a well-known
        URI or HTTP Link header discovery endpoint is a service document;
        a document submitted as the body of an HTTP POST to an action
        endpoint is an agent-response document. When present, the role
        attribute value MUST match the inferred HTTP context role — if
        they conflict the document MUST be rejected. Validators MUST
        apply role-appropriate content model rules when this attribute
        is present. There is no default value — absence triggers
        context inference, not a default assumption),
        supported-versions (OPTIONAL, comma-separated list of supported
        version strings), ttl (OPTIONAL, non-negative integer, seconds
        until the document SHOULD be considered stale, counted from the
        value of the HTTP Date response header at time of retrieval; if
        no Date header is present, ttl is counted from time of receipt;
        if ttl conflicts with HTTP Cache-Control, the interaction is
        governed by Section 6.5 (HTTP Caching Interaction); see also
        Section 8.1.1 for the caching subsection adjacent to this
        attribute definition), lang (OPTIONAL, BCP 47).</t>

        <t>Content model (single-site document): head?, constraints?,
        state?, interact?, knowledge?, persona?, aesthetic?,
        body?, footer?, status?</t>

        <t>Content model (multi-site document): site+</t>

        <t>A conforming &lt;anml&gt; document MUST use one of these
        two content models exclusively. An &lt;anml&gt; element MUST
        NOT mix top-level identity sections (persona, aesthetic,
        knowledge, etc.) with &lt;site&gt; elements. When a document
        asserts identity for more than one serving party, it MUST use
        the multi-site content model with &lt;site&gt; wrappers for
        all parties including the serving domain itself.</t>

        <t>Version negotiation: when an agent encounters a document
        whose version attribute specifies a version the agent does not
        implement, the agent SHOULD attempt best-effort processing,
        ignoring elements and attributes it does not recognize, and
        SHOULD inform the user that the document uses a version newer
        than the agent supports. If the supported-versions attribute is
        present and does not include any version the agent implements,
        the agent MAY refuse to process the document and MUST NOT
        execute any actions defined within it. The agent SHOULD surface
        a meaningful error to the user in this case. This behavior
        mirrors established web precedent: agents degrade gracefully
        rather than failing completely when encountering newer
        versions.</t>

        <t>The RECOMMENDED authoring order for single-site documents
        places framing sections (constraints, state, interact,
        knowledge, persona) before &lt;body&gt; to optimize for
        streaming consumption.</t>

        <section anchor="anml-cache-control" numbered="true" toc="include">
          <name>Interaction with HTTP Caching</name>
          <t>The ANML ttl attribute interacts with HTTP caching headers
          as follows, in order of precedence:</t>
          <ul>
            <li>If the HTTP response carries Cache-Control: no-store,
            the agent MUST NOT cache the document or any content derived
            from it, regardless of any ttl attribute value. no-store
            takes absolute precedence over ttl.</li>
            <li>If the HTTP response carries Cache-Control: no-cache,
            the agent MUST revalidate the document with the server before
            each use, regardless of any ttl attribute value.</li>
            <li>If the HTTP response carries Cache-Control: max-age=N,
            and the document carries ttl=M, the effective TTL is
            min(N, M) — the more restrictive value applies.</li>
            <li>If Cache-Control: s-maxage is present, it governs shared
            cache behavior per RFC 9111 Section 5.2.2.6 independently
            of ANML ttl semantics, which apply to agent-side caching
            only.</li>
            <li>If Cache-Control: stale-while-revalidate=N is present,
            agents MAY serve stale ANML content for up to N seconds
            while revalidating in the background, provided the content
            has not exceeded its ANML ttl.</li>
            <li>In all cases not addressed above, RFC 9111
            <xref target="RFC9111"/> governs HTTP caching behavior
            and ANML ttl provides an additional upper bound on
            agent-side content freshness.</li>
          </ul>
        </section>
      </section>
      <section anchor="site-element" numbered="true" toc="include">
        <name>Site Element: site</name>
        <t>The &lt;site&gt; element is a wrapper used in multi-site
        documents to group identity sections belonging to a single
        serving party or trusted third party. It replaces individual
        top-level identity sections when a document asserts identity
        for more than one domain.</t>

        <t>Attributes:</t>
        <dl>
          <dt>domain</dt>
          <dd>The canonical domain of the site whose identity this
          element asserts. REQUIRED. When domain matches the serving
          domain, no trust verification is required. When domain
          differs from the serving domain, the agent MUST verify trust
          delegation as defined in Section 12 before processing the
          contents of this &lt;site&gt; element.</dd>
          <dt>trust-verified</dt>
          <dd>ISO 8601 datetime at which the serving party last
          verified the _anml DNS record and authorization data for
          this domain. OPTIONAL. Agents MAY use this to decide
          whether to revalidate a cached authorization: if
          trust-verified is more recent than the agent's cached
          result, the agent SHOULD revalidate. Agents MUST NOT
          treat this as authorization to skip independent
          verification — it is a hint only. When this attribute
          is absent, agents MUST perform verification from the
          DNS bootstrap record as defined in Section 12.4.</dd>
        </dl>

        <t>Content model: head?, constraints?, state?, interact?,
        knowledge?, persona?, aesthetic?, body?, footer?,
        status?, site-ref*</t>

        <t>When the domain attribute differs from the serving domain,
        the agent MUST perform trust verification by looking up the
        _anml DNS TXT record for the site domain and proceeding per
        Section 12.4. No additional trust-manifest attribute is
        required — the domain attribute alone triggers the
        verification procedure.</t>

        <t>A &lt;site&gt; element MUST contain at least one child
        element. An empty &lt;site&gt; element is malformed. Each
        &lt;site&gt; element in a document MUST have a unique domain
        attribute value. Duplicate domain values within the same
        &lt;anml&gt; element are not permitted.</t>
      </section>

      <section numbered="true" toc="include">
        <name>Head Section: head</name>
        <t>The &lt;head&gt; element contains document metadata. Content
        model: title?, meta*.</t>
        <section numbered="true" toc="include">
          <name>Title: title</name>
          <t>The &lt;title&gt; element provides the document title. Content
          model: (#PCDATA).</t>
        </section>
        <section numbered="true" toc="include">
          <name>Meta: meta</name>
          <t>The &lt;meta&gt; element provides name/value metadata pairs.
          Attributes: name (identifier string), value (string). Content
          model: EMPTY.</t>
        </section>
      </section>

      <section numbered="true" toc="include">
        <name>Constraints Section: constraints</name>
        <t>The &lt;constraints&gt; element defines rules governing
        disclosure. Agents MUST evaluate constraints before submitting any
        &lt;answer&gt;. Content model: disclosure*.</t>
        <section numbered="true" toc="include">
          <name>Disclosure: disclosure</name>
          <t>The &lt;disclosure&gt; element defines a single disclosure
          rule. Attributes: field (REQUIRED, references an &lt;ask&gt;
          field), requires (REQUIRED:
          explicit-consent|implicit-consent|authentication|none). Content
          model: EMPTY.</t>
        </section>
      </section>

      <section numbered="true" toc="include">
        <name>State Section: state</name>
        <t>The &lt;state&gt; element carries contextual information about
        multi-step interactions. Content model: context?, flow?.</t>
        <section numbered="true" toc="include">
          <name>Context: context</name>
          <t>The &lt;context&gt; element identifies the current position
          within a flow. Content model: step. The child &lt;step&gt;
          element contains (#PCDATA) whose text MUST match a step id
          defined in &lt;flow&gt;. This &lt;step&gt; child carries no
          attributes and serves solely as a reference to a flow
          step.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Flow: flow</name>
          <t>The &lt;flow&gt; element declares the workflow structure.
          Content model: step*.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Step: step (flow)</name>
          <t>The &lt;step&gt; element defines a single workflow stage.
          Attributes: id (REQUIRED), label, status
          (completed|current|pending|skipped), required (boolean,
          "true"|"false", default "false"), next (step id of the
          subsequent step), condition (a service-defined opaque string
          evaluated by the service to determine step availability; agents
          MUST treat this as informational and MUST NOT attempt to
          evaluate condition expressions independently),
          action (references an &lt;action&gt; id available at this
          step). Content model: EMPTY.</t>
        </section>
      </section>

      <section numbered="true" toc="include">
        <name>Interaction Section: interact</name>
        <t>The &lt;interact&gt; element defines executable operations.
        Content model: action*.</t>
        <section numbered="true" toc="include">
          <name>Action: action</name>
          <t>The &lt;action&gt; element defines a single operation.
          Attributes: id (REQUIRED), method (REQUIRED, HTTP method),
          endpoint (REQUIRED, URI), enctype (media type for request body,
          default "application/x-www-form-urlencoded"), auth
          (none|required|optional, default "none"), idempotent (boolean,
          "true"|"false"), confirm (boolean, "true"|"false", if "true" the
          agent SHOULD confirm with the user before executing), description
          (human-readable text). Content model: param*, response?.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Param: param</name>
          <t>The &lt;param&gt; element declares an action parameter.
          Attributes: name, type
          (string|number|boolean|date|datetime|uri|enum), required
          (boolean, "true"|"false", default "false"), default,
          description, pattern, min, max. Content model: option*.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Option: option</name>
          <t>The &lt;option&gt; element defines a permitted value for enum
          parameters. Attributes: value (REQUIRED, string), label
          (human-readable display text). Content model: EMPTY.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Response: response</name>
          <t>The &lt;response&gt; element describes the expected response.
          Attributes: type (default application/anml+xml), description.
          Content model: EMPTY.</t>
        </section>
      </section>

      <section numbered="true" toc="include">
        <name>Knowledge Section: knowledge</name>
        <t>The &lt;knowledge&gt; element defines bidirectional information
        exchange. Content model: (inform | ask)* for service documents;
        (answer | refuse | ask | inform)* for agent responses.</t>
        <section numbered="true" toc="include">
          <name>Inform: inform</name>
          <t>The &lt;inform&gt; element communicates information from
          service to agent. Attributes: ttl (non-negative integer,
          seconds from HTTP Date header of the response in which this
          element was received; see Section 8.1 for ttl semantics), scope (element id this inform applies to), priority
          (low|normal|high, default "normal"), confidentiality
          (public|restricted|private, default "public"), usage
          (none|display|cache|store|train — see Section 15.4
          for the normative usage hierarchy). Content model:
          (#PCDATA).</t>
        </section>
        <section numbered="true" toc="include">
          <name>Ask: ask</name>
          <t>The &lt;ask&gt; element requests information from the other
          party. Attributes: field (REQUIRED), action (REQUIRED, references
          an &lt;action&gt; id), required (boolean, "true"|"false", default
          "false"), purpose (human-readable reason for the request), type
          (expected value type: string|number|boolean|date|datetime|uri
          — see Section 8.14 for the unified ANML type system
          definition). Content model: EMPTY.</t>
          <t>The field attribute is a free-form string identifying the
          information being requested. For interoperability, field values
          representing personal information SHOULD use the property names
          defined in vCard version 4.0 <xref target="RFC6350"/> where
          applicable — for example: "fn" (formatted name), "email",
          "tel", "adr", "bday", "gender", "lang". Use of these standard
          property names allows agents to recognize equivalent requests
          across services that use the same vocabulary. Service-specific
          field names are permitted and are opaque to agents that do not
          recognize them; agents MUST NOT refuse to process an &lt;ask&gt;
          solely because the field name is unrecognized — they MUST
          instead evaluate it against applicable constraints and user
          consent as with any other field. When an agent encounters
          an &lt;ask&gt; with an unrecognized field name, it MUST
          apply the most restrictive applicable constraint as a default.
          Specifically: if no &lt;disclosure&gt; constraint is
          specified for the unrecognized field, the agent MUST treat
          it as requiring requires="explicit-consent" regardless of
          any other constraint configuration. This ensures unrecognized
          fields are never disclosed silently. An IANA registry of
          standard ANML field names is planned for a future
          revision.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Answer: answer</name>
          <t>The &lt;answer&gt; element provides requested information.
          Attributes: field (REQUIRED), value (REQUIRED), consent
          (explicit|implicit|delegated), consent-granted (OPTIONAL,
          ISO 8601 datetime in UTC — the time at which the user granted
          consent for this disclosure; allows services to evaluate
          whether consent is current relative to their valid-for
          requirement). Content model: EMPTY.</t>
          <t>Services that specify valid-for on a &lt;disclosure&gt;
          element SHOULD evaluate the consent-granted timestamp in the
          corresponding &lt;answer&gt; to determine whether the
          agent's consent is still valid. If consent-granted is absent
          or older than valid-for seconds, the service SHOULD treat the
          disclosure as requiring fresh consent and SHOULD return a
          response requesting re-consent rather than processing the
          stale answer.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Refuse: refuse</name>
          <t>The &lt;refuse&gt; element explicitly declines an
          &lt;ask&gt;. Attributes: field (REQUIRED), reason (REQUIRED:
          constraint-violation|user-denied|policy-violation|unsupported-field|trust-insufficient),
          constraint (references a &lt;disclosure&gt; field, if
          applicable), message (human-readable explanation). Content model:
          EMPTY.</t>
        </section>
      </section>

      <section numbered="true" toc="include">
        <name>Persona Section: persona</name>
        <t>The &lt;persona&gt; element provides advisory guidance on agent
        communication style. Content model: model?, language?, tone?,
        voice?, instructions?, vocabulary?.</t>
        <t>Precedence: agents SHOULD apply persona guidance to their
        responses. However, user safety policies, user-configured
        preferences, and platform-level guardrails take absolute
        precedence over all persona guidance. The SHOULD in this
        section applies only to persona guidance that does not conflict
        with any higher-priority constraint. When persona guidance
        conflicts with a safety policy or user preference, the MUST NOT
        in Section 13.3 governs — the SHOULD creates no obligation to
        apply conflicting guidance. Agents MUST be able to explain to
        a user, on request, which persona guidance was applied and
        which was overridden.</t>
        <section numbered="true" toc="include"><name>Model: model</name>
          <t>The &lt;model&gt; element provides an advisory model preference
          for agent inference. Agents MAY use this guidance to select an
          appropriate model but are not required to honor it. Attributes:
          name (model identifier, e.g., "claude-4", "gpt-5"), provider
          (e.g., "anthropic", "openai"), capability (e.g., "vision",
          "code", "reasoning"). All attributes are OPTIONAL. When name is
          not available, agents SHOULD select a model that satisfies the
          specified capability. Content model: EMPTY.</t></section>
        <section numbered="true" toc="include"><name>Language: language</name>
          <t>The &lt;language&gt; element specifies the response language
          policy. Attributes: value (BCP 47 tag, used when policy="fixed"),
          policy (native|match|fixed). Content model: EMPTY.</t>
          <t>Policy values: "native" — the agent SHOULD respond in the
          user's preferred language as known to the agent; "match" — the
          agent SHOULD respond in the language of the document; "fixed" —
          the agent MUST respond in the language specified by the value
          attribute. Tone and voice values are advisory opaque strings;
          interoperability of persona guidance across services is not
          guaranteed and agents SHOULD treat unrecognized tone and voice
          values as informational only.</t>
          <t>Privacy note: policy="native" causes the agent to infer or
          disclose the user's preferred language to influence its
          response. The user's language preference is personal information.
          Agents SHOULD treat the application of policy="native" as
          equivalent to an implicit disclosure of a language preference
          field and SHOULD apply any applicable &lt;constraints&gt;
          governing language-related disclosures. Services MUST NOT use
          policy="native" as a mechanism to fingerprint users by
          language.</t></section>
        <section numbered="true" toc="include"><name>Tone: tone</name>
          <t>The &lt;tone&gt; element specifies the emotional register.
          Attributes: value (e.g., "friendly", "formal", "neutral").
          Content model: EMPTY.</t></section>
        <section numbered="true" toc="include"><name>Voice: voice</name>
          <t>The &lt;voice&gt; element specifies character and perspective.
          Attributes: perspective (first|third), name (character name,
          string). Content model: EMPTY.</t></section>
        <section numbered="true" toc="include"><name>Instructions: instructions</name>
          <t>The &lt;instructions&gt; element provides free-text behavioral
          guidance. Advisory only. Content model: (#PCDATA).</t></section>
        <section numbered="true" toc="include"><name>Vocabulary: vocabulary</name>
          <t>The &lt;vocabulary&gt; element specifies preferred and avoided
          terms. Content model: prefer*, avoid*.</t></section>
        <section numbered="true" toc="include"><name>Prefer: prefer</name>
          <t>The &lt;prefer&gt; element declares a preferred term or phrase.
          Content model: (#PCDATA).</t></section>
        <section numbered="true" toc="include"><name>Avoid: avoid</name>
          <t>The &lt;avoid&gt; element declares a term or phrase that SHOULD
          NOT be used. Content model: (#PCDATA).</t></section>
      </section>

      <section numbered="true" toc="include">
        <name>Aesthetic Section: aesthetic</name>
        <t>The &lt;aesthetic&gt; element provides advisory visual identity
        guidance. Content model: display-name?, logo*, colors?,
        typography?.</t>
        <section numbered="true" toc="include"><name>Display Name: display-name</name>
          <t>The &lt;display-name&gt; element specifies the preferred
          service name. Content model: (#PCDATA).</t></section>
        <section numbered="true" toc="include"><name>Logo: logo</name>
          <t>The &lt;logo&gt; element references a logo image. Attributes:
          src (URI), alt (text description), type (media type, e.g.,
          "image/svg+xml"), variant (e.g., "icon", "wordmark", "full").
          Content model: EMPTY.</t></section>
        <section numbered="true" toc="include"><name>Colors: colors</name>
          <t>The &lt;colors&gt; element defines the service color palette.
          Content model: color*.</t></section>
        <section numbered="true" toc="include"><name>Color: color</name>
          <t>The &lt;color&gt; element defines a single color value.
          Attributes: role (e.g., primary, secondary, accent), value
          (CSS color string). Content model: EMPTY.</t></section>
        <section numbered="true" toc="include"><name>Typography: typography</name>
          <t>The &lt;typography&gt; element defines font preferences.
          Content model: font*.</t></section>
        <section numbered="true" toc="include"><name>Font: font</name>
          <t>The &lt;font&gt; element defines a single font preference.
          Attributes: role (e.g., heading, body), family, fallback.
          Content model: EMPTY.</t></section>
      </section>

      <section numbered="true" toc="include">
        <name>Body Section: body</name>
        <t>The &lt;body&gt; element contains the primary semantic content.
        Attributes: usage (none|display|cache|store|train, default content
        usage rights). Content model:
        (#PCDATA | section | data | img | audio | video | link | nav)*.</t>
        <section numbered="true" toc="include">
          <name>Section: section</name>
          <t>The &lt;section&gt; element groups related content. Attributes:
          id, label, usage (none|display|cache|store|train). Sections MAY
          be nested. Content model:
          (#PCDATA | section | data | img | audio | video | link | nav)*.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Image: img</name>
          <t>The &lt;img&gt; element references an image resource.
          Attributes: src (REQUIRED, URI), inference
          (none|optional|required), type (media type), width, height, usage
          (none|display|cache|store|train). Content model: description?. A
          &lt;description&gt; child SHOULD be provided.</t>
          <t>The inference attribute indicates whether the agent is expected
          to perform inference on the media resource: "none" means the
          resource need not be retrieved or analyzed, "optional" means the
          agent MAY perform inference if beneficial, and "required" means
          the resource contains information essential to the document that
          cannot be conveyed through the &lt;description&gt; alone.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Audio: audio</name>
          <t>The &lt;audio&gt; element references an audio resource.
          Attributes: src (REQUIRED, URI), inference
          (none|optional|required), type (media type), duration (seconds),
          lang (BCP 47), usage (none|display|cache|store|train). Content
          model: transcript?, description?. The inference attribute has the
          same semantics as defined for &lt;img&gt;.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Video: video</name>
          <t>The &lt;video&gt; element references a video resource.
          Attributes: src (REQUIRED, URI), inference
          (none|optional|required), type (media type), duration (seconds),
          width, height, lang (BCP 47), usage
          (none|display|cache|store|train). Content model: transcript?,
          description?. The inference attribute has the same semantics as
          defined for &lt;img&gt;.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Description: description</name>
          <t>The &lt;description&gt; element provides a textual description
          of a media resource (&lt;img&gt;, &lt;audio&gt;, or
          &lt;video&gt;). When present, agents MAY use the description
          instead of performing inference on the media resource. Content
          model: (#PCDATA).</t>
        </section>
        <section numbered="true" toc="include">
          <name>Transcript: transcript</name>
          <t>The &lt;transcript&gt; element provides a textual transcript
          of an &lt;audio&gt; or &lt;video&gt; resource. When present,
          agents MAY use the transcript instead of performing inference on
          the media resource. Content model: (#PCDATA).</t>
        </section>
        <section numbered="true" toc="include">
          <name>Link: link</name>
          <t>The &lt;link&gt; element references a related resource.
          Attributes: href (REQUIRED, URI), rel (relationship type, e.g.,
          "alternate", "related", "canonical"), type (media type of the
          referenced resource), label (human-readable description). Content
          model: EMPTY.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Data: data</name>
          <t>The &lt;data&gt; element contains structured data as a
          collection of items. Attributes: id, label, usage
          (none|display|cache|store|train). Content model: item*.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Item: item</name>
          <t>The &lt;item&gt; element represents a single record within a
          &lt;data&gt; collection. Attributes: id (string). Content model:
          field*.</t>
        </section>
        <section numbered="true" toc="include">
          <name>Field: field</name>
          <t>The &lt;field&gt; element represents a named value within an
          &lt;item&gt;. Attributes: name (string), type
          (string|number|boolean|date|datetime|uri). Content model:
          (#PCDATA).</t>
        </section>
        <section numbered="true" toc="include">
          <name>Navigation: nav</name>
          <t>The &lt;nav&gt; element provides pagination and continuation
          controls. Attributes: next (URI for the next page), prev (URI
          for the previous page), cursor (opaque continuation token),
          total (total item count, if known). Content model: EMPTY.</t>
        </section>
      </section>

      <section anchor="type-system" numbered="true" toc="include">
        <name>ANML Type System</name>
        <t>The following type vocabulary is used by the type attribute
        of both the &lt;ask&gt; and &lt;field&gt; elements. This section
        is the single normative definition; both elements reference it.
        Implementations MUST apply these definitions consistently across
        both contexts.</t>
        <dl>
          <dt>string</dt>
          <dd>A sequence of Unicode characters. No maximum length is
          defined by this specification; services and agents SHOULD
          impose implementation-defined limits. The value attribute
          in &lt;answer&gt; and the value attribute in &lt;field&gt;
          carry string values as UTF-8 text.</dd>
          <dt>number</dt>
          <dd>A numeric value represented as an IEEE 754 double-precision
          floating-point number. Implementations MUST handle precision
          loss gracefully. For financial values, services SHOULD use
          string type with explicit format documentation to avoid
          floating-point precision issues.</dd>
          <dt>boolean</dt>
          <dd>One of the literal string values "true" or "false".
          Implementations MUST NOT accept other representations (e.g.,
          "1", "0", "yes", "no").</dd>
          <dt>date</dt>
          <dd>A date value in the format defined by RFC 3339
          <xref target="RFC3339"/> full-date production: YYYY-MM-DD.
          Example: "2026-07-14". Implementations MUST reject values
          that do not conform to this format.</dd>
          <dt>datetime</dt>
          <dd>A datetime value in the format defined by RFC 3339
          <xref target="RFC3339"/> date-time production, in UTC with
          Z suffix: YYYY-MM-DDTHH:MM:SSZ. Example:
          "2026-07-14T09:00:00Z". Implementations MUST reject values
          that do not conform to this format. Local time offsets are
          not permitted — all datetime values MUST be UTC.</dd>
          <dt>uri</dt>
          <dd>A URI as defined in RFC 3986 <xref target="RFC3986"/>.
          Implementations SHOULD validate that the value is a
          well-formed URI before transmitting it in an
          &lt;answer&gt;.</dd>
        </dl>
        <t>The type attribute is advisory when present on &lt;ask&gt;
        — it communicates the service's expected value format to the
        agent. It is descriptive when present on &lt;field&gt; — it
        communicates the data type of a value in a result set. In both
        cases, agents SHOULD validate or format values according to
        the type definition before transmission.</t>
      </section>

      <section numbered="true" toc="include">
        <name>Footer Section: footer</name>
        <t>The &lt;footer&gt; element contains copyright, licensing, and
        attribution declarations. Content model: rights*, attribution*,
        (#PCDATA)*.</t>
        <section numbered="true" toc="include">
          <name>Rights: rights</name>
          <t>The &lt;rights&gt; element declares copyright and usage terms.
          Attributes: holder, year, license, usage
          (none|display|cache|store|train, default "none"), scope. Usage
          values form a hierarchy:
          none &lt; display &lt; cache &lt; store &lt; train. Multiple
          &lt;rights&gt; elements MAY target specific element IDs via the
          scope attribute. Content model: (#PCDATA).</t>
        </section>
        <section numbered="true" toc="include">
          <name>Attribution: attribution</name>
          <t>The &lt;attribution&gt; element provides credit to content
          sources. Attributes: required (boolean, "true"|"false", default
          "false"), scope (element id this attribution applies to). Content
          model: (#PCDATA).</t>
        </section>
      </section>

      <section numbered="true" toc="include">
        <name>Status Section: status</name>
        <t>The &lt;status&gt; element communicates the outcome of a
        preceding operation. Content model: EMPTY. Attributes: code
        (REQUIRED, machine-readable status code), result (REQUIRED:
        success|error|partial), message (human-readable description),
        retry-after (seconds before the agent SHOULD retry).</t>
      </section>
    </section>

    <!-- Section 8: Interaction Model -->
    <section anchor="interaction-model" numbered="true" toc="include">
      <name>Interaction Model</name>

      <t>ANML operates over HTTP. It does not replace or modify HTTP
      methods, headers, authentication, session management, or cookie
      handling.</t>

      <section numbered="true" toc="include">
        <name>Transport</name>
        <t>ANML interactions use HTTP <xref target="RFC9110"/>. The
        &lt;action&gt; element's method attribute specifies the HTTP
        method. ANML does not define or constrain HTTP method
        semantics.</t>
      </section>

      <section numbered="true" toc="include">
        <name>Interaction Flow</name>
        <t>A typical ANML interaction proceeds as follows:</t>
        <ol>
          <li>Resource Retrieval: The agent issues an HTTP GET; the service
          returns an ANML document.</li>
          <li>Document Interpretation: The agent processes the constraints,
          state, interact, knowledge, and body sections. If a
          &lt;flow&gt; element is present, the agent SHOULD use it to
          understand the full interaction sequence.</li>
          <li>Disclosure Evaluation: The agent evaluates &lt;ask&gt;
          elements against user consent, local policies, trust level,
          sensitivity, and applicable constraints.</li>
          <li>Action Selection: The agent resolves the &lt;ask&gt;'s action
          attribute to a matching &lt;action&gt; element to determine the
          method and endpoint.</li>
          <li>Response Submission: The agent performs the HTTP request using
          the resolved method and endpoint.</li>
          <li>State Advancement: The service responds with updated state,
          knowledge, or new interaction options.</li>
        </ol>
      </section>

      <section numbered="true" toc="include">
        <name>Action Binding</name>
        <t>All executable operations MUST be defined in the &lt;interact&gt;
        section. The agent resolves the response target by: (1) reading the
        action attribute of the &lt;ask&gt;, (2) locating the matching
        &lt;action&gt; element, and (3) using its method and endpoint to
        submit the response.</t>
      </section>

      <section numbered="true" toc="include">
        <name>Knowledge Exchange</name>
        <t>ANML defines a bidirectional knowledge exchange model. Services
        include &lt;inform&gt; and &lt;ask&gt; elements in documents;
        agents include &lt;answer&gt;, &lt;refuse&gt;, &lt;ask&gt;, and
        &lt;inform&gt; elements in responses.</t>
      </section>

      <section numbered="true" toc="include">
        <name>Constraints on Disclosure</name>
        <t>Agents MUST evaluate constraints before submitting any
        &lt;answer&gt;. Constraints may govern consent requirements,
        authentication, field-level disclosure restrictions, and rate
        limitations.</t>
      </section>

      <section numbered="true" toc="include">
        <name>Separation of Concerns</name>
        <t>ANML separates transport and identity (HTTP) from semantics and
        interaction (ANML).</t>
      </section>
    </section>

    <!-- Section 9: Characters and Internationalization -->
    <section anchor="i18n" numbered="true" toc="include">
      <name>Characters and Internationalization</name>

      <t>The ANML internationalization model builds on XML
      <xref target="XML"/>, Unicode <xref target="UNICODE"/>, and
      RFC 2070 <xref target="RFC2070"/>.</t>

      <section numbered="true" toc="include">
        <name>Document Character Set</name>
        <t>The document character set is Unicode <xref target="UNICODE"/>,
        synchronized with ISO/IEC 10646. Numeric character references
        resolve via Unicode code points regardless of encoding. ANML does
        not support non-Unicode character repertoires.</t>
      </section>

      <section numbered="true" toc="include">
        <name>Character Encoding</name>
        <t>The default encoding is UTF-8 <xref target="RFC3629"/>.
        Non-Unicode encodings MUST NOT be used. Encoding detection
        precedence: (1) HTTP Content-Type charset, (2) XML declaration
        encoding attribute, (3) BOM detection, (4) UTF-8 default.</t>
      </section>

      <section numbered="true" toc="include">
        <name>Language Identification</name>
        <t>The 'lang' attribute specifies natural language using BCP 47
        <xref target="BCP47"/> tags. Language declarations inherit from
        parent to child elements. ANML does not define a 'dir' attribute;
        bidirectional text is handled by the Unicode Bidirectional Algorithm
        <xref target="UAX9"/>.</t>
      </section>
    </section>

    <!-- Section 10: Agent Response Format -->
    <section anchor="response-format" numbered="true" toc="include">
      <name>Agent Response Format</name>

      <t>This section defines the format, content model, and normative
      behavior for agent-originated ANML documents — documents submitted
      by an agent to a service in response to an &lt;ask&gt; or as part
      of a multi-step interaction.</t>

      <section numbered="true" toc="include">
        <name>Response Document Structure</name>
        <t>An agent response is a conforming ANML document submitted as
        the body of an HTTP request to the endpoint specified by the
        &lt;action&gt; element referenced in the originating
        &lt;ask&gt;. The Content-Type of the request MUST be either
        'application/anml+xml' or 'application/anml+json', matching the
        serialization used. The agent SHOULD use the same serialization
        as the document it is responding to unless the service has
        indicated a preference via the Accept header of a prior
        response.</t>

        <t>The root element of an agent response document is
        &lt;anml&gt; with the same namespace and version as defined in
        this specification. An agent response document MAY contain any
        combination of the following elements in its knowledge
        section:</t>
        <ul>
          <li>&lt;answer&gt; — providing information requested by an
          &lt;ask&gt;</li>
          <li>&lt;refuse&gt; — explicitly declining to answer an
          &lt;ask&gt;</li>
          <li>&lt;ask&gt; — requesting information from the service
          before proceeding</li>
          <li>&lt;inform&gt; — providing unrequested contextual
          information the agent determines is relevant</li>
        </ul>

        <t>An agent response MUST contain at least one &lt;answer&gt;
        or &lt;refuse&gt; element corresponding to each &lt;ask&gt;
        element marked required="true" in the originating document. An
        agent MAY include &lt;answer&gt; or &lt;refuse&gt; elements for
        optional &lt;ask&gt; elements at its discretion. An agent MUST
        NOT include &lt;answer&gt; elements for fields not requested by
        an &lt;ask&gt; in the current interaction context.</t>

        <t>An agent response MUST NOT include &lt;interact&gt;,
        &lt;persona&gt;, &lt;aesthetic&gt;, &lt;constraints&gt;, or
        &lt;state&gt; sections. These sections are reserved for service
        documents. A service receiving an agent response that includes
        these sections MUST ignore them.</t>
      </section>

      <section numbered="true" toc="include">
        <name>Minimum Valid Response</name>
        <t>The minimum valid agent response is an ANML document
        containing a single &lt;refuse&gt; element for each required
        &lt;ask&gt; in the originating document. This indicates the
        agent has processed the document but is unable or unwilling to
        provide the requested information. Example:</t>
        <sourcecode type="xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<anml xmlns="urn:ietf:params:xml:ns:anml:1.0">
  <knowledge>
    <refuse field="airline"
            reason="user-denied"
            message="User declined to share airline preference."/>
  </knowledge>
</anml>]]></sourcecode>
      </section>

      <section numbered="true" toc="include">
        <name>Service Response to Agent Submission</name>
        <t>A service receiving an agent response MUST return an HTTP
        response with an appropriate status code. When the service
        returns an ANML document as the response body, it MUST set
        Content-Type to the appropriate ANML media type. The service
        response SHOULD include a &lt;status&gt; element indicating the
        outcome of the submitted action.</t>

        <t>The following HTTP status codes have defined semantics in
        the ANML interaction model:</t>
        <ul>
          <li>200 OK — the action was processed successfully; the
          response body MAY contain an updated ANML document advancing
          the interaction state.</li>
          <li>400 Bad Request — the agent response was malformed or
          missing required fields; the service SHOULD include a
          &lt;status&gt; element with a human-readable message.</li>
          <li>401 Unauthorized — authentication is required; the agent
          SHOULD surface this to the user and MUST NOT retry
          automatically with stored credentials.</li>
          <li>403 Forbidden — the action is not permitted for this
          agent or user; the agent MUST NOT retry the same action.</li>
          <li>409 Conflict — the request conflicts with the current
          state of the target resource as defined by HTTP semantics.
          For example, attempting to book a seat that has just been
          reserved by another user. The service SHOULD provide updated
          state in the response body. Note: inventory unavailability
          (e.g., out of stock) is NOT a conflict in the HTTP sense and
          SHOULD be represented as 422 with a domain-specific status
          message.</li>
          <li>422 Unprocessable Content — the action was understood but
          cannot be executed as submitted, including cases where
          inventory is unavailable, a field value is out of range, or
          a prerequisite step has not been completed. The service
          SHOULD indicate which fields require correction or what
          precondition was not met.</li>
        </ul>
        <t>For 4xx responses, services SHOULD return a response body
        conforming to RFC 9457 <xref target="RFC9457"/> (Problem
        Details for HTTP APIs), using Content-Type
        'application/problem+json' or 'application/problem+xml'.
        RFC 9457 supersedes RFC 7807 and is backward compatible with
        it. Problem Details provide machine-parseable error information
        including field-level validation errors, constraint violations,
        and retry guidance that agents can act on without human
        intervention. The ANML &lt;status&gt; element is used for
        2xx responses only; 4xx and 5xx responses SHOULD use RFC 9457
        Problem Details as the error envelope.</t>
        <ul>
          <li>429 Too Many Requests — the agent is submitting too
          frequently; the agent MUST respect the Retry-After header if
          present and MUST NOT retry without it.</li>
          <li>500 Internal Server Error — the service encountered an
          unexpected condition. The agent SHOULD NOT retry immediately.
          The agent MAY retry once after a delay of not less than 5
          seconds. The agent SHOULD inform the user that the service
          encountered an error.</li>
          <li>503 Service Unavailable — the service is temporarily
          unavailable. The agent MUST respect the Retry-After header
          if present. If no Retry-After header is present, the agent
          SHOULD NOT retry within the current session. The agent MUST
          inform the user that the service is unavailable.</li>
          <li>Other 5xx responses — the agent SHOULD treat these as
          equivalent to 500 unless more specific guidance is provided
          by the service. The agent MUST NOT interpret a 5xx response
          as a constraint violation or trust failure. Server errors
          are operational, not adversarial, unless accompanied by
          other indicators of malicious behavior.</li>
        </ul>
      </section>

      <section numbered="true" toc="include">
        <name>Error Handling</name>
        <t>The following normative error handling requirements apply
        to conforming agents and services:</t>
        <ul>
          <li>Required field absent: if a required attribute (e.g.,
          field on &lt;ask&gt;, id on &lt;action&gt;) is absent, the
          agent MUST treat the containing element as malformed and
          MUST NOT process it. The agent SHOULD log the error and
          SHOULD inform the user if the malformed element would have
          been part of the interaction.</li>
          <li>Unknown step reference: if &lt;context&gt; references a
          step id that does not exist in &lt;flow&gt;, the agent MUST
          ignore the &lt;context&gt; element and MUST NOT attempt to
          infer the current workflow position.</li>
          <li>Action endpoint unreachable: if the HTTP request to an
          action endpoint fails with a network error, the agent MUST
          NOT retry automatically more than once. The agent SHOULD
          inform the user of the failure.</li>
          <li>Document parse failure: if an ANML document cannot be
          parsed as well-formed XML or valid JSON, the agent MUST NOT
          process any part of the document and MUST inform the user
          that the service returned an invalid document.</li>
          <li>Circular flow reference: if a &lt;flow&gt; contains
          steps that reference each other in a cycle with no exit
          condition, the agent MUST detect this and terminate
          processing of the &lt;flow&gt; element.</li>
          <li>Conflicting constraints: if two &lt;disclosure&gt;
          elements conflict for the same field, the agent MUST apply
          the more restrictive constraint.</li>
        </ul>
      </section>

      <section numbered="true" toc="include">
        <name>Pagination Behavior</name>
        <t>The &lt;nav&gt; element within &lt;body&gt; provides
        next, prev, and cursor references for multi-page result sets.
        The following normative behavior applies:</t>
        <ul>
          <li>Agents SHOULD follow pagination only when the user has
          expressed interest in additional results or when the agent
          determines that additional results are necessary to fulfill
          the user's request.</li>
          <li>Agents SHOULD NOT automatically fetch all pages of a
          paginated result set without user awareness.</li>
          <li>Implementations SHOULD impose a maximum of 10 pages per
          interaction to prevent runaway pagination. Implementations
          MAY exceed this limit with explicit user authorization.</li>
          <li>Services MUST NOT use pagination as a mechanism to force
          agents to make an unbounded number of requests. A service
          SHOULD indicate the total number of available items in the
          total attribute of &lt;nav&gt; where known.</li>
          <li>Agents MUST detect and terminate pagination loops: if a
          next URI matches a URI already retrieved in the current
          interaction, the agent MUST stop following pagination.</li>
        </ul>
      </section>

      <section numbered="true" toc="include">
        <name>Examples</name>
        <t>Example agent response with multiple answers and a
        counter-ask:</t>
        <sourcecode type="xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<anml xmlns="urn:ietf:params:xml:ns:anml:1.0">
  <knowledge>
    <answer field="destination" value="LAX" consent="explicit"/>
    <refuse field="airline"
            reason="user-denied"
            message="User prefers not to share airline preference."/>
    <ask field="available-dates"
         action="submit-booking"
         purpose="Required to show available flights"/>
    <inform>User prefers morning departures before 10:00 AM.</inform>
  </knowledge>
</anml>]]></sourcecode>

        <t>Example service response with pagination and status:</t>
        <sourcecode type="xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<anml xmlns="urn:ietf:params:xml:ns:anml:1.0">
  <status code="200" result="success"
          message="Found 47 flights matching your criteria."/>
  <body>
    <data id="flights" label="Available flights">
      <item id="f1">
        <field name="airline" type="string">Example Air</field>
        <field name="departure"
               type="datetime">2026-05-01T08:00Z</field>
        <field name="price" type="number">349</field>
      </item>
      <item id="f2">
        <field name="airline" type="string">Globe Wings</field>
        <field name="departure"
               type="datetime">2026-05-01T10:30Z</field>
        <field name="price" type="number">412</field>
      </item>
    </data>
    <nav next="/flights?page=2" total="47" cursor="eyJwYWdlIjoyfQ"/>
  </body>
  <state>
    <context><step>select</step></context>
  </state>
</anml>]]></sourcecode>
      </section>
    </section>

    <!-- Section 11: Brand Trust Delegation -->
    <section anchor="trust-delegation" numbered="true" toc="include">
      <name>Site Trust Delegation</name>

      <t>ANML documents may be served by parties other than the site
      whose identity they assert. A large retailer may serve brand
      content under a commercial authorization. A small independent
      retailer may carry products without any formal authorization
      relationship. A CDN may serve cached documents on behalf of
      an origin. In all of these cases, TLS certificate verification
      establishes only that the agent is talking to the serving
      domain — it says nothing about whether that domain is
      authorized to assert the identity of another site.</t>

      <t>This section defines the ANML Trust Delegation mechanism.
      It is modeled on the DKIM pattern: a small DNS TXT record
      at the site's domain serves as the single bootstrap entry
      point, advertising where authorization data can be found.
      The authorization data itself lives in a static manifest,
      a live query endpoint, or both — but never in DNS directly.
      This keeps DNS records small and stable regardless of how
      many partners a site authorizes, while giving sites the
      flexibility to choose the authorization mechanism that fits
      their scale and operational requirements.</t>

      <section anchor="trust-tiers" numbered="true" toc="include">
        <name>Trust Tiers</name>

        <t>ANML defines three trust tiers for third-party serving
        parties. The site's own canonical domain operates as an
        implicit Tier 3 — full trust, no verification required.</t>

        <dl>
          <dt>Tier 0 — Unlisted</dt>
          <dd>No authorization record exists for the serving
          domain, or no DNS bootstrap record exists for the
          asserted site, or verification fails for any reason.
          This is the default for any third-party domain.

          Permitted: the serving party MAY assert its own
          identity fully; MAY include &lt;site-ref&gt; elements
          pointing to other sites' canonical ANML documents; MAY
          include a &lt;trust&gt; element or trust-manifest
          attribute to invite the agent to attempt verification
          (the invitation itself is not an assertion).

          Prohibited: the serving party MUST NOT assert any
          identity sections (&lt;persona&gt;, &lt;aesthetic&gt;,
          &lt;knowledge&gt;, &lt;interact&gt;, &lt;constraints&gt;)
          on behalf of any other site. Verification failure
          always results in Tier 0. Agents MUST NOT apply
          partial trust on a failed verification.</dd>

          <dt>Tier 1 — Display Authorization</dt>
          <dd>The serving domain is authorized with a restricted
          scope. Appropriate for CDNs, aggregators, and
          display-only resellers. Permitted sections: "aesthetic",
          "body", and "knowledge" limited to
          confidentiality="public" inform elements. Prohibited
          regardless of scope array: "persona", "interact",
          "constraints". The tier integer is normative; scope
          arrays for Tier 1 entries that include prohibited
          sections MUST be silently truncated by the agent to
          exclude those sections.</dd>

          <dt>Tier 2 — Full Authorization</dt>
          <dd>The serving domain is authorized with an explicit
          scope defined by the site. Appropriate for authorized
          retail partners and licensed distributors. The scope
          array defines exactly which sections may be asserted.
          The tier integer is normative and takes precedence over
          the scope array if they conflict.</dd>
        </dl>
      </section>

      <section anchor="trust-dns" numbered="true" toc="include">
        <name>DNS Bootstrap Record</name>

        <t>The DNS bootstrap record is the single entry point for
        trust discovery. It is a DNS TXT record published by the
        site being represented at a fixed subdomain convention.
        Its only purpose is to advertise where authorization data
        can be found. It contains no authorization data itself —
        keeping the record small and stable regardless of how many
        partners a site authorizes.</t>

        <t>The record format follows the tag-list convention
        established by DKIM <xref target="RFC6376"/> (Section 3.2)
        and SPF <xref target="RFC7208"/> (Section 4.6): a sequence
        of key=value pairs separated by semicolons, with defined
        parsing semantics. Agents MUST parse _anml TXT records
        using the tag-list rules defined in this section, which
        are consistent with those RFCs.</t>

        <t>Rationale for reusing this format: the tag-list
        convention from RFC 6376 and RFC 7208 is already implemented
        by every major DNS management platform, monitoring tool, and
        DNS analysis service. Reusing the format means operators can
        inspect, validate, and debug _anml records using existing
        tooling without new software. This is a deliberate
        operational engineering choice, not a dependency on email
        authentication semantics.</t>

        <t>The record is published at:</t>
        <artwork><![CDATA[
_anml.{site-domain}  IN  TXT  "v=anml1; [manifest=URI;] [query=URI]"
        ]]></artwork>

        <t>Example:</t>
        <artwork><![CDATA[
_anml.example.com  IN  TXT  "v=anml1; manifest=https://example.com/.well-known/anml-trust; query=https://trust.example.com/anml/authorize"
        ]]></artwork>

        <section anchor="trust-dns-abnf" numbered="true" toc="include">
          <name>Tag-List Syntax</name>

          <t>The following ABNF <xref target="RFC5234"/> defines the
          _anml TXT record syntax. This grammar is consistent with
          the DKIM tag-list grammar defined in RFC 6376 Section 3.2
          and the SPF record grammar in RFC 7208 Section 4.6.</t>

          <artwork><![CDATA[
anml-record    = tag-list
tag-list       = tag *( ";" tag ) [ ";" ]
tag            = tag-name "=" tag-value
tag-name       = ALPHA *ALNUMPUNC
tag-value      = *( %x21-3A / %x3C-7E )
                 ; printable ASCII except ";" (%x3B)
                 ; "=" (%x3D) is permitted in tag-value
                 ; (e.g., within URI query strings)
ALNUMPUNC      = ALPHA / DIGIT / "_" / "-" / "."
version-tag    = %s"v" "=" %s"anml1"
manifest-tag   = %s"manifest" "=" URI
query-tag      = %s"query" "=" URI
URI            = <URI as defined in RFC 3986, Section 3>
          ]]></artwork>

          <t>Parsing rules (normative):</t>
          <ul>
            <li>Tag names are case-sensitive. "v=anml1" is valid;
            "V=anml1" MUST be ignored as unrecognized.</li>
            <li>Whitespace (SP, HTAB) before or after "=" or ";"
            MUST be ignored by parsers. Implementations MUST NOT
            include whitespace in generated records, but MUST
            tolerate it when parsing.</li>
            <li>Tag pairs MUST be split on the first ";" delimiter
            only. Within each tag pair, the tag-name and tag-value
            MUST be split on the FIRST "=" character only. All
            subsequent "=" characters within the tag-value are
            part of the value — for example, a URI query string
            such as "https://example.com/auth?a=1&amp;b=2" is a
            single tag-value. Parsers MUST NOT split on "="
            characters after the first "=" in a tag pair.</li>
            <li>Duplicate tag names within a single record are
            prohibited. If duplicate tag names are present, the
            agent MUST treat the entire record as malformed and
            ignore it.</li>
            <li>Unknown tag names MUST be ignored without error.
            This allows forward compatibility with future tag
            definitions.</li>
            <li>DNS TXT records are limited to 255 octets per
            string. Multiple strings in a single TXT RRset are
            concatenated in order per RFC 1035 Section 3.3.14.
            Agents MUST concatenate all strings in an _anml TXT
            record before parsing. If a URI value is split across
            string boundaries, it MUST be reassembled before
            use.</li>
            <li>A record without a recognized "v" tag MUST be
            ignored entirely. A record where v != "anml1" MUST
            be ignored. Agents MUST process a record only after
            confirming v=anml1. The "v" tag MUST appear first.</li>
            <li>At least one of "manifest" or "query" MUST be
            present in a valid record. A record with neither is
            malformed and MUST be ignored.</li>
          </ul>
        </section>

        <section anchor="trust-dns-fields" numbered="true" toc="include">
          <name>Record Fields</name>
          <dl>
            <dt>v</dt>
            <dd>Version tag. REQUIRED. MUST be the first tag in
            the record per DKIM convention (RFC 6376 Section 3.5).
            Current value: "anml1".</dd>
            <dt>manifest</dt>
            <dd>URI of the static Trust Manifest JSON document.
            MUST use the https scheme. MUST be served from the
            site's canonical domain. OPTIONAL if query is
            present.</dd>
            <dt>query</dt>
            <dd>URI of the live Trust Query endpoint. MUST use
            the https scheme. MAY be served from any domain —
            its authority derives from publication in the site's
            own DNS record. When DNSSEC is not available for the
            _anml record, agents SHOULD prefer the manifest
            (which requires TLS cert verification against the
            site domain) over the query endpoint. When DNSSEC
            is verified, agents MAY use the query endpoint
            without additional domain verification. OPTIONAL if
            manifest is present.</dd>

          </dl>
        </section>

        <section anchor="trust-dns-no-record" numbered="true" toc="include">
          <name>Absent or Invalid Records</name>
          <t>If no _anml TXT record exists for the asserted site
          domain, the agent MUST treat all third-party serving
          parties as Tier 0 for that site. The absence of a DNS
          record means the site has not published trust delegation
          — not that the site is absent or does not support ANML.</t>

          <t>A site domain MAY publish multiple _anml TXT records.
          Agents MUST process all records with a recognized version
          tag. If multiple records advertise both manifest and
          query URIs, agents SHOULD prefer the query endpoint.</t>

          <t>Sites SHOULD enable DNSSEC for their _anml records.
          Agents SHOULD verify DNSSEC signatures where available.
          A DNSSEC validation failure MUST be treated as a
          verification error — the agent MUST fall back to Tier 0
          and MUST NOT treat the failure as equivalent to a
          missing record.</t>
        </section>
      </section>

      <section anchor="trust-manifest" numbered="true" toc="include">
        <name>Static Trust Manifest</name>

        <t>The static Trust Manifest is a JSON document served at
        the URI advertised in the _anml DNS record. It is
        appropriate for sites with a small, stable set of
        authorized partners requiring no additional infrastructure
        beyond a web server. Served with Content-Type
        'application/anml-trust+json' over HTTPS from the site's
        canonical domain.</t>

        <sourcecode type="json"><![CDATA[
{
  "site": "example.com",
  "version": "1.0",
  "issued": "2026-05-01T00:00:00Z",
  "expires": "2026-08-01T00:00:00Z",
  "authorized-domains": [
    {
      "domain": "*.cdn.example.com",
      "tier": 1,
      "scope": ["aesthetic", "body"],
      "note": "CDN — display only"
    },
    {
      "domain": "example.net",
      "tier": 2,
      "scope": ["aesthetic", "persona", "knowledge"],
      "note": "Authorized retailer"
    },
    {
      "domain": "example.org",
      "tier": 2,
      "scope": ["aesthetic", "persona", "knowledge", "interact"],
      "note": "Preferred retailer — full delegation"
    }
  ]
}
        ]]></sourcecode>

        <t>Fields:</t>
        <dl>
          <dt>site</dt>
          <dd>Canonical domain of the site. REQUIRED. Agents
          MUST verify this matches the domain in the _anml DNS
          record used to discover this manifest. If it does not
          match, the manifest MUST be rejected and the agent
          MUST treat the serving party as Tier 0.</dd>
          <dt>version</dt>
          <dd>Manifest format version. REQUIRED. Current: "1.0".</dd>
          <dt>issued</dt>
          <dd>ISO 8601 datetime of issuance. REQUIRED.</dd>
          <dt>expires</dt>
          <dd>ISO 8601 datetime in UTC (Z suffix REQUIRED) at
          which this manifest expires. REQUIRED. RECOMMENDED
          maximum: 90 days from issued. Agents MUST NOT use an
          expired manifest and MUST treat an expired manifest
          as equivalent to a missing manifest — Tier 0.</dd>
          <dt>authorized-domains</dt>
          <dd>Array of authorization records. REQUIRED. An empty
          array means no third-party domains are authorized —
          all serving parties operate at Tier 0 for this site.</dd>
        </dl>

        <t>Each authorization record:</t>
        <dl>
          <dt>domain</dt>
          <dd>Authorized domain or wildcard. A wildcard of the
          form '*.example.com' matches any single DNS label
          prepended to 'example.com' per RFC 1034, and does NOT
          match the apex domain itself or any multi-level
          subdomain. REQUIRED.</dd>
          <dt>tier</dt>
          <dd>Integer 1 or 2. Normative. Takes precedence over
          scope when they conflict. REQUIRED.</dd>
          <dt>scope</dt>
          <dd>Array of ANML section names the domain is
          authorized to assert. Valid values: "head", "persona",
          "aesthetic", "knowledge", "interact", "constraints",
          "body", "footer". REQUIRED.</dd>
          <dt>note</dt>
          <dd>Human-readable description. OPTIONAL.</dd>
        </dl>
      </section>

      <section anchor="trust-query" numbered="true" toc="include">
        <name>Live Trust Query Endpoint</name>

        <t>The live Trust Query endpoint allows a site to answer
        per-domain authorization queries in real time without
        publishing a manifest listing every authorized partner.
        Appropriate for sites with large or frequently changing
        partner sets, or sites requiring real-time revocation.
        The endpoint URI is authoritative because it is published
        in the site's own _anml DNS record. When DNSSEC is
        verified for the _anml record, agents MAY use the query
        endpoint without additional TLS domain verification. When
        DNSSEC is unavailable, agents SHOULD prefer the manifest,
        which requires TLS certificate verification against the
        site domain.</t>

        <t>Scope of this mechanism: the trust delegation defined
        in this section applies exclusively to ANML document
        serving parties. It does not apply to Trust Manifest or
        Trust Query endpoint responses, which are processed as
        raw JSON data. Agents MUST NOT apply ANML document parsing,
        trust tier evaluation, or &lt;trust&gt; element processing
        to responses received from Trust Manifest or Trust Query
        endpoints — these responses are authorization data, not
        ANML documents.</t>

        <t>Query:</t>
        <artwork><![CDATA[
GET {query-uri}?domain={serving-domain}&scope={comma-separated-sections}
Accept: application/json
        ]]></artwork>

        <t>Example:</t>
        <artwork><![CDATA[
GET https://trust.example.com/anml/authorize?domain=example.net&scope=persona,aesthetic,knowledge
        ]]></artwork>

        <t>Response when authorized (HTTP 200):</t>
        <sourcecode type="json"><![CDATA[
{
  "authorized": true,
  "tier": 2,
  "scope": ["persona", "aesthetic", "knowledge"],
  "expires": "2026-08-01T00:00:00Z"
}
        ]]></sourcecode>

        <t>Response when not authorized: the endpoint MUST return
        HTTP 404 (Not Found) with an empty body or minimal
        diagnostic JSON. The endpoint MUST NOT return HTTP 200
        with an "authorized": false body. Returning 404 for
        unauthorized domains prevents enumeration of a site's
        authorized partner list: an agent or third party probing
        the endpoint cannot distinguish "not authorized" from
        "we have no record of this domain," which limits
        competitive intelligence leakage. Agents MUST treat a
        404 response as a definitive negative authorization and
        MUST cache it as such for the duration of the applicable
        DNS TTL of the _anml record.</t>

        <t>Response fields (HTTP 200 only):</t>
        <dl>
          <dt>authorized</dt>
          <dd>Boolean true. REQUIRED. Always true in a 200
          response — a negative result is indicated by HTTP
          404, not by this field.</dd>
          <dt>tier</dt>
          <dd>Integer 1 or 2. REQUIRED. Normative — takes
          precedence over the scope array if they conflict.</dd>
          <dt>scope</dt>
          <dd>Array of authorized section names. REQUIRED.
          MAY be a subset of the requested scope. The agent
          MUST use only the returned scope, not the requested
          scope.</dd>
          <dt>expires</dt>
          <dd>ISO 8601 datetime in UTC (Z suffix REQUIRED)
          after which this authorization MUST be revalidated.
          REQUIRED. Agents MUST cache 200 responses until
          this time. Agents SHOULD revalidate in the background
          before expiry to avoid authorization gaps.</dd>
        </dl>

        <t>HTTP status codes:</t>
        <ul>
          <li>200 OK — domain is authorized. Body contains
          tier, scope, and expires.</li>
          <li>404 Not Found — domain is not authorized.
          Agent MUST cache this as a negative result.</li>
          <li>400 Bad Request — malformed query. Agent MUST
          treat as Tier 0 and SHOULD log.</li>
          <li>429 Too Many Requests — agent MUST respect
          Retry-After and MUST treat as Tier 0 for the
          current interaction.</li>
          <li>5xx Server Error — transient. Agent SHOULD
          fall back to the static manifest if available in
          the DNS record. If unavailable, agent MUST treat
          as Tier 0.</li>
        </ul>

        <t>Cache key: agents MUST cache query results keyed
        on the tuple (serving-domain, site-domain). The cached
        value is the full authorization record including tier,
        scope, and expires. When a new request arrives, the
        agent checks the cache for (serving-domain, site-domain),
        retrieves the full authorization, and applies the
        intersection of the cached scope with the requested scope
        locally — without issuing a new network request. The
        endpoint is queried at most once per (serving-domain,
        site-domain) pair per TTL period regardless of the
        scope requested. The same cache key applies to both
        manifest lookups and query endpoint responses.</t>
      </section>

      <section anchor="trust-delegation-element" numbered="true" toc="include">
        <name>The trust Element and Verification Procedure</name>

        <t>An ANML document asserting a third-party site identity
        MUST include either a &lt;trust&gt; element in its
        &lt;head&gt; section (single-site documents) or a
        the &lt;site&gt; element with a domain attribute differing
        from the serving domain (multi-site documents). Without
        one of these, the agent MUST treat all third-party site
        identity assertions as Tier 0.</t>

        <t>In single-site documents the &lt;trust&gt; element
        carries only the site domain — the agent discovers the
        manifest and query endpoints via DNS, keeping the ANML
        document itself free of authorization infrastructure
        details:</t>

        <artwork><![CDATA[
<!-- Single-site -->
<head>
  <title>Example Product 30 oz — Independent Retailer</title>
  <trust domain="example.com"/>
</head>

<!-- Multi-site -->
<site domain="example.com">
  <persona>...</persona>
</site>
        ]]></artwork>

        <t>Attributes of &lt;trust&gt;:</t>
        <dl>
          <dt>domain</dt>
          <dd>Canonical domain of the site being asserted.
          REQUIRED. The agent uses this value to look up the
          _anml DNS TXT record.</dd>
        </dl>

        <t>Agent verification procedure:</t>
        <ol>
          <li>Extract site domain from &lt;trust&gt;/@site
          or &lt;site&gt;/@domain.</li>
          <li>Look up _anml.{site-domain} TXT records via DNS.
          If no record exists with a recognized version tag,
          treat as Tier 0.</li>
          <li>Parse the record for manifest and query URIs.</li>
          <li>Check cache for a valid non-expired authorization
          for the tuple (serving-domain, site-domain). If found,
          use it and skip to step 9.</li>
          <li>If a query URI is advertised, send a query request
          per Section 12.4. On 200 response, proceed to step 8.
          On 5xx or network error, fall back to step 6.</li>
          <li>If a manifest URI is advertised (and query was
          unavailable or failed), fetch the manifest over HTTPS.
          Verify TLS certificate matches the site domain. If
          fetch fails or certificate is invalid, treat as Tier 0.
          Verify the manifest site field matches the asserted
          site domain. Verify the manifest has not expired.</li>
          <li>Search authorized-domains for the serving domain,
          using wildcard matching per RFC 1034. If not found,
          treat as Tier 0.</li>
          <li>Extract tier and scope from the query response or
          manifest entry.</li>
          <li>Apply Tier 1 or Tier 2 permissions per Section
          12.1. Process only in-scope sections as site
          assertions. Cache the result with its expiry.
          Sections not in scope are treated as assertions of
          the serving domain only, subject to Tier 0 rules.</li>
        </ol>

        <t>Any verification failure at any step MUST result in
        Tier 0 for the asserted site. Agents MUST NOT apply
        partial trust. The serving domain's own identity is
        unaffected by a failed verification for a third-party
        site.</t>
      </section>

      <section anchor="trust-site-ref" numbered="true" toc="include">
        <name>The site-ref Element</name>

        <t>A Tier 0 serving party that carries content from
        third-party sites MAY use &lt;site-ref&gt; to point
        agents to those sites' canonical ANML documents. This
        is a pointer, not a delegation — the serving party makes
        no identity assertions about the referenced site.</t>

        <artwork><![CDATA[
<head>
  <title>Independent Retailer — Outdoor Gear</title>
  <site-ref domain="example.com"
            canonical="https://example.com/.well-known/anml"
            relationship="carries-products"/>
</head>
        ]]></artwork>

        <t>Attributes:</t>
        <dl>
          <dt>domain</dt>
          <dd>Canonical domain of the referenced site. REQUIRED.</dd>
          <dt>canonical</dt>
          <dd>URI of the site's own ANML document. Agents SHOULD
          fetch this URI for all &lt;site-ref&gt; elements present
          in a document when processing that document, up to an
          implementation-defined maximum number of site-ref fetches
          per document (RECOMMENDED maximum: 5). This is a
          mechanical rule — agents MUST NOT condition the fetch on
          an interpretation of user intent. If the fetch fails or
          the TLS certificate is invalid, the agent MUST treat the
          referenced site as unknown and MUST NOT use any cached
          or inferred identity for it. REQUIRED.</dd>
          <dt>relationship</dt>
          <dd>Nature of the relationship. Values from the ANML
          Site Relationship Values registry (Section 15.6).
          OPTIONAL.</dd>
        </dl>

        <t>A document fetched via &lt;site-ref&gt; is processed
        as a Tier 3 document — full trust from the canonical
        domain. &lt;site-ref&gt; does not elevate the serving
        party's trust tier. The serving party's own identity
        sections remain subject to Tier 0 restrictions.</t>
      </section>

      <section anchor="trust-multi-site" numbered="true" toc="include">
        <name>Multi-Site Documents and Layered Identity Attack Prevention</name>

        <t>A serving party MAY publish an ANML document that presents
        identity for both itself and authorized third-party sites. This
        is a legitimate and common use case: a retailer's product page
        carries the retailer's own identity (interactions, service
        persona) alongside the product manufacturer's identity (product
        voice, aesthetic, knowledge). The &lt;site&gt; wrapper element
        (Section 8.2) provides the structural mechanism for this.</t>

        <t>A document with identity assertions for more than one domain
        MUST use the multi-site content model: all identity sections
        are wrapped in &lt;site&gt; elements, one per domain. This
        replaces the single-site content model where identity sections
        appear directly under &lt;anml&gt;. The structural separation
        of identity by domain prevents the layered identity attack
        described below.</t>

        <t>The layered identity attack: a malicious serving party
        blurs the boundary between its own assertions and those of a
        more trusted site, causing the agent to attribute the serving
        party's content to the trusted site, or to apply the trusted
        site's permission tier to the serving party's own sections.
        The &lt;site&gt; wrapper prevents this by making domain
        attribution structural rather than attributional — there is
        no attribute to forge, only a wrapper element whose domain
        is verified independently.</t>

        <t>Normative rules for multi-site documents:</t>
        <ul>
          <li>Each &lt;site&gt; element's domain attribute MUST match
          exactly one domain. The agent MUST apply trust tier
          verification independently to each &lt;site&gt; element
          whose domain differs from the serving domain.</li>
          <li>A Tier 2 authorization for one site MUST NOT elevate
          the trust tier of the serving domain's own &lt;site&gt;
          element.</li>
          <li>The agent MUST NOT merge or blend identity sections
          from different &lt;site&gt; elements. Each site's persona,
          aesthetic, and knowledge are evaluated and applied
          independently.</li>
          <li>A &lt;site&gt; element containing an &lt;interact&gt;
          section is attributed exclusively to that site's domain.
          The agent MUST NOT execute an action from a third-party
          &lt;site&gt; element unless the trust manifest for that
          site's domain explicitly includes "interact" in scope.</li>
          <li>If a &lt;persona&gt; or &lt;instructions&gt; element
          within any &lt;site&gt; references or attempts to invoke
          another site's identity, the agent MUST treat this as a
          prompt injection attempt.</li>
          <li>An agent MUST be able to explain to a user, on request,
          which identity assertions came from which site domain and
          at which trust tier.</li>
        </ul>

        <t>Example of a conforming multi-site document (example.net
        serving a Example Brand product page; example.net holds Tier 2
        authorization from example.com for persona, aesthetic, and
        knowledge):</t>

        <sourcecode type="xml"><![CDATA[
<anml xmlns="urn:ietf:params:xml:ns:anml:1.0">

  <!-- example.net's own identity — serving domain, Tier 3, no verification -->
  <site domain="example.net">
    <head>
      <title>Example Product 30 oz — Example Retailer</title>
      <site-ref site="example.com"
                canonical="https://example.com/.well-known/anml"
                relationship="carries-products"/>
    </head>
    <persona>
      <tone value="helpful"/>
      <instructions>Assist the user with purchase and delivery
      questions for this order.</instructions>
    </persona>
    <interact>
      <action id="add-to-cart" method="POST"
              endpoint="/cart/add" confirm="true"/>
    </interact>
  </site>

  <!-- Example Brand's authorized identity — Tier 2, scope verified by agent -->
  <!-- Agent automatically looks up _anml.example.com for verification -->
  <site domain="example.com">
    <persona>
      <tone value="rugged"/>
      <instructions>Speak to Example Brand's product quality, materials,
      and warranty. Do not discuss pricing or delivery.</instructions>
    </persona>
    <aesthetic>
      <display-name>Example Brand</display-name>
    </aesthetic>
    <knowledge>
      <inform>The Rambler 30 oz is made from 18/8 stainless steel
      and is dishwasher safe.</inform>
    </knowledge>
  </site>

</anml>
        ]]></sourcecode>

        <t>An agent processing this document MUST apply Example Brand's persona
        and knowledge only in the context of product information, apply
        example.net's persona for purchase and logistics, and attribute the
        add-to-cart action exclusively to example.net. The agent MUST
        NOT represent the add-to-cart action as an example.com-defined
        interaction because "interact" is not in Example Brand's authorized
        scope for example.net.</t>

        <t>Note: the &lt;trust&gt; element used in single-site trust
        verification (Section 12.3) is replaced in multi-site documents
        by the domain and trust-manifest attributes on the &lt;site&gt;
        element. Both mechanisms initiate the same agent verification
        procedure defined in Section 12.4.</t>
      </section>


      <section anchor="trust-delegation-security" numbered="true" toc="include">
        <name>Security Considerations for Trust Delegation</name>

        <t>The Trust Delegation mechanism is bounded by the security
        of the brand's canonical domain. A compromised brand domain
        can issue fraudulent Trust Manifests. Brands SHOULD:</t>
        <ul>
          <li>Set manifest expiry to 30-90 days maximum.</li>
          <li>Scope authorizations as narrowly as commercially
          necessary.</li>
          <li>Audit authorized-domains quarterly and remove
          inactive partners immediately.</li>
          <li>Use DNSSEC to prevent DNS-based manifest
          hijacking.</li>
          <li>Monitor for unauthorized &lt;trust&gt; elements
          claiming their domain from third-party sites.</li>
        </ul>

        <t>Agents MUST NOT:</t>
        <ul>
          <li>Accept Trust Manifests over unencrypted HTTP.</li>
          <li>Accept self-signed certificates for manifest
          endpoints.</li>
          <li>Cache manifests beyond their expires value.</li>
          <li>Apply a Tier 2 scope to a domain listed as
          Tier 1.</li>
          <li>Allow &lt;site-ref&gt; to elevate the serving
          party's trust tier.</li>
        </ul>
      </section>
    </section>


    <section anchor="security" numbered="true" toc="include">
      <name>Security Considerations</name>
      <t>ANML defines document structure and interaction semantics. It does
      not enforce security, privacy, or access control at the protocol
      level. Agent developers and service operators are responsible for
      implementing safety, privacy, and policy controls appropriate to
      their deployment context. This section provides a structured threat
      model and MUST-level guidance for conforming implementations.</t>

      <t>ANML documents are processed by autonomous agents that may act
      without direct human oversight at each step. The attack surface
      includes the document itself, the service publishing it, the agent
      processing it, and the transport layer.</t>

      <section anchor="security-threat-model" numbered="true" toc="include">
        <name>Threat Model</name>
        <t>The following threat actors and scenarios are in scope for
        this specification:</t>
        <ul>
          <li>A malicious service publishing a crafted ANML document to
          manipulate agent behavior, extract user data, or cause the agent
          to execute harmful actions.</li>
          <li>A malicious agent submitting false or manipulated answers
          to exploit service logic, obtain resources it is not authorized
          to receive, or poison service-side state.</li>
          <li>A network adversary intercepting or modifying ANML documents
          in transit to alter interaction semantics or inject malicious
          content.</li>
          <li>A malicious document delivered via a compromised or
          typosquatted well-known URI, targeting agents that discover
          ANML documents automatically.</li>
          <li>An honest but misconfigured service that inadvertently
          exposes sensitive information through poorly specified ask
          elements or unconstrained inform elements.</li>
        </ul>
        <t>The following are explicitly out of scope: compromise of the
        agent runtime environment, attacks on the user's device or
        operating system, and attacks that exploit vulnerabilities in the
        underlying XML parser beyond those addressed in this section.</t>
      </section>

      <section anchor="security-disclosure" numbered="true" toc="include">
        <name>Information Disclosure via Knowledge Exchange</name>
        <t>The &lt;ask&gt; element requests information from the agent
        on behalf of a service. This presents a significant data
        exfiltration risk if agents respond without rigorous evaluation
        of consent and constraints.</t>
        <t>Conforming agents MUST:</t>
        <ul>
          <li>Evaluate all applicable &lt;constraints&gt; before
          responding to any &lt;ask&gt;.</li>
          <li>Obtain explicit or implicit user consent, as required by
          the applicable &lt;disclosure&gt; element, before disclosing
          any information.</li>
          <li>Treat the absence of a &lt;constraints&gt; section as
          equivalent to requires="none" for all fields — not as
          authorization to disclose without evaluation.</li>
          <li>Apply the principle of minimum necessary disclosure:
          provide only the fields explicitly requested by the
          &lt;ask&gt; elements in the current document, limited
          to the values strictly required to fulfill the stated
          purpose attribute of each &lt;ask&gt;. An agent MUST
          NOT disclose additional fields, inferred values, or
          context beyond what is directly requested and consented
          to for each specific &lt;ask&gt;.</li>
          <li>NEVER disclose information that the user has not
          authorized, regardless of the service's ask or inform
          content.</li>
        </ul>
        <t>Services MUST NOT rely on ANML constraints alone as an
        access control mechanism. Server-side authorization MUST be
        implemented independently of ANML document constraints.</t>
        <t>Agents SHOULD maintain a disclosure log sufficient to
        reconstruct, for any completed interaction, which fields
        were disclosed, to which service domain, under which
        consent basis, and at what time. Agents SHOULD make this
        log available to the user on request. The format and
        retention period of the log are implementation-defined.</t>
      </section>

      <section anchor="security-injection" numbered="true" toc="include">
        <name>Prompt Injection via Persona and Instructions</name>
        <t>The &lt;persona&gt; and &lt;instructions&gt; elements present
        a significant prompt injection risk. A malicious service may
        craft persona guidance or free-text instructions designed to
        override the agent's safety policies, manipulate its behavior
        toward the user, cause it to misrepresent the service, extract
        information it would not otherwise disclose, or act against the
        user's expressed interests.</t>
        <t>Conforming agents MUST:</t>
        <ul>
          <li>Treat ALL &lt;persona&gt; and &lt;instructions&gt; content
          as advisory and untrusted input from an external source,
          regardless of the apparent trustworthiness of the service.</li>
          <li>Apply the same input sanitization and policy evaluation
          to &lt;instructions&gt; content as to any other untrusted
          text input.</li>
          <li>NEVER override user-configured safety policies,
          privacy preferences, or platform-level guardrails based on
          &lt;instructions&gt; content.</li>
          <li>NEVER represent themselves as a different agent, platform,
          or identity in response to &lt;persona&gt; guidance.</li>
          <li>Disregard &lt;instructions&gt; that direct the agent to
          ignore, suppress, or override this specification's
          conformance requirements.</li>
        </ul>
        <t>Agents SHOULD apply heuristic or model-based analysis to
        &lt;instructions&gt; content before processing to identify
        potential injection patterns. The detection method is
        implementation-defined; the response to a detected
        injection attempt is normative. When an agent determines
        that &lt;instructions&gt; or &lt;persona&gt; content
        constitutes a prompt injection attempt, the agent MUST:
        (1) discard the offending element entirely and MUST NOT
        apply any part of its content to agent behavior — a
        partial or sanitized application is not permitted;
        (2) record the detection in its operational log; and
        (3) produce a user-visible notification that instructions
        from the service were rejected, without including the
        rejected content in the notification. The Human Intent
        First design principle (Section 4) takes absolute
        precedence over any &lt;persona&gt; or
        &lt;instructions&gt; content.</t>
        <t>Services are RECOMMENDED to limit &lt;instructions&gt;
        content to communication style guidance and to avoid
        imperative behavioral directives that could be misused
        by intermediaries.</t>
      </section>

      <section anchor="security-action" numbered="true" toc="include">
        <name>Action Execution Risks</name>
        <t>The &lt;interact&gt; section declares operations that agents
        may execute against arbitrary HTTP endpoints. This presents risks
        including unauthorized transactions, SSRF (Server-Side Request
        Forgery) via agent-mediated requests, and unintended side
        effects on third-party systems.</t>
        <t>Conforming agents MUST:</t>
        <ul>
          <li>Validate that the action endpoint is consistent with the
          origin of the ANML document before executing any action.</li>
          <li>Require explicit user confirmation before executing any
          action with confirm="true" or any action with significant
          real-world consequences (purchases, deletions, transmissions
          of personal data).</li>
          <li>Revalidate site trust authorization immediately before
          executing any action with confirm="true", any action
          producing a financial transaction, booking, or irreversible
          state change, or any action that discloses personal data.
          Revalidation MUST query the trust endpoint or fetch the
          manifest fresh — a cached authorization result MUST NOT be
          used for these action classes regardless of its expires
          value. This prevents execution of actions under trust
          authorization that has been revoked since document parse
          time. See Section 12 for the trust verification
          procedure.</li>
          <li>NEVER execute actions that conflict with user-expressed
          intent or platform safety policies.</li>
          <li>Apply rate limiting to action execution to prevent
          runaway automation.</li>
          <li>NOT follow action endpoint redirects to different origins
          without re-validating user intent.</li>
        </ul>
        <t>Services SHOULD use the idempotent attribute to indicate
        safe retry behavior and the confirm attribute for all
        consequential actions.</t>
      </section>

      <section anchor="security-xxe" numbered="true" toc="include">
        <name>XML External Entity (XXE) Attacks</name>
        <t>Conforming agents and ANML document validators MUST NOT
        process DOCTYPE declarations, internal DTD subsets, or external
        entity references in ANML documents. Conforming ANML documents
        SHOULD NOT include a DOCTYPE declaration. If a DOCTYPE
        declaration is present, the agent MUST ignore it and MUST NOT
        resolve any entities defined within it. Parsers configured to
        resolve external entities MUST NOT be used to parse ANML
        documents.</t>
      </section>

      <section anchor="security-spoofing" numbered="true" toc="include">
        <name>Agent Spoofing and Service Impersonation</name>
        <t>ANML does not define agent authentication mechanisms. A
        service cannot cryptographically verify the identity of the
        agent submitting an answer, nor can an agent cryptographically
        verify that an ANML document originates from the claimed
        service without additional mechanisms.</t>
        <t>Services that require verified agent identity SHOULD use
        existing HTTP authentication mechanisms (OAuth 2.0, API keys,
        mutual TLS) in conjunction with ANML interactions.</t>
        <t>Agents SHOULD verify the TLS certificate of the service
        before processing an ANML document retrieved over HTTPS.
        Agents SHOULD treat ANML documents retrieved over unencrypted
        HTTP as untrusted and MUST NOT submit &lt;answer&gt; responses
        to services communicating over unencrypted HTTP.</t>
        <t>Agents SHOULD apply heuristics to detect service
        impersonation, including verification that the well-known URI
        origin matches the domain of links and action endpoints in the
        document.</t>
      </section>

      <section anchor="security-malicious" numbered="true" toc="include">
        <name>Malicious ANML Documents</name>
        <t>A malicious ANML document may attempt to exhaust agent
        resources through excessive nesting depth, very large element
        counts, unbounded &lt;body&gt; content, or circular references
        in &lt;flow&gt; elements.</t>
        <t>Conforming agents MUST impose implementation-defined limits
        on:</t>
        <ul>
          <li>Document size (RECOMMENDED maximum: 1MB)</li>
          <li>Element nesting depth (RECOMMENDED maximum: 32 levels)</li>
          <li>Number of &lt;action&gt; elements (RECOMMENDED maximum:
          64 per document)</li>
          <li>Number of &lt;ask&gt; elements (RECOMMENDED maximum: 32
          per document)</li>
          <li>Number of HTTP requests generated from processing a single
          document (RECOMMENDED maximum: 8)</li>
          <li>Total processing time per document</li>
        </ul>
        <t>Agents MUST detect and terminate processing of circular
        &lt;flow&gt; references.</t>
      </section>

      <section anchor="security-constraint-bypass" numbered="true" toc="include">
        <name>Constraint Bypass</name>
        <t>The &lt;constraints&gt; section declares disclosure rules
        that conforming agents must evaluate. However, a non-conforming
        or malicious agent may ignore these constraints entirely.
        Services MUST NOT rely on ANML constraint declarations as the
        sole mechanism for protecting sensitive information. Server-side
        access control, authentication, and authorization MUST be
        implemented independently.</t>
        <t>The absence of a &lt;constraints&gt; section does not
        imply authorization to disclose any particular information.
        Agents MUST apply default-deny disclosure policies in the
        absence of explicit user consent.</t>
      </section>

      <section anchor="security-replay" numbered="true" toc="include">
        <name>Replay and State Manipulation</name>
        <t>An agent or network adversary may attempt to replay
        previously captured ANML responses or manipulate
        &lt;state&gt; content to advance or regress a multi-step
        workflow without authorization.</t>
        <t>Services MUST NOT trust agent-provided state values
        without independent server-side validation. Services SHOULD
        use cryptographic nonces or session tokens to bind state to
        a specific interaction sequence. Services MAY apply HTTP
        Message Signatures <xref target="RFC9421"/> to ANML
        responses to detect tampering.</t>
      </section>

      <section anchor="security-dos" numbered="true" toc="include">
        <name>Denial of Service</name>
        <t>Conforming agents SHOULD impose resource limits on ANML
        document processing as described in Section 11.7. Services
        SHOULD apply rate limiting to ANML document endpoints,
        particularly well-known URIs which are publicly discoverable
        and may be targeted by automated crawlers. Services SHOULD
        return HTTP 429 (Too Many Requests) with appropriate
        Retry-After headers when rate limits are exceeded.</t>
      </section>

      <section anchor="security-cors" numbered="true" toc="include">
        <name>Cross-Origin Considerations</name>
        <t>Agents SHOULD apply origin-based security policies when
        retrieving resources referenced within ANML documents,
        consistent with the same-origin policy principles established
        for web browsers. Action endpoints that differ in origin from
        the ANML document SHOULD require additional user confirmation.
        Agents SHOULD NOT automatically follow links or retrieve
        resources from origins not established in the initial ANML
        document without user awareness.</t>
      </section>

      <section anchor="security-transport" numbered="true" toc="include">
        <name>Transport Security</name>
        <t>Services MUST serve ANML documents over HTTPS with valid
        TLS certificates. Agents MUST verify TLS certificates when
        retrieving ANML documents. Agents MUST NOT submit
        &lt;answer&gt; elements containing personal information to
        services communicating over unencrypted HTTP. Agents SHOULD
        refuse to process &lt;interact&gt; action endpoints that
        specify HTTP (non-TLS) URIs unless the user has explicitly
        acknowledged the risk.</t>
      </section>
    </section>

    <!-- Section 11b: Privacy Considerations -->
    <section anchor="privacy" numbered="true" toc="include">
      <name>Privacy Considerations</name>
      <t>ANML introduces a structured mechanism for information exchange
      between services and agents acting on behalf of users. This
      section addresses the privacy implications of that mechanism,
      with particular attention to the cross-session, cross-platform
      context portability enabled by the knowledge exchange
      framework.</t>

      <section anchor="privacy-user-control" numbered="true" toc="include">
        <name>User Control and Consent</name>
        <t>The foundational privacy principle of ANML is that the user
        controls what the agent discloses. The &lt;ask&gt; / &lt;answer&gt;
        framework is designed as a consent mechanism, not a data
        extraction mechanism. The following conformance requirements
        govern agent disclosure behavior:</t>
        <ul>
          <li>Agents MUST NOT disclose information in response to an
          &lt;ask&gt; without first evaluating applicable constraints
          and determining that disclosure is permitted. This
          requirement is testable: a conforming agent presented with
          an &lt;ask&gt; and a &lt;disclosure requires="explicit-consent"&gt;
          constraint MUST NOT transmit the requested field value in an
          &lt;answer&gt; without that consent having been obtained.
          The mechanism by which consent is obtained is
          implementation-defined.</li>
          <li>Agents MUST maintain a record of disclosure decisions
          sufficient to produce a disclosure log on request. The
          format and retention period of this record are
          implementation-defined. A conforming agent MUST be able to
          produce, upon request from the user or from a conformance
          test, a list of fields disclosed in a given interaction and
          the consent basis for each.</li>
          <li>Agents MUST support user-directed refusal: when a user
          instructs an agent to refuse all &lt;ask&gt; requests from
          a specific domain, the agent MUST respond to subsequent
          &lt;ask&gt; elements from that domain with &lt;refuse
          reason="user-denied"&gt; regardless of constraint
          configuration. This requirement is testable.</li>
          <li>Agents MUST NOT disclose context received from one
          service domain to a different service domain without
          explicit per-disclosure user authorization. This is
          testable: a conforming agent MUST NOT include in an
          &lt;answer&gt; to service B information that was received
          only via &lt;inform&gt; from service A.</li>
        </ul>
        <t>NOTE: requirements for specific user interface elements,
        consent dialog designs, or logging user interface features
        are outside the scope of this specification and are left to
        implementation. The conformance requirements above are
        expressed in terms of agent behavior, not interface
        design.</t>
      </section>

      <section anchor="privacy-cross-session" numbered="true" toc="include">
        <name>Cross-Session and Cross-Platform Context Portability</name>
        <t>ANML's &lt;inform&gt; and &lt;ask&gt; / &lt;answer&gt;
        framework enables agents to carry context established in one
        session or with one service into subsequent sessions with
        other services. This capability is intentionally designed to
        benefit users — allowing preferences, history, and relationship
        context to persist across platforms without centralized data
        storage.</t>
        <t>However, this same capability presents privacy risks if
        implemented without appropriate user controls:</t>
        <ul>
          <li>A service may attempt to obtain information about a user's
          interactions with other services by crafting &lt;ask&gt;
          elements that target context established elsewhere.</li>
          <li>An agent carrying context from a sensitive interaction
          (e.g., a healthcare provider) may inadvertently disclose that
          context to an unrelated service.</li>
          <li>Context carried by an agent may persist beyond the user's
          expectation or intent.</li>
        </ul>
        <t>Conforming agents MUST:</t>
        <ul>
          <li>Not disclose to service B context received exclusively
          from service A, without explicit authorization scoped to
          that cross-service disclosure. This is testable: a
          conforming agent receiving &lt;inform&gt; from service A
          MUST NOT include that information in an &lt;answer&gt; to
          service B unless cross-service disclosure was explicitly
          authorized.</li>
          <li>Not disclose content marked confidentiality="private"
          to any service other than the one from which it was
          received. This is testable: confidentiality="private"
          content MUST NOT appear in any &lt;answer&gt; or
          &lt;inform&gt; element sent to a different domain.</li>
          <li>Not disclose sensitive categories of information
          (health data, financial data, location history, as
          identified by the purpose attribute of the originating
          &lt;ask&gt;) to a service other than the one that
          requested it, without per-disclosure user authorization.
          This is testable by the presence of sensitive-category
          purpose values in disclosed answers to third-party
          services.</li>
          <li>Implement context deletion on user instruction: when
          a user instructs an agent to delete context associated
          with a specific service domain, the agent MUST NOT include
          that context in any subsequent &lt;answer&gt; or
          &lt;inform&gt; to any service. Implementation of the
          deletion instruction interface is implementation-defined;
          the behavioral outcome is normative.</li>
        </ul>
      </section>

      <section anchor="privacy-data-minimization" numbered="true" toc="include">
        <name>Data Minimization</name>
        <t>Services SHOULD request only the information necessary for
        the stated purpose of the interaction. The purpose attribute
        of the &lt;ask&gt; element is REQUIRED to be present and
        accurate. Agents SHOULD evaluate the stated purpose and
        decline to disclose information where the stated purpose is
        implausible, vague, or inconsistent with the nature of the
        service.</t>
      </section>

      <section anchor="privacy-usage-rights" numbered="true" toc="include">
        <name>Usage Rights and Content Controls</name>
        <t>The usage attribute of &lt;inform&gt; and &lt;rights&gt;
        elements specifies what agents may do with content. Conforming
        agents MUST respect usage declarations. In particular:</t>
        <ul>
          <li>Content marked usage="none" MUST NOT be retained,
          cached, stored, or used for any purpose beyond immediate
          display in the current interaction.</li>
          <li>Content marked usage="display" MUST NOT be cached or
          stored beyond the current session.</li>
          <li>Content marked usage="cache" MAY be retained for the
          duration specified by the ttl attribute but MUST be
          discarded thereafter.</li>
          <li>Content marked usage="store" MAY be retained
          indefinitely subject to applicable data protection
          regulations.</li>
          <li>Content marked usage="train" MAY be used for model
          training, subject to the user's separate consent for their
          agent platform's training data policies.</li>
        </ul>
        <t>Usage declarations are service assertions and are not
        cryptographically enforced. Agents are responsible for
        honoring them. Services should not rely on usage declarations
        as the sole mechanism for protecting content.</t>
      </section>

      <section anchor="privacy-regulatory" numbered="true" toc="include">
        <name>Regulatory Considerations</name>
        <t>ANML implementations may be subject to data protection
        regulations including the EU General Data Protection Regulation
        (GDPR), the California Consumer Privacy Act (CCPA), the Health
        Insurance Portability and Accountability Act (HIPAA), and
        equivalent regulations in other jurisdictions. This
        specification does not constitute legal advice. Implementers
        are responsible for assessing and ensuring compliance with
        applicable regulations in their jurisdiction and use case.</t>
        <t>The consent framework provided by &lt;constraints&gt; and
        &lt;disclosure&gt; elements is designed to be compatible with
        GDPR explicit consent requirements for sensitive data categories.
        However, ANML consent mechanisms are not a substitute for
        proper legal consent mechanisms required by applicable law.
        Services operating in regulated contexts (healthcare, finance,
        government) MUST implement additional consent and data
        protection mechanisms beyond those specified in this
        document.</t>
      </section>
    </section>

    <!-- Section 11c: Relationship to Related Work -->
    <section anchor="related-work" numbered="true" toc="include">
      <name>Relationship to Related Standards and Formats</name>
      <t>ANML addresses a problem space that intersects with several
      existing standards and formats. This section clarifies how ANML
      relates to each and why a new specification is warranted rather
      than an extension of existing work.</t>

      <section anchor="related-html" numbered="true" toc="include">
        <name>HTML</name>
        <t>HTML is a presentation language for human consumption. ANML
        is a semantic document format for machine consumption. HTML
        encodes intent, interactions, and constraints implicitly through
        visual structure, JavaScript behavior, and user interface
        conventions that are inaccessible to agents without significant
        inference overhead. ANML makes these explicit. ANML is designed
        to complement HTML, not replace it: a service may serve both
        an HTML interface for human users and an ANML document for
        agent consumers at the same URL via content negotiation.</t>
      </section>

      <section anchor="related-jsonld" numbered="true" toc="include">
        <name>JSON-LD and Schema.org</name>
        <t>JSON-LD is a method for encoding linked data in JSON,
        primarily used to provide structured data for search engine
        indexing and knowledge graph construction. Schema.org defines
        a vocabulary of types and properties for describing entities
        on the web.</t>
        <t>ANML differs from JSON-LD and Schema.org in three
        fundamental respects:</t>
        <ul>
          <li>Interaction model: JSON-LD and Schema.org describe what
          things are. ANML describes how to interact with a service —
          defining executable actions, multi-step workflows, and
          bidirectional knowledge exchange. Schema.org has no equivalent
          of &lt;interact&gt;, &lt;ask&gt;, &lt;answer&gt;, or
          &lt;state&gt;.</li>
          <li>Consent framework: ANML defines a structured consent and
          disclosure model (&lt;constraints&gt;, &lt;disclosure&gt;,
          &lt;refuse&gt;) with no equivalent in JSON-LD or
          Schema.org.</li>
          <li>Agent behavioral guidance: ANML's &lt;persona&gt;
          section provides advisory guidance for agent communication
          style, brand voice, and vocabulary — a concern entirely
          outside the scope of linked data formats.</li>
        </ul>
        <t>ANML documents MAY reference Schema.org types within
        &lt;body&gt; content where appropriate. The two standards are
        complementary rather than competing.</t>
      </section>

      <section anchor="related-openapi" numbered="true" toc="include">
        <name>OpenAPI and AsyncAPI</name>
        <t>OpenAPI (formerly Swagger) and AsyncAPI define machine-readable
        interface descriptions for REST and event-driven APIs
        respectively. These formats describe how a developer should
        build a client that integrates with a specific service.</t>
        <t>ANML differs fundamentally in its discovery and integration
        model: an OpenAPI document describes a bespoke service contract
        that requires prior developer integration. ANML provides a
        universal document format that any conforming agent can interpret
        without prior service-specific programming — analogous to the
        difference between a custom proprietary document format and HTML.
        A browser does not need to be pre-programmed for each website;
        a conforming ANML agent does not need to be pre-programmed for
        each service.</t>
        <t>ANML action definitions are intentionally simpler than
        OpenAPI operation objects. ANML is designed for agent-mediated
        user interactions, not developer API integration.</t>
      </section>

      <section anchor="related-robots" numbered="true" toc="include">
        <name>robots.txt and llms.txt</name>
        <t>robots.txt provides access control directives for web
        crawlers. llms.txt (an emerging informal convention) provides
        hints for LLM content consumption. Neither defines structured
        interaction semantics, knowledge exchange, consent frameworks,
        or agent behavioral guidance. ANML is a richer, structured
        interaction layer that subsumes the agent-guidance use case
        of llms.txt while providing substantially greater
        capability.</t>
      </section>

      <section anchor="related-xml-rationale" numbered="true" toc="include">
        <name>Rationale for XML Serialization</name>
        <t>ANML uses XML 1.0 as its primary serialization format. This
        choice reflects several design considerations that distinguish
        ANML from API formats that use JSON:</t>
        <ul>
          <li>Human authoring: ANML documents are content artifacts
          designed to be authored and reviewed by humans — brand
          managers, content strategists, healthcare administrators —
          in addition to being parsed by machines. The tag-based markup
          structure of XML is self-documenting in a way that JSON object
          notation is not. A non-technical author can read and understand
          an ANML document without developer assistance.</li>
          <li>Namespace extensibility: XML Namespaces provide a
          well-established, IETF-precedented mechanism for extending
          ANML documents with domain-specific vocabularies without
          conflicting with the core specification. This is essential
          for the vertical-specific profiles anticipated for healthcare,
          commerce, and government use cases.</li>
          <li>Document model: XML's document model, including processing
          order, whitespace handling, and character reference support,
          is appropriate for a format that carries rich text content
          in &lt;body&gt;, &lt;instructions&gt;, and &lt;inform&gt;
          elements.</li>
          <li>IETF precedent: XML-based formats have substantial
          precedent in IETF standards, including XMPP (RFC 6120),
          Atom (RFC 4287), and XML-based MIME type registrations.</li>
        </ul>
        <t>The analogy is instructive: HTML, which ANML complements,
        is also an XML-serializable markup language. The choice of XML
        places ANML in the tradition of web content formats rather than
        API data formats — which accurately reflects its purpose.</t>
        <t>Future versions of this specification may define a JSON
        serialization (application/anml+json) for deployment contexts
        where XML parsing is impractical. Any such serialization would
        be required to be semantically equivalent to the XML
        serialization defined herein.</t>
      </section>

      <section anchor="related-implementations" numbered="true" toc="include">
        <name>Known Implementations</name>
        <t>The following implementations of this specification are
        known to the authors at the time of publication:</t>
        <ul>
          <li>Reference server implementations in Node.js/TypeScript,
          Python, Go, PHP, and Rust, maintained by the ANML Foundation
          at github.com/anmlfoundation/implementations.</li>
          <li>Reference client (agent-side) implementations in
          Node.js/TypeScript, Python, Go, PHP, and Rust, maintained
          by the ANML Foundation.</li>
          <li>Savo, the chat agent component of Life Savor AI
          (Ellevan), which implements ANML document discovery, parsing,
          and knowledge exchange as a production consumer agent.</li>
        </ul>
        <t>The ANML Foundation actively solicits additional independent
        implementations and maintains a registry of known
        implementations at anmlfoundation.org/implementations.
        Organizations implementing this specification are encouraged
        to notify the Foundation at implementations@anmlfoundation.org
        to be included in the registry.</t>
      </section>
    </section>

    <!-- Section 15: IANA Considerations -->
    <section anchor="iana" numbered="true" toc="include">
      <name>IANA Considerations</name>

      <section numbered="true" toc="include">
        <name>Media Type Registrations</name>
        <t>This document requests registration of three media types
        with IANA per <xref target="RFC6838"/>:</t>
        <ul>
          <li>'application/anml+xml' — as specified in Section 6.1
          of this document.</li>
          <li>'application/anml+json' — as specified in Section 7.1
          of this document.</li>
          <li>'application/anml-trust+json' — as specified below.</li>
        </ul>

        <t>Registration for application/anml-trust+json:</t>
        <dl>
          <dt>Media Type name:</dt><dd>application</dd>
          <dt>Media subtype name:</dt><dd>anml-trust+json</dd>
          <dt>Required parameters:</dt><dd>none</dd>
          <dt>Optional parameters:</dt><dd>none</dd>
          <dt>Encoding considerations:</dt>
            <dd>UTF-8 as specified in RFC 8259. A BOM MUST NOT
            be prepended.</dd>
          <dt>Security considerations:</dt>
            <dd>See Section 13. Trust Manifest documents MUST be
            served over HTTPS. Agents MUST verify the TLS
            certificate of the serving endpoint against the site
            domain specified in the associated _anml DNS record.
            An expired Trust Manifest MUST be treated as
            equivalent to no manifest.</dd>
          <dt>Interoperability considerations:</dt>
            <dd>Conforming agents MUST safely ignore unknown keys.
            The site field MUST match the domain of the _anml DNS
            record used to discover this manifest.</dd>
          <dt>Published specification:</dt>
            <dd>This document, Section 12.3.</dd>
          <dt>Applications that use this media type:</dt>
            <dd>ANML agents performing site trust delegation
            verification.</dd>
          <dt>File extension(s):</dt>
            <dd>none defined</dd>
        </dl>
      </section>

      <section numbered="true" toc="include">
        <name>Well-Known URI Registrations</name>
        <t>This document requests registration of the following
        Well-Known URIs per <xref target="RFC8615"/>:</t>

        <dl>
          <dt>URI suffix:</dt><dd>anml</dd>
          <dt>Change controller:</dt><dd>IETF</dd>
          <dt>Specification document:</dt><dd>This document,
          Section 6.4.1</dd>
          <dt>Related information:</dt><dd>The /.well-known/anml
          URI is the primary ANML document discovery endpoint for
          a service.</dd>
        </dl>

        <dl>
          <dt>URI suffix:</dt><dd>anml-trust</dd>
          <dt>Change controller:</dt><dd>IETF</dd>
          <dt>Specification document:</dt><dd>This document,
          Section 12.3</dd>
          <dt>Related information:</dt><dd>The /.well-known/anml-trust
          URI is the static Trust Manifest endpoint for ANML Site
          Trust Delegation. It serves a document of type
          application/anml-trust+json listing third-party domains
          authorized to assert the site's identity in ANML documents.
          Discovery of this URI is via the _anml DNS TXT bootstrap
          record defined in Section 12.2.</dd>
        </dl>
      </section>

      <section numbered="true" toc="include">
        <name>ANML Standard Field Names Registry</name>
        <t>This document requests creation of a new IANA registry
        titled "ANML Standard Field Names". The registry tracks
        standardized values for the field attribute of the
        &lt;ask&gt; and &lt;answer&gt; elements.</t>
        <t>Registration policy: Expert Review.</t>
        <t>Initial values: For personal information fields,
        implementations SHOULD use the property names defined in
        vCard version 4.0 <xref target="RFC6350"/> where applicable.
        The following vCard property names are pre-registered as
        ANML standard field names with their RFC 6350 semantics:
        fn, email, tel, adr, bday, gender, lang, tz, nickname,
        org, title, url. Service-specific field names are permitted
        and are opaque to agents that do not recognize them.</t>
        <t>NOTE: A complete initial registry with full field
        definitions and type mappings is planned for
        draft-jeskey-anml-02.</t>
      </section>

      <section numbered="true" toc="include">
        <name>XML Namespace Registration</name>
        <t>This document requests registration of the following
        XML namespace in the IETF XML Registry per RFC 3688:</t>
        <dl>
          <dt>URI:</dt>
          <dd>urn:ietf:params:xml:ns:anml:1.0</dd>
          <dt>Registrant Contact:</dt>
          <dd>Aaron Jeskey, ajeskey@gmail.com</dd>
          <dt>XML:</dt>
          <dd>None. Namespace URIs do not identify retrievable
          resources.</dd>
        </dl>
      </section>

      <section numbered="true" toc="include">
        <name>ANML Usage Values Registry</name>
        <t>This document requests creation of a new IANA registry
        titled "ANML Usage Values". The registry tracks permitted
        values for the usage attribute defined in this
        specification.</t>
        <t>Registration policy: Standards Action.</t>
        <t>Initial values:</t>
        <ul>
          <li>none — Content may not be retained, cached, stored,
          or used beyond immediate interpretation.</li>
          <li>display — Content may be displayed in the current
          session only. No caching or storage permitted.</li>
          <li>cache — Content may be cached for the duration of
          the applicable ttl. Must be discarded after ttl
          expiry.</li>
          <li>store — Content may be retained indefinitely,
          subject to applicable data protection regulations.</li>
          <li>train — Content may be used for model training,
          subject to user consent for training data policies.</li>
        </ul>
        <t>The usage values form a normative hierarchy. This
        hierarchy is defined here and is authoritative. All
        other references to usage values in this specification
        are subject to this definition.</t>
        <artwork><![CDATA[
none < display < cache < store < train
        ]]></artwork>
        <t>Implication rules (normative): A usage value at a
        given level implicitly permits all uses at lower levels
        in the hierarchy. Specifically:</t>
        <ul>
          <li>usage="display" implies permission to display
          (none is also permitted).</li>
          <li>usage="cache" implies permission to display and
          cache for the ttl duration.</li>
          <li>usage="store" implies permission to display,
          cache, and store indefinitely.</li>
          <li>usage="train" implies permission to display,
          cache, store, and use for model training.</li>
        </ul>
        <t>An agent that stores content marked usage="cache"
        has violated the usage constraint. An agent that uses
        content marked usage="store" for model training has
        violated the usage constraint. These are normative
        requirements: agents MUST honor usage declarations.
        However, usage declarations are service-side assertions
        and are not cryptographically enforced. Services MUST
        NOT rely on usage declarations as an access control
        mechanism. This hierarchy is advisory in the sense that
        it cannot be technically enforced — it is normative in
        the sense that conforming agents MUST comply with
        it.</t>
      </section>

      <section numbered="true" toc="include">
        <name>ANML Disclosure Requires Values Registry</name>
        <t>This document requests creation of a new IANA registry
        titled "ANML Disclosure Requires Values". The registry
        tracks permitted values for the requires attribute of the
        &lt;disclosure&gt; element.</t>
        <t>Registration policy: Standards Action.</t>
        <t>Initial values:</t>
        <ul>
          <li>none — No consent requirement. The agent MAY
          disclose the field value without user interaction,
          subject to the agent's own privacy policies.</li>
          <li>implicit-consent — The agent MAY infer consent
          from the user's initiation of the relevant interaction,
          without explicit per-field confirmation.</li>
          <li>explicit-consent — The agent MUST obtain explicit
          per-field user confirmation before disclosing.</li>
          <li>authentication — The agent MUST authenticate the
          user via an established mechanism before disclosing.
          The specific authentication mechanism is defined by
          the service.</li>
        </ul>
      </section>
    </section>


    <!-- Section 16: ANML Public Text -->
    <section anchor="schema" numbered="true" toc="include">
      <name>ANML Public Text</name>
      <t>The normative XML Schema (XSD) and an informative DTD for ANML 1.0
      are provided in the companion document ANML.md in the same repository
      as this Internet-Draft.</t>

      <t>A formal ABNF grammar <xref target="RFC5234"/> defining the
      structure of ANML documents, attribute value sets, and content
      negotiation headers WILL be provided in draft-jeskey-anml-02.
      This is a committed deliverable for the next revision, not a
      tentative aspiration. The XML Schema provided in the companion
      document serves as the normative structural definition for this
      revision. For the JSON serialization, a JSON Schema is available
      at anmlfoundation.org/spec/anml-schema.json and is informative
      pending -02.</t>

      <t>NOTE: The namespace URI
      'urn:ietf:params:xml:ns:anml:1.0' uses the 'urn:ietf:params'
      prefix, which requires IETF approval via the IANA XML Namespace
      Registry per RFC 3688. The IANA registration request for this
      namespace is included in Section 15.3 of this document. This
      namespace URI MUST NOT be considered assigned until IANA
      confirms the registration. If a different namespace URI form is
      preferred prior to registration, the namespace URI throughout
      this document will be updated accordingly in a subsequent
      revision.</t>
      <section numbered="true" toc="include">
        <name>ANML Site Relationship Values Registry</name>
        <t>This document requests creation of a new IANA registry
        titled "ANML Site Relationship Values". The registry tracks
        standardized values for the relationship attribute of the
        &lt;site-ref&gt; element.</t>
        <t>Registration policy: Expert Review.</t>
        <t>Initial values:</t>
        <ul>
          <li>carries-products — the serving site carries or retails
          products from the referenced site.</li>
          <li>licensed-distributor — the serving site is a licensed
          distributor of the referenced site's products or
          content.</li>
          <li>authorized-service — the serving site provides
          authorized service or support for the referenced site's
          products.</li>
          <li>official-partner — the serving site has an official
          partnership relationship with the referenced site.</li>
          <li>affiliate — the serving site participates in an
          affiliate relationship with the referenced site.</li>
          <li>content-aggregator — the serving site aggregates
          content from the referenced site.</li>
        </ul>
        <t>Implementations MUST accept and preserve unrecognized
        relationship values. Agents SHOULD treat unrecognized values
        as equivalent to no relationship declaration — they do not
        affect trust tier determination.</t>
      </section>
    </section>

  </middle>

  <back>
    <!-- References -->
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>

        <reference anchor="XML" target="https://www.w3.org/TR/xml/">
          <front>
            <title>Extensible Markup Language (XML) 1.0 (Fifth Edition)</title>
            <author initials="T." surname="Bray"/>
            <author initials="J." surname="Paoli"/>
            <author initials="C.M." surname="Sperberg-McQueen"/>
            <author initials="E." surname="Maler"/>
            <author initials="F." surname="Yergeau"/>
            <date year="2008" month="November"/>
          </front>
          <seriesInfo name="W3C" value="Recommendation"/>
        </reference>

        <reference anchor="XMLNS" target="https://www.w3.org/TR/xml-names/">
          <front>
            <title>Namespaces in XML 1.0 (Third Edition)</title>
            <author initials="T." surname="Bray"/>
            <author initials="D." surname="Hollander"/>
            <author initials="A." surname="Layman"/>
            <author initials="R." surname="Tobin"/>
            <author initials="H.S." surname="Thompson"/>
            <date year="2009" month="December"/>
          </front>
          <seriesInfo name="W3C" value="Recommendation"/>
        </reference>

        <reference anchor="XMLMIME" target="https://www.rfc-editor.org/info/rfc7303">
          <front>
            <title>XML Media Types</title>
            <author initials="H." surname="Thompson"/>
            <author initials="C." surname="Lilley"/>
            <date year="2014" month="July"/>
          </front>
          <seriesInfo name="RFC" value="7303"/>
        </reference>

        <reference anchor="UNICODE" target="https://www.unicode.org/versions/latest/">
          <front>
            <title>The Unicode Standard</title>
            <author><organization>The Unicode Consortium</organization></author>
            <date/>
          </front>
        </reference>

        <reference anchor="BCP47" target="https://www.rfc-editor.org/info/rfc5646">
          <front>
            <title>Tags for Identifying Languages</title>
            <author initials="A." surname="Phillips" role="editor"/>
            <author initials="M." surname="Davis" role="editor"/>
            <date year="2009" month="September"/>
          </front>
          <seriesInfo name="BCP" value="47"/>
          <seriesInfo name="RFC" value="5646"/>
        </reference>

        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner"/>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
        </reference>

        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba"/>
            <date year="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
        </reference>

        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author initials="N." surname="Freed"/>
            <author initials="J." surname="Klensin"/>
            <author initials="T." surname="Hansen"/>
            <date year="2013" month="January"/>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
        </reference>

        <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author initials="F." surname="Yergeau"/>
            <date year="2003" month="November"/>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
        </reference>

        <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author initials="T." surname="Berners-Lee"/>
            <author initials="R." surname="Fielding"/>
            <author initials="L." surname="Masinter"/>
            <date year="2005" month="January"/>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
        </reference>

        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110">
          <front>
            <title>HTTP Semantics</title>
            <author initials="R." surname="Fielding" role="editor"/>
            <author initials="M." surname="Nottingham" role="editor"/>
            <author initials="J." surname="Reschke" role="editor"/>
            <date year="2022" month="June"/>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
        </reference>

        <reference anchor="RFC8615" target="https://www.rfc-editor.org/info/rfc8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author initials="M." surname="Nottingham"/>
            <date year="2019" month="May"/>
          </front>
          <seriesInfo name="RFC" value="8615"/>
        </reference>

        <reference anchor="RFC2782" target="https://www.rfc-editor.org/info/rfc2782">
          <front>
            <title>A DNS RR for specifying the location of services (DNS SRV)</title>
            <author initials="A." surname="Gulbrandsen"/>
            <author initials="P." surname="Vixie"/>
            <author initials="L." surname="Esibov"/>
            <date year="2000" month="February"/>
          </front>
          <seriesInfo name="RFC" value="2782"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="RFC1866" target="https://www.rfc-editor.org/info/rfc1866">
          <front>
            <title>Hypertext Markup Language - 2.0</title>
            <author initials="T." surname="Berners-Lee"/>
            <author initials="D." surname="Connolly"/>
            <date year="1995" month="November"/>
          </front>
          <seriesInfo name="RFC" value="1866"/>
        </reference>

        <reference anchor="RFC2070" target="https://www.rfc-editor.org/info/rfc2070">
          <front>
            <title>Internationalization of the Hypertext Markup Language</title>
            <author initials="F." surname="Yergeau"/>
            <author initials="G." surname="Nicol"/>
            <author initials="G." surname="Adams"/>
            <author initials="M." surname="Duerst"/>
            <date year="1997" month="January"/>
          </front>
          <seriesInfo name="RFC" value="2070"/>
        </reference>

        <reference anchor="RFC3236" target="https://www.rfc-editor.org/info/rfc3236">
          <front>
            <title>The 'application/xhtml+xml' Media Type</title>
            <author initials="M." surname="Baker"/>
            <author initials="P." surname="Stark"/>
            <date year="2002" month="January"/>
          </front>
          <seriesInfo name="RFC" value="3236"/>
        </reference>

        <reference anchor="RFC7992" target="https://www.rfc-editor.org/info/rfc7992">
          <front>
            <title>HTML Format for RFCs</title>
            <author initials="J." surname="Hildebrand" role="editor"/>
            <author initials="P." surname="Hoffman"/>
            <date year="2016" month="December"/>
          </front>
          <seriesInfo name="RFC" value="7992"/>
        </reference>

        <reference anchor="RFC9421" target="https://www.rfc-editor.org/info/rfc9421">
          <front>
            <title>HTTP Message Signatures</title>
            <author initials="A." surname="Backman" role="editor"/>
            <author initials="J." surname="Richer" role="editor"/>
            <date year="2024" month="February"/>
          </front>
          <seriesInfo name="RFC" value="9421"/>
        </reference>

        <reference anchor="RFC9111" target="https://www.rfc-editor.org/info/rfc9111">
          <front>
            <title>HTTP Caching</title>
            <author initials="R." surname="Fielding" role="editor"/>
            <author initials="M." surname="Nottingham" role="editor"/>
            <author initials="J." surname="Reschke" role="editor"/>
            <date year="2022" month="June"/>
          </front>
          <seriesInfo name="RFC" value="9111"/>
        </reference>

        <reference anchor="RFC3339" target="https://www.rfc-editor.org/info/rfc3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author initials="G." surname="Klyne"/>
            <author initials="C." surname="Newman"/>
            <date year="2002" month="July"/>
          </front>
          <seriesInfo name="RFC" value="3339"/>
        </reference>

        <reference anchor="RFC9457" target="https://www.rfc-editor.org/info/rfc9457">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <author initials="M." surname="Nottingham"/>
            <author initials="E." surname="Wilde"/>
            <author initials="S." surname="Dalal"/>
            <date year="2023" month="October"/>
          </front>
          <seriesInfo name="RFC" value="9457"/>
        </reference>

        <reference anchor="RFC6350" target="https://www.rfc-editor.org/info/rfc6350">
          <front>
            <title>vCard Format Specification</title>
            <author initials="S." surname="Perreault"/>
            <date year="2011" month="August"/>
          </front>
          <seriesInfo name="RFC" value="6350"/>
        </reference>

        <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author initials="D." surname="Crocker" role="editor"/>
            <author initials="P." surname="Overell"/>
            <date year="2008" month="January"/>
          </front>
          <seriesInfo name="RFC" value="5234"/>
        </reference>

        <reference anchor="RFC6376" target="https://www.rfc-editor.org/info/rfc6376">
          <front>
            <title>DomainKeys Identified Mail (DKIM) Signatures</title>
            <author initials="D." surname="Crocker" role="editor"/>
            <author initials="T." surname="Hansen" role="editor"/>
            <author initials="M." surname="Kucherawy" role="editor"/>
            <date year="2011" month="September"/>
          </front>
          <seriesInfo name="RFC" value="6376"/>
        </reference>

        <reference anchor="RFC7208" target="https://www.rfc-editor.org/info/rfc7208">
          <front>
            <title>Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1</title>
            <author initials="S." surname="Kitterman"/>
            <date year="2014" month="April"/>
          </front>
          <seriesInfo name="RFC" value="7208"/>
        </reference>

        <reference anchor="RFC1034" target="https://www.rfc-editor.org/info/rfc1034">
          <front>
            <title>Domain Names - Concepts and Facilities</title>
            <author initials="P.V." surname="Mockapetris"/>
            <date year="1987" month="November"/>
          </front>
          <seriesInfo name="RFC" value="1034"/>
        </reference>

        <reference anchor="RFC2606" target="https://www.rfc-editor.org/info/rfc2606">
          <front>
            <title>Reserved Top Level DNS Names</title>
            <author initials="D." surname="Eastlake 3rd"/>
            <author initials="A." surname="Panitz"/>
            <date year="1999" month="June"/>
          </front>
          <seriesInfo name="RFC" value="2606"/>
        </reference>

        <reference anchor="UAX9" target="https://www.unicode.org/reports/tr9/">
          <front>
            <title>Unicode Bidirectional Algorithm</title>
            <author><organization>The Unicode Consortium</organization></author>
            <date/>
          </front>
          <seriesInfo name="Unicode Standard Annex" value="#9"/>
        </reference>
      </references>
    </references>

    <section anchor="acknowledgments" numbered="false" toc="include">
      <name>Acknowledgments</name>
      <t>The design of ANML was informed by the structural patterns
      established in RFC 1866 <xref target="RFC1866"/>, RFC 2070,
      RFC 3236 <xref target="RFC3236"/>, and RFC 7992
      <xref target="RFC7992"/>.</t>
      <t>The authors thank the members of the ANML Foundation working
      groups and the IETF community for their review, feedback, and
      contributions to this specification. The trust delegation
      mechanism benefited from extensive community discussion of the
      tradeoffs between static manifests, live query endpoints, and
      DNS-based discovery approaches. The dual serialization
      architecture was informed by feedback from both content
      practitioners and agent platform engineers who require different
      serialization characteristics in different deployment
      contexts.</t>
    </section>
  </back>
</rfc>
