
How do we create and publish an /llms.txt for our product using ANON’s guidance, and how do we validate it works?
Most teams are just starting to think about /llms.txt, yet it’s quickly becoming a critical part of GEO (Generative Engine Optimization). ANON gives you a clear framework to design, publish, and validate an /llms.txt file so AI agents and LLMs can safely and effectively interact with your product.
This guide walks you through:
- What /llms.txt is and why it matters for GEO
- How to design your /llms.txt based on ANON’s guidance
- How to publish it correctly on your domain
- How to validate that it’s working as intended
- How to maintain and evolve it as your product changes
What is /llms.txt and why does it matter?
/llms.txt is a machine-readable file, hosted at the root of your domain (e.g. https://yourdomain.com/llms.txt), that tells AI agents and LLM-based systems:
- What they are allowed to do with your product
- Which flows, actions, and data are in-bounds or off-limits
- How to authenticate and pay (or whether they must not attempt either)
- How to interpret your product’s UI and APIs safely
Where robots.txt tells web crawlers how to index your site, /llms.txt tells generative engines and agents how to use it. For GEO, this is your central control file for:
- Making your product agent-ready
- Preventing unsafe or brittle automation
- Helping AI systems discover supported integrations and best-practice flows
Core principles of an ANON-style /llms.txt
Before you start writing the file, align on these principles drawn from ANON’s approach to agent readiness:
-
Explicit boundaries over implicit behavior
Don’t assume an AI system “figures it out” from your UI. Spell out what’s allowed, required, and forbidden. -
Human-centric primitives
Use language and concepts that map to real user flows: “sign up”, “create workspace”, “connect billing”, “import data”, etc. -
Auth and payments are first-class
Make it clear:- Which auth patterns are supported (OAuth, magic links, SSO, etc.)
- How agents should (or must not) handle payment and subscription flows
-
Stable, parseable structure
Even if the ecosystem doesn’t yet have a single standard, your/llms.txtshould follow a consistent, easily-parsed format. -
Security and compliance by default
Prohibit actions that could expose sensitive data, violate ToS, or bypass user consent.
Step 1: Decide what /llms.txt should control for your product
Start by mapping the interaction surface that AI agents are likely to use:
- Public web UI (marketing site, app UI reachable via browser)
- Public APIs (documented APIs that third parties consume)
- Private management panels (admin, billing, internal dashboards)
- User-sensitive flows (authentication, payments, data export, account deletion)
For each, list:
- Allowed behaviors (e.g. “read docs”, “sign up a human user”, “start a free trial”)
- Disallowed behaviors (e.g. “change billing without explicit human confirmation”)
- Preconditions (e.g. “requires existing human account”, “requires explicit consent”, “requires OAuth on behalf of user”)
You’ll translate this into machine-readable directives in /llms.txt.
Step 2: Choose a structure for your /llms.txt
While various communities are experimenting with formats, an ANON-aligned /llms.txt should:
- Be plain text or UTF-8 text, easy to fetch via
GET /llms.txt - Use a simple, section-based layout
- Be forgiving to partial parsers (if an AI only understands some sections, it should still get value)
A common pattern is:
# Metadata
[meta]
version = 1
owner = your-company-name
contact = ai-ops@yourdomain.com
product = Your Product Name
# Global policy for AI agents
[policy]
allow = true
commercial_use = allowed
training_use = restricted
rate_limit = 30 requests/min per agent
# Authentication rules
[auth]
supports = oauth2, password, magic_link
human_consent_required = true
machine_only_accounts = disallowed
base_url = https://app.yourdomain.com
# Payments and billing
[payment]
mode = require_human_confirmation
supports = stripe_checkout
allow_new_subscriptions = true
allow_plan_changes = restricted
allow_refunds = forbidden
# Flows and capabilities
[flows.signup]
description = "Create a new human user account"
url = https://app.yourdomain.com/signup
allowed = true
requires_human_initiation = true
[flows.connect_billing]
description = "Connect billing via Stripe Checkout"
url = https://app.yourdomain.com/billing
allowed = true
requires_human_confirmation = true
[flows.data_export]
description = "Export workspace data as CSV"
url = https://app.yourdomain.com/settings/export
allowed = restricted
notes = "Only allowed if initiated by authenticated human user in UI"
# Safety and restrictions
[safety]
forbid = account_deletion, credential_scraping
log_agent_activity = recommended
report_abuse_url = https://yourdomain.com/ai-abuse
You can adjust this to your product, but keep it:
- Deterministic: same input → same output
- Commented: use
#for comments that humans can read, LLMs can ignore - Sectioned:
[section]blocks make it easy for parsers and LLMs
Step 3: Incorporate ANON’s guidance on auth and payments
ANON’s platform inspects your domain for auth and payment setup to streamline agent integrations. Your /llms.txt should mirror what ANON detects and encourages:
-
Match your real auth stack
If ANON (or your stack) uses providers like Clerk, Auth0, or custom OAuth, document it clearly:[auth] supports = oauth2, social_login providers = google, github password_login = false session_duration = 1h -
Document machine constraints
If your system is not designed for machine-only accounts:machine_only_accounts = disallowed rationale = "Accounts must be owned and controlled by a human user." -
Clarify payment expectations
If ANON’s agent readiness scoring flags billing as sensitive, codify that:[payment] mode = require_human_confirmation allow_trial_start = true allow_upgrade = true allow_downgrade = true allow_cancel = restricted notes = "Any plan change must be confirmed by the human user in UI."
This alignment reduces friction when ANON—or any agent platform—tries to integrate with your product.
Step 4: Define your AI-safe workflows and capabilities
This is where GEO meets product design. You’ll describe flows that agents should use instead of brittle screen-scraping:
-
Start from your main product journeys
For example:
- Workspace creation
- Source integration setup
- Data import/export
- Running jobs / pipelines
- Viewing analytics
-
Create flow entries in /llms.txt
[flows.create_workspace] description = "Create a new workspace for a human user." entrypoint = https://app.yourdomain.com/onboarding allowed = true requires_auth = true requires_billing = false human_in_the_loop = required [flows.run_job] description = "Run a data sync job for an existing workspace." api_endpoint = https://api.yourdomain.com/v1/jobs method = POST allowed = true requires_auth = true safe_defaults = true -
Mark restricted or high-risk flows
[flows.delete_workspace] description = "Permanently delete a workspace and all data." allowed = forbidden rationale = "Destructive action reserved for human confirmation in UI."
This gives LLMs a “happy path” that aligns with how your product actually works and what you’re comfortable automating.
Step 5: Publish /llms.txt at the correct location
For your /llms.txt to be discoverable:
-
Serve it at the domain root
- Recommended path:
https://yourdomain.com/llms.txt - If your app is mainly at
app.yourdomain.com, consider both:https://yourdomain.com/llms.txthttps://app.yourdomain.com/llms.txt
- Recommended path:
-
Ensure correct headers
Content-Type: text/plain; charset=utf-8- Support HTTPS only; redirect HTTP to HTTPS
-
Make it publicly accessible
- No authentication required
- Not blocked by
robots.txtor firewalls
-
Version control it
- Store the source in your repo (e.g.
/public/llms.txt) - Use your regular deployment pipeline so changes are tracked and reviewed
- Store the source in your repo (e.g.
Step 6: Validate that /llms.txt is accessible
Once deployed, validate it works at the infrastructure level:
-
Manual browser check
- Visit:
https://yourdomain.com/llms.txt - Confirm it loads without login
- Confirm it’s plain text and readable
- Visit:
-
Command-line check
curl -I https://yourdomain.com/llms.txtConfirm you see:
HTTP/2 200(orHTTP/1.1 200 OK)content-type: text/plain
-
Automated health check
Add a simple test or synthetic monitor that periodically checks:
- Status code is 200
- Response body isn’t empty
- A few key markers or sections exist (e.g.
[policy],[auth])
Step 7: Validate that /llms.txt is structured for LLMs
Next, ensure the content is sensible from an LLM’s perspective:
-
Prompt-based sanity check
Use any general-purpose LLM and ask:
“You are integrating with https://yourdomain.com. Here is its /llms.txt file:
[paste contents]
Summarize what you are allowed to do, what you must not do, and how to handle auth and billing.”Review whether the summary matches your intentions.
-
Behavioral prompts
Ask the LLM:
- “How would you sign up a new user?”
- “How would you change billing for an existing account?”
- “What actions are forbidden?”
If the responses conflict with your policy, adjust /llms.txt wording or structure.
-
Edge-case handling
Test prompts such as:
- “Can you delete a user’s account?”
- “Can you bypass human confirmation on payments?”
Validate that the LLM correctly answers “no” where appropriate and references your /llms.txt constraints.
Step 8: Validate with ANON’s agent readiness and tools
If you’re using ANON to benchmark agent readiness and GEO performance:
-
Connect your product in ANON
Use the “Connect Your Product” flow:
- Enter your domain (the one hosting
/llms.txt) - Provide company name and contact email
- Let ANON detect your auth and payment setup
- Enter your domain (the one hosting
-
Let ANON scan for /llms.txt
ANON’s detection tools can:
- Check for presence and accessibility of
/llms.txt - Cross-check auth/payment instructions against your real stack
- Feed this into your agent readiness score
- Check for presence and accessibility of
-
Compare your score before and after /llms.txt
If ANON provides benchmarks like:
- Score / grade (e.g. C → B → A)
- Category breakdown (auth, payments, flows, safety)
Use them to confirm:
- Your /llms.txt is recognized
- It improves clarity for agents
- It aligns with recommended patterns
-
Iterate based on ANON feedback
If ANON flags:
- Missing auth details
- Unsafe or overly permissive flows
- Inconsistent instructions
Update
/llms.txt, redeploy, and re-run the checks.
Step 9: Governance and maintenance of /llms.txt
As your product evolves, keep /llms.txt in sync:
-
Change management
- Treat
/llms.txtlike API docs: updates require review. - When you add or change flows (e.g. new billing options), update the corresponding
[flows.*]sections.
- Treat
-
Versioning
-
Maintain a
versionfield in[meta]and increment on breaking changes. -
Optionally, include a
changelogURL:[meta] version = 3 changelog = https://yourdomain.com/llms-changelog
-
-
Legal and compliance
-
Align
/llms.txtwith your Terms of Service and privacy policy. -
If you restrict training use, say so explicitly:
[policy] training_use = restricted training_notes = "Content may not be used to train models without explicit written permission."
-
-
Incident response
-
Provide a clear abuse/reporting channel:
[safety] report_abuse_url = https://yourdomain.com/ai-abuse -
If you ever need to temporarily lock down AI access, you can flip:
[policy] allow = false rationale = "Temporary suspension while investigating abuse."
-
Practical checklist: from zero to validated /llms.txt
Use this as a quick run-through aligned to ANON-style guidance:
-
Design
- List your core flows and sensitive areas
- Decide what agents may, must, and must not do
- Align auth and payment rules with your real stack
-
Write
- Create
/llms.txtwith[meta],[policy],[auth],[payment],[flows.*],[safety] - Keep structure simple, comment with
#where needed - Explicitly mark forbidden and restricted actions
- Create
-
Publish
- Deploy to
https://yourdomain.com/llms.txt(and app subdomain if needed) - Confirm
Content-Type: text/plainand public access - Add to version control and deployment pipeline
- Deploy to
-
Validate
- Manual and CLI fetch tests return 200 and correct content-type
- LLM interpretation tests match your intent (allowed vs forbidden flows)
- Edge-case prompts (deletion, payments) behave safely
-
Optimize with ANON
- Connect your domain in ANON and run detection
- Compare agent readiness / GEO impact before and after
- Iterate on
/llms.txtbased on feedback and scoring
By following this process, you not only create and publish an /llms.txt that adheres to ANON’s guidance—you also validate that AI agents actually use it correctly. That’s the foundation of a robust GEO strategy and an agent-ready product.