Agent Application packages work best when they describe a real application contract rather than a vague project folder. The goal is to make your package useful across runtimes while keeping it legible to humans.Documentation Index
Fetch the complete documentation index at: https://agentapplications.io/llms.txt
Use this file to discover all available pages before exploring further.
Start from the actual CLI
Begin with the real command surface before writing any documentation. Identify:- what command launches the application
- which subcommands agents may call
- what JSON each command returns
- which actions are destructive
- where the application stores its source-of-truth state
APP.md frontmatter declares the entry command and every supported subcommand before the body explains anything:
Keep the package shape legible
A reader should be able to orient themselves quickly. Each canonical part has a clear role:| Path | Purpose |
|---|---|
APP.md | The application contract |
app/ | The runnable payload and owned state |
skills/ | Local operating guidance |
schemas/ | Optional output and entity shapes |
schemas/ when it adds clarity to the contract. It is optional in v1.
Document state and side effects clearly
Agents need to know what your application owns and how mutations work. InAPP.md, document:
- the primary state location or state model
- whether commands mutate data
- how IDs are assigned and reused
- what confirmation steps destructive commands require
Keep APP.md and skills separate
APP.md should describe the application boundary and command surface. Local SKILL.md files should describe reusable operating guidance.
- If you find yourself copying command semantics into every skill, improve
APP.md. - If you find yourself copying operating procedures into the body of
APP.md, move that guidance into a local skill.
Prefer stable JSON and stable identifiers
Agents benefit from predictable output. Design your CLI so that:- successful commands return machine-readable JSON on stdout
- failures return structured JSON errors when possible
- entity IDs remain stable across runs
- human-readable output is opt-in rather than the default
Write defaults, not menus
When several approaches are possible, choose a safe default and state the exception path briefly. That is more reliable than giving an agent an unranked list of options.Validate with real runs
A package is ready to ship when:- the documented
entry.commandis callable commandsmatches the actual runtime surface- state lives in the application rather than prompt memory
- destructive commands enforce their confirmation rules
- local skills improve operation without contradicting
APP.md