Agent
The autonomous worker that executes Stories.
An Agent is the autonomous worker that executes Stories. Each Agent
pins a backend (which CLI runs it: claude, codex, or dry-run),
optionally a model, a system prompt, an environment variable bag, a
set of Skills, a Memory file, and an optional Reviewer.
When you dispatch a Story, you pick (or default to) one Agent. The daemon spins up the Agent's backend with the Agent's configuration and streams every message back into the Story's timeline.
Configuration
The fields on an Agent are:
name— display name. Becomes the slug.backend—claude,codex, ordry-run. The daemon must have that CLI onPATH(or, fordry-run, no CLI at all).model— optional. Passed to the backend CLI when set; backend default otherwise.description— UI-only one-liner; doesn't reach the backend.systemPrompt— prepended to every run. The Agent'sMEMORY.md,SOUL.md,IDENTITY.md, and the skill list are appended underneath automatically (see Memory and Skill).customEnv— env-var bag injected into the Agent's shell. Inherited by every subprocess the agent spawns (tools, scripts,git,gh).EVOXIV_API_URLandEVOXIV_API_TOKENare reserved — the daemon mints and injects them per dispatch.customArgs— extra CLI args passed to the backend.reviewerAgentSlug— see Reviewer pass below.
Skills and Memory
Every new Agent is auto-linked to every built-in Skill (the
workspace-less skills seeded by migration: memory, story, …).
Custom workspace Skills are opt-in per Agent. Memory is a per-Agent
markdown file capped at 4000 characters. Both are documented on their
own pages.
Reviewer pass
A Story flows through two phases: the author Agent does the work, then a reviewer Agent approves or requests changes. The reviewer is resolved in this order:
- The per-Story override, if set.
- The author Agent's
reviewerAgentSlug— another agent's slug, the sentinelself(review its own work), ornull. - The workspace default. Falls back to
human(manual approval in the web app) if nothing else resolves.
Archiving and deletion
You can archive an Agent (sets archivedAt, removes it from the
plan's agent count, hides it from dispatch UIs) or delete it.
Deletion is only allowed when the Agent has no task_queue history —
otherwise the FK is ON DELETE RESTRICT to preserve audit trails, and
the API returns a 409 with a "use archive instead" message.