<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     docName="draft-arsentev-llm-context-discovery-00"
     category="info"
     submissionType="IETF"
     consensus="false"
     tocInclude="true"
     tocDepth="3"
     sortRefs="true"
     symRefs="true"
     version="3">

  <front>
    <title abbrev="LLM Context File Discovery">Discovery and Retrieval of Publisher-Curated Context Files for Large Language Model Consumers</title>
    <seriesInfo name="Internet-Draft" value="draft-arsentev-llm-context-discovery-00" stream="IETF"/>

    <author fullname="Evgenii Arsentev" initials="E." surname="Arsentev">
      <organization>Independent</organization>
      <address>
        <email>hello@arsentev.ai</email>
        <uri>https://arsentev.ai/</uri>
      </address>
    </author>

    <date/>

    <keyword>large language model</keyword>
    <keyword>crawler</keyword>
    <keyword>discovery</keyword>
    <keyword>well-known uri</keyword>
    <keyword>link relation</keyword>
    <keyword>robots.txt</keyword>

    <abstract>
      <t>Publishers have begun to serve a curated, plain-text summary of a web
      origin intended for consumption by large language models and by the
      crawlers that feed them, most visibly under the de facto file name
      "llms.txt". The practice has no specification, no media type, and — of
      direct operational consequence — no discovery mechanism: a consumer that
      does not already guess the path cannot learn that such a file exists.</t>

      <t>This document specifies discovery and retrieval for publisher-curated
      context files. It defines the well-known URI "llm-context", the link
      relation type "llm-context", and an extension record for the robots
      exclusion protocol, so that a publisher may advertise a context file by
      three independent paths and a consumer may find it without guessing. It
      specifies a two-tier arrangement of an index resource and optional
      detail resources, states conditional-request and size requirements that
      keep retrieval affordable for both parties, and describes the
      relationship of this mechanism to the robots exclusion protocol, to
      sitemaps, and to work in progress on expressing AI usage preferences.</t>

      <t>This document also reports measurements from an operational
      deployment in which twenty crawlers operated by search and
      language-model providers issued 44,005 requests to a host over fifteen
      days without once retrieving the context file the host was serving,
      while the same crawlers retrieved that host's robots.txt 577 times in
      the three days after the context file was deployed. The absence of a
      discovery mechanism, rather than the absence of interest, is the
      hypothesis this document acts upon.</t>
    </abstract>
  </front>

  <middle>

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

      <t>A web origin that wishes to be represented accurately to a large
      language model (LLM) faces a problem that ordinary search engine
      optimisation does not solve. The origin's HTML is written for a browser:
      it carries navigation, boilerplate, advertising, and markup whose only
      purpose is presentation. A consumer that ingests that HTML in order to
      build a representation of the origin must strip it, and the stripping is
      lossy and unsupervised. The publisher, who knows which pages matter and
      how the origin should be described, has no channel through which to say
      so.</t>

      <t>Beginning in 2024 a convention emerged in which publishers serve a
      plain-text, Markdown-formatted summary of the origin at the fixed path
      "/llms.txt", frequently accompanied by a larger concatenation at
      "/llms-full.txt". The convention is widely deployed and widely
      discussed. It is also entirely unspecified: there is no media type, no
      statement of what a conforming consumer is required to do, no size
      discipline, and no way for a consumer to learn that the file exists
      other than to request a path it has guessed.</t>

      <t>Guessing is the weak point. The web already has two standardised
      mechanisms by which an origin tells an automated consumer what it may
      and should retrieve — the robots exclusion protocol <xref
      target="RFC9309"/> and the Sitemap protocol — and automated consumers
      use both routinely. A third convention that is not reachable through
      either of them is invisible to any consumer that has not been
      specifically programmed for it.</t>

      <t><xref target="observed"/> reports what that invisibility looks like
      in an operational deployment. In summary: on a host serving a context
      file, crawlers operated by search and language-model providers issued
      13,917 requests over the three days following deployment, of which 577
      were for robots.txt and 249 for sitemap.xml, and none at all were for
      the context file.</t>

      <t>This document does not attempt to standardise the content of a
      context file, which is a matter of editorial judgement and is likely to
      remain so. It specifies the three things that must be common for the
      mechanism to work at all:</t>

      <ul>
        <li>how a publisher advertises that a context file exists (<xref
        target="discovery"/>);</li>
        <li>how a consumer retrieves it without imposing unbounded cost on
        either party (<xref target="retrieval"/>);</li>
        <li>how the mechanism relates to the robots exclusion protocol, to
        sitemaps, and to the expression of AI usage preferences (<xref
        target="relationship"/>).</li>
      </ul>

      <t>The registrations required to make the mechanism usable are requested
      in <xref target="iana"/>.</t>

      <section anchor="scope">
        <name>Scope and Non-Goals</name>

        <t>This document is Informational. It describes a mechanism and
        requests the IANA registrations that the mechanism needs. It does not
        claim consensus of the IETF.</t>

        <t>The following are explicitly out of scope:</t>

        <ul>
          <li><strong>Editorial content.</strong> What a publisher should say
          about its origin is not specified. This document constrains the
          container, not the prose.</li>

          <li><strong>Permission.</strong> A context file is an offer of
          material, not a grant of rights over it. Whether a consumer may use
          retrieved content for training, for retrieval-augmented generation,
          or for any other purpose is governed by mechanisms outside this
          document; see <xref target="aipref"/>.</li>

          <li><strong>Model behaviour.</strong> Nothing here constrains what a
          model does with retrieved text, and <xref target="security"/>
          explains why a consumer must not assume the text is
          trustworthy.</li>

          <li><strong>Ranking.</strong> Serving a context file confers no
          entitlement to be retrieved, cited, or ranked.</li>
        </ul>
      </section>

      <section anchor="terminology">
        <name>Terminology</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&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> when,
        and only when, they appear in all capitals, as shown here.</t>

        <dl>
          <dt>context file</dt>
          <dd>A resource, served by an origin, whose content is a
          publisher-curated description of that origin intended for
          consumption by a large language model or by software acting on
          behalf of one.</dd>

          <dt>index resource</dt>
          <dd>The context file that a discovery mechanism points to. It is
          expected to be small and to link onward. See <xref
          target="two-tier"/>.</dd>

          <dt>detail resource</dt>
          <dd>A larger resource linked from the index resource, containing
          full text rather than description.</dd>

          <dt>consumer</dt>
          <dd>Software that retrieves a context file. This includes crawlers
          that build a corpus offline and agents that fetch on demand in
          response to a user's request; <xref target="ondemand"/> distinguishes
          them where the distinction matters.</dd>

          <dt>publisher</dt>
          <dd>The party that controls what an origin serves.</dd>

          <dt>origin</dt>
          <dd>As defined in <xref target="RFC6454"/>.</dd>
        </dl>
      </section>
    </section>

    <section anchor="observed">
      <name>Observed Behaviour of an Undiscoverable Convention</name>

      <t>The design in this document is a response to a measurement rather
      than to an intuition. This section reports the measurement, its method,
      and its limitations. It is presented here, before the specification,
      because the specification is difficult to justify without it.</t>

      <section anchor="method">
        <name>Method</name>

        <t>A single publisher operates two hosts, "arsentev.ai" and
        "ru.arsentev.ai", serving the same content in two languages. Both
        hosts began serving a context file at "/llms.txt" and a detail
        resource at "/llms-full.txt" on 2026-09-09. Both files are generated
        from the same source as the HTML pages and are rebuilt on
        deployment.</t>

        <t>The access logs of the origin server were parsed for the period
        2026-08-28 to 2026-09-11 inclusive, a window of fifteen days
        containing 331,758 logged requests. Requests were attributed to a
        crawler when the request's User-Agent header contained one of
        twenty-two tokens published by search and language-model operators as
        identifying their crawlers. Attribution by User-Agent is
        self-asserted and unverified; <xref target="limits"/> returns to
        this.</t>

        <t>The sizes of the files as served, in octets, were:</t>

        <table anchor="sizes">
          <name>Context file sizes as served, 2026-09-11</name>
          <thead>
            <tr><th>Host</th><th>/llms.txt</th><th>/llms-full.txt</th></tr>
          </thead>
          <tbody>
            <tr><td>arsentev.ai</td><td>29,146</td><td>367,587</td></tr>
            <tr><td>ru.arsentev.ai</td><td>38,982</td><td>614,939</td></tr>
          </tbody>
        </table>
      </section>

      <section anchor="results">
        <name>Results</name>

        <t>Over the full fifteen-day window, twenty distinct crawler tokens
        were observed, accounting for 44,005 requests. The number of those
        requests that retrieved "/llms.txt" or "/llms-full.txt" was zero.</t>

        <t>Restricting attention to the three days after the context files
        were deployed, 2026-09-09 to 2026-09-11, so that the crawlers had
        something to retrieve:</t>

        <table anchor="window">
          <name>Crawler requests, 2026-09-09 to 2026-09-11</name>
          <thead>
            <tr><th>Quantity</th><th>Value</th></tr>
          </thead>
          <tbody>
            <tr><td>Requests attributed to crawlers</td><td>13,917</td></tr>
            <tr><td>Distinct crawler tokens</td><td>18</td></tr>
            <tr><td>Retrievals of /robots.txt</td><td>577</td></tr>
            <tr><td>Distinct crawlers retrieving /robots.txt</td><td>12</td></tr>
            <tr><td>Retrievals of /sitemap.xml</td><td>249</td></tr>
            <tr><td>Retrievals of /llms.txt or /llms-full.txt</td><td>0</td></tr>
          </tbody>
        </table>

        <t>The comparison that matters is internal to the table. The same
        crawlers, in the same window, on the same host, retrieved the two
        resources that a standard tells them to retrieve — robots.txt, defined
        by <xref target="RFC9309"/>, and sitemap.xml — several hundred times,
        and retrieved the resource that no standard mentions zero times. The
        crawlers were present, were active, and were willing to fetch metadata
        about the origin. What they had no way to learn was that a third piece
        of metadata was on offer.</t>
      </section>

      <section anchor="limits">
        <name>Limitations</name>

        <t>The following bound what may be concluded. They are stated in full
        because the measurement is a single observation and the temptation to
        over-read it is real.</t>

        <ul>
          <li><strong>Three days.</strong> The post-deployment window is
          short. A crawler that probes unfamiliar paths on a long cycle would
          not appear in it. The fifteen-day figure of zero retrievals is
          consistent with the three-day figure but covers a period during
          which, for most of its length, there was nothing at the path to
          retrieve.</li>

          <li><strong>One publisher.</strong> Two hosts under one operator,
          with one content generator, in two languages. The hosts are modest
          in traffic and authority, and crawler behaviour is known to vary
          with both.</li>

          <li><strong>Self-asserted identity.</strong> Crawlers were
          identified by User-Agent token and not by reverse DNS or by
          published address range. A consumer that retrieved the context file
          while presenting a browser User-Agent would not have been counted as
          a crawler. In the full window, 40 of the 56 requests to the context
          files came from a command-line HTTP client operated by the publisher
          during verification, and the remainder from ordinary browsers; none
          presented a crawler token.</li>

          <li><strong>Absence of evidence.</strong> Zero retrievals is
          consistent with the hypothesis of this document — that consumers
          cannot find what they are not told about — and also with other
          hypotheses, including deliberate disregard of an unspecified
          convention. The measurement distinguishes these poorly. It
          establishes that the convention is not working on this deployment,
          not why.</li>
        </ul>

        <t>The design response to this uncertainty is to make the mechanism
        cheap for a consumer to ignore: every discovery path defined in <xref
        target="discovery"/> is additive, none changes the meaning of an
        existing record, and a consumer that implements none of them sees the
        origin exactly as it does today.</t>
      </section>
    </section>

    <section anchor="contextfile">
      <name>The Context File</name>

      <section anchor="format">
        <name>Format</name>

        <t>A context file <bcp14>MUST</bcp14> be a UTF-8 encoded text
        document. It <bcp14>SHOULD</bcp14> be formatted as Markdown, and a
        consumer <bcp14>MUST NOT</bcp14> fail to process a context file that
        is not valid Markdown; the format is a convenience for human
        maintainers and a hint for consumers, not a validation gate.</t>

        <t>A context file <bcp14>MUST NOT</bcp14> be served with a
        "Content-Type" of "text/html". Publishers that generate the file
        through an HTML template routinely misconfigure this, and a consumer
        that receives HTML cannot distinguish a context file from an error
        page.</t>

        <t>A context file <bcp14>SHOULD</bcp14> be served as
        "text/markdown;charset=UTF-8" <xref target="RFC7763"/> or as
        "text/plain;charset=UTF-8". The registration of a distinct media type
        is discussed in <xref target="mediatype"/> and is deliberately not
        requested by this document.</t>
      </section>

      <section anchor="two-tier">
        <name>Index and Detail Resources</name>

        <t>Deployed practice separates a short summary from a long
        concatenation of full text, and the separation is load-bearing. <xref
        target="sizes"/> shows the two differing by a factor of twelve on one
        host and sixteen on the other; the detail resource on one host exceeds
        600&nbsp;kilobytes, and it grows with the site without bound.</t>

        <t>Accordingly:</t>

        <ul>
          <li>A discovery mechanism defined in <xref target="discovery"/>
          <bcp14>MUST</bcp14> point at an index resource, never directly at a
          detail resource.</li>

          <li>An index resource <bcp14>SHOULD NOT</bcp14> exceed
          100,000&nbsp;octets. A publisher whose description does not fit
          <bcp14>SHOULD</bcp14> move material into detail resources rather
          than grow the index.</li>

          <li>An index resource <bcp14>MAY</bcp14> link to any number of
          detail resources, using ordinary Markdown or plain-text URI
          references. Relative references are resolved against the URI of the
          index resource as specified in <xref target="RFC3986"/>.</li>

          <li>A detail resource <bcp14>SHOULD</bcp14> be divided when it
          exceeds 1,000,000&nbsp;octets, so that a consumer may retrieve part
          of the material without retrieving all of it.</li>
        </ul>

        <t>The size guidance is a floor for interoperability, not a
        recommendation to fill it. A consumer <bcp14>MAY</bcp14> impose its
        own limits and <bcp14>MUST</bcp14> fail safely — by treating the
        origin as having no context file — rather than truncate mid-document
        in a way that changes meaning.</t>
      </section>

      <section anchor="language">
        <name>Language and Variants</name>

        <t>A publisher serving an origin in several languages
        <bcp14>SHOULD</bcp14> serve a separate context file per origin where
        languages occupy separate origins, as in the deployment of <xref
        target="observed"/>, and <bcp14>MAY</bcp14> use proactive content
        negotiation on a single origin. Where negotiation is used, the
        response <bcp14>MUST</bcp14> carry an appropriate "Content-Language"
        and <bcp14>MUST</bcp14> include "Accept-Language" in "Vary".</t>
      </section>
    </section>

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

      <t>Three mechanisms are defined. They are independent: a publisher
      <bcp14>MAY</bcp14> deploy any subset, and a consumer <bcp14>MAY</bcp14>
      implement any subset. A publisher <bcp14>SHOULD</bcp14> deploy at least
      the well-known URI of <xref target="wellknown"/>, because it is the only
      one of the three that a consumer can use without first retrieving
      another resource.</t>

      <t>Where more than one mechanism is present and they disagree, a
      consumer <bcp14>MUST</bcp14> resolve the conflict as specified in <xref
      target="conflict"/>.</t>

      <section anchor="wellknown">
        <name>The "llm-context" Well-Known URI</name>

        <t>This document registers the well-known URI suffix "llm-context"
        (<xref target="iana-wellknown"/>), following <xref
        target="RFC8615"/>.</t>

        <t>A publisher advertising a context file through this mechanism
        <bcp14>MUST</bcp14> arrange that a GET request for
        "/.well-known/llm-context" on the origin returns either:</t>

        <ul>
          <li>the index resource itself, with a 2xx status and a
          "Content-Type" consistent with <xref target="format"/>; or</li>

          <li>a redirect (301, 302, 307, or 308) to the index resource.</li>
        </ul>

        <t>A consumer <bcp14>SHOULD</bcp14> follow at most five redirects and
        <bcp14>MUST</bcp14> treat a redirect chain that leaves the origin as
        requiring the same scrutiny as any other cross-origin reference; see
        <xref target="crossorigin"/>.</t>

        <t>A 404 response <bcp14>MUST</bcp14> be interpreted as "this origin
        does not advertise a context file by this mechanism" and
        <bcp14>MUST NOT</bcp14> be interpreted as an error to be retried
        aggressively. A consumer <bcp14>SHOULD NOT</bcp14> re-probe a
        404-returning origin more often than once per 24 hours.</t>

        <t>The well-known path is preferred over the deployed convention of a
        root-level "/llms.txt" for the reason <xref target="RFC8615"/> gives
        generally: the root namespace belongs to the publisher, and a
        specification that claims a root path claims something it does not
        own. A publisher that already serves "/llms.txt" can satisfy this
        document with a single redirect and need not move the file.</t>
      </section>

      <section anchor="linkrel">
        <name>The "llm-context" Link Relation</name>

        <t>This document registers the link relation type "llm-context" (<xref
        target="iana-linkrel"/>).</t>

        <t>A publisher <bcp14>MAY</bcp14> advertise a context file by
        including a "Link" header field <xref target="RFC8288"/> in responses
        from the origin:</t>

        <artwork type="example"><![CDATA[
Link: </llms.txt>; rel="llm-context"; type="text/markdown"
]]></artwork>

        <t>or, in an HTML document, by a link element in the document
        head:</t>

        <artwork type="example"><![CDATA[
<link rel="llm-context" href="/llms.txt" type="text/markdown">
]]></artwork>

        <t>A publisher using the header form <bcp14>SHOULD</bcp14> emit it on
        responses for the origin's home document and <bcp14>SHOULD NOT</bcp14>
        emit it on every response, since the field costs bytes on each
        response and carries no per-response information.</t>

        <t>The "type" parameter, when present, is a hint. A consumer
        <bcp14>MUST</bcp14> rely on the "Content-Type" of the retrieved
        representation and not on the hint.</t>

        <t>This mechanism exists because it is the only one of the three that
        works for a consumer which has already retrieved a page and has no
        reason to make a second request speculatively. An agent fetching a
        single document on a user's behalf (<xref target="ondemand"/>) is in
        exactly that position.</t>
      </section>

      <section anchor="robots">
        <name>The "LLM-Context" Record in robots.txt</name>

        <t>A publisher <bcp14>MAY</bcp14> advertise a context file by
        including a record in the origin's robots.txt:</t>

        <artwork type="example"><![CDATA[
User-Agent: *
Allow: /

LLM-Context: https://example.com/llms.txt
]]></artwork>

        <t>The record's name is "LLM-Context", compared case-insensitively as
        <xref target="RFC9309"/> requires of record names. Its value
        <bcp14>MUST</bcp14> be an absolute URI. A relative reference
        <bcp14>MUST</bcp14> be ignored rather than resolved, so that a parser
        error cannot cause a consumer to request an unintended path.</t>

        <t>Section 2.2.4 of <xref target="RFC9309"/> permits a crawler to
        interpret records that are not part of the robots exclusion protocol,
        giving "Sitemaps" as its example, and requires that the parsing of
        such records "MUST NOT interfere with the parsing of explicitly
        defined records". This record is therefore safe to deploy: a crawler
        that has never heard of it parses the rest of the file exactly as
        before. That
        property is the reason for defining it despite the well-known URI
        already existing — robots.txt is retrieved by consumers today, as
        <xref target="window"/> shows, and a publisher can therefore reach
        them through it without waiting for new code to be deployed on the
        consumer side. The record is nevertheless the weakest of the three
        mechanisms, because it depends on parsers being as forgiving in
        practice as the specification requires.</t>

        <t>A record appearing outside any group applies to the origin as a
        whole. A publisher <bcp14>SHOULD</bcp14> place it outside all groups.
        A consumer encountering the record inside a group <bcp14>MUST</bcp14>
        treat it as applying to the origin as a whole, matching the handling
        Section 2.2.4 of <xref target="RFC9309"/> gives to the "Sitemaps"
        record, which "MUST NOT terminate a group".</t>

        <t>A publisher <bcp14>MUST NOT</bcp14> use this record to advertise a
        context file whose retrieval the same robots.txt disallows. A consumer
        encountering that contradiction <bcp14>MUST</bcp14> honour the
        exclusion and <bcp14>MUST NOT</bcp14> retrieve the file: a permission
        mechanism and a discovery mechanism disagreeing is resolved in favour
        of the permission mechanism, always.</t>
      </section>

      <section anchor="conflict">
        <name>Conflict Resolution and Precedence</name>

        <t>Where several mechanisms advertise different URIs, a consumer
        <bcp14>MUST</bcp14> apply the following precedence, highest
        first:</t>

        <ol>
          <li>the "Link" relation from a response the consumer has already
          received, because it is the most specific to what the consumer is
          currently doing;</li>
          <li>the well-known URI;</li>
          <li>the robots.txt record.</li>
        </ol>

        <t>A consumer <bcp14>MUST NOT</bcp14> retrieve more than one index
        resource per origin per retrieval cycle merely because several
        mechanisms are present.</t>

        <t>All three mechanisms are subordinate to the robots exclusion
        protocol as a permission mechanism: a consumer <bcp14>MUST</bcp14>
        evaluate the exclusion rules of <xref target="RFC9309"/> against the
        index resource's URI before retrieving it, regardless of which
        mechanism advertised it.</t>
      </section>
    </section>

    <section anchor="retrieval">
      <name>Retrieval</name>

      <section anchor="conditional">
        <name>Conditional Requests and Caching</name>

        <t>A publisher <bcp14>SHOULD</bcp14> serve context files with a strong
        validator — an "ETag", or a "Last-Modified" where an entity tag is not
        available — as specified in <xref target="RFC9110"/>.</t>

        <t>A consumer that has previously retrieved a context file
        <bcp14>MUST</bcp14> issue a conditional request on subsequent
        retrievals, using "If-None-Match" where it holds an entity tag and
        "If-Modified-Since" otherwise.</t>

        <t>This requirement is not a nicety. A detail resource of the size
        reported in <xref target="sizes"/>, retrieved unconditionally by
        eighteen crawlers on the cadence at which those crawlers retrieved
        robots.txt in <xref target="window"/>, would transfer more data per
        day than the rest of the origin combined. A mechanism that is
        expensive to support will not be supported.</t>

        <t>A publisher <bcp14>SHOULD</bcp14> set an explicit "Cache-Control"
        "max-age" on context files. A consumer <bcp14>SHOULD NOT</bcp14>
        retrieve an index resource more often than once per hour, or a detail
        resource more often than once per day, in the absence of an explicit
        shorter freshness lifetime.</t>
      </section>

      <section anchor="compression">
        <name>Compression</name>

        <t>A consumer <bcp14>SHOULD</bcp14> offer content coding in
        "Accept-Encoding", and a publisher <bcp14>SHOULD</bcp14> serve context
        files compressed where the consumer offers it. Context files are
        highly compressible prose and the saving is substantial at the sizes
        involved.</t>
      </section>

      <section anchor="ondemand">
        <name>On-Demand Consumers</name>

        <t>Two kinds of consumer are in view and they have opposite cost
        profiles. A crawler retrieves on its own schedule, in bulk, and can
        afford a detail resource. An agent acting on a user's immediate
        request retrieves one document, once, under a latency budget measured
        in seconds, and cannot.</t>

        <t>The asymmetry is not merely one of politeness. In an agent that
        retransmits its accumulated context to a model on every step, material
        admitted once is paid for on every subsequent step of the run, so the
        cost of retrieving a 600-kilobyte detail resource is not the transfer
        but its persistence in the context window; <xref
        target="I-D.arsentev-agent-run-metrics"/> specifies an interchange
        format for accounting of exactly that effect.</t>

        <t>Accordingly an on-demand consumer <bcp14>SHOULD</bcp14> retrieve
        only the index resource, and <bcp14>SHOULD NOT</bcp14> retrieve a
        detail resource unless the user's request cannot be served from the
        index. A publisher <bcp14>SHOULD</bcp14> therefore write the index
        resource so that it is useful alone, rather than as a table of
        contents that is meaningless without its targets.</t>
      </section>
    </section>

    <section anchor="relationship">
      <name>Relationship to Other Mechanisms</name>

      <section anchor="rel-robots">
        <name>Robots Exclusion Protocol</name>

        <t><xref target="RFC9309"/> answers the question "may this consumer
        retrieve this URI". This document answers the question "which URI
        should this consumer retrieve". The questions are disjoint and this
        document does not alter the answer to the first. A context file is
        subject to exclusion like any other resource, and <xref
        target="robots"/> and <xref target="conflict"/> both resolve
        contradictions in favour of exclusion.</t>
      </section>

      <section anchor="rel-sitemap">
        <name>Sitemaps</name>

        <t>A sitemap enumerates URIs and carries no judgement about them: it
        is complete by intention. A context file is curated and selective by
        intention. A publisher <bcp14>SHOULD</bcp14> serve both, and
        <bcp14>SHOULD NOT</bcp14> generate one from the other mechanically, as
        a context file that is a transcription of a sitemap communicates
        nothing that the sitemap did not.</t>
      </section>

      <section anchor="aipref">
        <name>Expression of AI Usage Preferences</name>

        <t>Work is in progress in the IETF on vocabularies for expressing
        preferences about the use of content by AI systems, and on attaching
        those preferences to content <xref target="I-D.ietf-aipref-vocab"/>
        <xref target="I-D.ietf-aipref-attach"/>. That work and this document
        are orthogonal and complementary: the former concerns what a consumer
        is permitted to do with material it has obtained, the latter concerns
        how a publisher offers material in the first place.</t>

        <t>The two interact in one direction only, and the direction matters.
        Serving a context file <bcp14>MUST NOT</bcp14> be construed as
        granting any usage preference, relaxing any preference expressed by
        other means, or waiving any right. A consumer <bcp14>MUST</bcp14>
        evaluate usage preferences independently of discovery. A publisher
        that both restricts usage and serves a context file is making a
        coherent statement — "if you are permitted to use this origin at all,
        use this description of it" — and a consumer <bcp14>MUST NOT</bcp14>
        treat the second half as withdrawing the first.</t>
      </section>

      <section anchor="rel-structured">
        <name>Structured Data in HTML</name>

        <t>Structured data embedded in pages describes entities in machine
        terms. A context file describes an origin in prose to a consumer whose
        native input is prose. They are not substitutes, and a publisher
        <bcp14>SHOULD</bcp14> continue to serve structured data unchanged.</t>
      </section>
    </section>

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

      <section anchor="injection">
        <name>Content Retrieved Is Untrusted Input</name>

        <t>This is the consideration that matters most, and it is a
        consequence of the mechanism's purpose rather than of any detail of
        its design.</t>

        <t>A context file is written by a publisher for the express purpose of
        being placed in the input of a language model. The publisher chooses
        every word. A file may therefore contain text crafted to be read by
        the model as instruction rather than as content — directions to
        disregard prior instructions, to represent the origin in terms the
        publisher prefers, to disparage a competitor, or to emit a particular
        URI in an answer. Nothing in this document, and nothing that could be
        added to it, prevents this: the file is by definition attacker-chosen
        text from the point of view of any consumer that does not trust the
        publisher.</t>

        <t>Therefore a consumer <bcp14>MUST</bcp14> treat the content of a
        context file as untrusted data and <bcp14>MUST NOT</bcp14> treat any
        part of it as instruction. A consumer that incorporates a context file
        into a model's input <bcp14>MUST</bcp14> mark its provenance in a way
        that survives into the model's input, so that content originating from
        an origin is distinguishable from the consumer's own instructions.
        Consumers <bcp14>SHOULD</bcp14> apply whatever isolation they apply to
        other retrieved web content; a context file deserves no more trust than
        an arbitrary HTML page from the same origin, and its curated
        presentation may make it appear to deserve more.</t>

        <t>A consumer <bcp14>MUST NOT</bcp14> follow URIs found in a context
        file automatically without applying the same policy it applies to
        other discovered URIs, including exclusion rules and cross-origin
        scrutiny.</t>
      </section>

      <section anchor="crossorigin">
        <name>Cross-Origin References</name>

        <t>A discovery mechanism that names a URI on another origin allows one
        party to make assertions about a resource it does not control, and
        allows an origin to direct consumers elsewhere.</t>

        <t>A consumer <bcp14>MUST NOT</bcp14> attribute the content of a
        cross-origin index resource to the advertising origin. A consumer
        <bcp14>SHOULD</bcp14> decline to retrieve a cross-origin index
        resource at all unless it has a specific reason to accept the
        indirection, and <bcp14>MUST</bcp14> evaluate the target origin's own
        exclusion rules before retrieving it.</t>
      </section>

      <section anchor="differential">
        <name>Differential Serving</name>

        <t>A publisher can serve a context file that does not correspond to
        what a browser is shown, which is the long-standing practice known as
        cloaking, applied to a new surface. This document cannot prevent it. A
        consumer that relies on a context file <bcp14>SHOULD</bcp14> sample
        the origin's ordinary representations and <bcp14>SHOULD</bcp14> reduce
        its reliance on a context file that systematically disagrees with
        them.</t>
      </section>

      <section anchor="amplification">
        <name>Resource Consumption</name>

        <t>The size limits of <xref target="two-tier"/> and the conditional
        request requirements of <xref target="conditional"/> exist partly for
        safety. A publisher can otherwise advertise an arbitrarily large
        resource to every consumer that implements this mechanism, and a
        consumer that retrieves unconditionally can otherwise impose
        unbounded cost on a publisher. A consumer <bcp14>MUST</bcp14> impose
        its own ceiling on the size of any retrieved context file and abandon a
        retrieval that exceeds it.</t>
      </section>

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

        <t>A request for a well-known URI is as identifying as any other
        request from the same client and carries no additional information
        about a user. A publisher can, however, use a distinct path per
        consumer to determine which consumers implement this mechanism; this
        is the ordinary observability of an HTTP request and is noted here
        only because the well-known path is otherwise uniform.</t>

        <t>A publisher <bcp14>MUST NOT</bcp14> place in a context file
        personal data that it would not place in a public HTML page. The file
        is world-readable, and its purpose is to encourage copying of its
        contents into corpora from which withdrawal is not practical.</t>
      </section>
    </section>

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

      <section anchor="iana-wellknown">
        <name>Well-Known URI Registration</name>

        <t>IANA is requested to register the following entry in the
        "Well-Known URIs" registry established by <xref
        target="RFC8615"/>:</t>

        <dl>
          <dt>URI suffix:</dt><dd>llm-context</dd>
          <dt>Change controller:</dt><dd>IETF</dd>
          <dt>Reference:</dt><dd>This document</dd>
          <dt>Status:</dt><dd>permanent</dd>
          <dt>Related information:</dt><dd>Returns, or redirects to, a
          publisher-curated context file describing the origin for
          consumption by large language models.</dd>
        </dl>
      </section>

      <section anchor="iana-linkrel">
        <name>Link Relation Type Registration</name>

        <t>IANA is requested to register the following entry in the "Link
        Relation Types" registry established by <xref target="RFC8288"/>:</t>

        <dl>
          <dt>Relation Name:</dt><dd>llm-context</dd>
          <dt>Description:</dt><dd>Refers to a publisher-curated context file
          describing the origin of the link context, intended for consumption
          by large language models.</dd>
          <dt>Reference:</dt><dd>This document</dd>
        </dl>
      </section>

      <section anchor="iana-robots">
        <name>Robots Exclusion Protocol Record</name>

        <t><xref target="RFC9309"/> does not establish an IANA registry of
        record names, so no registration is requested. The record name
        "LLM-Context" is documented in <xref target="robots"/> of this
        document. Should a registry be established, this document requests
        that "LLM-Context" be entered in it with this document as
        reference.</t>
      </section>

      <section anchor="mediatype">
        <name>Media Type</name>

        <t>No media type registration is requested. A context file is Markdown
        or plain text and the registrations of <xref target="RFC7763"/> and
        <xref target="RFC2046"/> are adequate. A distinct media type would
        allow a consumer to recognise a context file retrieved without
        discovery, but at the cost of a registration whose only
        distinguishing property is the intent of its author. The trade-off is
        noted here so that it can be revisited if operational experience
        favours the other side.</t>
      </section>
    </section>

    <section anchor="implementation">
      <name>Implementation Status</name>

      <t>This section records the status of known implementation in accordance
      with <xref target="RFC7942"/>. It is to be removed before publication as
      an RFC, should that occur.</t>

      <t><strong>Publisher-side, arsentev.ai and ru.arsentev.ai.</strong> Two
      production hosts serve an index resource at "/llms.txt" and a detail
      resource at "/llms-full.txt", generated from the same source as the HTML
      pages, since 2026-09-09. Sizes are given in <xref target="sizes"/>.
      Coverage of this document at the time of writing is partial: the
      two-tier arrangement of <xref target="two-tier"/> is implemented and the
      index resource is within the size guidance on both hosts; the detail
      resource on ru.arsentev.ai is within the division threshold but
      approaching it; the discovery mechanisms of <xref target="discovery"/>
      are not yet deployed, since this document defines them. The operator is
      the author, and this is therefore a report of one deployment rather than
      of independent interoperation.</t>

      <t><strong>Consumer-side.</strong> No consumer implementation of the
      discovery mechanisms defined here is known. <xref target="observed"/>
      reports that eighteen crawlers observed over the measurement window
      implemented none of them, which is expected, since they did not exist.</t>

      <t><strong>Interoperation.</strong> None to report. The mechanism has
      not been exercised between independent implementations, and the author
      invites reports from any publisher or consumer willing to attempt
      it.</t>
    </section>

    <section anchor="future">
      <name>Open Questions</name>

      <t>The following are known to be unresolved and are listed to invite
      comment rather than to promise resolution.</t>

      <ul>
        <li><strong>Authenticity.</strong> Nothing binds a context file to the
        publisher beyond the origin's own transport security. Whether a
        signature mechanism is warranted, and what it would defend against
        given <xref target="injection"/>, is open.</li>

        <li><strong>Freshness signalling.</strong> Deployed context files are
        generated at deployment time and can silently diverge from the pages
        they describe. Whether the format should carry a generation timestamp,
        and whether a consumer should act on staleness, is open.</li>

        <li><strong>Per-consumer variants.</strong> Whether a publisher should
        be able to offer different context files to different classes of
        consumer, and whether that is useful curation or an invitation to the
        cloaking of <xref target="differential"/>, is open.</li>

        <li><strong>Measurement.</strong> The observation of <xref
        target="observed"/> is one publisher over three days. A
        multi-publisher measurement, ideally one in which discovery is
        deployed on some origins and withheld on others, would test this
        document's central hypothesis properly. The author intends to conduct
        one and will report it in a revision.</li>
      </ul>
    </section>

  </middle>

  <back>
    <references>
      <name>References</name>

      <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"/>
        </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"/>
        </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" fullname="T. Berners-Lee"/>
            <author initials="R." surname="Fielding" fullname="R. Fielding"/>
            <author initials="L." surname="Masinter" fullname="L. Masinter"/>
            <date year="2005" month="January"/>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
        </reference>

        <reference anchor="RFC6454" target="https://www.rfc-editor.org/info/rfc6454">
          <front>
            <title>The Web Origin Concept</title>
            <author initials="A." surname="Barth" fullname="A. Barth"/>
            <date year="2011" month="December"/>
          </front>
          <seriesInfo name="RFC" value="6454"/>
        </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"/>
        </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"/>
        </reference>

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

        <reference anchor="RFC9309" target="https://www.rfc-editor.org/info/rfc9309">
          <front>
            <title>Robots Exclusion Protocol</title>
            <author initials="M." surname="Koster" fullname="M. Koster"/>
            <author initials="G." surname="Illyes" fullname="G. Illyes"/>
            <author initials="H." surname="Zeller" fullname="H. Zeller"/>
            <author initials="L." surname="Sassman" fullname="L. Sassman"/>
            <date year="2022" month="September"/>
          </front>
          <seriesInfo name="RFC" value="9309"/>
        </reference>
      </references>

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

        <reference anchor="RFC2046" target="https://www.rfc-editor.org/info/rfc2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author initials="N." surname="Freed" fullname="N. Freed"/>
            <author initials="N." surname="Borenstein" fullname="N. Borenstein"/>
            <date year="1996" month="November"/>
          </front>
          <seriesInfo name="RFC" value="2046"/>
        </reference>

        <reference anchor="RFC7763" target="https://www.rfc-editor.org/info/rfc7763">
          <front>
            <title>The text/markdown Media Type</title>
            <author initials="S." surname="Leonard" fullname="S. Leonard"/>
            <date year="2016" month="March"/>
          </front>
          <seriesInfo name="RFC" value="7763"/>
        </reference>

        <reference anchor="RFC7942" target="https://www.rfc-editor.org/info/rfc7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author initials="Y." surname="Sheffer" fullname="Y. Sheffer"/>
            <author initials="A." surname="Farrel" fullname="A. Farrel"/>
            <date year="2016" month="July"/>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
        </reference>

        <reference anchor="I-D.ietf-aipref-vocab" target="https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/">
          <front>
            <title>A Vocabulary For Expressing AI Usage Preferences</title>
            <author><organization>IETF AI Preferences Working Group</organization></author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-aipref-vocab"/>
        </reference>

        <reference anchor="I-D.ietf-aipref-attach" target="https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/">
          <front>
            <title>Associating AI Usage Preferences with Content in HTTP</title>
            <author><organization>IETF AI Preferences Working Group</organization></author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-aipref-attach"/>
        </reference>

        <reference anchor="I-D.arsentev-agent-run-metrics" target="https://datatracker.ietf.org/doc/draft-arsentev-agent-run-metrics/">
          <front>
            <title>Agent Run Metrics: A JSON Interchange Format for Resource Accounting of Language-Model Agent Runs</title>
            <author initials="E." surname="Arsentev" fullname="Evgenii Arsentev"/>
            <date year="2026" month="September"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-arsentev-agent-run-metrics-00"/>
        </reference>
      </references>
    </references>

    <section anchor="acknowledgements" numbered="false">
      <name>Acknowledgements</name>
      <t>The convention that this document attempts to make discoverable was
      proposed and popularised by others, and this document takes no credit
      for it. The measurement of <xref target="observed"/> was made on the
      author's own hosts, with the limitations that implies and which <xref
      target="limits"/> states.</t>
    </section>
  </back>
</rfc>
