Environment variables¶
Set them in the environment or in a .env file the CLI and the Evarness API read at
start.
- Applies: when a change takes effect (the next call, the next scheduled run, or a restart).
- Guarded: the web console asks the owner to confirm a change.
- On/off settings take
1/true/yes/onand0/false/no/off.
Stable settings¶
What an install of evarness[email] needs: the settings the getting-started
pages, the email guide and evarness doctor name. They are part of the
stable API: a name or a default changes only after a deprecation
cycle. src/evarness/sdk/stable_tier.yaml lists them.
| Variable | Kind | Default | Applies | Description |
|---|---|---|---|---|
EVARNESS_AUTH_SECRET |
secret | next call | Shared bearer secret every request to the Evarness API, the governor and the channel gateway must present, except their liveness probes (a paired device presents its own token instead); unset or blank, those services refuse every such request rather than run open. The learning eval sandbox forwards it (default 'eval-sandbox') into its container. Guarded. | |
EVARNESS_API_HOST |
url | 127.0.0.1 |
next call | Host evarness serve binds the Evarness API to (as scripts/start_evarness.sh binds every service), and the host health checks probe the local services on and the model inventory queries Ollama's /api/tags on. |
EVARNESS_API_PORT |
url | 8003 |
restart | Port evarness serve binds the Evarness API to, and the port the health watch probes for its /healthz endpoint (default 8003). |
EVARNESS_API_URL |
url | http://localhost:8003 |
restart | Base URL the CLI commands and the channel gateway use to reach the Evarness API (CLI defaults vary between http://localhost:8003 and http://127.0.0.1:8003). |
EVARNESS_PUBLIC_URL |
url | next call | Absolute base URL the web console is reached at (https:// |
|
EVARNESS_ALLOWED_HOSTS |
list | restart | Comma-separated host names (host, host:port or a URL) the HTTP services answer to besides the built-in ones (loopback, testserver, the compose service names, this machine's hostname, the host of EVARNESS_PUBLIC_URL and their short names); any other Host is refused with 400 (DNS rebinding). An IP literal is always accepted. '' turns the check off. Guarded.* | |
EVARNESS_HOME |
path | ~/.evarness |
restart | Relocates the identity tree, plugin home, session logs and (when set) the governance data/config dirs. |
EVARNESS_VAULT_MASTER_KEY |
secret | restart | Fernet master key for the credential vault and the file vault, used instead of the OS keyring. Guarded. | |
EVARNESS_PROFILE |
str | default |
restart | Selects which shipped profile (config/profiles/default, or email when the email plugins are installed. Guarded. |
EVARNESS_DEMO_HOME |
path | next call | Where evarness email demo keeps its own isolated Evarness home (default ~/.evarness-demo); never the owner's profile. |
|
EVARNESS_TZ |
str | UTC |
restart | The owner's IANA time zone (e.g. America/Chicago). The morning digest's time, reminders and schedules are read in it; the Docker Compose files also set the container clock (TZ) from it. Unset or not a zone name means UTC. |
EVARNESS_EMAIL_JUDGE |
bool | on |
next run | When on (default), the email judge sorts each new non-promo email into Bill, Event, Needs reply, FYI or Unsure three times a day, on a local model only. New email stays hidden until it is judged, so off means new email waits and stays hidden. |
EVARNESS_EMAIL_JUDGE_LABELS |
bool | on |
next run | When on (default), each judged email gets one Evarness/* label in Gmail (never archived, never marked read); off keeps the judgments in Evarness only. |
EVARNESS_EMAIL_JUDGE_UNSURE_BELOW |
float | 0.7 |
next run | A judgment less sure than this is filed as Unsure and asked on an Action Center card. |
Third-party model backends¶
Not EVARNESS_*, so outside the settings catalog's scope -- the local-model
backends' own address variables, read wherever the harness talks to them.
| Variable | Default | Description |
|---|---|---|
OLLAMA_BASE_URL |
http://localhost:11434 |
Ollama's base URL (a trailing /v1 is accepted and trimmed). Set it to move the local-model backend to another box -- the cloud harness reaches the Mac's Ollama over the tailnet this way. |
LM_STUDIO_BASE_URL |
http://localhost:1234 |
LM Studio's base URL, shared with the LLM failover proxy -- told apart by port (the proxy's EVARNESS_PROXY_PORT, default 4000, vs. LM Studio's 1234). |
Every other setting¶
The full catalog of the email profile (not stable)
Every EVARNESS_* setting the install reads, from the settings catalog: the
core's (src/evarness/foundation/settings/catalog.yaml) and each plugin's
in the email profile (its manifest's settings:). A test fails when the
code reads an EVARNESS_* name no catalog declares. The stable settings above are
listed again here, marked Stable.
These are configuration, not part of the stable API: a name or a default may change in a 0.x release, and the release notes say so.
From core
| Variable | Kind | Default | Applies | Description |
|---|---|---|---|---|
EVARNESS_ACTIVITY_WORKERS |
int | 1 |
restart | Sets how many worker threads the background ActivityRunner uses (minimum 1). |
EVARNESS_ADAPTIVE_TIERS |
bool | off |
restart | When on, the tier router's ResourceGovernor downshifts large local model tiers under host pressure (RAM, CPU load, thermal throttling); skipped entirely if EVARNESS_DISABLE_ARBITER is set. |
EVARNESS_AGENTIC_CORE_ENABLED |
enum | 1 |
restart | Selects the AgenticCore governed loop rollout: 0/false/no/off turns it off, 'shadow' runs it in shadow, anything else (default) turns it on. |
EVARNESS_AGENTIC_CORE_P4 |
bool | off |
restart | When on, routes the calendar and planner intents through the one governed agentic loop (requires the base loop rollout on/shadow). |
EVARNESS_AGENT_SELF_MANAGEMENT |
bool | off |
next call | Adds the ADR-0086 self-management ReAct tools (introspect the agent's own brain, one of which compacts the conversation) to each turn's tool loop. |
EVARNESS_ALLOWED_HOSTS |
list | restart | Comma-separated host names (host, host:port or a URL) the HTTP services answer to besides the built-in ones (loopback, testserver, the compose service names, this machine's hostname, the host of EVARNESS_PUBLIC_URL and their short names); any other Host is refused with 400 (DNS rebinding). An IP literal is always accepted. '' turns the check off. Guarded. Stable.* | |
EVARNESS_API_HOST |
url | 127.0.0.1 |
next call | Host evarness serve binds the Evarness API to (as scripts/start_evarness.sh binds every service), and the host health checks probe the local services on and the model inventory queries Ollama's /api/tags on. Stable. |
EVARNESS_API_PORT |
url | 8003 |
restart | Port evarness serve binds the Evarness API to, and the port the health watch probes for its /healthz endpoint (default 8003). Stable. |
EVARNESS_API_URL |
url | http://localhost:8003 |
restart | Base URL the CLI commands and the channel gateway use to reach the Evarness API (CLI defaults vary between http://localhost:8003 and http://127.0.0.1:8003). Stable. |
EVARNESS_AUTH_SECRET |
secret | next call | Shared bearer secret every request to the Evarness API, the governor and the channel gateway must present, except their liveness probes (a paired device presents its own token instead); unset or blank, those services refuse every such request rather than run open. The learning eval sandbox forwards it (default 'eval-sandbox') into its container. Guarded. Stable. | |
EVARNESS_BEHAVIOR_BROAD_INTENTS |
list | general,system,chat,other |
restart | Comma-separated intents treated as catch-all when matching behavior files, so they get the lower broad-intent weight instead of the full intent weight. |
EVARNESS_BEHAVIOR_BROAD_INTENT_WEIGHT |
float | 0.5 |
restart | Sets the relevance weight a catch-all intent (general, system, chat, other) contributes when matching stored behaviors to a turn. |
EVARNESS_BEHAVIOR_INTENT_WEIGHT |
float | 2.0 |
restart | Sets the relevance weight a behavior file earns when one of its specific match_intents matches the turn's intent. |
EVARNESS_BEHAVIOR_KEYWORD_WEIGHT |
float | 1.0 |
restart | Sets the relevance weight a keyword match contributes when deciding which behavior files to inject into a turn. |
EVARNESS_BEHAVIOR_MATCH_THRESHOLD |
float | 2.0 |
restart | Minimum relevance score the best-matching behavior must reach in match_behavior before it is used for a turn; below it no behavior is selected. |
EVARNESS_BEHAVIOR_MINER |
bool | off |
restart | Turns on the local-tier behavior-pattern miner (digital-twin layer 1) that proposes behaviors for user approval; this env value is the default the learning console reverts to on restart. |
EVARNESS_CHANNEL_GATEWAY_PORT |
url | 8006 |
restart | Port the channel gateway listens on (launcher) and that the health check probes; default 8006. |
EVARNESS_CHANNEL_GATEWAY_TELEGRAM_ENABLED |
bool | on |
restart | When on, the channel gateway runs the Telegram long-poller; when off (and EVARNESS_RUNTIME_TELEGRAM_POLLER_ENABLED unset) the runtime's own Telegram poller starts instead. Guarded. |
EVARNESS_CHANNEL_GATEWAY_TRACING_ENABLED |
bool | off |
restart | Sets up OpenTelemetry tracing for the channel gateway service at startup; spans export only when an OTLP endpoint is set (OTEL_EXPORTER_OTLP_ENDPOINT). |
EVARNESS_COMPACTION_KEEP_RECENT |
int | 10 |
restart | Sets how many of the most recent conversation turns are kept verbatim when the conversation is compacted. |
EVARNESS_COMPACTION_RATIO |
float | 0.8 |
restart | Fraction of the compactor's token budget the running history must reach before it is compacted (values outside 0-1 fall back to 0.8); also sizes the kept-verbatim window. |
EVARNESS_COMPACTION_THRESHOLD |
int | 20 |
restart | Turn-count floor at which a conversation is compacted into a summary (with the token budget also able to trigger compaction). |
EVARNESS_COMPACTION_TOKEN_BUDGET |
int | restart | Sets the token budget at which the conversation compactor summarises older turns; unset uses a budget derived from the communication tier's context window. | |
EVARNESS_CONFIG_DIR |
path | restart | Points the harness at the directory holding its YAML config (memory, skills, profiles, governance, finance categories, plugin dump); cached after first read. Unset resolves, in order, to the checkout's config/ when running from a checkout, else the defaults shipped inside the installed package (foundation/paths.py config_dir). | |
EVARNESS_CRYSTALLIZE_PREFLIGHT |
bool | off |
restart | When on, each newly crystallized skill proposal is replayed through an isolated eval runtime and quarantined as preflight_failed if it fails quality. |
EVARNESS_CURATOR_ESCALATION |
bool | off |
restart | When truthy, builds the escalation judge that grades answers and (in enforce mode) re-runs capability gaps at a stronger tier; the env can only turn it on, config/escalation.yaml enabled:true also turns it on. |
EVARNESS_CURATOR_ESCALATION_CLOUD |
bool | off |
restart | When on (or cloud.allow in escalation.yaml), the escalation judge may escalate a turn to a cloud tier for content classified as eligible (default only 'public'; 'secret' never). Guarded. |
EVARNESS_CURATOR_ESCALATION_MODE |
enum | shadow |
restart | Overrides the escalation judge mode from config/escalation.yaml: 'shadow' only diagnoses and records, 'enforce' lets the judge act (escalate) when it is enabled; other values are ignored. Guarded. |
EVARNESS_CURATOR_ESCALATION_PRIORS |
bool | off |
restart | When on (or escalation.yaml priors.enabled), applies start-tier priors mined from escalation history to the router instead of running them in shadow. Guarded. |
EVARNESS_CURATOR_FAITHFULNESS_LLM |
bool | off |
restart | Builds an LLM faithfulness judge for the ResponseCurator's strict mode so answers are checked against their sources. |
EVARNESS_CURATOR_GROUNDING_LLM |
bool | off |
restart | When on, an LLM grounding judge client is built for the curator to check responses that carry retrieved context. |
EVARNESS_CURATOR_LEAK_JUDGE |
bool | on |
restart | When not set to 0/false/no/off, builds an LLM leak judge that may clear responses the deterministic dump-phrase guard flagged; when off, that guard's halt stands. Guarded. |
EVARNESS_CURATOR_OUTPUT_SAFETY |
bool | off |
restart | When on, builds the Llama Guard 3 output-safety judge the curator uses to check responses (shadow/warn-only unless enforce categories are configured). Guarded. |
EVARNESS_CURATOR_OUTPUT_SAFETY_TIMEOUT_S |
float | 12.0 |
restart | Per-call time budget in seconds (clamped 1-60) for the output-safety guard, which fails open on timeout. Guarded. |
EVARNESS_DATA_DIR |
path | data |
restart | Relocates every local data store (memory.db, chroma, tasks.db, finance and email stores, etc.). |
EVARNESS_DEPLOYMENT_LABEL |
str | next call | Sets the deployment name returned to the web console, which shows it as a badge; empty when unset. | |
EVARNESS_DISABLE_ARBITER |
bool | off |
restart | Any non-empty value (even 0) skips attaching the Ollama arbiter ResourceGovernor to the tier router. |
EVARNESS_DISABLE_EXTERNAL_WRITES |
bool | off |
next call | When set to 1, calendar writes stay local (no Apple or Google Calendar providers are registered); the playground and learning preflight set it for their sandboxes. |
EVARNESS_DISABLE_WARMUP |
bool | off |
restart | When set to any non-empty value, skips the background warm-up calls that pre-load the router and executor models at startup (the playground and eval harness also set it for their own runtimes). |
EVARNESS_EMBED_BACKEND |
enum | onnx |
next call | Chooses the embedding backend for corpus embeddings: 'onnx' (the shared ONNX MiniLM, default model only) or 'sentence-transformers' (needs the optional ML extra); any other value raises an error. |
EVARNESS_ENABLE_COPILOT_BACKEND |
bool | off |
restart | Opts in to the GitHub Copilot cloud LLM provider (providers report available when set; copilot_auth requires exactly '1' before any network call); errors.py:20 only matches it in an error message. Guarded. |
EVARNESS_EVALUATOR_PORT |
url | 8090 |
restart | Port where the remote governance evaluator sidecar is probed for /healthz. |
EVARNESS_EVAL_SANDBOX |
enum | effect |
restart | Chooses how skill-proposal pre-flight replays are contained: effect (neutralize side effects), docker (full container), or off (no containment). Guarded. |
EVARNESS_EXPORT_DIR |
path | ~/.evarness/exports |
restart | The one folder the web API's POST /memory/export may write under; a request names a sub-folder of it, never a path. Point it at an Obsidian vault's parent to export straight into one. Created owner-only (0700). The CLI (evarness memory export --to PATH) is not limited by it. |
EVARNESS_FACT_EXTRACTION_MODE |
enum | llm |
next call | Set to regex to extract user facts with regex patterns instead of the LLM extractor; any other value uses the LLM. |
EVARNESS_FACT_HISTORY_RETENTION_DAYS |
int | 180 |
next call | Sets the default age in days used by the evarness facts retention command when no --older-than value is given. |
EVARNESS_FAKE_MODEL_SCRIPT |
path | next call | The YAML script the scripted fake model (provider fake) answers from when no script was installed in-process (evarness.testing does that). |
|
EVARNESS_FEEDBACK_CAPTURE |
bool | off |
next call | When on, the API reports feedback_capture=true so the web UI shows the thumbs up/down answer-feedback control. |
EVARNESS_FEEDBACK_CLARIFY |
bool | off |
next call | When exactly '1', appends one gentle invitation to refine to an answer when the judge or router signals uncertainty (never on a confident answer). |
EVARNESS_FILEMANAGER_AGENT |
bool | off |
restart | When on, registers a first-class filemanager agent to answer the files intent (requires the base loop rollout on/shadow). |
EVARNESS_GENERAL_TOOL_MAX_TURNS |
int | 4 |
next call | Base number of tool turns (bounded 1-128) the general agent loop may take before stopping; the cap var lifts it for continuation/auth-related queries. |
EVARNESS_GENERAL_TOOL_MAX_TURNS_CAP |
int | 8 |
next call | Upper bound (clamped 1-128) on tool-call turns in the general tool loop, including the adaptive bump. |
EVARNESS_GOVERNANCE_ALLOWED_TOOLS |
list | restart | Comma-separated exact tool names the governance kernel allows; unset means no allowlist (all tools). Guarded. | |
EVARNESS_GOVERNANCE_APPROVALS_ENABLED |
bool | on |
restart | When on, require_approval verdicts enqueue an approval and notify channels; when off, halts are advisory only. Guarded. |
EVARNESS_GOVERNANCE_AUDIT_DB_PATH |
path | restart | Overrides where the governance audit ledger database is stored (default: governance data dir/audit.db). | |
EVARNESS_GOVERNANCE_BLOCKED_TOOLS |
list | restart | Comma-separated tool names the governance kernel blocks. Guarded. | |
EVARNESS_GOVERNANCE_COMMAND_SANDBOX |
bool | on |
restart | Registers the governance CommandSandbox (on by default); 0/false/no/off disables it without dropping the rest of the kernel. Guarded. |
EVARNESS_GOVERNANCE_CONFIRM_ONCE_TOOLS |
list | restart | Comma-separated tool names that must ask for confirmation once, added on top of each tool's own declaration; unset or 'none' adds nothing. Guarded. | |
EVARNESS_GOVERNANCE_COST_ENFORCE |
bool | on |
restart | When on, a call that would pass the daily cost cap is refused; off only records spend. Guarded. |
EVARNESS_GOVERNANCE_COST_LEDGER_DB_PATH |
path | restart | Path of the SQLite cost ledger the cost limiter writes and the cost summary reads; unset uses CostStore's default location. | |
EVARNESS_GOVERNANCE_COST_LIMITER_ENABLED |
bool | off |
restart | When truthy, registers the cost limiter, which records LLM spend and (with cost enforce on) refuses calls past the daily cap. Guarded. |
EVARNESS_GOVERNANCE_DAILY_COST_CAP_USD |
float | 5.0 |
restart | Daily spend cap in USD the cost limiter enforces when EVARNESS_GOVERNANCE_COST_LIMITER_ENABLED is on (unparseable values fall back to $5.00). Guarded. |
EVARNESS_GOVERNANCE_DISPLAY_MASK |
bool | on |
next call | Masks email addresses in displayed text and streams (on unless explicitly turned off); the audit ledger keeps originals. Guarded. |
EVARNESS_GOVERNANCE_DRIFT_EXEMPTIONS_DB_PATH |
path | restart | Overrides where approved goal-drift exemptions are stored; unset uses the governance data dir drift_exemptions.db. Guarded. | |
EVARNESS_GOVERNANCE_ENABLED |
bool | on |
restart | Enables the governance kernel (secure by default; only an explicit 0/false/no/off disables it). Guarded. |
EVARNESS_GOVERNANCE_EVALUATOR_MODE |
enum | local |
restart | Set to remote to have the kernel use the remote evaluator sidecar (EVARNESS_GOVERNANCE_EVALUATOR_URL) instead of the in-process evaluator registry; health checks then also probe the sidecar. Guarded. |
EVARNESS_GOVERNANCE_EVALUATOR_TIMEOUT_S |
float | 5.0 |
restart | Sets the timeout in seconds for calls to the remote governance evaluator; on failure local-tier runs fail open and cloud-tier runs fail closed. Guarded. |
EVARNESS_GOVERNANCE_EVALUATOR_URL |
url | http://127.0.0.1:8090 |
restart | Base URL of the remote governance evaluator used when evaluator mode is 'remote'; the CLI evaluator commands also use it. Guarded. |
EVARNESS_GOVERNANCE_EXTERNAL_CONTENT_FLOOR |
bool | on |
restart | On by default. Text a tool, capability or MCP server declares content: external (a web page, a feed, an email, a retrieved document) reaches the model inside an untrusted-content envelope, and a small set of deterministic patterns (instruction overrides, chat-template and tool-call syntax, exfiltration instructions, hidden characters) is redacted with a ledger row. No model, no weights, no network. Plain boolean: on is unset, blank, 1, true, yes or on; off is only 0, false, no or off (anything else stays on). The model guard (EVARNESS_GOVERNANCE_PROMPT_GUARD) is separate and stays opt-in. Guarded. |
EVARNESS_GOVERNANCE_FS_JAIL |
bool | on |
restart | Registers the governance FSJail (on by default); 0/false/no/off disables it without dropping the rest of the kernel. Guarded. |
EVARNESS_GOVERNANCE_GOAL_DRIFT_MAX_DISTANCE |
float | restart | Sets the goal_drift signal's max distance (0.0-2.0) before a turn is flagged; unset keeps the signal default of 0.90. Guarded. | |
EVARNESS_GOVERNANCE_INPUT_SAFETY |
bool | off |
restart | When truthy, screens every user turn for hazards (self-harm, violence, ...) with the output guard's Llama Guard model before anything answers it, deterministic handlers included. Follows config/governance/threat-detection.yaml mode (shadow logs, enforce refuses). Guarded. |
EVARNESS_GOVERNANCE_JUDGE_CLOUD_OPT_IN |
bool | off |
restart | Let judge_from_env's judge use tier_3 (cloud); production does not build that judge. |
EVARNESS_GOVERNANCE_JUDGE_ENABLED |
bool | off |
next call | After every agent run that used tools, a background judge scores the trace and the answer for hallucination, goal alignment, tool misuse and danger, on the model EVARNESS_GOVERNANCE_JUDGE_TIER picks; a halt recommendation alerts your channels, the rest go to the audit log. Guarded. |
EVARNESS_GOVERNANCE_JUDGE_MODEL_TIER |
enum | tier_2 |
restart | Picked a governance tier label for the judge built by judge_from_env, which production does not use. |
EVARNESS_GOVERNANCE_JUDGE_TIER |
str | run |
next call | Which model reviews a run: 'run' judges each run on the same route the run used (a run that stayed on local models is judged on local models); any tier name from llm_tiers.yaml (e.g. tier2, private, tier3), local or cloud, judges every run on that tier. An unknown name falls back to 'run'. Guarded. |
EVARNESS_GOVERNANCE_JUDGE_TIMEOUT_S |
float | 30.0 |
next call | How long one post-run review may take before it is recorded as a judge failure (non-positive or invalid values fall back to 30). |
EVARNESS_GOVERNANCE_LOOP_DETECT_ENABLED |
bool | off |
restart | When truthy, builds an embedder and registers the governance loop-detection signal; off by default. Guarded. |
EVARNESS_GOVERNANCE_MCP_ALLOWLIST |
bool | on |
restart | When on, the MCP allowlist hook enforces mcp-servers.yaml governance; 0 disables the hook entirely. Guarded. |
EVARNESS_GOVERNANCE_NETWORK_EGRESS |
bool | on |
restart | Enables the governance NetworkEgress control; 0/false/no/off disables it. Guarded. |
EVARNESS_GOVERNANCE_OWNER_PII |
enum | off |
restart | Owner-PII masking across the guards (ADR-0125): off (default) or shadow, which audits what each guard would do with the owner's name, email, phone, address and handles and changes nothing (read it with evarness governance pii-shadow). Any other value, enforce included, runs shadow with a startup warning; enforce arrives kind by kind in PR 5. Guarded. |
EVARNESS_GOVERNANCE_PROMPT_GUARD |
bool | off |
restart | When truthy, installs the inbound and retrieved-content prompt-injection guard hooks using config/governance/threat-detection.yaml. Guarded. |
EVARNESS_GOVERNANCE_REDACTION_ENABLED |
bool | off |
restart | When truthy, builds the vault store the governance kernel uses to redact stored secrets from content. Guarded. |
EVARNESS_GOVERNANCE_SIDE_EFFECT_LEDGER |
bool | on |
restart | On (the default, the same as unset) the side-effect ledger (side_effects.db in the governance data dir, $EVARNESS_HOME/governance when EVARNESS_HOME is set, else ~/.local/share/evarness) always covers the high-risk class. A destructive tool's or a pinned write's row is written before the call runs, and plain writes and reads leave no row and open no file; setting this to true or 1 does not widen that, use EVARNESS_GOVERNANCE_SIDE_EFFECT_LEDGER_ALL. Off denies every destructive tool and pinned write, since none may run without a durable record. Guarded. |
EVARNESS_GOVERNANCE_SIDE_EFFECT_LEDGER_ALL |
bool | off |
restart | Only meaningful while EVARNESS_GOVERNANCE_SIDE_EFFECT_LEDGER is on. On also records every other non-read call's side effect after it runs (commits, pushes, file writes, sends), on top of the high-risk class the ledger always covers. Off (the default) records the high-risk class only. With the ledger off this has no effect and logs a warning. Before this setting existed, EVARNESS_GOVERNANCE_SIDE_EFFECT_LEDGER=1 meant this; it no longer does. |
EVARNESS_GOVERNANCE_SIDE_EFFECT_LEDGER_DB_PATH |
path | restart | SQLite path for the governance side-effect ledger; unset uses side_effects.db in the governance data dir ($EVARNESS_HOME/governance when EVARNESS_HOME is set, else ~/.local/share/evarness). | |
EVARNESS_GOVERNANCE_TRUSTED_CLOUD_FOR |
list | restart | Comma-separated data classes ('personal', 'internal') the egress gate lets reach cloud models; other values are dropped. Guarded. | |
EVARNESS_GOVERNANCE_VAULT_DB_PATH |
path | restart | Overrides the database path of the vault used for secret redaction. | |
EVARNESS_GOVERNOR_AUDIT_DB |
path | restart | Path of the governor service's audit database; unset uses the service's repo default. | |
EVARNESS_GOVERNOR_BASE_URL |
url | restart | Where a deployment that runs the standalone governor service says it is (docker-compose sets it). When set, the health check expects the governor to answer; unset, a desktop install that never started it is not reported as broken. | |
EVARNESS_GOVERNOR_POLICY_PATH |
path | restart | Path to the policy file the standalone governor service loads instead of the repository default. Guarded. | |
EVARNESS_GOVERNOR_PORT |
url | 8080 |
restart | Port the governor service listens on (launcher) and that the health check probes; default 8080. |
EVARNESS_HEALTH_ENABLED |
bool | on |
next run | Master switch for the health subsystem; off makes the health heartbeat skip. |
EVARNESS_HEALTH_NET_PROBE |
bool | off |
next run | When on, credential health checks make live network probes outside a manual refresh. |
EVARNESS_HEALTH_WATCH_ENABLED |
bool | restart | Overrides the enabled flag from config/health_watch.yaml (which defaults to true); a falsy value turns the connector health watcher off. | |
EVARNESS_HOME |
path | ~/.evarness |
restart | Relocates the identity tree, plugin home, session logs and (when set) the governance data/config dirs. Stable. |
EVARNESS_INTENTION_ROLLUP |
bool | off |
restart | Turns on the local-tier intention-rollup analyst (digital-twin layer 3) that proposes rolled-up goals for approval; this env value is the default the learning console reverts to on restart. |
EVARNESS_INTENT_ROUTER_SEMANTIC |
bool | off |
restart | When on, an embedding classifier becomes the primary intent router (deferring to keyword/LLM when unsure) and calendar create-intent uses it. |
EVARNESS_INTENT_ROUTER_SEMANTIC_MARGIN |
float | 0.05 |
restart | How far the winning intent must beat the runner-up for the semantic intent classifier to decide instead of deferring. |
EVARNESS_INTENT_ROUTER_SEMANTIC_THRESHOLD |
float | 0.42 |
restart | Sets the minimum similarity the semantic intent classifier needs to decide an intent itself (only used when EVARNESS_INTENT_ROUTER_SEMANTIC=1). |
EVARNESS_INTERACTIVE_SESSION |
bool | on |
next call | When set to 0, approval requests are not prompted on the terminal even when stdin is a TTY. |
EVARNESS_INTERCEPTS_CONFIG |
path | restart | Path to the intercept chain YAML; when unset uses intercepts.yaml in the resolved config directory (EVARNESS_CONFIG_DIR, else the checkout's config/, else the packaged defaults). | |
EVARNESS_LEARNING_ANALYST |
bool | off |
restart | Turns on the local-tier agentic learning analyst that interprets learning telemetry into a report (never acts); this env value is the default the learning console reverts to on restart. |
EVARNESS_LEARNING_CORRECTION_JUDGE |
bool | off |
restart | When on (or outcomes.yaml user_correction.enabled), spends a governed LLM call on turns that look like corrections to judge whether the prior answer was corrected. |
EVARNESS_LESSON_CAPTURE_ENABLED |
bool | on |
restart | Enables capturing lessons into memory; 0/false/False disables it. |
EVARNESS_LESSON_DOMAIN_ALLOW |
list | restart | Comma-separated domains; when set, only lessons whose domain is in the list are captured/recalled. | |
EVARNESS_LESSON_DOMAIN_BLOCK |
list | restart | Comma-separated lesson domains excluded when retrieving lessons for a turn. | |
EVARNESS_LESSON_TOP_K |
int | 3 |
restart | Default number of lessons LessonCapture retrieves (negative values clamp to 0; invalid falls back to 3). |
EVARNESS_LLM_PROVIDER |
str | restart | Puts every model tier on this provider, which must be declared in the providers block of llm_tiers.yaml; fake runs everything on the scripted fake model (tests and evarness email demo), offline and deterministic. |
|
EVARNESS_LOG_LEVEL |
enum | INFO |
restart | Sets the root logging level (e.g. DEBUG, INFO, WARNING); unknown names fall back to INFO. |
EVARNESS_LOG_PROMPT_CAP |
int | 8192 |
next call | Most characters of each LLM prompt message written to the session log (the middle is cut beyond it). Raise it to capture whole ReAct prompts for a model bake-off; values below 8192 are ignored. |
EVARNESS_MCP_KEYS_DIR |
path | ~/.config/evarness/mcp-keys |
next call | Directory where the mcp CLI keeps its signing keys. |
EVARNESS_MCP_SERVERS_CONFIG_PATH |
path | config/coding-agent/mcp-servers.yaml |
restart | Path of the mcp-servers.yaml governance map used by the MCP allowlist hook; missing file runs the hook in degraded allow+warn mode. Guarded. |
EVARNESS_MEMORY_MAX_PROFILE_CHARS |
int | 8000 |
restart | Maximum characters of the curated USER.md profile injected into the memory context. |
EVARNESS_MEMORY_MIN_FACT_CONFIDENCE |
float | 0.35 |
restart | Facts below this confidence are dropped from memory recall; 0.0 stops dropping. |
EVARNESS_MEMORY_RECALL_MAX_DISTANCE |
float | 1.45 |
restart | Relevance cutoff for cross-session recall and memory_search fact results; results farther than this distance are dropped. |
EVARNESS_MEMORY_RECALL_MODE |
enum | push |
next call | How turns from OTHER conversations reach a prompt. push (default) puts up to 4 related turns in every prompt; pointer puts a one-line note naming up to 2 related conversations that recall_conversation can read on demand, and pushes the nearest 2 turns only when the message clearly refers back (config/memory/recall.yaml). Anything else is push. Switch back at any time. |
EVARNESS_MEMORY_UNCERTAIN_BELOW |
float | 0.6 |
restart | Facts recalled with confidence below this value are kept but marked uncertain ('unconfirmed') in the prompt. |
EVARNESS_MISSION_AUTOCREATE |
bool | off |
next call | When truthy, successful multi-step turns and recurring episodic patterns are proposed as pending missions awaiting approval. |
EVARNESS_MODEL_HOST_RAM_GB |
float | next call | The RAM, in GB, of the machine the models run on, when that is not the one Evarness runs on. evarness doctor sizes the model set from it instead of measuring; in Docker against the host's Ollama it would otherwise see only the container VM's memory. Unset measures this machine. setup-windows.ps1 writes it to .env. | |
EVARNESS_OBSERVABILITY_METRICS_ENABLED |
bool | off |
next call | When on, the /observability/llm-metrics endpoint returns an LLM metrics summary; when off it returns 404. |
EVARNESS_OLLAMA_BREAKER |
bool | on |
next call | When on, the circuit breaker applies to local-provider LLM calls; 0/false/no/off disables it. |
EVARNESS_OLLAMA_PORT |
url | 11434 |
next run | Port used to reach Ollama for its health probe and the local model inventory. |
EVARNESS_OTEL_HTTPX_ENABLED |
bool | on |
restart | When on, instruments httpx calls for OpenTelemetry tracing (only while an OTLP endpoint is set). |
EVARNESS_OTEL_LANGCHAIN_ENABLED |
bool | on |
restart | Enables OpenTelemetry instrumentation of LangChain while an OTLP endpoint is set. |
EVARNESS_PLAYGROUND_DIR |
path | next call | Directory holding playground scenario suites; unset uses playground/ in the resolved config directory (EVARNESS_CONFIG_DIR, else the checkout's config/, else the packaged defaults). | |
EVARNESS_PLUGINS_DISABLE |
list | restart | Comma-separated plugin names removed from the active profile. Guarded. | |
EVARNESS_PLUGINS_ENABLE |
list | restart | Comma-separated plugin names forced on over the profile. Guarded. | |
EVARNESS_PROFILE |
str | default |
restart | Selects which shipped profile (config/profiles/default, or email when the email plugins are installed. Guarded. Stable. |
EVARNESS_PROVIDERS_CONFIG |
path | ~/.evarness/providers.json |
restart | Path to the LLM providers JSON; in iris_code an empty value disables the global provider override. |
EVARNESS_PROXY_PORT |
url | 4000 |
restart | Port an LLM failover proxy listens on, when the deployment runs one; the health checks also use it to tell the proxy from LM Studio. |
EVARNESS_PUBLIC_URL |
url | next call | Absolute base URL the web console is reached at (https:// |
|
EVARNESS_RAG_UPLOAD_DIR |
path | <repo>/data/rag_uploads |
restart | Directory where uploaded RAG documents are stored. |
EVARNESS_REACT_ASK_USER |
bool | on |
restart | Lets the conversational ReAct loop pause and ask the user a question; 0/false/no/off disables the ask tool. |
EVARNESS_REACT_HISTORY_TOKEN_BUDGET |
int | restart | Overrides the token budget for the running ReAct transcript; unset, the harness loop derives it from the tier-2 context window and the email agent uses 3000. | |
EVARNESS_REACT_MAX_ITERATIONS |
int | 10 |
restart | Caps how many tool-use iterations the ReAct loops (general and email) run per turn. |
EVARNESS_REACT_MEMORY_TOKEN_BUDGET |
int | restart | Overrides the token budget for the memory block admitted into the ReAct loop; unset uses the context controller's window-derived budget. | |
EVARNESS_REACT_TIER_BUMP_TOOL_COUNT |
int | 6 |
next call | When a tier-1 intent faces more tools than this number (and governance is on), the ReAct loop borrows the multi-step (tier-2) routing intent. |
EVARNESS_REACT_TIMEOUT_SECONDS |
int | 120 |
restart | Timeout in seconds for the ReAct agentic loop (general and email agents). |
EVARNESS_REACT_TOOL_CAP |
int | 12 |
next call | Maximum number of tools shortlisted into the ReAct tool menu each turn. |
EVARNESS_RECENT_TURNS_BUDGET_SHARE |
float | 0.45 |
restart | Sets the share of the memory token budget the live conversation transcript may fill. |
EVARNESS_RESEARCH_AGENT |
bool | off |
restart | Registers the dedicated research persona and remaps the 'search' intent to it; off by default. |
EVARNESS_RESTART_ON_REQUEST |
bool | on |
restart | Under a supervisor, whether this server exits when the app's Restart harness asks. A deployment whose governor owns the network namespace the other services share sets it off on the governor. |
EVARNESS_ROUTINE_REFLECTION |
bool | off |
next run | When on, each routine-reflection heartbeat run posts approval requests proposing changes to failing/stale routines (never mutates a routine). |
EVARNESS_RUNTIME_TELEGRAM_POLLER_ENABLED |
bool | off |
restart | When set, explicitly decides whether the runtime's own Telegram poller starts; unset defers to the inverse of EVARNESS_CHANNEL_GATEWAY_TELEGRAM_ENABLED. Guarded. |
EVARNESS_SANDBOX_EGRESS_ALLOWLIST |
list | next call | Comma-separated hosts the code sandbox may reach; unset uses the built-in default list (PyPI, GitHub, Yahoo quotes). Guarded. | |
EVARNESS_SANDBOX_PREFLIGHT |
bool | off |
next run | When on, promoted experiments are replayed through an isolated eval runtime under baseline vs variant and the verdict is stamped; the change is never applied. |
EVARNESS_SANDBOX_RUNTIME |
enum | restart | Overrides the code sandbox runtime with docker, gvisor or firecracker (otherwise config/governance/sandbox.yaml, default docker). Guarded. | |
EVARNESS_SEARCH_SYNTHESIS_MODEL |
str | gpt-5-mini |
restart | Copilot model used for cloud search synthesis when EVARNESS_SEARCH_SYNTHESIS_PROVIDER=copilot and EVARNESS_ENABLE_COPILOT_BACKEND is set. Guarded. |
EVARNESS_SEARCH_SYNTHESIS_PROVIDER |
enum | restart | Set to 'copilot' (with EVARNESS_ENABLE_COPILOT_BACKEND) to synthesize search results with a GitHub Copilot cloud model (default gpt-5-mini) instead of the local search tier. Guarded. | |
EVARNESS_SECRET_BACKEND |
enum | keyring |
next call | Chooses where secrets are stored: the OS keyring or the Fernet-encrypted vault. Guarded. |
EVARNESS_SESSION_LOG_DIR |
path | $EVARNESS_HOME/logs (~/.evarness/logs) |
restart | Directory where session logs are written. |
EVARNESS_SESSION_MEMORY_MAX_SESSIONS |
int | 256 |
restart | How many conversations keep their live window in the server's memory; the least recently used beyond this are dropped and reload from the memory store on their next turn. |
EVARNESS_SETTINGS_SIDECAR_CATALOGS |
path | restart | Settings catalogs (YAML files separated by the path separator, each naming its owner) of processes the deployment runs beside the harness, such as an LLM proxy; the app lists their settings and leaves changing them to that process's environment. | |
EVARNESS_SKILL_HOTRELOAD |
bool | off |
restart | When truthy, watches the skills directory and reloads skills when their files change. |
EVARNESS_SKILL_ROUTER_SEMANTIC |
bool | on |
restart | When on, routine authoring and briefing-section extraction use an embedding-based SemanticSkillRouter; off forces the legacy keyword scorer. |
EVARNESS_SKILL_ROUTER_THRESHOLD |
float | 0.45 |
restart | Embedding-similarity threshold the semantic skill router uses to match a request to a skill (default 0.45 from semantic_router.py:29). |
EVARNESS_SKILL_SYNTHESIS |
bool | off |
restart | When on, the crystallizer uses a local-tier LLM to synthesize skills instead of falling back to a scaffold. |
EVARNESS_STANDING_INSTRUCTIONS |
bool | on |
next call | When on, a chat message that teaches a rule is saved as a behavior and honored on later matching turns. |
EVARNESS_SUPERVISED |
bool | off |
restart | Set by a deployment whose supervisor restarts every server that exits (a compose file with restart policies, for example); only then may the app's Restart harness ask the servers to exit. |
EVARNESS_SYNC_MEMORY_BLOCKING |
bool | off |
restart | When on, the startup memory-to-index sync runs inline before build_runtime returns instead of on a background thread. |
EVARNESS_SYNC_WIKI_BLOCKING |
bool | off |
restart | When on (and wiki ingest is enabled), re-indexes wiki pages synchronously at startup instead of in a background thread. |
EVARNESS_THREAT_DETECTION_CONFIG |
path | config/governance/threat-detection.yaml |
restart | Overrides the path of the threat-detection (prompt guard) YAML config. Guarded. |
EVARNESS_TZ |
str | UTC |
restart | The owner's IANA time zone (e.g. America/Chicago). The morning digest's time, reminders and schedules are read in it; the Docker Compose files also set the container clock (TZ) from it. Unset or not a zone name means UTC. Stable. |
EVARNESS_USER_ID |
str | local |
restart | User id under which LLM spend is recorded and summed against the daily cost cap. Guarded. |
EVARNESS_VAULT_MASTER_KEY |
secret | restart | Fernet master key for the credential vault and the file vault, used instead of the OS keyring. Guarded. Stable. | |
EVARNESS_VAULT_PASSPHRASE |
secret | next call | Passphrase from which the encrypted-file vault key is derived (scrypt) when EVARNESS_SECRET_BACKEND=vault; unset uses a keychain-held key. Guarded. | |
EVARNESS_WEBUI_ALLOW_WRITES |
bool | off |
next call | Allows gated control writes from callers without a paired device (shared secret or no credentials); paired devices are judged by their own scope regardless. Guarded. |
EVARNESS_WEBUI_DIST |
path | /app/webui/dist |
restart | Directory the API serves the built web UI from; without an index.html there the UI is not served. |
EVARNESS_WEBUI_PORT |
int | 5181 |
next call | Port the setup wizard's closing "open the web UI" hint shows; it reads this to reflect a custom port mapping but does not itself change which port the web UI binds to. |
EVARNESS_WEB_PUSH_SUBJECT |
url | https://github.com/evarness-ai/evarness |
next call | Contact subject (URL or mailto) sent in Web Push VAPID claims. |
EVARNESS_WEB_PUSH_VAPID_PRIVATE_KEY |
secret | next call | PEM EC private key used to sign web push requests instead of the generated key file; changing it breaks existing subscriptions. Guarded. | |
EVARNESS_WIKI_INGEST |
bool | off |
restart | When on, chat turns and classified emails are automatically ingested into wiki pages and pages are re-embedded at startup. |
From plugin code_exec
| Variable | Kind | Default | Applies | Description |
|---|---|---|---|---|
EVARNESS_CODE_EXEC_MAX_ITERATIONS |
int | 8 |
next call | Sets the base number of loop iterations a code_exec task gets (bounded 1-128; the cap env is raised to match if lower). |
EVARNESS_CODE_EXEC_MAX_ITERATIONS_CAP |
int | 14 |
next call | Sets the maximum iteration budget for a code_exec loop (clamped 1-128, never below EVARNESS_CODE_EXEC_MAX_ITERATIONS). |
From plugin email_workflows
| Variable | Kind | Default | Applies | Description |
|---|---|---|---|---|
EVARNESS_DEMO_HOME |
path | next call | Where evarness email demo keeps its own isolated Evarness home (default ~/.evarness-demo); never the owner's profile. Stable. |
|
EVARNESS_EMAIL_DEFAULT_SENDER |
str | next call | Names the connected mail account (address or account id) a new email is sent from when no sender is given; if it names an unconnected account the send is refused, and when unset the first account in sorted order is used. | |
EVARNESS_EMAIL_JUDGE |
bool | on |
next run | When on (default), the email judge sorts each new non-promo email into Bill, Event, Needs reply, FYI or Unsure three times a day, on a local model only. New email stays hidden until it is judged, so off means new email waits and stays hidden. Stable. |
EVARNESS_EMAIL_JUDGE_LABELS |
bool | on |
next run | When on (default), each judged email gets one Evarness/ label in Gmail (never archived, never marked read); off keeps the judgments in Evarness only. Stable.* |
EVARNESS_EMAIL_JUDGE_MAX |
int | 100 |
next run | The most emails the judge reads in one run; the rest wait, hidden, and are judged first next run. |
EVARNESS_EMAIL_JUDGE_UNSURE_BELOW |
float | 0.7 |
next run | A judgment less sure than this is filed as Unsure and asked on an Action Center card. Stable. |
EVARNESS_EMAIL_SEMANTIC_SEARCH |
bool | on |
restart | When on (default), the email tools search by meaning as well as by words, the index follows new mail, and a heartbeat fills in older mail in small batches; 0 turns it off. |
EVARNESS_FOLLOWUP_ACTIONABLE_ROOTS |
list | next call | Comma-separated email category roots that may create follow-up tasks; unset uses personal, work, finance, jobs, travel, community. |
From plugin research
| Variable | Kind | Default | Applies | Description |
|---|---|---|---|---|
EVARNESS_REDIS_URL |
url | redis://localhost:6379/0 |
restart | Redis URL for the research result cache when the Redis backend is selected. |
EVARNESS_RESEARCH_CACHE |
enum | sqlite |
restart | Selects the research cache: sqlite (default), redis (falls back to sqlite), or off/none to disable. |
EVARNESS_RESEARCH_CRAWLER |
enum | trafilatura |
next call | Selects the research page extraction backend: crawl4ai, otherwise trafilatura fetch-and-extract. |
EVARNESS_RESEARCH_NEWS_SOURCES |
path | plugins_builtin/research/news_sources.yaml |
next call | Path of the YAML file giving per-domain trust scores for news search ranking. |
EVARNESS_RESEARCH_RERANKER |
enum | restart | Set to bge or cross-encoder to rerank research results with a cross-encoder; any other value leaves order unchanged. | |
EVARNESS_RESEARCH_RERANKER_MODEL |
str | BAAI/bge-reranker-base |
restart | sentence-transformers CrossEncoder model used to rerank research results when EVARNESS_RESEARCH_RERANKER is 'bge' or 'cross-encoder'. |
EVARNESS_SEARXNG_URL |
url | next call | Base URL of a self-hosted SearXNG instance; when set it becomes the first research search provider. |
From plugin web_channel
| Variable | Kind | Default | Applies | Description |
|---|---|---|---|---|
EVARNESS_WEB_SESSION |
str | default |
restart | Web chat session id that channel messages without a recipient (e.g. heartbeat notices) are delivered into. |