Zum Inhalt springen

agents.md reference

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

An agents.md file starts with YAML front matter between --- lines, followed by Markdown. All objects are strict: unknown keys are rejected. Slugs (name, owner, agent id, MCP server) match ^[a-z][a-z0-9-]{0,62}$.

FieldTypeRequiredDefault
apiVersionopenagentix.io/v1alpha1yes
kindAgent or AgentPipelineyes
nameslugyes
versionSemVer 2.0.0yes
descriptionstringno
ownerslug (team)yes
classificationpublic, internal, confidential, restrictednointernal
labelsmap of stringsno{}
triggerslist, see Triggersno[{ type: manual }]
budgetsee Budgetnoplatform defaults
approvals{ approverRoles, timeoutSeconds }no[operator, admin], 3600
runtimesee Runtimeno{ runner: in-process, egress: [] }
agentslist of agents (at least one)yes
pipelinelist of agent ids, execution ordernoorder of agents

kind: Agent allows exactly one agent; use AgentPipeline for more.

triggers:
- type: webhook
source: jira # name of a configured webhook source
- type: mail
source: invoices
- type: kafka
topic: orders.failed
- type: cron
schedule: "0 3 * * *"
timezone: Europe/Berlin
- type: manual

All fields are optional; set them on the pipeline and per agent. For each field the stricter value wins.

FieldType
maxTokensinteger > 0
maxCostUsdnumber > 0
maxStepsinteger > 0
maxToolCallsinteger > 0
timeoutSecondsinteger > 0
FieldValuesDefault
runnerin-process, local, container, kubernetes-job, aws-lambda, github-actions, gitlab-ciin-process
toolboxe.g. trivy, git+nodenone
egresshost names the worker may reach besides the control node[]

See Runners and Toolbox images for what is available today.

FieldTypeRequiredDefault
idslugyes
descriptionstringno
providername of a configured provideryes
modelmodel name of that provideryes
temperature0 to 2no
maxTokensPerCallinteger > 0no
instructionsstring (alternative to the ## Agent: section)no
toolslist of tool grantsno[]
toolboxoverrides runtime.toolboxno
outputslist of { format, target? }no[{ format: markdown }]
budgetas aboveno
simulationscripted responses for the simulated providerno

Output formats: markdown, text, json, report, message, ticket-update, pull-request.

Write each agent’s instructions in a ## Agent: <id> section of the Markdown body. Text before the first ## heading is the overview. A section for an unknown agent id is an error; an agent without instructions fails validation.

FieldMeaningDefault
serverMCP server or connection namerequired
tooltool name; a trailing * matches a prefix; * matches allrequired
argsmap of argument name to constraint{}
allowAdditionalArgsallow arguments that are not listedfalse
approvalnone or requirednone
maxCallsPerRuninteger > 0unlimited
classificationhighest data level the tool may receivepipeline classification
KeyApplies toMeaning
typeallstring, number, integer, boolean, array, object
requiredallmust be present (default false)
patternstringregular expression (Unicode) that must match
enum, constscalarsallowed values
minLength, maxLengthstringlength limits
minimum, maximumnumber, integerrange
maxItemsarrayitem limit
denyallregular expressions that must not match any string inside the value
---
apiVersion: openagentix.io/v1alpha1
kind: Agent
name: ticket-updater
version: 1.0.0
description: Move triaged security tickets to the next state - with human approval.
owner: team-security
classification: internal
triggers:
- type: webhook
source: jira
approvals:
approverRoles: [operator, admin]
timeoutSeconds: 3600
budget:
maxTokens: 20000
maxCostUsd: 0.2
maxSteps: 8
timeoutSeconds: 3900
agents:
- id: updater
provider: simulated
model: sim-1
outputs:
- format: ticket-update
tools:
- server: tickets
tool: get_ticket
args:
key: { type: string, required: true, pattern: "^SEC-\\d+$" }
- server: tickets
tool: update_ticket
approval: required
maxCallsPerRun: 1
args:
key: { type: string, required: true, pattern: "^SEC-\\d+$" }
status: { type: string, enum: [triaged, in-progress, done] }
labels: { type: array, maxItems: 5 }
---
# Ticket updater
## Agent: updater
Read the ticket from the event, then set its status to `triaged` and add the labels `security` and
the severity. Status changes require a human approval; if the approval is rejected, stop and say so.
---
apiVersion: openagentix.io/v1alpha1
kind: AgentPipeline
name: cve-triage
version: 1.0.0
owner: team-security
runtime:
runner: in-process
toolbox: trivy
budget:
maxTokens: 50000
maxCostUsd: 0.5
maxSteps: 12
maxToolCalls: 6
timeoutSeconds: 300
agents:
- id: triage
provider: openai
model: gpt-4.1-mini
outputs: [{ format: json }]
tools:
- server: cve-db
tool: lookup_cve
args:
id: { type: string, required: true, pattern: "^CVE-\\d{4}-\\d{4,}$" }
- id: notify
provider: openai
model: gpt-4.1-mini
tools:
- server: tickets
tool: add_comment
maxCallsPerRun: 1
args:
key: { type: string, required: true }
comment: { type: string, maxLength: 2000 }
pipeline: [triage, notify]
---
## Agent: triage
Look up the CVE from the event and rate its impact on our image as JSON.
## Agent: notify
Post a short comment with the rating to the ticket named in the event.

Each agent receives the event and the output of the previous agent.

oax validate agents.md reports errors (invalid SemVer, duplicate ids, kind: Agent with several agents, unknown ids in pipeline, duplicate grants) and warnings (agents that never run, tool classification below the pipeline’s, wildcard grants without constraints or approval, simulated calls to tools that are not granted, missing pipeline budget).