APP.md is the root manifest of an Agent Application package. It tells a runtime how to discover, activate, and operate the application. Every compliant package must have one.
The file has two parts:
- YAML frontmatter — machine-readable fields between
---delimiters at the top of the file. - Markdown body — human-readable documentation sections that follow the frontmatter.
Frontmatter field reference
Common fields
The schema identifier for this manifest. Set to
agentapplications/v1 to declare compliance with this specification. Optional — the filename already implies the kind — but recommended for tooling.The package kind. For
APP.md files the value is app. Optional when the filename already makes the kind unambiguous.A stable, portable identifier for the package. Use kebab-case. Recommended — runtimes and catalogs use it to reference the package consistently across environments.
The human-readable name of the application. Displayed in catalogs and runtime UIs.
A short description used for discovery and cataloging. Keep it to one sentence.
The package version. Used by runtimes and catalogs to track releases and changes.
A license identifier or reference. Optional.
Attribution metadata. Optional.
Search and classification metadata. Optional. Runtimes MAY use tags for filtering or grouping packages.
Tool-specific extensions. Optional. Use this for any fields a specific runtime or host tool needs that are not covered by the standard fields.
Application-specific fields
The callable CLI entrypoint for the application. The spec does not constrain whether it is a binary, shell command, script, wrapper, or other callable entry — as long as a compatible client can invoke it and receive structured JSON output.
A list of documented command names or command paths that the CLI exposes. In v1 this is a simple list, not a command-definition DSL.
A list of local skill shortnames. By convention, a shortname like
agentic-to-do-usage resolves to skills/agentic-to-do-usage/SKILL.md. A runtime loads these files when it activates the package.Indicates whether the application exposes scheduling-related CLI commands. Allowed values are
supported and notSupported. Optional — omit if scheduling is not relevant to your application.If you set this to supported, document the relevant scheduling commands in the body of APP.md.A list of command names that require explicit user confirmation before execution. Use this for destructive operations such as
remove or delete. Optional.Recommended body sections
Write the body ofAPP.md in plain Markdown after the frontmatter. Include these sections in order:
- Purpose — what the application does and why it exists.
- CLI — the entrypoint, default output mode, and any environment variables that affect behavior.
- Commands — one subsection per command with signature, flags, and a brief description.
- Output — the JSON shape for success and failure responses.
- State — where and how the application stores data.
- Scheduling — which commands support scheduling and how to invoke them.
- Confirmations — which commands require
--confirmor equivalent and why. - Skills — which skill files to load and what each one covers.
These sections are recommendations, not requirements. A minimal
APP.md body can be as short as needed — the frontmatter carries the machine-readable contract.JSON output format
Every CLI command must return JSON by default. Success shape (exit code0):
The exact output shape is application-defined. The spec requires that successful commands write parseable JSON to stdout and that failing commands return a non-zero exit code. Structured JSON errors on failure are strongly recommended but not strictly required.
Full example: Agentic To-Do
The following is the completeAPP.md from the Agentic To-Do reference application.