agentos.yaml at its top level, next to the Dockerfile. It tells AgentOS what the agent is called, where its container listens, which capabilities it offers and what each one takes and returns.
agentos.yaml
Keys
There is no
memory: key: every agent already has its own memory, and a memory: key is refused.
config
Your code receivesconfig on every invocation (context.config), so models, prompts and parameters live in agentos.yaml instead of being hard-coded. That is what lets AgentOS:
- run an eval with another model or prompt as a temporary override, without a new build;
- turn a winning override into a new version, or edit a prompt on the Prompts tab and deploy it;
- ask you which value to keep when an upload’s config differs from the live version’s (see Deploying).
context.config rather than from constants, or overrides won’t reach your code.
Schema files
Aninput or output written as a string names a JSON file in the bundle, exactly as it is stored in the zip: schemas/in.json, with no leading / or ./, no ., .. or empty segments, and no backslashes. A schema file must be UTF-8 JSON (no NaN or Infinity) and at most 1 MiB. One file may serve several fields. $ref to other files is not followed; keep references local (#/$defs/...).
Strict parsing
agentos.yaml is read strictly, so mistakes surface at upload time instead of at run time:
- The file must be UTF-8 and at most 1 MiB.
- Unknown keys are refused at every level, and the error lists the allowed ones.
- YAML anchors and aliases, duplicate keys and non-text keys are refused.
on:,yes:and dates are not text in YAML: quote them. - Values must be plain JSON: unquoted dates, binary, sets,
.nanand.infare refused.
Bundle limits
A bundle is a zip with theDockerfile and agentos.yaml at its top level.
The build has internet access but no secrets: never put credentials in your
Dockerfile or bundle.
Container limits
Each agent container runs with:- 1 CPU and 1 GB of memory;
- at most 512 processes;
- all Linux capabilities dropped and
no-new-privileges; - a restart unless it was stopped on purpose.
SIGTERM and 10 seconds before it is killed. As PID 1 in its container your process has no default action for SIGTERM, so handle it and exit:
Next steps
Agent contract
The two endpoints your container serves and what each run sends.
Deploying
Live and candidate deploys, rollbacks and config differences.

