AGENTS.md is a plain Markdown file that a coding agent loads at the start of every session. Codex,
Cursor, Copilot, VS Code, Zed, Aider and many others read it. It is the one agent surface that costs
context in every session, so DeckTalk’s is four short paragraphs and points at the instruction set
rather than repeating it.
The reason is the shape of the product. The command line is the instruction set, the settings and
the page attributes are what it changes, and the agent is the implementer. A fact copied into AGENTS.md
is a fact that can disagree with the tool, and a fact the agent reads from decktalk schema cannot.
What decktalk init writes
decktalk init DIR writes AGENTS.md only when the directory has none, and it never replaces one
that is already there. The project’s title fills the heading.
AGENTS.md
The four calls that tell an agent everything
Every fact about DeckTalk is published by one of these four calls. The first prints the help as text, and the other three print JSON.
Three more names narrow
decktalk schema to one document: decktalk schema page prints
every page attribute, decktalk schema cues prints the shape of cues.json, and
decktalk schema finding, error and event print the three shared models. decktalk schema NAME
also takes a command name and prints that command’s result.
What an agent should do with it
ReadAGENTS.md, then run the four calls, then act. In practice that is one ordering.
- Run
decktalk status --jsonto learn the project’s name, its script, its cue file, every section with what is voiced, recorded and cut, and thenextfield, which is the whole command to run next. It is null when the film is built and measured, and null when the takes directory holds none of the project’s takes, which a warning line on stderr says. - Run
decktalk check --jsonbefore anything that spends. It judges the written files and the pages, makes no film, and itscostobject prices the narration a voiced build would buy. The score is not in it:decktalk score --no-spend --jsonprices that. - Dispatch on
findings[].code, and readlocation.fileandlocation.lineto know what to open. - Load a skill from
.agents/skills/when the change needs craft rather than a flag.
decktalk config explain KEY rather than guessing, because the
published range is the safe range and the loader refuses a value outside it, naming the file and the
line.
Adding DeckTalk to an AGENTS.md you already have
A project that already has an AGENTS.md keeps it untouched, so the DeckTalk lines are yours to
add. Add a heading of your own and the four paragraphs above under it, and leave the rest alone.
The file is read as plain Markdown, so a heading and a paragraph are enough.
Keep the same discipline in your own file. Name the calls, and do not copy a flag, a default or a
finding code into prose that nothing regenerates.
Harnesses that read a different file
Claude Code readsCLAUDE.md rather than AGENTS.md. The usual arrangement is a CLAUDE.md whose
whole content is a line pointing at AGENTS.md, so one file stays the source. Gemini CLI reads
GEMINI.md by default and reads AGENTS.md when its context file setting names it.
AGENTS.md also serves a harness that loads no skills at all. For that harness it is the only
DeckTalk instruction in the session, which is why it names the calls rather than describing the
pipeline. The reference card is the page to hand such a harness next.
The repository’s own AGENTS.md
The DeckTalk repository carries an AGENTS.md of its own, and it describes the tool’s source rather
than a project. It opens with the same four calls, and then it carries the command tree in a block
between two markers, written as Markdown comments so that a reader never meets them. The opening one
reads commands: generated by scripts/build_agents_doc.py and the closing one reads end commands,
and the script refuses to run when either is missing.
That block is written from the same walk over the parser that decktalk schema prints, so the list
of commands in the file cannot drift from the list of commands in the code. Everything around the
markers is prose written by hand. uv run scripts/build_agents_doc.py --write writes the block and
--check exits 1 when the committed one would change, which is what the repository’s own checks
run. uv run scripts/check.py --group generated --write runs it with every other generator, in one
command. An agent working on DeckTalk itself edits the prose and never the block.
Related
- Agent skills for the six skills the third paragraph points at.
- Install the skills for the folders they land in.
- The JSON contract for what every
--jsoncall gives back. - Reference card for the whole contract on one page.