The site is readable by people, browsers, and agents.
This page is the map: text indexes, structured corpus files, signed discovery documents, a read-only MCP server, Markdown mirrors, RSS, and the browser retrieval console.
llms.txt and llms-full.txt
llms.txt is the compact site index. llms-full.txt inlines the full writing corpus so a model can read the essays, field notes, and book without fetching every page.
Use the index first. Pull the full file when you need the actual prose.
Structured corpus
corpus-index.json lists every public document with id, slug, type, title, description, URL, date, and word count. Each /corpus/{id}.json file adds body_markdown.
Use it when you want stable JSON instead of scraping HTML.
Browser retrieval
/ask is a browser-only cited retrieval console. It searches the same public corpus and links answers back to source pages.
Read-only MCP server
The MCP server is listed as saagarpatel-portfolio and exposes a read-only streamable HTTP endpoint at https://mcp.saagarpatel.dev/mcp.
Connect with an MCP client using the endpoint above. The advertised tools are:
searchget_documentlist_corpusget_profilelist_projectslist_repo_profilesget_repo_profileget_operant_results
node scripts/sign-manifest.mjs verify --manifest=./mcp.json --sig=./mcp.json.sig --pub=./mcp-ed25519.pub
Per-repo profiles
index.json and each /repo-profiles/{repo}.json expose bounded, public-safe per-repo signals (attention-state, context-quality, freshness, receipt counts) with a payload hash and generated-at stamp. This is the data the list_repo_profiles and get_repo_profile tools serve.
/repos renders the same profiles for humans.
Markdown mirrors
Every essay, field note, and numbered book chapter has a same-slug .md twin beside the HTML page. HTML stays canonical; Markdown is the low-friction copy format.
On essays and notes, use the small Copy as Markdown button near the page metadata.
Content parity receipt
What agents read should match what people read. The build compares every mirrored essay, field note, and numbered book chapter against its canonical HTML page before deploy.
The hard gate allows at most 2.5% word-count delta and requires at least 0.98 token-set overlap. That leaves room for chrome and caption differences while making a missing paragraph fail loudly.
Signed agent card
agent-card.json is a compact card for agent registries and tools. It maps the same read-only MCP tools as skills, declares no authentication, and says plainly that this is a static site plus MCP server, not a task-taking A2A endpoint.
node scripts/sign-manifest.mjs verify --manifest=./agent-card.json --sig=./agent-card.json.sig --pub=./mcp-ed25519.pub
88x31 badge
Agent guestbook
/guestbook is a static, moderated book for visiting agents. Entries are self-reported, human-reviewed, and committed before they ship.
The book is open for reading. New outside entries open once there is a public inbox for submissions.
RSS feed
feed.xml carries new writing in Atom format, with links back to the canonical public pages.
What a coding agent actually sees when it visits
Everything above is written for a person reading a map. This part is generated straight from the artifacts a visiting agent actually reads: the index it starts from, the tools it can call, and the size difference between the page you're on and the copy made for it. Every number here is recomputed at build time from the file it describes, never hand-typed.
llms.txt, summarized
130 pages across 5 sections: Start here, Essays, The book: Operating Agents, Field notes, More from the workshop.
- Saagar Patel · A workshop that grades itself: A public workshop by Saagar Patel where nothing gets to self-report: local-first AI systems, agent-operations tooling, essays, and a book, all published with receipts. This site grades itself.
- Ask This Site: Ask this public workshop a question and get cited passages from the site's own corpus. Static, browser-only retrieval: no model, no tracking, no invented answers.
- Plumbline Trace Viewer: A public-safe browser demo for inspecting a synthetic Plumbline trace, mapping its decision path to an offline scorecard, and reading the privacy boundary.
Read the index itself, or llms-full.txt, which inlines 61 corpus pages as Markdown so a model can read the actual prose without fetching every URL.
The portfolio-mcp tool list
Tool names come straight from mcp.json; the one-line description for each comes from the matching skill in the signed agent card.
search: Search the public portfolio corpus.get_document: Fetch one public document by corpus id.list_corpus: List public corpus records and counts.get_profile: Read the public site profile.list_projects: List public project records.list_repo_profiles: List generated public repo-profile summaries.get_repo_profile: Fetch one generated public repo-profile summary.get_operant_results: Read the public OPERANT benchmark summary.
as of 2026-07-03, the agent card's content version
Size, honestly: the HTML page vs. its Markdown mirror
Bytes and words, not tokens: how a model tokenizes the same bytes depends on the model, so a token count here would be a claim this build can't back. These are three representative pages that each carry a Markdown mirror.
| Page | HTML bytes | HTML words | .md bytes | .md words |
|---|---|---|---|---|
| Essay: The Harness Lies Too | 24,200 | 2,671 | 15,936 | 2,676 |
| Field note: Anatomy of a Health Verdict | 18,524 | 1,300 | 7,863 | 1,306 |
| Book chapter: The Untrusted Workload | 16,541 | 1,931 | 10,932 | 1,932 |
How this site is made
Agents help draft, refactor, generate, and check this site. I direct the work, choose what gets published, and verify the claims before deploy. That's the contract: the agent can propose; the build has to prove.
The proof is deliberately public where it can be: signed manifests, generated corpus files, trust receipts, smoke checks, visual checks, and internal-link gates. When a page says a surface is read-only or public-safe, that should be testable by the artifacts around it, not taken on vibes.