<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!DOCTYPE rfc [
]>
<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  ipr="trust200902"
  docName="draft-han-ai-manifest-02"
  category="info"
  submissionType="independent"
  version="3">

  <front>
    <title abbrev="AI Manifest">
      AI Manifest: Site-Published Friction-Recovery Descriptors for AI Agents
    </title>
    <seriesInfo name="Internet-Draft" value="draft-han-ai-manifest-02"/>

    <author fullname="Won-pyo Han" initials="W." surname="Han">
      <organization>Individual</organization>
      <address>
        <postal>
          <country>KR</country>
        </postal>
        <email>pk102h@naver.com</email>
      </address>
    </author>

    <date year="2026" month="June" day="2"/>

    <area>General</area>
    <workgroup>Independent Submission</workgroup>

    <keyword>AI agents</keyword>
    <keyword>browser automation</keyword>
    <keyword>LLM</keyword>
    <keyword>web automation</keyword>
    <keyword>manifest</keyword>
    <keyword>MCP</keyword>
    <keyword>AFRM</keyword>
    <keyword>friction recovery</keyword>
    <keyword>known traps</keyword>

    <abstract>
      <t>
        This document specifies the AI Manifest, a JSON-based format
        with which a website operator publishes an AI Friction-Recovery
        Manifest (AFRM): a declarative, advisory description of the
        known user-interface (UI) traps on a site, the framework hints
        that contextualize them, and the interaction shortcuts that
        bypass them. An autonomous AI agent that uses browser-automation
        tools discovers the manifest out-of-band and consults it as
        reference data when it encounters friction, instead of
        re-inferring site-specific behavior from the full Document
        Object Model (DOM) by trial and error. The manifest is advisory
        data published by the origin; it is not part of, and does not
        modify, any browser-automation tool schema.
      </t>
      <t>
        The specification defines five interoperable discovery methods,
        the AFRM three-part schema (frameworkHints, knownTraps, and
        shortcuts), and an OPTIONAL SHA-256 canonical-hash verification
        procedure via a trust registry, together with security
        mitigations against prompt-injection attacks.
      </t>
      <t>
        Empirical evaluation with a contemporary LLM browser agent on a
        proprietary-knowledge enterprise task -- an SAP S/4HANA-style
        table-maintenance screen whose valid values depend on a
        company-code registration scope that is not derivable from
        public or training knowledge -- shows that a site-published
        manifest, consumed directly by the agent with no external
        runtime, reduces interaction actions by approximately 54% and
        input tokens by approximately 45% relative to the no-manifest
        baseline, with both conditions completing the task. The
        manifest's value concentrates where the agent cannot succeed
        from training knowledge alone: site-specific dependencies,
        data, and hard mechanical blocks.
      </t>
      <t>
        This -02 revision supersedes the deterministic-runtime framing
        of draft-han-ai-manifest-01. The earlier revision reported a
        single-trial preliminary measurement and concluded that an
        embedded manifest is of negative value unless paired with a
        deterministic execution runtime (an "SDK"). Subsequent
        multi-condition measurement with a real LLM agent shows that a
        manifest is consumed and is useful on its own; an out-of-band
        discovery path (the Method A well-known URI, or the user-curated
        Method E) avoids the prompt-injection-defense friction that the
        earlier embedded-only trial encountered. A deterministic runtime
        remains OPTIONAL -- useful for latency- or
        service-level-sensitive deployments -- but is no longer
        presented as REQUIRED.
      </t>
    </abstract>
  </front>

  <middle>

    <section anchor="introduction" numbered="true">
      <name>Introduction</name>
      <t>
        Large Language Model (LLM)-based AI agents increasingly interact
        with web services via browser-automation protocols such as the
        Model Context Protocol (MCP), Playwright, Puppeteer, and
        Selenium WebDriver. Current agents typically parse entire DOM
        trees or screenshots on every page to infer UI structure,
        producing three well-known problems:
      </t>
      <ol>
        <li>
          Substantial token consumption due to repeated analysis of
          large DOMs on every session.
        </li>
        <li>
          High failure rates on complex multi-step transactional UIs
          such as enterprise resource planning (ERP) systems, academic
          manuscript submission portals, and government e-services.
        </li>
        <li>
          Absence of a standardized mechanism for a website operator to
          declare an AI-agent-friendly ("AI-Ready") operational surface.
        </li>
      </ol>
      <t>
        Related prior work includes <tt>robots.txt</tt>,
        <tt>llms.txt</tt>, <tt>agents.txt</tt>, and
        <tt>ai-plugin.json</tt>. These address crawling permissions,
        LLM-friendly documentation, agent capability declarations, and
        API-level integration respectively. None provides step-by-step
        UI workflow instructions for multi-page transactional flows.
      </t>
      <t>
        AI Manifest fills this gap by specifying a JSON format that
        describes a site's known UI traps, framework hints, and
        interaction shortcuts. An AI agent discovers and, optionally,
        verifies the manifest, then consults it as advisory reference
        data when it encounters friction, instead of rediscovering the
        same site-specific behavior by repeated DOM-based inference.
      </t>
    </section>

    <section anchor="conventions" numbered="true">
      <name>Conventions and Definitions</name>
      <t>
        The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
        "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
        "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
        "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>",
        "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and
        "<bcp14>OPTIONAL</bcp14>" 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>AI Manifest (AI Friction-Recovery Manifest, AFRM)</dt>
        <dd>
          A structured data object, expressed in JSON, that a website
          operator serves at a well-known URI or otherwise publishes
          (see <xref target="embedding-methods"/>), containing at
          minimum a <tt>version</tt>, a <tt>publisher</tt>, and a
          <tt>knownTraps</tt> array; each trap entry carries a
          <tt>category</tt>, a CSS <tt>selector</tt>, and an
          <tt>escapeAction</tt>. The two terms are used
          interchangeably in this document.
        </dd>
        <dt>AI Agent</dt>
        <dd>
          A software process, typically driven by an LLM, that accesses
          a web page via a browser-automation tool and executes actions
          on behalf of a human user.
        </dd>
        <dt>Central Trust Registry</dt>
        <dd>
          A network service that stores SHA-256 hash values of
          manifests pre-registered by publishers, and responds to
          real-time trust lookups from AI agents with a status of
          white-listed, black-listed, or unknown.
        </dd>
        <dt>Canonical Form</dt>
        <dd>
          The representation of an AI Manifest obtained by
          lexicographically sorting all JSON object keys at every
          nesting level and serializing the result using the JSON
          encoding defined in <xref target="RFC8259"/> with UTF-8.
        </dd>
      </dl>
    </section>

    <section anchor="protocol-overview" numbered="true">
      <name>Protocol Overview</name>

      <section anchor="embedding-methods" numbered="true">
        <name>Embedding Methods</name>
        <t>
          A website <bcp14>MAY</bcp14> provide an AI Manifest via one
          or more of the following methods:
        </t>

        <section anchor="method-a-well-known" numbered="true">
          <name>Method A: Well-Known URI</name>
          <t>
            The server <bcp14>SHOULD</bcp14> make the manifest
            retrievable at the following well-known URI
            <xref target="RFC8615"/>:
          </t>
          <artwork><![CDATA[
  /.well-known/ai-manifest.json
          ]]></artwork>
          <t>
            In addition, the HTML document
            <bcp14>SHOULD</bcp14> declare the entry point via an
            HTML <tt>meta</tt> element:
          </t>
          <artwork><![CDATA[
  <meta name="ai-manifest"
        content="/.well-known/ai-manifest.json">
          ]]></artwork>
        </section>

        <section anchor="method-b-hidden-dom" numbered="true">
          <name>Method B: Hidden DOM Element</name>
          <t>
            The server <bcp14>MAY</bcp14> embed the manifest into the
            HTML response as a hidden element with the
            <tt>display:none</tt> style and
            <tt>aria-hidden="true"</tt> attribute:
          </t>
          <artwork><![CDATA[
  <div id="ai-manifest" style="display:none" aria-hidden="true"
       data-manifest='{"version":"1.0", ... }'></div>
          ]]></artwork>
        </section>

        <section anchor="method-c-http-header" numbered="true">
          <name>Method C: HTTP Response Header</name>
          <t>
            The server <bcp14>MAY</bcp14> declare the manifest location
            and hash in a response header:
          </t>
          <artwork><![CDATA[
  X-AI-Manifest: url=/.well-known/ai-manifest.json;
                 hash=sha256:<hex>
          ]]></artwork>
          <t>
            Method C is <bcp14>RECOMMENDED</bcp14> in conjunction with
            Method A, so that an AI agent can discover the manifest URL
            and validate the hash in a single request-response round
            trip before fetching the body.
          </t>
        </section>

        <section anchor="method-d-link-rel" numbered="true">
          <name>Method D: HTML Link Element</name>
          <t>
            The server <bcp14>MAY</bcp14> declare the manifest via an
            HTML link element in the document head:
          </t>
          <artwork><![CDATA[
<link rel="ai-manifest" href="/.well-known/ai-manifest.json">
          ]]></artwork>
          <t>
            Method D allows AI agents that parse the DOM but do not
            inspect HTTP headers to discover the manifest location.
            The <tt>rel</tt> value <tt>ai-manifest</tt> is registered
            in <xref target="iana-link-rel"/>.
          </t>
        </section>

        <section anchor="method-e-ai-side" numbered="true">
          <name>Method E: AI-Side Curation</name>
          <t>
            A user <bcp14>MAY</bcp14> place a manifest at a
            vendor-conventional path in their own file system, for
            example <tt>~/.claude/afrm/{domain}.json</tt> or
            <tt>~/.codex/afrm/{domain}.json</tt>.  The AI runtime
            loads the file when it visits a matching domain.  Because
            the manifest originates from the user's authored context,
            it enters the agent's trust context without the
            prompt-injection screening applied to externally fetched
            data.
          </t>
          <t>
            When both an AI-side curated manifest and a site-side
            published manifest exist for the same origin, the curated
            manifest <bcp14>SHOULD</bcp14> take precedence as the more
            explicit trust signal.
          </t>
          <t>
            Method E is a transitional mechanism intended for domains
            that have not yet published a site-side AFRM.  Once the
            site publishes its own manifest, the AI-side copy
            <bcp14>SHOULD</bcp14> be retired or used only to override
            individual fields.
          </t>
        </section>
      </section>

      <section anchor="manifest-schema" numbered="true">
        <name>Manifest Schema (AFRM Three-Part Model)</name>
        <t>
          An AI Friction-Recovery Manifest (AFRM) is a JSON object
          <xref target="RFC8259"/> with the following top-level fields:
        </t>
        <dl>
          <dt><tt>version</tt> (string, <bcp14>REQUIRED</bcp14>)</dt>
          <dd>
            Specification version. This document defines version
            <tt>"1.0"</tt>.
          </dd>
          <dt><tt>publisher</tt> (string, <bcp14>REQUIRED</bcp14>)</dt>
          <dd>
            Canonical domain name of the publishing website.
          </dd>
          <dt><tt>manifestId</tt> (string, <bcp14>REQUIRED</bcp14>)</dt>
          <dd>
            Stable identifier scoped to the publisher, used for
            registry lookup.
          </dd>
          <dt><tt>registry_url</tt> (string, <bcp14>REQUIRED</bcp14>)</dt>
          <dd>
            HTTPS URL of the trust registry that the publisher has
            pre-registered this manifest with.
          </dd>
          <dt><tt>frameworkHints</tt> (object, <bcp14>OPTIONAL</bcp14>)</dt>
          <dd>
            Metadata about the UI framework in use (e.g., framework
            name, version, rendering model).  Allows the AI agent to
            apply framework-specific heuristics before encountering
            friction.
          </dd>
          <dt><tt>knownTraps</tt> (array, <bcp14>REQUIRED</bcp14>)</dt>
          <dd>
            Primary content of the AFRM.  An ordered array of trap
            descriptors, each describing a UI pattern that predictably
            blocks autonomous AI agents.  Each element <bcp14>MUST</bcp14>
            include <tt>trapId</tt> (string), <tt>category</tt> (string
            from the IANA trap registry, see <xref target="iana"/>),
            <tt>selector</tt> (string), and <tt>escapeAction</tt>
            (string).  Optional fields include <tt>description</tt>
            and <tt>condition</tt>.
          </dd>
          <dt><tt>shortcuts</tt> (array, <bcp14>OPTIONAL</bcp14>)</dt>
          <dd>
            An array of direct navigation or action shortcuts that
            allow the AI agent to bypass multi-step UI flows when a
            direct API or deep-link equivalent exists.
          </dd>
        </dl>
      </section>

      <section anchor="detection-algorithm" numbered="true">
        <name>Agent Detection Algorithm</name>
        <t>
          Upon loading a page, an AI agent implementing this
          specification <bcp14>SHOULD</bcp14> perform the following
          detection sequence before any full-DOM inference pass:
        </t>
        <ol>
          <li>
            Check the agent's local file system for a user-curated
            manifest at the vendor-conventional path (e.g.,
            <tt>~/.claude/afrm/{domain}.json</tt>) matching the
            current origin (Method E).  If found, load it into the
            trust context and continue; the site-side steps below
            may still be consulted for supplementary data.
          </li>
          <li>
            Inspect the HTTP response headers for
            <tt>X-AI-Manifest</tt> (Method C).
          </li>
          <li>
            If absent, retrieve
            <tt>/.well-known/ai-manifest.json</tt> (Method A)
            or resolve the URI declared by the <tt>meta</tt> element.
          </li>
          <li>
            If still absent, check the document head for a
            <tt>&lt;link rel="ai-manifest"&gt;</tt> element and
            fetch the referenced URL (Method D).
          </li>
          <li>
            If still absent, search the DOM for an element with
            <tt>id="ai-manifest"</tt> and read its
            <tt>data-manifest</tt> attribute (Method B).
          </li>
          <li>
            If none is found, fall back to conventional DOM-based
            inference.
          </li>
        </ol>
      </section>

      <section anchor="hash-verification" numbered="true">
        <name>Canonical Hash and Trust Verification</name>
        <t>
          A trust registry is an OPTIONAL integrity layer. When a
          site-published manifest declares a <tt>registry_url</tt>, the
          AI agent <bcp14>SHOULD</bcp14> compute a SHA-256 hash over the
          canonical form (see <xref target="conventions"/>) of the
          manifest and send a trust lookup request to that URI before
          relying on the manifest. Such a request <bcp14>MUST</bcp14>
          use HTTPS <xref target="RFC2818"/> and <bcp14>MUST</bcp14>
          carry the tuple <tt>{publisher, manifestId, hash}</tt> as a
          JSON body. A user-curated manifest obtained via Method E is
          trusted as part of the user's own authored context and does
          not require a registry lookup. Because the manifest is
          advisory and the agent retains control of every interaction
          (see <xref target="execution"/>), a deployment
          <bcp14>MAY</bcp14> operate without a registry, in which case
          the agent relies on its own validation of each suggested
          action.
        </t>
        <t>
          The registry response is a JSON object containing a
          <tt>status</tt> field with one of the following values:
        </t>
        <ul>
          <li>
            <tt>"white"</tt> — the manifest is trusted; the agent
            <bcp14>MAY</bcp14> proceed to execution.
          </li>
          <li>
            <tt>"black"</tt> — the manifest is explicitly distrusted;
            the agent <bcp14>MUST</bcp14> abort and
            <bcp14>SHOULD</bcp14> alert the human user.
          </li>
          <li>
            <tt>"unknown"</tt> — the manifest is not registered; the
            agent <bcp14>SHOULD</bcp14> warn the user and
            <bcp14>MAY</bcp14> fall back to DOM-based inference.
          </li>
        </ul>
        <t>
          Implementations <bcp14>MAY</bcp14> cache a non-expired
          registry response keyed by the manifest hash, to avoid
          repeated network round trips for an identical manifest.
        </t>
      </section>

      <section anchor="execution" numbered="true">
        <name>Consulting the Manifest</name>
        <t>
          The AFRM is advisory reference data, not a mandatory
          execution script. An AI agent operates with its own
          capabilities and consults the manifest when it would
          otherwise expend effort rediscovering site-specific
          behavior. Two consultation patterns are typical:
        </t>
        <ul>
          <li>
            Reactive (friction recovery): when the agent encounters a
            UI condition matching a <tt>knownTraps</tt> entry's
            <tt>category</tt> and <tt>selector</tt>, it applies the
            associated <tt>escapeAction</tt> instead of recovering by
            trial and error. This is the primary use.
          </li>
          <li>
            Proactive (shortcut): when a <tt>shortcuts</tt> entry offers
            a direct navigation or action equivalent to a multi-step UI
            flow, the agent <bcp14>MAY</bcp14> take it directly.
          </li>
        </ul>
        <t>
          The agent retains full control of the interaction and
          <bcp14>MAY</bcp14> continue to use its own DOM- or
          vision-based inference at any time; the manifest supplements
          that inference and does not replace it.
        </t>
      </section>

    </section>

    <section anchor="registry" numbered="true">
      <name>Central Trust Registry</name>
      <t>
        A Central Trust Registry accepts manifest registrations from
        publishers and answers real-time hash lookups from AI agents.
        A conforming registry <bcp14>SHOULD</bcp14>:
      </t>
      <ul>
        <li>
          Store the SHA-256 hash of the canonical form of each
          registered manifest, together with the
          <tt>publisher</tt> and <tt>manifestId</tt> fields.
        </li>
        <li>
          Perform static analysis on the submitted manifest (its
          <tt>knownTraps</tt> and <tt>shortcuts</tt> entries) and
          reject or black-list manifests whose selectors or actions
          match a published pattern of prompt-injection risk (for
          example, selectors targeting <tt>iframe</tt> elements for
          cross-origin form submission, or actions outside the
          registered action set).
        </li>
        <li>
          Expose a community-driven mechanism for reporting and
          black-listing malicious manifests.
        </li>
      </ul>
      <t>
        This document does not mandate a specific registry operator.
        Multiple interoperable registries <bcp14>MAY</bcp14> exist, and
        each manifest declares which registry is authoritative for it
        via <tt>registry_url</tt>.
      </t>
    </section>

    <section anchor="iana" numbered="true">
      <name>IANA Considerations</name>

      <section anchor="iana-well-known" numbered="true">
        <name>Well-Known URI Registration</name>
        <t>
          This document requests IANA to register the following entry
          in the "Well-Known URIs" registry established by
          <xref target="RFC8615"/>:
        </t>
        <dl>
          <dt>URI Suffix:</dt>
          <dd><tt>ai-manifest.json</tt></dd>
          <dt>Change Controller:</dt>
          <dd>Independent Submission Stream editor</dd>
          <dt>Reference:</dt>
          <dd>This document</dd>
          <dt>Status:</dt>
          <dd>provisional</dd>
          <dt>Related Information:</dt>
          <dd>None</dd>
        </dl>
      </section>

      <section anchor="iana-actions" numbered="true">
        <name>AI Manifest Actions Registry (initial)</name>
        <t>
          This document requests IANA to create a new registry named
          "AI Manifest Actions", with the following initial
          registrations. Registration policy:
          Specification Required <xref target="RFC8126"/>.
        </t>
        <dl>
          <dt><tt>click</tt></dt>
          <dd>Invoke a click event on the selected element.</dd>
          <dt><tt>fill</tt></dt>
          <dd>Type a value into a text input element.</dd>
          <dt><tt>select</tt></dt>
          <dd>Choose an option from a drop-down list element.</dd>
          <dt><tt>upload</tt></dt>
          <dd>Attach a file to a file input element.</dd>
          <dt><tt>wait</tt></dt>
          <dd>Pause for a condition or duration.</dd>
          <dt><tt>navigate</tt></dt>
          <dd>Change the current URL.</dd>
          <dt><tt>assert</tt></dt>
          <dd>Verify that a condition holds before proceeding.</dd>
        </dl>
      </section>

      <section anchor="iana-trap-categories" numbered="true">
        <name>AI Manifest Trap Categories Registry (initial)</name>
        <t>
          This document requests IANA to create a new registry named
          "AI Manifest Trap Categories", with the following initial
          registrations.  Registration policy:
          Specification Required <xref target="RFC8126"/>.
        </t>
        <dl>
          <dt><tt>shadow-dom-trap</tt></dt>
          <dd>
            A UI component rendered inside a Shadow DOM tree whose
            selectors are not accessible via standard
            <tt>document.querySelector</tt> calls.
          </dd>
          <dt><tt>virtual-scroll-trap</tt></dt>
          <dd>
            A list or grid that renders only a visible viewport window,
            requiring programmatic scrolling before off-screen items
            can be targeted.
          </dd>
          <dt><tt>iframe-context-trap</tt></dt>
          <dd>
            An action target located inside a cross-origin or
            same-origin <tt>&lt;iframe&gt;</tt> that requires a
            context-switch before interaction.
          </dd>
          <dt><tt>native-dialog-trap</tt></dt>
          <dd>
            A browser-native modal dialog (invoked via
            <tt>window.alert()</tt>, <tt>window.confirm()</tt>, or
            <tt>window.prompt()</tt>) that freezes the renderer event
            loop until dismissed.  An AI agent must call the
            appropriate WebDriver dismiss or accept command rather than
            attempting a DOM interaction, which will block
            indefinitely.
          </dd>
          <dt><tt>delayed-render-trap</tt></dt>
          <dd>
            A UI element that does not appear in the DOM until after an
            asynchronous operation completes; the agent must wait for
            the element's visibility predicate before acting.
          </dd>
        </dl>
      </section>

      <section anchor="iana-link-rel" numbered="true">
        <name>Link Relation Type Registration</name>
        <t>
          This document requests IANA to register the following entry
          in the "Link Relations" registry established by
          <xref target="RFC8288"/>:
        </t>
        <dl>
          <dt>Relation Name:</dt>
          <dd><tt>ai-manifest</tt></dd>
          <dt>Description:</dt>
          <dd>
            Refers to an AI Friction-Recovery Manifest (AFRM) that
            describes known UI traps, framework hints, and interaction
            shortcuts for the current origin, to assist autonomous
            AI agents.
          </dd>
          <dt>Reference:</dt>
          <dd>This document</dd>
        </dl>
      </section>
    </section>

    <section anchor="security" numbered="true">
      <name>Security Considerations</name>

      <section anchor="sec-prompt-injection" numbered="true">
        <name>Prompt Injection Risk</name>
        <t>
          A malicious website could publish an AI Manifest whose
          entries lead an AI agent to perform actions harmful to the
          user (for example, submitting a form to a third party with
          user-supplied credentials). Two complementary mitigations
          apply. First, the manifest is advisory: the agent consults it
          on friction and retains control of every interaction (see
          <xref target="execution"/>), so a suggested action is subject
          to the agent's own safety judgment rather than executed
          blindly. Second, when a manifest declares a registry, the
          trust registry mechanism (<xref target="registry"/>) provides
          an integrity and reputation check. Agents
          <bcp14>MUST NOT</bcp14> act on a manifest whose registry
          lookup returns <tt>"black"</tt> and <bcp14>SHOULD</bcp14> warn
          the user before relying on an <tt>"unknown"</tt> manifest.
        </t>
      </section>

      <section anchor="sec-llm-defense-interaction" numbered="true">
        <name>Interaction with LLM Agent Prompt Injection Defenses</name>
        <t>
          Modern Large Language Model (LLM) agents (including but not
          limited to Claude, ChatGPT, and Gemini) implement
          prompt-injection defense as an immutable system-level policy.
          Such policy treats web-page-embedded content that contains
          executable instructions, including AI Manifests, as untrusted
          external data and requires explicit user approval prior to
          execution.
        </t>
        <t>
          A preliminary single-trial measurement by the author
          (2026-04-28, one trial per condition) on an inline-embedded
          manifest observed that an LLM agent processing a page-embedded
          manifest directly was slower than the no-manifest baseline,
          because the agent classified the embedded content as a
          possible prompt-injection pattern and reverted to manual
          navigation. That trial led the -01 revision to recommend a
          deterministic runtime. Two factors limit that conclusion: the
          manifest was embedded inline (Method B) rather than fetched
          out-of-band, and the comparison was a single trial whose
          fastest figure excluded the agent's own reasoning time.
        </t>
        <t>
          Subsequent measurement with a contemporary LLM agent and an
          out-of-band manifest does not reproduce the negative result.
          When the manifest is discovered out-of-band -- at the
          well-known URI (Method A) or from the user-curated path
          (Method E) -- it is not treated as injected page content, and
          the agent consults it without reverting to manual navigation.
          On a proprietary-knowledge enterprise task the agent completed
          the task both with and without the manifest, and the manifest
          reduced interaction actions and input tokens (see
          <xref target="implementation"/>).
        </t>
        <t>
          Implications for deployment:
        </t>
        <ul>
          <li>
            A manifest discovered out-of-band (Method A or Method E)
            <bcp14>SHOULD</bcp14> be preferred over an inline-embedded
            manifest (Method B), because out-of-band data is not subject
            to the agent's page-content prompt-injection screening.
          </li>
          <li>
            A site-published manifest, consumed directly by the LLM
            agent with no external runtime, is sufficient to provide
            value. Implementations <bcp14>MAY</bcp14> additionally pair
            the manifest with a deterministic runtime that performs
            discovery, registry verification, and execution outside the
            LLM context for latency- or service-level-sensitive
            deployments, but such a runtime is <bcp14>OPTIONAL</bcp14>.
          </li>
          <li>
            Because the manifest is advisory data consulted only on
            friction, an agent that ignores it falls back to its
            baseline behavior; the manifest does not reduce the agent's
            capability below baseline.
          </li>
        </ul>
        <t>
          This finding does not alter the protocol on the wire but
          informs deployment patterns and the OPTIONAL role of a
          runtime component vis-a-vis the LLM agent.
        </t>
      </section>

      <section anchor="sec-canonical-hash" numbered="true">
        <name>Integrity of the Manifest</name>
        <t>
          The SHA-256 hash is computed over the canonical form of the
          manifest so that semantically equivalent encodings produce
          identical digests. Implementations
          <bcp14>MUST NOT</bcp14> rely on a hash computed over
          non-canonical bytes.
        </t>
      </section>

      <section anchor="sec-https" numbered="true">
        <name>Transport Security</name>
        <t>
          All communication with the registry
          <bcp14>MUST</bcp14> use HTTPS with server authentication per
          <xref target="RFC2818"/>. Registry operators
          <bcp14>SHOULD</bcp14> sign their responses with a public key
          published out of band so that an AI agent can verify the
          integrity of a cached response.
        </t>
      </section>

    </section>

    <section anchor="privacy" numbered="true">
      <name>Privacy Considerations</name>
      <t>
        Registry lookups necessarily expose to the registry operator
        the fact that a particular AI agent has visited a particular
        publisher's manifest. Registry operators
        <bcp14>SHOULD</bcp14> minimize the retention of client
        identifiers associated with lookup requests. Agents
        <bcp14>MAY</bcp14> employ private, time-limited caching of
        registry responses to reduce the frequency of such lookups.
      </t>
    </section>

    <section anchor="implementation" numbered="true">
      <name>Implementation Status</name>
      <t>
        Note to RFC Editor: This section is intended to be removed
        prior to publication as an RFC.
      </t>
      <t>
        A reference implementation, including an example publisher
        server, a reference registry, two AI agent variants
        (DOM-analysis baseline and manifest-aware), and an automated
        benchmark harness, is available at
        <eref target="https://github.com/11pyo/AINavManifest"/>
        under the MIT License.
      </t>
      <t>
        In the reference benchmark — a two-step ERP order-entry
        transaction repeated 30 times with input tokens counted via
        the tiktoken <tt>cl100k_base</tt> encoding — the
        manifest-aware agent consumed an average of 341 input tokens
        per task with a 100% task success rate (30 of 30 runs), while
        the DOM-analysis baseline consumed an average of 1887.6 input
        tokens with a 20% success rate (6 of 30 runs). Raw results
        accompany the reference implementation.
      </t>
      <t>
        A subsequent measurement (2026-05, Claude Sonnet 4.6 browser
        agent) used a proprietary-knowledge enterprise task: an SAP
        S/4HANA-style table-maintenance screen on which the valid
        account-category references depend on a company-code
        registration scope (the standard codes exist globally but are
        not registered for this company code, so they are rejected),
        and on which a cell edit must be confirmed with a commit gesture
        before the row unlocks. The correct values are not derivable
        from public or training knowledge. Two conditions were compared
        with a contemporary LLM agent and no external runtime: a
        no-manifest baseline and a site-published manifest. Both
        conditions completed the task and saved successfully. The
        manifest condition used approximately 54% fewer interaction
        actions (6 versus 13) and approximately 45% fewer input tokens
        (about 47.8K versus 87.3K), with fewer errors and fewer
        reasoning pauses. Wall-clock time was closer (about -22%),
        because at this difficulty the agent's own reasoning time
        dominates in both conditions; interaction actions and input
        tokens reflect the efficiency difference more directly than
        wall-clock time does.
      </t>
      <t>
        The earlier single-trial three-tier figures reported in
        draft-han-ai-manifest-01 (a "Tier C" embedded-manifest-plus-SDK
        time of 5.0 s, with 19- to 31-fold speedup claims) are
        superseded by this measurement and <bcp14>SHOULD NOT</bcp14> be
        cited: that "Tier C" figure measured a deterministic runtime
        executing cached selectors and excluded the agent's reasoning
        time, so it is not comparable to unaided-agent wall-clock
        numbers.
      </t>
      <t>
        A controlled experiment (Phase 1, n=30 trials, 2026-04-28)
        examined whether an AI agent spontaneously detects and loads
        a site-side AFRM during routine task execution without explicit
        user instruction.  The primary hypothesis (H1: manifest_detected
        fires at least once during 30 trials) was rejected: spontaneous
        detection was not observed.  This indicates that reliable
        consumption should not depend on the agent volunteering to fetch
        an unannounced manifest; it motivates explicit out-of-band
        discovery (Method A with a visible link or footer hint, or the
        Method C/D headers) and the user-curated Method E, rather than a
        requirement for a deterministic runtime.  The token-reduction
        figures from this simulation were large but were computed
        against an idealized fixed-length manifest baseline whose
        variance approached zero, which inflates standardized
        effect-size estimates; the previously cited Cohen's d = 5.00 is
        therefore an artifact of that idealization and is withdrawn.  A
        calibrated re-analysis that injects realistic run-to-run
        variability onto the measured means keeps the action- and
        token-reduction effects large and stable without relying on the
        idealized figure.  Raw data and analysis scripts accompany the
        reference implementation.
      </t>
      <t>
        A cross-AI interoperability study (Phase 2, 2026-05-11)
        tested whether three major LLM agents (Claude, ChatGPT,
        Gemini) can consume an AFRM presented directly in a
        conversation context.  Results: Claude correctly extracted
        and applied the AFRM content (trap descriptors, selectors,
        escape actions) when the manifest was provided in-context;
        ChatGPT demonstrated label-level recognition (identified
        the document as an AFRM) but did not apply individual trap
        entries procedurally; Gemini returned generic speculation
        without manifest-specific extraction.  These results suggest
        that procedural AFRM consumption at the level of individual
        <tt>knownTraps</tt> entries is not yet uniform across LLM
        agents.  For agents that do not yet consume per-trap entries
        reliably, an OPTIONAL deterministic runtime can bridge the gap;
        for agents that do (as demonstrated above), a site-published
        manifest is consumed without one.
      </t>
    </section>

    <section anchor="ipr" numbered="true">
      <name>Intellectual Property Rights Disclosure</name>
      <t>
        The technology described in this document is the subject of
        Korean Patent Applications No. 10-2026-0071716 (filed
        2026-04-21) and No. 10-2026-0097280 (filed 2026-05-29), both by
        the author. The applicant commits to offer any essential claims
        under Fair, Reasonable, and Non-Discriminatory (FRAND) terms to
        implementers of this specification, as declared in the project
        repository.
      </t>
    </section>

    <section anchor="acknowledgments" numbered="true">
      <name>Acknowledgments</name>
      <t>
        The author thanks the Anthropic Claude Code, Model Context
        Protocol, and OpenAI function-calling communities for the
        empirical observations that motivated this work.
      </t>
    </section>

  </middle>

  <back>

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

      <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" fullname="S. Bradner"/>
          <date year="1997" month="March"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>

      <reference anchor="RFC2818" target="https://www.rfc-editor.org/info/rfc2818">
        <front>
          <title>HTTP Over TLS</title>
          <author initials="E." surname="Rescorla" fullname="E. Rescorla"/>
          <date year="2000" month="May"/>
        </front>
        <seriesInfo name="RFC" value="2818"/>
        <seriesInfo name="DOI" value="10.17487/RFC2818"/>
      </reference>

      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author initials="M." surname="Cotton" fullname="M. Cotton"/>
          <author initials="B." surname="Leiba" fullname="B. Leiba"/>
          <author initials="T." surname="Narten" fullname="T. Narten"/>
          <date year="2017" month="June"/>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
        <seriesInfo name="DOI" value="10.17487/RFC8126"/>
      </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" fullname="B. Leiba"/>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>

      <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
        <front>
          <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
          <author initials="T." surname="Bray" fullname="T. Bray" role="editor"/>
          <date year="2017" month="December"/>
        </front>
        <seriesInfo name="STD" value="90"/>
        <seriesInfo name="RFC" value="8259"/>
        <seriesInfo name="DOI" value="10.17487/RFC8259"/>
      </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" fullname="M. Nottingham"/>
          <date year="2019" month="May"/>
        </front>
        <seriesInfo name="RFC" value="8615"/>
        <seriesInfo name="DOI" value="10.17487/RFC8615"/>
      </reference>

      <reference anchor="RFC8288" target="https://www.rfc-editor.org/info/rfc8288">
        <front>
          <title>Web Linking</title>
          <author initials="M." surname="Nottingham" fullname="M. Nottingham"/>
          <date year="2017" month="October"/>
        </front>
        <seriesInfo name="RFC" value="8288"/>
        <seriesInfo name="DOI" value="10.17487/RFC8288"/>
      </reference>
    </references>

    <section anchor="changes" numbered="true">
      <name>Document History</name>
      <t>
        Note to RFC Editor: This section is intended to be removed
        prior to publication as an RFC.
      </t>
      <dl>
        <dt>draft-han-ai-manifest-02 (2026-06)</dt>
        <dd>
          Realigns the document with the friction-recovery model. The
          manifest is described as advisory, site-published reference
          data discovered out-of-band, consulted on friction, and
          orthogonal to (not a modification of) any browser-automation
          tool schema. The deterministic-runtime ("SDK") recommendation
          of -01 is relaxed from REQUIRED/SHOULD to OPTIONAL/MAY. The
          single-trial "Tier C" 5.0 s figure and the 19- to 31-fold
          speedup claims are superseded and withdrawn, as is the
          Cohen's d = 5.00 effect size (an artifact of a
          near-zero-variance idealized baseline). A multi-condition
          measurement with a contemporary LLM agent on a
          proprietary-knowledge enterprise task is added (approximately
          -54% interaction actions and -45% input tokens, both
          conditions completing). The Execution section is reframed as
          advisory consultation rather than deterministic step
          execution. The title is updated accordingly.
        </dd>
        <dt>draft-han-ai-manifest-01 (2026-05-15)</dt>
        <dd>
          Extended the schema to the AFRM three-part model
          (frameworkHints, knownTraps, shortcuts); added Method E
          (AI-side curation) and the native-dialog-trap category.
        </dd>
        <dt>draft-han-ai-manifest-00 (2026-04-21)</dt>
        <dd>
          Initial version: embedding methods A through C, the central
          trust registry, and canonical hash verification.
        </dd>
      </dl>
    </section>

  </back>
</rfc>
