一键导入
animus-configuration
Animus project config, daemon config, plugin config, agent runtime, environment variables, and state layout
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Animus project config, daemon config, plugin config, agent runtime, environment variables, and state layout
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Authoring policy for producing Office documents (xlsx/pptx/docx) as `document` subjects. Used by the author-document workflow's generate phase — draft a spec, render+store via the animus-document-engine store_document tool, then record it with create_subject.
Operate Animus v0.7 execution environments — environment plugins and coder nodes, the cross-phase environment broker, workflow/phase `environment:` pinning, `environment_routing:` rules, `workspaces:` multi-repo checkout sets, lease records and the startup reaper, and animus-environment-railway. Use when pinning workflows to remote execution, debugging node acquisition or teardown, or authoring multi-repo runs.
Operate the Animus portal (animus-launchapp) — the flat-named portal MCP surface and admin-only tool visibility, Claude/Codex subscription Connections, the external MCP-server catalog with Connect handshake and ext.* subject projection, the durable script registry and phase_context_schema authoring loop, team_* workflow authoring over MCP, and trigger-event observability. Use when driving a portal deployment rather than a local CLI install.
Product lifecycle agents — product owner, architect, auditor, docs-writer, devops, researcher personas
Guide a project from idea to autonomous engineering setup — interview the user, write VISION.md, AGENT_PRINCIPLES.md, registry, agents/workflows/phases/schedules YAML, scripts, and a first runnable task. Use when standing up Animus in a new project beyond the minimal /animus-setup scaffold.
Set up .mcp.json, Claude Code permissions, and connect AI tools to Animus's MCP server
| name | animus-configuration |
| description | Animus project config, daemon config, plugin config, agent runtime, environment variables, and state layout |
| user_invocable | false |
| auto_invoke | true |
| animus_version | 0.7.0-rc.18 |
Animus resolves behavior from the project manifest animus.toml,
project-local .animus/, installed packs, repo-scoped runtime state under
~/.animus/<repo-scope>/, global machine config, environment variables, and
installed STDIO plugins.
animus.toml (v0.6.9+) — the project manifestCommitted at the repo root; scaffolded by animus init. Declares intent:
[project] (kernel version), [plugins], and [packs], with each
dependency as a version string, { git, tag }, or { path }.
animus install resolves it into .animus/plugins.lock and installs the
set; animus install --locked (CI/Docker) reproduces the committed lock
exactly and fails on manifest↔lock drift; animus add <spec> /
animus remove <name> mutate the manifest and install/uninstall. Team
onboarding is git clone && animus install.
animus init also scaffolds .env.example and a merge-safe project
.gitignore. animus install syncs .env into the device-encrypted secret
store (idempotent; blank KEY= values are skipped, never stored empty;
imports audited) and warns about keys declared in .env.example but unset.
.animus/config.jsonRepository-local config created by animus init. It holds only the
optional auto_update block (self-update mode/interval/channel) and optional
CLI settings such as default_subject_kind and a project mcp_servers map.
It carries no daemon runtime settings — those live in the repo-scoped
~/.animus/<repo-scope>/daemon/pm-config.json, written by
animus daemon config.
.animus/workflows.yaml and .animus/workflows/*.yamlHand-authored workflow sources. Typical uses:
schedules: (cron dispatch, UTC) and triggers:
(event dispatch from watchers, webhooks, or trigger plugins).worktree: mode (auto default / required / skip) per
workflow or phase.secrets:, referenced as ${secret.<name>}
and resolved at consume/spawn time since v0.6 (env first, then the
animus secret keychain store) — the reference passes through config
parsing verbatim; resolved values never land in compiled artifacts.workspaces:,
environment_routing:, and workflow/phase environment: /
workspace: fields.Use:
animus workflow config get
animus workflow config validate
animus workflow config compile
validate / compile also report declared-but-unenforced fields and
unresolvable explicit skills: names in a warnings array.
Config sourcing is a plugin since v0.6.0: the kernel no longer parses
.animus/*.yaml in the runtime load path — the base WorkflowConfig comes
exclusively from an installed config_source plugin. The default
launchapp-dev/animus-config-yaml serves exactly these YAML files (so YAML
remains the default authoring surface); the portal uses the consolidated
animus-postgres plugin instead. The daemon requires the role at preflight
and keeps ONE resident config_source host per project root (re-spawned only
on process death or binary mtime change, with a CacheToken short-circuit
when the source config is unchanged), so file edits are picked up without
per-load process churn. A malformed edit keeps the prior config active and
broadcasts config_reload_failed instead of crashing. Manual trigger:
animus workflow config reload. Daemon transport settings and
.animus/plugins.lock changes still require a daemon restart.
Sources that advertise config_write also accept CLI write-back:
animus workflow config set / agent-set / agent-remove / workflow-set / workflow-remove / phase-set (rc.13+) edit the base config without touching
YAML by hand.
.animus/skills/<name>/SKILL.mdProject-scoped Markdown skills (highest priority in skill resolution).
YAML skill definitions live at .animus/config/skill_definitions/<name>.yaml.
Agent-host skills from .claude/skills and .codex/skills are lower-trust
prompt-text-only probes.
.animus/plugins/, .animus/plugins.lock, .animus/plugins.yamlProject-scoped plugin triple, populated by animus install (from
animus.toml) or animus plugin install --project (same flag on
uninstall / update): binaries in .animus/plugins/, the lockfile
.animus/plugins.lock, and a registry .animus/plugins.yaml.
The lock is the source of truth (v0.6.9+): plugins.yaml is a derived
projection regenerated from the lock on every mutating op — never hand-edit
it, and don't treat it as authoritative; drift heals on the next operation.
Lock schema 2.0 (v0.6.7) records per-target-triple integrity
(targets: {triple → {archive_sha256, signature_bundle_sha256, installed_binary_sha256}}) for every published platform, so a lock generated
on macOS drives a verified --locked install in a linux container.
Project installs run the identical integrity pipeline as global installs
(sha256, cosign policy, publisher TOFU, fail-closed lockfile) and shadow
same-named global installs during discovery (animus plugin list shows a
SCOPE column and a shadowed array). Commit animus.toml and
.animus/plugins.lock (animus plugin lock verify sweeps both global and
project roots); never commit binaries — animus init and project installs
write a .animus/.gitignore covering plugins/.
.animus/plugins/<pack-id>/ doubles as the project-local pack override root.
.animus/plugin-scope.yamlLimits which installed plugins this project loads. mode: is all
(default), flavor-only (plugins declared by the active flavor), or
allowlist (names under allow:); extras: layers additions. Manage with
animus plugin scope {show,set,reset}. The file also persists the project's
active flavor under active_flavor:, written by a successful
animus plugin install-defaults --flavor <name> / animus flavor install <name> (selecting default clears the key). animus flavor current reads
it back and reports the source (flag / persisted / default).
Mutable project runtime state lives outside the repo:
~/.animus/<repo-scope>/
├── core-state.json
├── cost-state.v1.json
├── decisions.jsonl
├── budget-enforcement.v1.json
├── resume-config.json
├── workflow.db
├── .journal-imported-v1 # marker: one-time SQLite→journal-plugin import done
├── config/
│ ├── state-machines.v1.json
│ └── agent-runtime-config.v2.json
├── daemon/
│ ├── daemon.log
│ └── pm-config.json
├── interactions/
├── logs/
│ └── events.jsonl
├── mcp-oauth-cache/
│ └── <server>.json
├── runs/<run-id>/
├── artifacts/<run-id>/
├── state/
│ └── pack-selection.v1.json
├── workflow-environments/ # v0.7: environment-broker lease records (<run_id>.json)
└── worktrees/
Key files:
workflow.db stores persisted workflows, tasks, requirements, and checkpoints.daemon/pm-config.json stores persisted daemon runtime settings
(including the notification_config block); daemon/daemon.log is the
detached daemon's process log.cost-state.v1.json stores per-workflow/per-phase token + USD rollups;
budget-breach decisions append to decisions.jsonl;
budget-enforcement.v1.json records the enforcement sweep's
{enabled, last_sweep_at} status surfaced by animus daemon health.config/agent-runtime-config.v2.json is the compiled agent runtime config
(which AI model/tool each agent profile uses); inspect/validate/replace it
via animus workflow agent-runtime get|validate|set rather than editing
the file. The compiled workflow config (animus.workflow-config.v2) is
in-memory only — an on-disk config/workflow-config.v2.json is a hard
load error, not a cache.workflow-environments/<run_id>.json (v0.7) are durable environment-broker
leases for runs pinned to an execution environment; stale leases are
cold-torn-down by the daemon's startup reaper.interactions/ stores pending agent questions/approvals
(animus agent interactions).mcp-oauth-cache/<server>.json caches resolved OAuth tokens for
HTTP MCP servers (0600 on Unix).runs/<run-id>/ and artifacts/<run-id>/ are never auto-deleted —
reclaim disk with animus workflow prune / animus workflow delete.Treat these as Animus-managed state. Prefer CLI or MCP tools over direct edits.
Read current settings:
animus daemon config
MCP: animus.daemon.config
Update runtime settings (written to daemon/pm-config.json):
animus daemon config --pool-size 3
animus daemon config --max-tasks-per-tick 2 --stale-threshold-hours 12
animus daemon config --phase-timeout-secs 3600
animus daemon config --max-daily-usd 50 --silent-threshold-mins 20
Fleet knobs: --max-daily-usd is a rolling-24h fleet cost cap (pass 0 to
clear); --silent-threshold-mins (default 20) bounds how long a run may go
without output before it is flagged. There is no --auto-run-ready knob.
MCP: animus.daemon.config-set
The running daemon re-reads these keys once per scheduler tick, so changes
apply without a restart (exception: a changed phase_timeout_secs only
reaches the live process manager after a restart).
Removed knobs: the daemon git/merge policy (auto_merge, auto_pr,
auto_commit_before_merge, auto_prune_worktrees) and the no-op
idle_timeout_secs were deleted in v0.5.13 — old pm-config.json files
still load. Git automation (commit / push / PR / merge) is now expressed as
command: phases running git / gh in the workflow; the
post_success.merge and integrations.git.auto_merge keys were removed and
now fail to parse.
animus daemon preflight # standalone plugin preflight report
animus daemon start # always detaches (v0.5.14); prints pid + log path
animus daemon start --auto-install # install missing required plugins first
animus daemon run # foreground dev/debug; --once = single tick
animus daemon restart # graceful stop, then detached start
--autonomous was removed — daemon start now errors on it as an unknown
argument; detached is the only daemon start behavior. Starting while
already running is idempotent.
The daemon main loop is event-driven, not polling. A dispatch pass runs on:
daemon/nudge control messages (sent fire-and-forget by
animus subject create/update/status and animus queue enqueue/release
and their MCP equivalents — pickup is typically sub-second), precise cron
deadlines from compiled schedules: (with a 10-minute catch-up horizon),
and workflow/phase completions. interval_secs (default 5) is only the
fallback heartbeat: it bounds pickup of out-of-band state edits and
paces the heavier housekeeping sweeps. Concurrency knobs: pool_size caps
steady-state concurrent runners (upper-bounded by
ANIMUS_WORKFLOW_CONCURRENCY_MAX, default 10); max_tasks_per_tick
(default 2) caps new dispatches per pass. See
docs/reference/configuration.md#scheduler-wake-model.
Notification dispatch is configured via the notification_config block
persisted in daemon/pm-config.json. Webhook URLs and headers reference
env var names through url_env / headers_env fields — commonly
ANIMUS_NOTIFY_WEBHOOK_URL and ANIMUS_NOTIFY_BEARER_TOKEN — and only
those named vars are forwarded to the notifier plugin. Notifier events
include workflow-failed, task-blocked, and workflow-budget-breach.
~/.animus/
├── config.json # global user config, telemetry consent, claude profiles
├── auto-update-state.json
├── credentials.json
├── principals.yaml
├── trusted-orgs.yaml # plugin-install TOFU allowlist (audited; revoke-trust)
├── trusted-signers.yaml
├── plugins.lock / plugins.yaml # global lockfile (source of truth) + derived registry
├── plugins/<plugin-name>
├── packs/<pack-id>/<version>/
├── skills/<skill-name>/SKILL.md
├── cache/manifests/ # plugin manifest cache (animus plugin cache)
└── template-registries/
~/.animus/principals.yaml (hand-editable) declares principals, roles,
and policy.rbac: single-user (default; checks skipped) or enforce
(requests must resolve to a declared principal). Inspect identity with
animus auth whoami; --as <principal> is honor-system under
single-user and credential-checked under enforce.
animus pack list
animus pack info --pack-id animus.task
animus pack install --path /tmp/vendor.pack --activate
animus pack pin --pack-id vendor.pack --version =1.2.3
pack install also resolves declared pack dependencies (--no-deps skips,
--dry-run previews) and checks [[requires_plugins]] against the
installed-plugin registry (--install-plugins installs missing ones).
The pack inspect alias was retired in v0.5.14 — use pack info.
animus install # install the animus.toml-declared set (canonical for manifest projects)
animus install --locked # CI/Docker: reproduce plugins.lock exactly
animus add launchapp-dev/animus-subject-linear@v0.2.0 # add to manifest + install
animus remove animus-subject-linear # drop from manifest + uninstall
animus plugin install-defaults # no-manifest fallback: flavor's required set, every preflight role
animus plugin install-defaults --include-recommended
animus plugin list
animus plugin outdated # installed vs recommended pin vs latest
animus plugin lock verify
animus flavor current # active flavor + drift
animus web serve and animus web open require installed transport/UI
plugins (animus plugin install-defaults --include-transports).
animus update self-updates plain installs (~/.local/bin,
/usr/local/bin, Cargo) with --check, --yes, --channel stable|nightly,
--force, --prerelease. When the running binary is managed by avm (the
Animus Version Manager — kernels under ~/.avm/versions/, dispatched through
an animus shim), animus update defers: it prints the avm install /
avm use commands and exits instead of self-replacing (v0.6.11). Multi-project
machines should prefer avm. The former animus self update group was retired
— no aliases. Background checks are governed by the auto_update block in
.animus/config.json or ~/.animus/config.json
(mode: off|notify|prompt|auto).
Opt-in anonymous metrics live under animus daemon metrics {status,enable,disable,flush,cleanup} (the top-level animus metrics group
was removed in v0.5.14). Bare animus daemon metrics is the live
counters/gauges display and degrades gracefully when the daemon is offline
(exits 0 with telemetry status; only --watch requires a live daemon).
Consent persists in the user-global ~/.animus/config.json;
ANIMUS_METRICS_DISABLE=1 is the hard kill switch.
Core variables:
| Variable | Purpose |
|---|---|
ANIMUS_CONFIG_DIR | Override global config root, default ~/.animus |
ANIMUS_DISABLE_CI_CACHE / ANIMUS_CI_CACHE_TTL_SECS | Disable / tune the animus status CI-status cache |
ANIMUS_MCP_SCHEMA_DRAFT | Select Draft-07 MCP schemas |
ANIMUS_MCP_ENDPOINT | Override embedded MCP client endpoint |
ANIMUS_USER_ID / ANIMUS_ASSIGNEE_USER_ID | Override recorded user / assignee ids |
ANIMUS_DEBUG | Enable verbose debug logging |
ANIMUS_LOG_JSON | Emit JSON logs |
ANIMUS_DEBUG_MCP_STDIO | Log raw MCP stdio frames |
ANIMUS_AUTO_UPDATE_MODE / ANIMUS_AUTO_UPDATE_DISABLE | Override / short-circuit self-update behavior |
ANIMUS_METRICS_DISABLE | Hard kill switch for opt-in telemetry |
Plugin and template variables:
| Variable | Purpose |
|---|---|
ANIMUS_PLUGIN_DIR | Override global plugin install directory |
ANIMUS_PLUGIN_PATH | Extra directories scanned for plugin binaries |
ANIMUS_PLUGIN_SIGNATURE_POLICY | Signature policy override: strict / warn / skip (precedence: per-call flag > this env > global config > warn) |
ANIMUS_SERVER=1 | Server mode: fail-closed org TOFU — --yes/--force never auto-trust an unknown org (use --allow-org) |
ANIMUS_DISABLE_MANIFEST_CACHE / ANIMUS_CACHE_DIR | Bypass / relocate the plugin manifest cache |
ANIMUS_RESIDENT_HOST_CACHE_MAX | Cap the resident plugin-host registry (legacy ANIMUS_SUBJECT_HOST_CACHE_MAX still read) |
ANIMUS_FLAVORS_DIR | Override the flavors/<name>.toml probe directory |
ANIMUS_TEMPLATE_REGISTRY_URL | Override project-template registry |
Environment / journal variables (v0.7):
| Variable | Purpose |
|---|---|
ANIMUS_ENVIRONMENT_DELEGATE | Gate: delegate worktree materialization to the resolved environment plugin (default off) |
ANIMUS_ENVIRONMENT_EXEC | Gate: route agent exec through resolved environment plugins (default off; no silent local fallback once resolved) |
ANIMUS_ENVIRONMENT_BROKER_* | Daemon-set on runners: private broker socket/bearer for exec proxying — not user-set |
ANIMUS_DAEMON_DISABLE_JOURNAL_RESUME | Kill-switch: skip the boot reconcile that RESUMES in-flight runs from a durable workflow_journal after restart |
ANIMUS_MCP_OAUTH_CACHE_DIR | Relocate the MCP OAuth token cache (containerized/durable-volume deployments) |
Workflow-runner variables:
| Variable | Purpose |
|---|---|
ANIMUS_WORKFLOW_RUNNER_BIN | Override the workflow-runner binary path |
ANIMUS_PHASE_RUN_ATTEMPTS / ANIMUS_PHASE_MAX_CONTINUATIONS | Phase retry / continuation caps |
ANIMUS_MCP_WORKFLOW_ID | Pin animus mcp serve to a workflow (suspend-mode interactions) |
Daemon runtime quotas (read once at daemon startup; 0/empty falls back to default):
| Variable | Default | Purpose |
|---|---|---|
ANIMUS_TRIGGER_BACKLOG_MAX | 1000 | Max unprocessed trigger events retained per trigger |
ANIMUS_SUBSCRIBER_MEMORY_MAX_MB | 10 | Per-subscriber buffer cap for workflow/events |
ANIMUS_PLUGIN_PROCESS_MAX | 50 | Max concurrent plugin child processes |
ANIMUS_WORKFLOW_CONCURRENCY_MAX | 10 | Max parallel workflow runners; also upper-bounds pool_size |
Provider passthrough examples:
| Variable | Purpose |
|---|---|
ANIMUS_CLAUDE_EXTRA_ARGS / _JSON | Extra Claude CLI args |
ANIMUS_CLAUDE_BYPASS_PERMISSIONS | Skip Claude permission prompts (unattended test envs only) |
ANIMUS_CODEX_EXTRA_ARGS / _JSON | Extra Codex CLI args |
ANIMUS_CODEX_EXTRA_CONFIG_OVERRIDES / _JSON | Extra Codex --config overrides |
ANIMUS_CODEX_NETWORK_ACCESS / ANIMUS_CODEX_WEB_SEARCH | Toggle Codex sandbox network / web search |
ANIMUS_GEMINI_EXTRA_ARGS / ANIMUS_OPENCODE_EXTRA_ARGS (+ _JSON) | Extra Gemini / OpenCode CLI args |
Removed in v0.5.13: ANIMUS_RUNNER_CONFIG_DIR, ANIMUS_RUNNER_SCOPE, and
the --runner-scope flag (dead since the agent-runner sidecar deletion).
Operator escape hatches; all require a daemon restart to take effect (and another to re-enable):
| Variable | Effect |
|---|---|
ANIMUS_DAEMON_DISABLE_TRIGGERS=1 | Skip the trigger plugin supervisor (also interrupts in-progress restart backoff) |
ANIMUS_DAEMON_DISABLE_SUBJECT_PLUGINS=1 | Skip subject plugin discovery entirely |
ANIMUS_DAEMON_DISABLE_LOG_STORAGE_PLUGIN=1 | Ignore log_storage plugins; use in-tree logs/events.jsonl |
ANIMUS_DAEMON_DISABLE_BUDGET_ENFORCEMENT=1 | Skip the budget-cap enforcement sweep (no auto-pause/fail; sweeps still record disabled status for daemon health / status) |
ANIMUS_PROVIDER_DISABLE_PLUGIN was removed in v0.4.12 — uninstall or
quarantine a misbehaving provider plugin instead.
Do not put API tokens in workflow YAML. Preferred: store secrets in the OS
keychain with animus secret set <KEY> (also get, list, rm,
import-env, export-env). Plugins and the ${VAR} interpolator resolve
explicit parent-process env first, then the keychain entry for the current
repo-scope. The daemon does not auto-load .env files — source them before
startup, or migrate with animus secret import-env.
Use YAML interpolation for non-secret config only:
subjects:
- id: my-linear
backend: linear
config:
team_id: ${LINEAR_TEAM_ID:-default-team}
workspace: ${LINEAR_WORKSPACE:?set LINEAR_WORKSPACE}
${VAR} errors with file path + line number when unset; ${VAR:-default}
falls back; ${VAR:?message} customizes the error; $$ escapes a literal
$. ${...} inside YAML comments is not interpolated (fixed in v0.5.13).
For credentials a phase or MCP server must receive, declare a secrets:
block and reference ${secret.<name>} — since v0.6 the reference passes
through config parsing verbatim and is resolved at consume/spawn time (env
first, then keychain); resolved values are kept out of compiled artifacts,
generated overlays, and parse diagnostics.
HTTP-transport mcp_servers entries can attach an oauth: block; the daemon
resolves a bearer token and injects the Authorization header. Credentials
are read from env vars named via *_env pointers (never inline in YAML), and
tokens are cached at ~/.animus/<repo-scope>/mcp-oauth-cache/<server>.json.
Authenticate with animus mcp auth <server>; check animus mcp auth-status.
Declared workflow budget: caps are enforced by the daemon's housekeeping
sweep once per heartbeat: a newly crossed cap triggers the declared
on_exceed action (pause / fail / warn), a breach record, and one
workflow-budget-breach notifier event. Inspect spend with
animus cost {summary,workflow,top,trends,conversation,decisions}
(--by provider|model|task grouping). With no daemon running, animus cost
records breaches but never pauses anything.
Workflow resolution:
--input-json / --var overrides.animus/plugins/.animus/workflows.yaml and .animus/workflows/*.yaml~/.animus/packs/Skill resolution:
.animus/skills/ and .animus/config/skill_definitions/~/.animus/skills/animus.core-skills.claude/skills or .codex/skills as prompt-text-only