Your docs are now an API: writing for coding agents, not just humans
The second reader
Your documentation now has two consumer types with incompatible parsing strategies. The first is a human: a developer skimming for context, tolerant of narrative, able to infer missing steps from experience. The second is a coding agent (Claude Code, Cursor, or a custom tool-using LLM) that reads your docs while attempting to execute a task inside a real environment. The agent doesn't skim. It extracts action sequences, preconditions, and parameter values, then acts on them. If you want context on how varied that second reader can be, see this comparison of agent SDKs from LangChain to a simple while loop.
This changes the structural requirements of documentation. A quickstart that a human completes successfully despite a buried prerequisite is a quickstart an agent may fail, not because the model is weak, but because the information it needed lived in a shape it couldn't reliably retrieve. The practical implication: documentation is becoming an execution surface, so you should design it with the same discipline as an API.
Why prose-heavy docs fail agents
Agents parse documentation as structured input, not as narrative. When retrieving context, an agent typically works with chunks of a page (a heading plus its following content) rather than the full document in reading order. Any information whose meaning depends on position in a linear narrative risks getting lost or misapplied. Human readers compensate with working memory and domain intuition. Agents compensate poorly, and different agents compensate differently.
Four failure modes recur, and you can diagnose each one:
- Buried prerequisites. A requirement stated in paragraph four ("note that this requires a paid instance type") is invisible to an agent that retrieved only the step list. Put preconditions in a dedicated, predictably named section at the top of the page.
- Referential ambiguity. Phrases like "as mentioned above," "the previous command," or an unanchored "it" assume the reader holds the full page in order. A retrieved chunk containing "run it again with the flag from earlier" is unusable in isolation.
- Inconsistent terminology. If one page says "web service," another says "app," and a third says "deployment" for the same resource, an agent may treat them as three distinct concepts, or match the wrong one against a CLI command.
- Mixed modes in one paragraph. Interleaving conceptual explanation with imperative steps forces the parser to classify each sentence as background or instruction. Humans do this unconsciously. Agents misclassify, and a misclassified sentence becomes either a skipped step or a hallucinated one.
None of these are model limitations. They're structural properties of the text, which means you can fix them at the documentation layer. It's worth fixing them there, because that's the layer you control.
Docs as an API surface: the structural shift
"Docs as an API surface" is a structural claim, not a metaphor for importance. An API is defined by three properties, and each has a direct documentation equivalent:
- Stable contracts. An API endpoint has a predictable shape, and consumers build against it. The docs equivalent is a consistent page schema: give every how-to guide the same section skeleton (Prerequisites, Steps, Verification, Troubleshooting) in the same order. An agent that learns the schema from one page can navigate every page. Renaming "Prerequisites" to "Before you begin" on half your pages is the docs equivalent of an unversioned breaking change.
- Explicit inputs. An API declares required parameters instead of implying them. Your documentation should declare its inputs the same way: required account state, required permissions, required tooling versions, stated up front as a list rather than woven into prose. Implicit inputs are the single largest source of agent task failure you can eliminate through documentation.
- Explicit error contracts. An API documents its failure responses, not just its 200s. Most documentation covers only the happy path. A machine-parseable structure (error message, cause, resolution, ideally as a table) lets an agent self-correct instead of stalling or guessing.
This isn't an agent-only tax. Every one of these properties improves human skimmability. A human scanning for "why did my deploy fail" benefits from an error table exactly as much as an agent does. Structure that serves machine parsing and structure that serves human scanning are the same structure. If you're treating them as a trade-off, you've misdiagnosed the problem. The same discipline shows up when you design an API around an OpenAPI spec that is both human-readable and machine-discoverable. The documentation and the contract are one artifact.
llms.txt as a discovery contract
llms.txt is a plain-Markdown file served at a site's root that gives LLM-based tools a prioritized index of the site's content. It was proposed as an open convention at llmstxt.org and remains an emerging, voluntary standard. Adoption varies across agents and crawlers, and no tool is guaranteed to fetch it. Publish it anyway, for the same reason early robots.txt adoption mattered: it's cheap, it's the coordination point the ecosystem is converging on, and where it's honored, it replaces inference with declaration. Where robots.txt excludes and a sitemap enumerates, llms.txt prioritizes. It tells an agent which pages are canonical for which purposes.
Point a minimal file to three things: the canonical quickstart, the API reference entry point, and the key conceptual pages an agent needs before acting. A simplified version of an llms.txt entry point might look like:
For production, add coverage of every major doc section, keep links in sync with site restructuring, and validate that the file doesn't silently go stale.
Agent skills files: task-level contracts
If llms.txt answers "what exists," an agent skill answers "how do I perform this specific task?" A skill is a structured, self-contained unit (metadata plus instructions, in the Agent Skills format Anthropic defined) that an agent loads on demand instead of reconstructing a procedure from scattered prose.
Render publishes a catalog of 21 official skills in Render's skills repo, alongside its narrative documentation. You install them with render skills install, and the catalog ships with a Claude Code plugin and auto-approval hooks. The skills work across Claude Code, Codex, Cursor, and OpenCode. Three examples show the scope of an individual skill:
render-deploy: deploy applications using IaC with Render Blueprints or directly via MCP, including automatic codebase analysis and environment variable management.render-debug: debug deployment issues using logs, metrics, and database queries.render-monitor: monitor service health, performance metrics, logs, and resource usage in real time.
The task "deploy a web service" ships as an invokable unit with its steps, commands, and failure handling co-located. For a worked example of an agent using this kind of machine-readable quickstart to provision infrastructure end to end, see what render pg create changes about provisioning Postgres from a coding agent. Skills also sit next to MCP tool definitions as a structured surface an agent can discover and invoke, covered in this guide to building and hosting MCP servers.
This illustrates the shape of an agent skill file, not a working implementation:
The distinguishing property is completeness within scope: parameters, ordering, verification, and failure recovery live in one artifact, so the agent never needs a second retrieval to finish the task. For production, add explicit parameter schemas, error-state handling, and a reference to Render's skills repo conventions before publishing. These examples demonstrate concepts rather than provide production solutions, so adapt them for your specific docs structure and CLI surface.
Running an agent against your docs as QA
Agent-based docs testing is the practice of giving a coding agent a documented task with no context beyond the docs themselves, and treating the transcript as a usability report. This is an emerging discipline the industry is still formalizing, not a settled pipeline, but you can reproduce the core procedure today:
- Start from a clean, sandboxed environment (fresh container or throwaway account) so environment state doesn't contaminate results.
- Point the agent at one documented task (a quickstart is the natural unit) with a fixed prompt.
- Define success explicitly: the task completes without out-of-band information, invented flags, or clarifying questions a prepared human wouldn't need to ask.
- Run multiple trials across at least two agents before attributing a failure to the docs. Model behavior, retrieval quality, and tool configuration are all confounders. A failure that reproduces across agents and runs is a documentation defect, while a one-off stall may not be.
The transcript is the bug report: the exact sentence where the agent guessed is the exact sentence a human was silently guessing at too. If your team already practices docs-as-code, you can run this the way you run link checkers, as a recurring CI-adjacent check, with appropriate credential scoping since the agent executes real commands. When you scope those credentials, remember that a sandbox doesn't constrain an API key. An agent running real commands can do real damage with whatever access you grant it.
Budget for it like an API version
Four mistakes recur when teams adopt this model. Treating llms.txt as an SEO artifact (a keyword surface rather than a structural contract) produces a file no agent can navigate. Writing skills that duplicate prose docs instead of packaging one discrete task recreates the retrieval problem inside a new format. Testing against a single agent and assuming generalization mistakes one tool's parsing behavior for the category's. And over-indexing on machine-readability at the expense of human scanability solves a problem that doesn't exist, because the structures reinforce each other.
The correct framing is infrastructural: this is docs architecture work, on par with an API versioning effort, and it deserves the same budgeting, ownership, and regression testing, not a content-trend line item.