Reference

Agent config

Every field, default, and constraint in agent config YAML files.

The field-by-field reference for Ellipsis agent YAML files. The canonical path is agents/*.yaml; .agents/, ellipsis/, and .ellipsis/ are also accepted, including any subdirectory under them. The machine-readable source of truth is GET /agents/schema.

Every config file must declare a top-level ellipsis: mapping. Its presence is what identifies the file as an Ellipsis agent config: a .yaml/.yml file in a config directory without an ellipsis: block is treated as unrelated YAML and ignored.

For how agents deploy and sync, see Agents as code; for trigger behavior, the schedule, react, and mention guides; for spend, Budgets. This page documents the fields.

Top-level fields

The shape of an agent file. Every field has a default; a useful agent sets `triggers` and a `claude.system` prompt (mention agents need neither).

FieldTypeDefaultDescription
ellipsisobjectrequiredEllipsis namespace: schema version, name/description, and organizational metadata. Its presence marks the file as an agent config.
claudeobject{}Claude runtime config: the system prompt and model. Optional for mention-only agents.
enabledbooleantrueWhen false, cron, react, and mention starts are skipped. Manual runs still work.
triggerslist of trigger objects[]How the agent runs automatically. Types: cron, react, mention.
sandboxobject{}The sandbox the agent runs in: which repositories are checked out, which stored environment variables are injected, compute sizing, image customization, and lifecycle hooks.
structured_outputobject | nullnullJSON Schema contract for machine-readable run output.
limitsobjectall nullPer-run and trailing spend limits, in US dollars.

ellipsis

The Ellipsis namespace: schema version, identity, and organizational metadata. Its presence is what marks a YAML file as an agent config; a config-path file without it is ignored.

FieldTypeDefaultDescription
versionstringv1Config schema version. Bumped only on a breaking shape change; an unsupported value fails validation. v1 is the only supported version today.
namestring | nullnullDisplay name. Dashboard-created files slug this into the file path.
descriptionstring | nullnullShort summary shown in product surfaces.
metadataobject{}Freeform labels and annotations. Does not affect how the agent runs; excluded from the config content identity.

ellipsis.metadata

Freeform organization, modeled on Kubernetes labels and annotations. It has no effect on how the agent runs and is excluded from the config content identity.

FieldTypeDefaultDescription
labelslist of strings[]Flat string tags for grouping and filtering.
annotationsobject{}Arbitrary key-value pairs.

claude

FieldTypeDefaultDescription
systemstring""The agent's instructions. Required (non-empty) for cron, react, and manual agents; ignored for mention agents, whose reply is built from the conversation.
modelstringcurrent default agent modelModel passed to Claude Code. Omit unless Ellipsis gave your account explicit guidance.

triggers

An agent can declare zero or more triggers; each independently decides when the agent runs. A config with no triggers still runs on demand from the CLI, API, or dashboard.

Cron trigger

Run the agent on a schedule. See Run agents on a schedule.

Run the agent on a schedule.

FieldTypeDefaultDescription
type"cron"requiredSelects the cron trigger shape.
schedulestringrequiredFive-field cron, or an EventBridge cron(...), rate(...), or at(...) expression. Five-field cron is converted to EventBridge format.

EventBridge Scheduler cannot restrict both day-of-month and day-of-week in one expression.

React trigger

Run the agent when repository, Linear, or Slack events happen. See React to repository events.

Run the agent in response to repository and issue events.

FieldTypeDefaultDescription
type"react"requiredSelects the react trigger shape.
eventslist of react event objectsrequiredEvents that can start the agent.
eventreact event enumrequiredThe GitHub or Linear event to react to.
repositorystring | nullnullRepository name filter for the event.
brancheslist of strings[]Only valid for event: push. Exact names, prefixes ending in *, or "default" for the repository default branch. Empty matches every branch.

Allowed event values:

ValueFires for
pull_request_openPR opened or marked ready for review.
pull_request_open_draftDraft PR opened.
pull_request_mergePR merged.
pull_request_closePR closed without merge.
pull_request_pushPush to a branch with an open PR.
pull_request_review_submittedPR review submitted.
pull_request_commentComment on a PR.
issue_openGitHub issue opened.
issue_closeGitHub issue closed.
issue_commentComment on a GitHub issue.
linear_issue_openLinear issue opened.
pushPush to any branch of a GitHub repository.
slack_channel_createdA new public channel created in your Slack workspace.

Mention trigger

Route @ellipsis mentions to this agent instead of the built-in responder. See Answer @ellipsis mentions.

Route @ellipsis mentions to this agent instead of the built-in responder.

FieldTypeDefaultDescription
type"mention"requiredSelects the mention trigger shape.
platformslist of platform strings[]Surfaces this agent answers @ellipsis on. Empty means all of them.

Allowed platforms values:

ValueCovers
github@ellipsis in GitHub PR and issue comments and reviews.
slack@ellipsis messages and app mentions in Slack.
linear@ellipsis in Linear issue comments.

One agent answers per platform. If two configs claim the same platform the oldest one wins; the rest are ignored. With no claimant, the built-in Ellipsis responder answers.

sandbox

The sandbox the agent runs in. See The sandbox for the environment and Bring secrets into a sandbox for variables.

The sandbox the agent runs in. Each repository entry takes name (required), owner (defaults to the config account), and ref (defaults to the default-branch head).

FieldTypeDefaultDescription
repositorieslist of repository objects[]Repositories checked out in the sandbox. Each takes name (required), owner, and ref.
variableslist of variable objects[]Environment variables injected into the sandbox (an allowlist — only the variables named here reach this agent). Each entry takes a name and an optional value.
variables[].namestringrequiredThe environment variable name. Must be a valid shell name (letters, digits, underscores; not starting with a digit).
variables[].valuestring | nullnullA literal value injected as-is — use for non-secret config like a log level or API base URL. Omit it to resolve the value by name from your sandbox-variables store (dashboard or PUT /sandboxes/variables) at run time, keeping secrets out of YAML.
imageobject{}Customizes the container image. Ellipsis owns the base image (FROM, user, entrypoint, and preinstalled tooling); you contribute appended layers.
image.dockerfile_appendstring | nullnullRUN instructions appended onto the base image, e.g. installing a CLI. Only RUN is supported — FROM, USER, WORKDIR, ENTRYPOINT, and COPY are not. Changing it rebuilds and re-caches the image.
hooksobject{}Shell scripts run at points in the sandbox lifecycle, each as the sandbox user with the sandbox variables available. A hook that exits non-zero fails the run before the agent starts.
hooks.post_startstring | nullnullRuns after the container starts, before any repository is cloned. Use for repo-independent setup such as authenticating a CLI (e.g. doppler setup). Must not depend on repository contents.
hooks.post_clonestring | nullnullRuns after all repositories are cloned and checked out, before the agent starts. Use for repo-dependent setup such as installing dependencies or code generation.
computeobject{}Sandbox compute sizing. Every field is optional; an omitted field uses the platform default. A value outside the allowed range fails config validation, it is never clamped. Compute is billed on the requested allocation over the sandbox lifetime, so a bigger or longer sandbox costs proportionally more.
compute.cpunumber | null1vCPU cores, 0.125 to 16. Fractional values are allowed (e.g. 0.5).
compute.memory_mibinteger | null4096Memory in MiB, 512 to 65536 (64 GiB).
compute.timeout_secondsinteger | null3600Maximum run wall clock in seconds, 60 to 86400 (24 hours). A run that reaches the timeout has its sandbox killed and fails.

Ellipsis clones repositories available to the account installation, and can clone public repositories from other owners. It rejects private repositories outside the owning account. A variable with no value and no stored value fails the run, so define it before referencing it. A lifecycle hook that exits non-zero fails the run.

structured_output

FieldTypeDefaultDescription
type"json_schema""json_schema"Structured output type.
json_schemaobjectrequiredJSON Schema the agent output must satisfy.

When present, Ellipsis passes this schema to the Claude Code runtime for the run's output.

limits

Per-run and trailing spend limits, in US dollars. See Budgets for defaults and ceilings.

Spend limits, expressed in US dollars.

FieldTypeDefaultDescription
runnumber | nullaccount defaultPer-run budget for this agent. Clamped to the platform maximum.
daynumber | nullplatform ceilingTrailing one-day spend cap for this config.
weeknumber | nullplatform ceilingTrailing seven-day spend cap for this config.
monthnumber | nullplatform ceilingTrailing 28-day spend cap for this config.

The account default run budget is $50.00, which is also the platform maximum per-run budget. Config trailing ceilings are $1,000 / 1 day, $10,000 / 7 days, and $40,000 / 28 days.

Validation and sync behavior

CaseResult
File has no top-level ellipsis: blockNot an agent config: ignored entirely, even at a config path.
ellipsis.version is unsupportedValidation fails. Only v1 exists.
YAML is emptyRejected: an empty config has no claude.system.
claude.system is empty on a non-mention agentValidation fails.
Cron expression is invalidValidation fails before anything is stored or scheduled.
branches is set on a non-push react eventValidation fails.
A sandbox.compute value is out of rangeValidation fails; values are never clamped. Bounds: cpu 0.125 to 16, memory_mib 512 to 65536, timeout_seconds 60 to 86400.
New file is invalidThe sync reports the error and does not create an agent.
Existing file becomes invalidThe sync records the error and keeps the last good config.
File is removedThe agent is soft-deleted and its schedules removed.