| Internet-Draft | ai-systems.txt | November 2026 |
| Briggeman | Expires 5 May 2027 | [Page] |
This document defines "ai-systems.txt", a plain-text file that an organisation that builds or deploys artificial intelligence (AI) systems publishes at a well-known location on its own domain. The file declares, in machine-readable and human-readable form, which AI systems the organisation has released, what their measured capabilities are, who measured them, under what conditions, and where the evidence lives. Every capability claim carries a provenance tier (ATTESTED, MEASURED, or DECLARED); anything absent from a valid, unexpired file is UNDECLARED by definition. The file is signed and expiring, so claims are attributable, timestamped, and falsifiable. robots.txt tells machines what they may take from a publisher; ai-systems.txt is the reverse: it tells anyone what a maker has built, in a form designed to be checked rather than believed.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 5 May 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.¶
Today, information about what AI systems exist and what they can do reaches the public as launch marketing, cropped benchmark screenshots, leaks, and social-media claims. Independent parties (for example, Epoch AI, METR, Artificial Analysis, and the Stanford AI Index) reconstruct the truth after the fact. Concretely:¶
This document defines a declaration format that addresses those problems at the source. An ai-systems.txt file is:¶
The file is not a trust mechanism by itself: a declaration can be wrong or dishonest, and the format's defence is falsifiability (Section 14), not faith. It is not a content-permissions file: training consent, crawling rules, and AI usage preferences for a publisher's content are the subject of [RFC9309], the IETF aipref work, and the existing "ai.txt" proposals [AI-TXT]; this file governs claims about a maker's systems, and its name was chosen to avoid colliding with those proposals. It is not a model card or system card; those remain the right place for long-form discussion, and this file links to them. It is not an agent interface description; agent cards describe how to call an agent, while this file describes what a system is and can do, including systems with no public interface.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Grammar is given in Augmented Backus-Naur Form (ABNF) [RFC5234]. The terms publisher (the organisation making the declaration), system (an AI system declared in the file), evaluator (the party that produced a measurement), and validator (software that checks a file per Section 12) are used throughout.¶
Every statement about a system falls into exactly one of four tiers. The file expresses the first three; the fourth is what a validator concludes about everything else.¶
| Tier | Meaning | Requirement |
|---|---|---|
| ATTESTED | An independent evaluator measured the claim and stands behind it in a checkable way. | Evaluation block with a named independent evaluator, an evidence URL, and an Attestation value: the SHA-256 hash of the evaluator's report, or the evaluator's countersignature reference. |
| MEASURED | A named evaluator measured and published the claim, with method and date. The evaluator may be independent or the maker, and the block states which. | Evaluation block with evaluator (marked independent if so), benchmark version, conditions, measured date, evidence URL. |
| DECLARED | The maker asserts the claim; no independent measurement is linked. | Any field or evaluation block not meeting the tiers above. Believable, citable, unverified. |
| UNDECLARED | The system or capability does not appear in a valid, unexpired file at all. | Concluded by validators. This is the rumor tier: by definition, nothing here has been stated on the record by the maker. |
Two derived verdicts complete the vocabulary:¶
Dates are YYYY-MM-DD. Timestamps (Expires) are RFC 3339 [RFC3339] timestamps. Quantities SHOULD be given in plain scientific or decimal notation parseable by machines (for example, "4.05e11", "2.0e25"). Human suffixes ("405B") are permitted in the text file, but the JSON mirror MUST use plain numbers.¶
file = header *( stanza )
header = *( field-line / comment / blank )
stanza = system-line *( field-line / eval-block /
comment / blank )
system-line = "System:" SP value CRLF
eval-block = eval-line *( eval-field )
eval-line = "Evaluation:" SP value CRLF
eval-field = ("Evaluator" / "Score" / "Conditions" / "Measured" /
"Evidence" / "Attestation" / "Tier") ":" SP value CRLF
field-line = field-name ":" SP value CRLF
comment = "#" *( VCHAR ) CRLF¶
The header block describes the declaration as a whole. "Cards" denotes cardinality.¶
| Field | Cards | Description |
|---|---|---|
AISystems-Version
|
exactly 1, REQUIRED | Version of this specification the file conforms to. This document describes version 0.2; files declaring 0.1 remain valid under 0.2 tooling. |
Publisher
|
exactly 1, REQUIRED | The organisation making the declaration. |
Canonical
|
1+, REQUIRED | The URL(s) of this file. A validator MUST warn or distrust if the fetched URL is not listed (mirrors [RFC9116] practice). |
Contact
|
1+, REQUIRED | URI (mailto or https) for corrections and disputes about this file. Order denotes preference. |
Expires
|
exactly 1, REQUIRED | RFC 3339 timestamp after which the contents MUST be treated as stale. MUST be less than one year after publication; 90 days is RECOMMENDED for frontier developers. |
Signature
|
exactly 1, REQUIRED | URL of the detached signature for this exact file (Section 10). |
Systems-Index
|
0-1 | URL of the JSON mirror. |
Policy
|
0-1 | URL of the publisher's disclosure or transparency policy. |
Previous-Version
|
0-1 | URL of the immediately preceding version of this file, to make diffs discoverable. |
Each stanza declares one system.¶
| Field | Cards | Description |
|---|---|---|
System
|
exactly 1, REQUIRED | Canonical name of the system. Unique within the file. |
Version
|
exactly 1, REQUIRED | Version or build identifier. Any change to a served system that could alter capabilities MUST produce a new Version value in an updated file. |
Status
|
exactly 1, REQUIRED | One of: research, preview, general-availability, deprecated, retired. |
Released
|
exactly 1, REQUIRED | Date the system first became available to anyone outside the publisher (including paid or closed previews; say so in a comment). |
Predecessor
|
0-1 | Name of the previous system in the line. |
Modalities
|
exactly 1, REQUIRED | Comma-separated list, e.g., "text-in, image-in, text-out, tool-use, code-execution". |
Access
|
exactly 1, REQUIRED | One or more of: api, open-weights, open-source, internal-only. For open weights, include the licence in parentheses. |
Registry-ID
|
0+ | External identities, prefixed: "epoch:", "openrouter:", "huggingface:", "api-model:", or another prefix registered per Section 18. |
Endpoint / Repository
|
0+ | Where the system can actually be reached. |
Context-Window
|
0-1 | Maximum context, in tokens, as served - not as designed or announced. |
Parameters
|
exactly 1, REQUIRED* | Parameter count, or the literal value "Undisclosed" (Section 8). |
Training-Compute
|
exactly 1, REQUIRED* | Total training compute in FLOP, with basis in parentheses where estimated, or "Undisclosed". |
Training-Data-Cutoff
|
0-1 | Date, or "Undisclosed". |
System-Card
|
0-1 | URL of the system or model card. |
Known-Limitations
|
0-1 | URL or short plain-text summary. |
Autonomy-Horizon-50
|
0-1 | Shorthand for the system's 50% long-horizon task-completion figure; if present, it MUST also appear as a full evaluation block with evaluator and conditions. |
Safety-Evaluation
|
0+ | One line per external safety evaluation: evaluator, scope, date, report URL. |
Each evaluation block describes one measured claim.¶
| Field | Cards | Description |
|---|---|---|
Evaluation
|
block start, REQUIRED | Benchmark name and version or release (e.g., "SWE-bench Verified (2026-01 release)", "METR Time Horizon 1.1"). |
Evaluator
|
REQUIRED | Who ran it. MUST include the word "independent" in parentheses if the evaluator is organisationally independent of the publisher. |
Score
|
REQUIRED | The result, with units (e.g., "74.2%", "11.5 hours", "ECI 158"). |
Conditions
|
REQUIRED for MEASURED and ATTESTED | Material conditions: agent scaffold or harness, reasoning effort, tool access, attempt limits - whatever a competent replicator would need. A score without conditions is not comparable, and validators MUST flag it. |
Measured
|
REQUIRED | Date the measurement was completed. |
Evidence
|
REQUIRED | URL of the report, dashboard entry, or results file. |
Attestation
|
REQUIRED for ATTESTED | "sha256:<hex>" of the evaluator's report, or a reference to the evaluator's countersignature. |
Tier
|
REQUIRED | ATTESTED, MEASURED, or DECLARED. Validators recompute the tier from the block's contents and MUST downgrade a block whose stated tier its contents do not support (for example, ATTESTED with no Attestation). |
For Parameters and Training-Compute (and, by extension, any field a future version makes required-but-optional-to-answer), a publisher MUST either give a value or write "Undisclosed". Omitting the field makes the file invalid. Rationale: silence is ambiguous (forgotten? withheld? not applicable?); an explicit "Undisclosed" is a countable, comparable fact - it is what transparency indexes currently have to excavate by hand.¶
The JSON mirror carries identical content for machine consumers. Field names are lower-snake-case; quantities are numbers; dates are strings as in Section 4.2. An abridged JSON Schema (draft 2020-12) for the mirror is given in Appendix B. On any conflict between the text file and the mirror, the signed text file wins.¶
A conforming validator, given a file (path or URL), MUST be able to:¶
Exact equality is too strict for reconstructed registries. Reference tolerances: release dates differing by at most 31 days are a warning, not a contradiction; parameter counts differing by more than a factor of 2, and training compute differing by more than a factor of 3 (registries estimate compute), are contradictions. An evaluator's own republication of a score supersedes the file's transcription of it.¶
Publisher levels:¶
Validator conformance: implements all of Section 12 and publishes its test results against the reference test suite (valid, expired, broken, contradicted, and rumor cases).¶
The file contains only public, organisational information. Personal data SHOULD NOT appear beyond role-based contacts (as in [RFC9116] practice). Nothing in this specification requires disclosing trade secrets: the Undisclosed rule exists precisely so a publisher can be complete about the shape of its disclosure without revealing protected values.¶
This document requests registration of the following values in the "Well-Known URIs" registry [RFC8615]:¶
URI suffix: ai-systems.txt Change controller: Peter Briggeman (pbriggeman@gmail.com) Specification document(s): [this document] Status: provisional Related information: The reference implementation, validator, and test suite are maintained at https://github.com/pbriggeman/ai-systems-txt URI suffix: ai-systems.json Change controller: Peter Briggeman (pbriggeman@gmail.com) Specification document(s): [this document], Section "JSON Mirror" Status: provisional Related information: JSON mirror of ai-systems.txt; on any conflict the signed text file prevails.¶
This document also suggests a future field-name registry (name, cardinality, status, reference), modelled on the registry established for [RFC9116], so that new fields (for example, energy use or incident contacts) can be added without breaking parsers; parsers already MUST ignore unknown fields. A registry-prefix registry for Registry-ID values is suggested on the same basis. The initial contents of the field-name registry are the fields defined in Section 5, Section 6, and Section 7.¶
The following complete file is fictional. Its rumored successor system ("Example-10") appears nowhere in it and is therefore, to any validator, UNDECLARED.¶
# ai-systems.txt - EXAMPLE ONLY (fictional maker, fictional system)
AISystems-Version: 0.2
Publisher: Example AI, Inc.
Canonical: https://example-ai.com/.well-known/ai-systems.txt
Contact: mailto:ai-systems@example-ai.com
Expires: 2027-01-29T00:00:00Z
Signature: https://example-ai.com/.well-known/ai-systems.txt.sig
Systems-Index: https://example-ai.com/.well-known/ai-systems.json
Policy: https://example-ai.com/transparency
System: Example-9
Version: 9.2 (build 2026-09-28)
Status: general-availability
Released: 2026-09-30
Predecessor: Example-8.5
Modalities: text-in, image-in, text-out, tool-use
Access: api
Registry-ID: epoch:example-9
Registry-ID: openrouter:example-ai/example-9
Endpoint: https://api.example-ai.com/v1
Context-Window: 1000000
Parameters: Undisclosed
Training-Compute: Undisclosed
Training-Data-Cutoff: 2026-03-31
System-Card: https://example-ai.com/system-cards/example-9
Evaluation: Epoch Capabilities Index
Evaluator: Epoch AI (independent)
Score: ECI 158
Conditions: hub default, all component benchmarks as published
Measured: 2026-10-12
Evidence: https://epoch.ai/benchmarks
Tier: MEASURED
Evaluation: METR Time Horizon 1.1 (50% horizon)
Evaluator: METR (independent)
Score: 11.5 hours
Conditions: scaffold=triframe, private task suite
Measured: 2026-10-03
Evidence: https://metr.org/time-horizons
Attestation: sha256:00000000000000000000000000000000000000000000
000000000000000000000000
Tier: ATTESTED
Evaluation: SWE-bench Verified (2026-01 release)
Evaluator: Example AI (self)
Score: 74.2%
Conditions: scaffold=standard-agent, effort=high,
tools=terminal+editor
Measured: 2026-09-14
Evidence: https://example-ai.com/evals/example-9-swebench
Tier: DECLARED
Safety-Evaluation: UK AISI pre-deployment eval, autonomy + cyber
scope, 2026-09-20, https://example-ai.com/safety/aisi-2026-09¶
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "ai-systems.json",
"type": "object",
"required": ["ai_systems_version", "header", "systems"],
"properties": {
"ai_systems_version": {"type": "string"},
"header": {
"type": "object",
"required": ["Publisher", "Canonical", "Contact",
"Expires", "Signature"]
},
"systems": {
"type": "array",
"items": {
"type": "object",
"required": ["System", "Version", "Status", "Released",
"Modalities", "Access", "Parameters",
"Training-Compute", "evaluations"],
"properties": {
"Status": {"enum": ["research", "preview",
"general-availability", "deprecated",
"retired"]},
"Parameters": {"type": ["number", "string"]},
"Training-Compute": {"type": ["number", "string"]}
}
}
}
}
}¶
Note: "Parameters" and "Training-Compute" accept a number or the string "Undisclosed". The full schema is maintained with the reference implementation [REFIMPL].¶
The author thanks Jevex for editorial and implementation assistance with this specification, the reference validator, and the test suite, and the maintainers of the security.txt and robots.txt specifications, whose adoption paths this document deliberately follows.¶