In Practice

For AI agents authoring these files

Increasingly the person publishing AI Discovery Files is not a person — it is an assistant asked to “set up AI Discovery Files for my site”. That agent needs a procedure and a set of hard limits, which the file specifications do not attempt to provide.

Authoring guidance v1.0.0 · Updated 2026-08-24

Why this page exists

The specifications define what a valid file contains. They do not define how an agent should go about producing one for a business it has just met — which facts it may infer, which it must ask for, and what to do when it cannot find an answer. That is what this page covers.

For what a valid file must contain, the specification documents remain the authority.

The prime directive

Never invent a fact about the target business. Every value you write must come from the target site itself, from the site owner, or be omitted entirely. It must never come from your own prior assumptions about the company.

These files exist so AI systems stop guessing about a business. A file authored by guessing defeats its own purpose — and because identity.json is the authoritative record other files must agree with, a single invented value propagates into every other file and becomes the thing future systems treat as true.

An omitted field is a correct outcome. An invented one is a defect that outlives the conversation that produced it.

What to point an agent at

Four addresses, all public, no key required. If you are instructing an assistant yourself, the shortest useful prompt is: read https://discoveryfiles.ai/agent/authoring.md, then follow it.

/agent/authoring.md text/markdown

The full authoring procedure in Markdown. Point an agent here first.

/agent/manifest.json application/json

The same guidance machine-readable, plus per-file metadata and every template URL. One fetch covers the whole task.

/agent/templates/{filename} text/plain

Each template served raw, so an agent never has to scrape the HTML page to get one.

/developer-ai.txt text/plain

This site’s own developer-ai.txt, which carries the same guidance — so an agent following the standard discovery path finds it without being told.

one fetch
curl -sS https://discoveryfiles.ai/agent/manifest.json

Where facts may come from

This is the part that decides whether the output is worth publishing. An agent can read a website and write eleven well-formed files in a minute; the question is whether the values in them are true.

Derive from the site

Safe to take directly from the target site’s own public pages, because the owner published them.

  • Services and products described on the site
  • Public contact addresses, phone numbers and postal addresses
  • Office or location names listed publicly
  • Social profile URLs linked from the site
  • Existing page URLs for the link sections of llms.txt
  • The site’s primary language

Ask the site owner

Cannot be reliably scraped and must not be guessed. If the owner cannot answer, omit the field rather than fill it.

  • Registered legal entity name, if it differs from the trading name
  • Company registration number and VAT number
  • Founding date
  • Services the business explicitly does NOT offer
  • Markets or regions explicitly NOT served
  • Whether AI training on their content is permitted
  • Brand forms that must never be used — retired names, wrong abbreviations
  • The contact address for AI-related enquiries

Never write

Prohibited by the specifications, or too risky for an agent to decide unilaterally.

  • Any superlative — "leading", "world-class", "best-in-class", "innovative"
  • Prices, which change faster than files are updated
  • Headcount, revenue or funding figures not stated on the site
  • Competitor names or comparative claims
  • Testimonials, reviews or quotes you cannot source
  • Credentials, API keys, internal hostnames or staging URLs
  • A permissive AI training grant the owner has not explicitly given

The procedure

  1. 01

    Check what already exists

    Fetch every path before writing anything. A site may already publish files that someone maintains deliberately. Overwriting a maintained brand.txt with your own inference is a regression, not an improvement.

    for f in llms.txt llm.txt llms-full.txt llms.html identity.json ai.json ai.txt brand.txt robots-ai.txt faq-ai.txt developer-ai.txt; do curl -sS -o /dev/null -w "%{http_code}  %{content_type}  $f\n" "https://example.com/$f"; done

    Stop condition If files already exist and look maintained, propose edits to the owner rather than replacing them.

  2. 02

    Read the target site

    Gather what the owner has already published: services, locations, contacts, the language of the site, and the URLs worth linking. Note the exact wording the site uses about itself — matching it keeps the files consistent with the pages they describe.

  3. 03

    Ask the owner for the gaps

    Present the “Ask the site owner” list as a short questionnaire. Ask for all of it at once rather than one question at a time. Make clear that unanswered items will be omitted, not guessed — that is a feature, and it usually prompts an answer.

    Stop condition Do not write identity.json without the registered business name and founding year confirmed, or explicitly waived.

  4. 04

    Write the Layer 1 files first

    llms.txt and identity.json are Required — start there. Getting those right matters more than publishing all eleven. Start from the published templates rather than composing from memory: they carry the required section structure.

    curl -sS https://discoveryfiles.ai/agent/templates/llms.txt
    curl -sS https://discoveryfiles.ai/agent/templates/identity.json
  5. 05

    Propagate the Core Identity block

    llms.txt is the source of truth. Write its Core Identity block from confirmed facts only, then repeat it word for word in every other file that carries it. Cross-file contradiction is the failure mode these specifications care most about.

  6. 06

    Decide crawler policy with the owner, not for them

    robots-ai.txt and any AI training stance are business decisions, not technical ones. Explain the trade-off — blocking a training crawler is different from blocking a search crawler, and blocking the latter removes the business from that assistant’s answers — then implement what the owner chooses.

    Stop condition Never grant AI training permission without an explicit instruction from the owner.

  7. 07

    Validate

    Run the repository validator over the finished files. Do not skip this because the output "looks right" — the validator catches exactly the errors that are invisible to reading.

    git clone --depth 1 https://github.com/GenerellAI/ai-discovery-files
    ./ai-discovery-files/scripts/validate.sh path/to/your/files/
  8. 08

    Verify how they are served

    A valid file served with the wrong Content-Type, or behind a soft 404, is an unreadable file. Confirm the status line and content type after deploying — this is the only check that proves the work landed.

    curl -sSI https://example.com/llms.txt | grep -i '^HTTP\|^content-type'
  9. 09

    Report what you omitted

    Tell the owner exactly which fields you left out and why, and which values came from them versus from their site. An omission they can fill in later is a good outcome; a plausible invention they never notice is the bad one.

The rules, compressed

Short enough to paste into a system prompt. This is the same list served in the manifest.

rules
- Never invent a fact about the business. Omit instead.
- identity.json is authoritative. Every other file must agree with it.
- No superlatives, no prices, no competitor references, anywhere.
- Never grant AI training permission the owner has not explicitly given.
- Never write credentials, internal hostnames or staging URLs into developer-ai.txt.
- robots-ai.txt must not contradict robots.txt. robots.txt wins regardless.
- Every file needs a Last Updated date reflecting when it was actually written.
- Replace every bracketed placeholder, or delete the section containing it.
- Files go at the domain root. Language variants go at language paths, e.g. /fr/llms.txt.
- Report omissions to the owner rather than filling them silently.

Raw template URLs

Fetch a template rather than composing a file from memory. Every value that must be supplied is wrapped in [SQUARE BRACKETS], which also makes it trivial to check afterwards whether any were left behind.

File Priority Template URL
llms.txt Required /agent/templates/llms.txt
llm.txt Required /agent/templates/llm.txt
llms-full.txt Conditional /agent/templates/llms-full.txt
llms.html Recommended /agent/templates/llms.html
identity.json Required /agent/templates/identity.json
ai.json Recommended /agent/templates/ai.json
ai.txt Recommended /agent/templates/ai.txt
brand.txt Recommended /agent/templates/brand.txt
robots-ai.txt Optional /agent/templates/robots-ai.txt
faq-ai.txt Recommended /agent/templates/faq-ai.txt
developer-ai.txt Conditional /agent/templates/developer-ai.txt

Check your own work for leftovers

Before handing files back, grep them. A published file still containing [Official Business Name] is the most common failure of agent-authored implementations.

grep -l "\[" llms.txt ai.txt brand.txt faq-ai.txt developer-ai.txt robots-ai.txt

This authoring guidance is published by discoveryfiles.ai. The file definitions it refers to live in the project repository under an MIT licence — anything an agent generates from these templates is unencumbered.