AI and data · ADR
0004: AGENTS.md for coding agents
Context#
Coding agents work in the repository, not on the site. They need to know where records live, which statuses
mean “this is how we do it”, how to create a record and what not to do (mark it accepted). AGENTS.md is the
file convention agents read at the root of a repository. The same instructions are useful to an agent that only
sees the published site.
Decision#
inkan init copies a starter AGENTS.md into the repository. The site serves that file at
/AGENTS.md when it exists, either in the content folder or next to the config file, and lists it in the
“For agents” section of the landing page. Inkan does not generate or rewrite the file in the repository;
it is yours. The served copy only gets a short ## MCP section appended that names the server for this site.
How to use it#
The starter file#
init (and npm create @tilaven/inkan) writes this file unless one already exists:
# Instructions for AI agents
This repository is the source of truth for architecture decisions (ADR) and proposals (RFC).
## Reading- Records live in `decisions/<project>/<adr|rfc>/NNNN-slug.md`. Project metadata is in `decisions/<project>/_project.yml`.- Front matter `status` tells you whether a record is current: only `accepted` and `implemented` describe how things are done today. `superseded` records name their replacement in `supersededBy`.- `decisions.json` / `llms-full.txt` on the published site contain the same data in one file.- Prefer the MCP server when you can run it: `npx inkan mcp --root .` (or `--url <published site>`) offers `search_records`, `get_record`, `list_projects`, `list_tags`, `list_fields` and `list_authors` with filters, so you need not read every file.
## Writing- Create records with `npx inkan new <adr|rfc> <project> "<title>"`, then fill in the template.- Use `status: proposed` (ADR) or `draft` (RFC). Never mark a record `accepted` yourself.- When a record replaces another, set `supersedes` on the new one and `supersededBy` + `status: superseded` on the old one.- Link other records with relative Markdown links to the `.md` file.- Run `npm run build` to validate front matter before committing.Edit it to match your process: the status an agent may set, who reviews, which projects exist, whether a
pull request is required. If your contentDir is not decisions, change the paths. The MCP line points
agents at inkan mcp; drop it if you do not want agents to run npx.
Where the file may live#
| Location | Example |
|---|---|
| Content folder | decisions/AGENTS.md |
Site root (the folder with inkan.config.ts) | AGENTS.md |
The content folder is checked first. In a monorepo where the decision site lives in a sub-folder, the file
next to the config is the one that is served; the repository’s own root AGENTS.md is not.
What the site does with it#
-
/AGENTS.mdreturns the file astext/markdown, with one section appended:## MCPQuery these records with filters through the MCP server: `npx @tilaven/inkan mcp --url https://decisions.acme.dev` (tools: search_records, get_record, list_projects, list_tags, list_fields, list_authors; resources: decision://<id>).The address is
urlfrom the config, so set it or the line nameshttp://localhost:4321. -
The landing page section
agents(part of the defaultlanding.sections) lists/llms.txt,/llms-full.txt,/decisions.json, then/AGENTS.mdwhen the file exists, then/rss.xml. The links between records are at/graph.json, see Decision graph. -
Nothing else reads it. It is not indexed by search and not a page in the sidebar.
Without the file the endpoint is absent and the landing list skips it.
Writing good instructions#
The starter is short on purpose. Things worth adding for your repository:
- The exact command to create a record for each type you configured in
docTypes. - The statuses from your
statuseslist and which of them an agent may set. - Where to look before writing: “search
decisions.jsonfor the same tag before proposing a new record”. - The review path: who to add as
deciders, whetherreviewByis required for RFCs.
Tip
Keep AGENTS.md and your record templates in templates/ consistent. The template decides what an agent
fills in; AGENTS.md decides how.
Consequences#
- Agents working in the repository and agents reading the site get the same instructions, from one file you control.
- Inkan does not validate or template the file. Outdated instructions are your responsibility, like any other documentation.
- The appended MCP section cannot be turned off; it is the only text on the served page you did not write.
- Serving it publicly means the instructions are public. Keep internal links and names you would not publish out of it.
- Only one location is served; a second
AGENTS.mddeeper in the repository is ignored by the site.
History 1
- ImplementedInkan maintainers
9e5e535commit diff