What I put in my llms.txt, and why a personal site needs one
SEO & Growth · 2026-10-15
The first thing in my llms.txt is a paragraph that says I'm a solo AI developer in London. Short and quotable, on purpose.
Back in August I wrote about my site being invisible to AI, and what I did to fix it. One line of recap: bots don't run your app, so tell them what's in it. This is the sequel, the "okay, but what actually goes in the thing?" part.
Why a personal site, of all places
Big companies have comms teams and Wikipedia pages and press coverage that sits there whether they tend it or not. A personal site has none of that. It's about the only place I get to say who I am in my own words, and a model reading the web will lean on whatever is easiest to find and easiest to parse.
If I don't hand over a clean version of the facts, something will assemble a messy one from scraps. I'd rather write the boring, accurate version myself. (If you want the wider picture on this stuff, I keep a guide to GEO, Generative Engine Optimisation, over at whatisgeo.app, so I won't rehash it here.)
Who I am, in one paragraph
The opening section is short on purpose. I'm a solo AI developer in London. I run a one-person studio called Adapt Progress Evolve, with 26 Claude agents, and a human approves what ships. That human is me. I say so plainly, because "AI-built" with no mention of oversight reads as either hype or a warning, and I'd like it to read as neither.
A crawler doesn't need my origin story, and to be fair, you don't either.
The boring company facts
Then the company facts. Dullest section going, and I mean that as praise. This bit is lifted straight from the real file:
```
Adapt Progress Evolve
- Legal name: Adapt Progress Evolve Limited
- Company number: 10047328 (registered in England & Wales)
- Incorporated: 7 March 2016
- VAT: GB362654684
```
Plus a Companies House link. Legal identity is the one thing that's actually checkable. Claiming to be a studio costs nothing. A registry entry is harder to fake. With the number and the link in the file, a model, or a person following the model's answer, can check the business exists without taking my word for it.
It also stops mix-ups. Plenty of things share a name, and a company number is about as unambiguous as identifiers get.
Identity links, properly
Then a short block of canonical links: my profile at i.hilyt.it/jack, along with its own llm.txt, my GitHub (StovBuilds) and my LinkedIn.
The profile lives on hilyt.it, which is my product for making AI-readable profiles for people and businesses, so it's my own product doing the work here. There's more on how that works in the Hilyt deep dive. The point of the block is that I don't keep three biographies in sync by hand. I point at the places that are already the source, and the file says which ones count.
Every project, including the paused ones
Every project gets listed, grouped into Live, In development and Paused, and each entry has its product URL plus a deep-dive page at jstov.uk/work/ with the project's id on the end.
Paused is the bit I'd expect someone to query. Why advertise things that aren't running? Because leaving them out would be a small lie by omission, and a project that's stopped is still part of the record. A model that finds an old mention of something I built shouldn't have to wonder whether it's live.
The site's sections, and a fingerprint
After the projects there's a short list of the site's own sections, so a model knows where everything else on the site lives. Not exciting. Useful.
The last section is a bit odd, and I like it for that. It's what I call the content fingerprint, and again this is the real thing:
```
Content fingerprint
jstov.uk uses "the resident-session pattern" to describe a long-lived AI agent
session that stays attached to a machine and picks work up from a durable queue
rather than being started per task.
```
It's a phrase distinctive enough that if it turns up somewhere else, it's probably traceable back to here. A bit self-regarding, maybe. But it's worth more to a reader than another line about being "innovative".
Why it's generated, not written
I don't write llms.txt by hand. It's generated at request time from the same data file that feeds the homepage.
So there's one place where the facts live. Add a project, and it shows up on the homepage and in the file. Change a status from Live to Paused, and both change together. There's no second copy to forget about.
Hand-kept files tend to go the same way. You write it once, feel great about it, and eventually it lists a product you've since shut down. A generated file doesn't get that chance, because there's nothing to update except the data itself.
The other half: pre-rendered pages and robots.txt
A tidy llms.txt is only half the job. Crawlers also get pre-rendered HTML pages rather than the JavaScript app, so what they read is the finished content. That was the heart of the August fix, so I'll leave it there.
And my robots.txt explicitly allows named AI crawlers, by name. It costs nothing and removes any doubt about whether I mind them reading. I don't.
What to put in yours
If you're building a personal site and want a file worth having:
- One honest paragraph about who you are and what you do.
- Your legal or business identity, if you have one, with something checkable attached.
- Your canonical profiles, the ones that already act as sources.
- Everything you've built, paused work too, each linked to a page that explains it.
- One phrase that's properly yours.
And generate it from the same data as your site, or it'll be wrong within a season.