Skip to content

Configuration

What this is for. Configuration is how you change listen address, modules, autonomy, memory capture, and agent verify commands without rebuilding. Edit local.yaml and EYAS_* env — not config/default.yaml if you can avoid it (upgrades overwrite shipped defaults). This chapter assumes you already chose native, Docker, or Kubernetes.

  • Change host/port, log level, or disable a module.
  • Turn durable memory capture off (memory.capture.enabled: false) — default is on.
  • Import extra skill or persona markdown folders (skills.importRoots / agent.importRoots) without turning host Claude config on.
  • Add agent.verifyCommands so a coding run is not “done” until tests pass.
  • Point Search at several Odoo checkouts via EYAS_ODOO_SOURCES_JSON.
  1. Copy or create local.yaml next to the shipped defaults (or set EYAS_HOME so it lives with that instance).
  2. Change only the keys you need. Validate: eyas config validate.
  3. Restart (eyas restart) or eyas config reload where supported.
  4. Confirm in Settings and with eyas doctor.
File Role
config/default.yaml Shipped defaults
local.yaml Overlay merge
.env Optional secrets (never commit)

Precedence: CLI flags → EYAS_* env → local YAML → default YAML.

Example keys in default.yaml: server.host/port, database.path, log.level, modules.disabled, autonomy.identitySelfUpdate, memory.capture.enabled.

memory:
capture:
enabled: true # set false to stop post-turn vault writes
minUserChars: 40
maxPerConversation: 20

Default on. A small model call attaches after a qualifying turn — never in the reply’s critical path. See Memory and FAQ.

Host Claude / Cursor skill folders are not a live store. Isolation stays on. To copy procedures into EYAS, list directories on this instance:

skills:
importRoots: [] # extra markdown skill folders; empty = none
agent:
importRoots: [] # extra persona markdown folders; empty = none

Shipped default is an empty list. Put paths in local.yaml, never in product source. Imported skills win over bundled copies of the same id. See Skills.

agent:
criticEnabled: true
criticMaxRounds: 1
# Deterministic checks after a background run (empty = disabled)
verifyCommands:
- name: bun-test
command: bun
args: [test]
# verifyCwd: /absolute/path/to/repo # default: process.cwd()
Key Meaning
agent.verifyCommands List of { name, command, args?, timeoutMs? }no shell; failures re-open the agent with the error summary
agent.verifyCwd Working directory for those commands
EYAS_ODOO_SOURCE_PATHS Colon- or semicolon-separated local Odoo checkout roots for lightweight odoo_search_* and optional source bootstrap
EYAS_ODOO_SOURCES_JSON Preferred multi-version bootstrap: JSON array of { "path", "label?", "version?", "edition?", "family?", "name?", "tags?" } — creates idle Search Sources on start if those paths are not already registered
EYAS_AUTO_FAILOVER Opt-in fill of empty routing-tier fallbacks from a second live provider
EYAS_BROWSER_USER_DATA_DIR EYAS-owned Chromium profile for headless browser_* (default data/browser/profile). Daily Chrome/Edge profiles are rejected
EYAS_AGENT_BROWSER_BIN Optional Vercel agent-browser CLI path. Empty = PATH. Set-but-missing is fail-closed (no PATH fallback). Profile: data/browser/agent-browser/profile
Terminal window
export EYAS_ODOO_SOURCES_JSON='[
{"path":"/path/to/odoo-18-community","label":"18c","version":"18","edition":"community","family":"odoo"},
{"path":"/path/to/odoo-18-enterprise","label":"18e","version":"18","edition":"enterprise","family":"odoo"},
{"path":"/path/to/custom-addons","label":"addons","version":"18","edition":"custom","family":"odoo"}
]'

Then open Search Sources, Reindex each source, and set Default code sources on each Project. Conversations pin sources on the Sources tab — see Search.

Tool policy hooks run on every tool call (PreToolUse / PostToolUse) via the ToolExecutor — see Tools.