description: Watches the incident queue and says what needs an engineer.
model: anthropic:claude-sonnet-5
tools: [web_search, linear/*]
You watch the incident queue. Summarise anything new, and say which
- An agent file is
agents/NAME.md in the config directory. The file name is the agent's name.
- The frontmatter is the definition. The body is the
instructions, the system prompt.
wardrik reload rereads agents/. A new definition applies from the agent's next turn.
- If a file fails to parse, the agent keeps its last definition and the error is logged.
wardrik doctor checks every file.
- Deleting a file removes its agent on the next reload.
- Omitted keys default to
config.yaml's defaults.
| Key |
Description |
org |
the deployment's org or one in orgs; default: the owner's org (files only) |
owner |
the org, or a user in it, as "@jon" or acme/@jon; default: the org (files only) |
display_name |
display name; default: the name |
description |
a short description |
instructions |
the system prompt; the file's body |
model |
the model, as provider:model |
tools |
the tools it can call |
workspace |
other agents' workspaces to mount |
context |
files loaded into every turn |
policy |
a policy name, or inline rules |
timeout |
a turn's limit in seconds, then run.deadline_exceeded; default: none |
idle_timeout |
idle seconds before the process stops, or infinity; default 900 |
max_iterations |
rounds of tool calls per turn, or infinity, then the turn fails; default 25 |
retries |
retry settings for failed model calls |
compaction |
when older history is summarised, or false |
triggers |
scheduled, feed and webhook messages |
notify |
notice targets for paused, failed or finished turns |
channels |
the channels it's available in, as [slack] |
Over HTTP, PUT /v1/agents/{agent} takes the same keys as JSON,
except org and owner.
tools: [web_search, files, github/*, agents/*]
| Entry |
Tools |
web_search |
web search through Brave; requires brave.api_key |
deep_research |
researches a topic with subagents |
run_lua |
runs Lua in a sandbox |
agent_create |
creates a worker agent in its org |
files |
read_file, write_file, edit_file, list_files, search_files, delete_file on its workspace and mounts |
NAME/* |
every tool of the MCP server NAME |
servers/* |
every tool of every MCP server its owner added |
workers/* |
every tool that connected tool workers serve to it |
self/* |
self_read, self_definition_read, self_trigger_set, self_trigger_remove |
agents/* |
agents_list, agent_read, agent_definition_read, agent_ask, agent_define, agent_trigger_set, agent_trigger_remove |
* |
all of the above |
- A server that isn't added yet has no tools.
GET .../definition lists it as missing.
- In
self/* and agents/*, reads always run. Changes need approval unless the policy allows them by name.
- A worker inherits the policy of the agent that defined it.
team: agent:runbooks # the runbooks agent's workspace, at shared/team/
notes: {agent: agent:notes, mode: read}
- Each entry is an agent in the same org, as
agent:NAME, or a map of agent and mode (read or write).
- Each is mounted at
shared/<name>/.
- Only mounts allowed by
config.yaml's workspace.shared succeed.
mode: read mounts a writable share read-only.
- Over HTTP, entries are agent IDs.
context: [MEMORY.md, shared/team/CONVENTIONS.md]
files: [SOUL.md, MEMORY.md]
- Up to 20 files, from its workspace or a mount. Requires
files in tools.
- Up to 16 KB total, or
max_bytes (1,024 to 262,144).
policy: careful # policies/careful.yaml
See Policies.
retries: {attempts: 6, max_wait: 60, on_exhausted: ask}
| Key |
Default |
Description |
attempts |
6 |
retries after the first attempt; 0 disables retries |
max_wait |
60 |
maximum backoff between retries, in seconds |
on_exhausted |
ask |
ask for approval to retry, or fail the turn |
- Backoff is exponential with jitter, starting under one second.
- A 4xx response other than 408, 425 and 429 isn't retried.
compaction: {at: 0.6, keep: 0.25}
| Key |
Default |
Description |
at |
0.6 |
fraction of the context window that triggers a summary |
keep |
0.25 |
fraction of the window kept verbatim |
window |
the catalog's, or 128000 |
the context window in tokens |
prompt: Check the incident queue.
feed: https://rivalco.example/changelog.rss
prompt: What changed at our competitors?
webhook: {secret: "${ISSUES_HOOK_SECRET}"}
prompt: An event is below. Triage it.
| Key |
Default |
Description |
name |
trigger-1, trigger-2... |
the trigger's name |
every |
|
a cron expression, or an interval like 30m |
timezone |
Etc/UTC |
the IANA time zone for the cron expression |
prompt |
|
the message sent to the agent |
prompt_file |
|
instead of prompt, a workspace file to read the message from |
overlap |
skip |
skip or queue a run while the agent is busy |
missed |
run_once |
run_once or skip runs missed while the daemon was down |
jitter |
0 |
maximum random delay in seconds |
feed |
|
RSS or Atom URLs; sends only when a feed has new entries |
webhook |
|
instead of every: secret, and verify (shared or standard) |
A webhook trigger receives requests at POST /v1/hooks/{agent}/{trigger}.
notify: [ops, "slack:#updates"]
notify: {to: [ops], on: [parked, failed, finished]}
- A target is a name from
config.yaml's notify, a webhook added for the owner, or a room as channel:room.
on defaults to [parked, failed].