/ai
saagarpatel.dev — machine-readable corpus index.
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
manifest signature public key MCP page
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.
75 mirrored docs 75 passed 1.38% max word delta 0.987 min overlap
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.
| Document | HTML | Markdown | Delta | Overlap | Status |
|---|---|---|---|---|---|
| A Court of One | 1801 | 1805 | 0.22% | 1.000 | pass |
| A Ledger of Nos | 1978 | 1982 | 0.20% | 1.000 | pass |
| A Zero Is Not a Measurement | 2590 | 2596 | 0.23% | 1.000 | pass |
| The Apparatus That Never Fired | 1358 | 1363 | 0.37% | 0.998 | pass |
| The Approval Button Is Not the Safety System | 1125 | 1133 | 0.71% | 0.998 | pass |
| Score the Operator, Not the Worker | 2878 | 2873 | 0.17% | 0.992 | pass |
| An autobiography with no delete key | 1173 | 1179 | 0.51% | 1.000 | pass |
| The Coordination Platform You Don't Need | 1922 | 1918 | 0.21% | 0.990 | pass |
| Dead Letters | 1437 | 1439 | 0.14% | 1.000 | pass |
| A Fleet of One | 1363 | 1367 | 0.29% | 1.000 | pass |
| The Ghost in the Tauri Repos | 1521 | 1527 | 0.39% | 1.000 | pass |
| How a Grader Earns the Right to Grade | 1192 | 1200 | 0.67% | 1.000 | pass |
| The Guard That Doesn't Trust Itself | 1184 | 1190 | 0.50% | 1.000 | pass |
| The Harness Lies Too | 2750 | 2754 | 0.14% | 1.000 | pass |
| Intelligence Is Rented. Verification Compounds. | 1508 | 1513 | 0.33% | 1.000 | pass |
| Kill With Dignity | 1793 | 1796 | 0.17% | 1.000 | pass |
| Losing loudly | 992 | 994 | 0.20% | 0.998 | pass |
| The Missing Denominator | 1416 | 1419 | 0.21% | 1.000 | pass |
| Most of Your Findings Are False | 1707 | 1701 | 0.35% | 0.994 | pass |
| No Gate for Worse | 1339 | 1343 | 0.30% | 1.000 | pass |
| No Sermons in the Seal | 1182 | 1174 | 0.68% | 0.987 | pass |
| The Off-Family Judge | 2484 | 2488 | 0.16% | 1.000 | pass |
| One Word for Three Outcomes | 2884 | 2889 | 0.17% | 1.000 | pass |
| Novelty Is a Self-Report Too | 1165 | 1171 | 0.51% | 0.998 | pass |
| Permission to Ignore | 1125 | 1128 | 0.27% | 1.000 | pass |
| The Premium Model Won't Do the Premium Job | 1892 | 1900 | 0.42% | 0.999 | pass |
| We Rigged Our Own Benchmark | 1657 | 1651 | 0.36% | 0.991 | pass |
| Sermons vs. Instruments | 1952 | 1943 | 0.46% | 0.989 | pass |
| Six Times I Built What Already Existed | 3163 | 3170 | 0.22% | 1.000 | pass |
| Stranded at Green | 2836 | 2839 | 0.11% | 1.000 | pass |
| The 2 AM Agent | 2738 | 2742 | 0.15% | 1.000 | pass |
| The Benchmark That Argued Back | 1342 | 1347 | 0.37% | 1.000 | pass |
| Trust Doesn't Survive the Handoff | 3172 | 3177 | 0.16% | 1.000 | pass |
| The Second Look | 1507 | 1510 | 0.20% | 1.000 | pass |
| The Subtraction Dividend | 1938 | 1931 | 0.36% | 0.992 | pass |
| The Third Build Is the Factory | 2905 | 2911 | 0.21% | 1.000 | pass |
| The Well Ran Dry | 1629 | 1633 | 0.24% | 1.000 | pass |
| A thousand tiny catastrophes for a five-agent SQLite file | 1424 | 1434 | 0.70% | 0.995 | pass |
| The Conflict Table Is Empty | 2284 | 2289 | 0.22% | 1.000 | pass |
| Ulysses Pacts in Software | 2210 | 2202 | 0.36% | 0.989 | pass |
| Verification Capital in Three Movements | 1875 | 1880 | 0.27% | 1.000 | pass |
| What It Is Like to Be Evaluated | 2076 | 2083 | 0.34% | 0.999 | pass |
| Where the Interest Shows Up | 2525 | 2530 | 0.20% | 1.000 | pass |
| Who Audits the Auditor? | 1198 | 1202 | 0.33% | 0.998 | pass |
| Words We Had to Invent | 2321 | 2326 | 0.21% | 1.000 | pass |
| Anatomy of a Health Verdict | 1316 | 1321 | 0.38% | 0.998 | pass |
| Why bridge-db runs on FTS5, not a vector database | 713 | 723 | 1.38% | 1.000 | pass |
| Grading the grader | 732 | 735 | 0.41% | 0.997 | pass |
| Showing a private system in public | 919 | 925 | 0.65% | 1.000 | pass |
| Before You Connect the Tool | 754 | 759 | 0.66% | 1.000 | pass |
| Teaching a system to say "I don't know" | 695 | 703 | 1.14% | 0.997 | pass |
| The weighted die behind every word | 781 | 787 | 0.76% | 1.000 | pass |
| Scoring the operator, not the worker | 1398 | 1404 | 0.43% | 1.000 | pass |
| OPERANT public lab scorecard | 487 | 491 | 0.81% | 1.000 | pass |
| Operator OS in a box | 725 | 730 | 0.69% | 0.991 | pass |
| Showing the Operator OS without leaking it | 536 | 543 | 1.29% | 0.988 | pass |
| Building an operator OS for one | 1286 | 1292 | 0.46% | 1.000 | pass |
| A Portfolio Is an Observability Problem | 1057 | 1063 | 0.56% | 1.000 | pass |
| Pruning the fleet | 977 | 980 | 0.31% | 1.000 | pass |
| The Site That Answers Back | 416 | 421 | 1.19% | 0.995 | pass |
| Why this is public | 418 | 422 | 0.95% | 1.000 | pass |
| The Untrusted Workload | 1933 | 1936 | 0.15% | 1.000 | pass |
| The Knowledge Substrate | 1363 | 1360 | 0.22% | 0.998 | pass |
| Context Is the Budget | 1524 | 1528 | 0.26% | 1.000 | pass |
| The Auditor Audits Itself | 2179 | 2175 | 0.18% | 0.995 | pass |
| Proof You Can Hand a Stranger | 1870 | 1876 | 0.32% | 1.000 | pass |
| The Operator's Artifact | 1933 | 1936 | 0.15% | 1.000 | pass |
| The Map and the Territory | 1991 | 1989 | 0.10% | 0.994 | pass |
| The Guard That Enumerates Loses | 2827 | 2826 | 0.04% | 0.997 | pass |
| The Dossier Was Already Wrong | 1848 | 1853 | 0.27% | 1.000 | pass |
| The Measurement That Lied | 2256 | 2254 | 0.09% | 0.994 | pass |
| The Flywheel | 2743 | 2745 | 0.07% | 1.000 | pass |
| The Control Plane | 1973 | 1976 | 0.15% | 1.000 | pass |
| Two Harnesses, One Floor | 1393 | 1397 | 0.29% | 1.000 | pass |
| Peers, Not Owners | 1831 | 1825 | 0.33% | 0.996 | pass |
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
<a href="https://saagarpatel.dev/ai"><img src="https://saagarpatel.dev/badges/built-with-agents-verified-human.png" width="88" height="31" alt="Built with agents, verified by a human."></a>
If your site was built with agents and checked by a human, the tiny frame is reusable.
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
166 pages across 5 sections: Start here, Essays, The book: Operating Agents, Field notes, More from the workshop.
Saagar Patel · The Proving Ground: A live 3D machine hall where the work physically exists: 45 essays as a monolith, four instruments running their checks, 44 receipts in their true colors, and a portal to the reading room.
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 79 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,731 | 2,715 | 16,190 | 2,720 |
| Field note: Anatomy of a Health Verdict | 18,634 | 1,300 | 7,863 | 1,306 |
| Book chapter: The Untrusted Workload | 16,733 | 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.