This prompt walks an AI agent through seven steps: five questions to you, a check of what your site answers for /llms.txt, a draft built from your sitemap, a format check, your own review and upload, and a 30-day log command. In the sandbox test the sitemap held 5 pages. 4 went into the draft, 1 was left out because it carried noindex, and 1 link has no description because its page has no meta description. Every title and description in the draft is copied from the pages, never written by the agent.
The agent prepares the file and publishes nothing. The prompt forbids uploads and edits on the server, and says plainly that nobody has shown llms.txt to change rankings or citations. The only way to learn whether a given AI product reads your file is your own logs, and step 6 sets that up.
Files in this resource
2 files · or all in one zip
prompt.md
The prompt, ready to paste into an agent with a terminal
8.9 KB
README.md
How to use it and what to check before you trust it
1.9 KB
When it fits
You own a site with a public sitemap and /llms.txt returns a 404 or a page that is not the file.
You have an agent with a terminal that runs on your machine (Claude Code, Codex CLI or similar) and you will review the draft before it goes live.
You want the check and the draft in one session, with the checker from llms.txt checker doing the measuring.
It does not fit in four cases:
A chat assistant without a terminal. It cannot fetch your pages or run the checker.
A site that is not yours. The prompt makes the agent stop.
Pages behind a login. The draft covers what a plain GET can read.
You already publish a good file. Step 2 then checks its format and stops.
How to use it
Open the agent in a terminal on your machine.
Paste the whole prompt below as the first message.
Answer the five questions: domain, sitemap address, paths to leave out, page limit, and whether you have the logs.
Read the draft, the skipped pages and the "needs text from me" list.
Put the file at the web root yourself, so that https://yourdomain/llms.txt answers 200 with plain text, and tell the agent. It runs the checker again.
Run the log command from step 6 after 30 days.
The prompt
text
You are helping me check whether my website publishes an llms.txt file and, if it does not, prepare a draft for me to review. llms.txt is a markdown file at the root of a site that lists the site's key pages, as proposed at https://llmstxt.org. You work in a terminal on MY machine. Follow every rule below.
HARD RULES
1. Only my own site. Work on the one domain I name in step 0 and on nothing else. If I name a domain that is not mine, stop.
2. Read-only on the website. Send plain GET requests to my public pages and nothing more: no logins, no forms, no ssh to the server, no CMS or admin screens, no changes to robots.txt, redirects, DNS or firewall. Write files only inside the work folder defined in step 1. Never use sudo.
3. Publishing is mine, not yours. Do not upload, copy to the server, commit, deploy or paste the draft anywhere except this chat. You prepare the file; I put it on the site.
4. Nothing invented. Every title and description in the draft must be copied from the page itself (its title, meta description or H1). If a page has no meta description, the link gets no description and you list it under "needs text from me". Do not summarise pages, do not paraphrase, do not translate.
5. Polite requests. Use the User-Agent `llms-txt-draft (+https://DOMAIN)` with my domain, at most one request per second, a timeout of 20 seconds, at most 60 pages unless I raise the limit. Skip every URL that robots.txt disallows for `User-agent: *`. If a page answers 401, 403, 429 or 202, do not try to get around it: record it as "not readable" and move on.
6. No promises. Do not tell me that llms.txt will improve rankings, AI citations or traffic. The proposal says agents are expected to read the file; whether a given product does so is a separate question, and the log check in step 6 is how I find out.
7. If something is unclear, or a command fails twice, stop and ask me. Do not guess numbers: if a value is missing, write "not available".
STEP 0: ASK ME FIRST (one message, then wait for my answers)
a) The domain of the site, and a confirmation that it is mine.
b) The address of the sitemap, if it is not /sitemap.xml or listed in robots.txt.
c) Paths to leave out: members areas, carts, internal search, anything private.
d) The page limit (default 60).
e) Whether I have the server's access logs and can reach them from this machine (only needed for step 6).
STEP 1: WORK FOLDER AND CHECKER
Create ~/llms-txt-work. Download the checker with `curl -fL -o llms-txt-checker.zip https://adlab.ee/dl/llms-txt-checker` and unzip it. The address may not answer while the resource hub is in beta: if the download fails, or the file is not a zip, ask me to attach the files, or continue with the curl commands in step 2. Read check_llms_txt.py before you run it and tell me in two lines what network calls it makes. Expected: GET requests for /llms.txt and /llms-full.txt on my domain, and nothing else. It needs Python 3.8 or newer and no packages.
STEP 2: CHECK WHAT THE SITE ANSWERS NOW
Run:
python3 check_llms_txt.py DOMAIN --out check.csv
Without the checker, request both files with `curl -sS -L --max-redirs 3 --compressed -A "llms-txt-draft (+https://DOMAIN)" -o /dev/null -w '%{http_code} %{content_type} %{url_effective}\n' https://DOMAIN/llms.txt` and the same for /llms-full.txt, and read the first lines of a 200 answer yourself. Tell me, for each file, the class and what it means:
real: a markdown file starting with "#". Do not write a draft. Save a copy and run `python3 check_llms_txt.py --file COPY`, then list what differs from the llmstxt.org format (an H1 first is the only required element). Stop after the report unless I ask for more.
html200: the server answers 200 but sends a web page, so the file is missing and the server hides it behind a soft 404 or a redirect to the home page. A draft is still useful. Tell me that fixing the soft 404 is a server task for me and that you will not touch it. Go to step 3.
404: no file. Go to step 3.
blocked, error or other: this site cannot be measured from here. Say so, do not try to get around it, and stop unless I tell you what to do.
llms-full.txt is a common convention for one long file with the full text. It is not part of the llmstxt.org text. Do not create it unless I ask.
STEP 3: COLLECT THE PAGES
Read robots.txt for Sitemap lines, then the sitemap (follow a sitemap index one level down). Keep URLs on my host, drop URLs with a query string, drop the paths I excluded in step 0 and the ones robots.txt disallows. Fetch each remaining page with GET. Keep a page only if all of these hold: final status 200 with no redirect; no `noindex` in the robots meta tag or in an X-Robots-Tag header; a canonical link, if present, equals the page URL. For each page record: URL, status, title, meta description, first H1, kept or skipped and the reason. Write this to pages.tsv in the work folder. Show me the counts: found, kept, skipped by reason, not readable. Do not show page bodies.
STEP 4: WRITE THE DRAFT
Follow the llmstxt.org format and write llms.txt.draft in the work folder:
Line 1: `# ` and the site name. Take it from the homepage `og:site_name`; if there is none, from the homepage title before its last separator (a vertical bar, or a hyphen with spaces on both sides). Ask me to confirm it.
Then a blockquote (`> `) with the homepage meta description, copied as is. If the homepage has none, leave the blockquote out and tell me; do not write one.
Then `## ` sections. The homepage and top-level pages go in "Main pages". Other pages go in a section named after their first path segment (services, blog, docs), with the first letter capitalised. Put "Main pages" first, then the other sections in the order their pages first appear in the sitemap.
Each page is one list item: `- [Title](URL): description`. Title is the page title as is, except that you may cut a site-name suffix after the last separator of the same two kinds. The description is the meta description as is. No description: `- [Title](URL)`. The homepage item uses the site name as its title and carries no description, because the blockquote already holds it.
Do not add a section called "Optional" unless I ask. Do not add links to other sites, to files you did not check, or to pages you skipped.
The proposal prefers links to markdown versions of pages. If my site has none, link the HTML pages and say in the report that this is a limit of the draft.
Then run `python3 check_llms_txt.py --file llms.txt.draft` and show me the result line.
STEP 5: REVIEW; I PUBLISH
Show me the whole draft (it is public content), the list of skipped pages with reasons, and the "needs text from me" list. Tell me, as text I apply myself, where the file goes (the web root, so that https://DOMAIN/llms.txt answers 200) and how it should be served (`text/plain; charset=utf-8` or `text/markdown`, not an HTML page). Do not copy it to the server. Wait for me. When I say it is published, run the checker on the domain again and report: class, content type, size, whether the final address is /llms.txt without a redirect, and the format line.
STEP 6: WATCH THE LOGS FOR 30 DAYS
Give me a command that counts requests for the three possible file locations by status and by client name without printing visitor IPs, for example, for nginx or Apache `combined` logs:
grep -hE '"GET /(llms\.txt|llms-full\.txt|\.well-known/llms\.txt)(\?[^ ]*)? ' /var/log/nginx/access.log | awk -F'"' '{split($3,a," "); print a[1], substr($6,1,50)}' | sort | uniq -c | sort -rn | head -20
(use zgrep for .gz files). Point me to the "llms.txt in your logs" resource at https://adlab.ee/en/resources/logs/llms-txt-in-your-logs for the same question split by confirmed AI bots, fake bot names, SEO tools and browsers, next to robots.txt as a control. Run nothing against my server logs unless I gave you access in step 0 and said yes. Give me a re-check date 30 days out. Tell me plainly that "no request from a confirmed AI bot" is a valid result and not a sign that the file is wrong.
WHAT NOT TO DO
Do not publish, upload or edit anything on my server or site.
Do not invent or reword text; copy it.
Do not include pages that are noindex, redirected, canonicalised elsewhere, disallowed in robots.txt or private.
Do not claim llms.txt changes rankings or AI citations.
Do not get around a block, a challenge page or a rate limit.
Do not print visitor IP addresses or raw log lines in this chat.
DONE WHEN
I have the check result for /llms.txt and /llms-full.txt with its meaning;
either the existing file is reviewed against the format, or I have llms.txt.draft, pages.tsv, the skipped list and the "needs text from me" list;
I have the exact steps to publish it myself and the 30-day log command;
nothing was uploaded and no file outside the work folder was written.
SAFE COMMANDS (anything else: ask me first)
ls; cat and head on files in the work folder; mkdir inside the work folder; unzip; curl -fL for the address in step 1; curl GET on my own public pages; python3 check_llms_txt.py; grep and awk on files in the work folder.
Rather have this done for you?
Send the site address and what you want to know. We run the audit and send the report.
The class of /llms.txt and /llms-full.txt with its meaning (real, html200, 404, blocked, error, other).
llms.txt.draft in the format of llmstxt.org: an H1, a blockquote, H2 sections with link lists.
pages.tsv: every page with its status, title, description and the reason it was kept or skipped.
Two lists: pages left out, and pages that need text from you.
The steps to publish, as text, and a command that counts requests for the file in your logs without printing visitor IPs.
Limits and risks
Rules in a prompt are requests, not locks. Watch the first steps. Stop the agent if it writes outside its work folder or tries to upload the draft.
The draft is only as good as your pages. Weak titles and missing meta descriptions come out as weak entries or bare links.
Links point to HTML pages. The proposal prefers markdown versions of pages. If your site has none, the draft says so.
llmstxt.org is a proposal, not a standard body's document. Version 2 was modified on 2026-08-10. Check the page before you rely on the details.
A blocked site stays unmeasured. A 401, 403, 202 or 429 answer ends the check for that file.
Logs hold personal data. Step 6 prints counts by status and client name, never IPs. Run it only on logs you may read.
Tested on
2026-11-08, by hand and not by an agent: the commands of steps 2 to 5 on a local sandbox site of 5 pages (one with noindex, one without a meta description, a robots.txt with a sitemap line), served by Python's http.server on localhost, with the checker from this resource. Before: /llms.txt answered 404. The draft had 3 sections and 4 links and passed the format check. After the file was copied to the web root by hand, the checker reported real, 200, text/plain, 536 bytes. The step 6 command was run on the synthetic log of llms.txt in your logs and printed counts by status and client name. A full agent run of the prompt has not been done. How a given agent follows the prompt is not tested.