Configuration
Every Empryo config field: default model, thinking, Genome graph, task router, agent features, compaction, key storage, instruction files, and env vars.
Config lives in two files. Project wins.
| Scope | Path |
|---|---|
| Global | ~/.empryo/config.json |
| Project | .empryo/config.json |
Full example
{
"defaultModel": "anthropic/claude-sonnet-4-5",
"thinking": { "mode": "adaptive" },
"genome": true,
"semanticSummaries": "ast",
"diffStyle": "default",
"chatStyle": "accent",
"toolTimeout": 2,
"compaction": {
"strategy": "v2",
"triggerThreshold": 0.7,
"keepRecent": 4
},
"taskRouter": {
"spark": "anthropic/claude-haiku-4-5",
"ember": "anthropic/claude-sonnet-4-5",
"compact": "google/gemini-2.5-flash"
},
"agentFeatures": {
"desloppify": true,
"tierRouting": true,
"dispatchCache": true,
"targetFileValidation": true
},
"retry": { "maxAttempts": 5, "baseDelayMs": 3000 }
}Fields
Model
| Field | Default | What it does |
|---|---|---|
defaultModel | "none" | Active model ID. "none" (default) forces picker on launch. |
thinking.mode | "off" | "off", "adaptive", "enabled" |
thinking.budgetTokens | - | Tokens when mode: "enabled" (1024, 2048, 5000, 10000, 20000) |
Display
| Field | Default | What it does |
|---|---|---|
diffStyle | "default" | "default", "sidebyside", "compact" |
chatStyle | "accent" | "accent", "bubble" |
vimHints | true | Show Vim keybinding hints |
nerdFont | auto | Nerd Font icons — auto-detected from installed fonts; set true/false to force (off shows ASCII) |
Intelligence
| Field | Default | What it does |
|---|---|---|
genome | true | Build the codebase graph on launch |
semanticSummaries | "synthetic" | "synthetic" (default), "ast", "llm", "off" |
toolTimeout | 2 | Tool call timeout in minutes. 0 disables. |
Compaction
See compaction for what these do.
"compaction": {
"strategy": "v2",
"triggerThreshold": 0.7,
"resetThreshold": 0.4,
"keepRecent": 4,
"maxToolResults": 30,
"llmExtraction": true
}Retry
For 429s and transient errors. Delays double each attempt.
"retry": { "maxAttempts": 5, "baseDelayMs": 3000 }Task router
Assign different models to different jobs. See the task router recipe for tuning tips.
"taskRouter": {
"spark": "anthropic/claude-haiku-4-5",
"ember": "anthropic/claude-sonnet-4-5",
"webSearch": "anthropic/claude-haiku-4-5",
"desloppify": "anthropic/claude-haiku-4-5",
"verify": "anthropic/claude-haiku-4-5",
"compact": "google/gemini-2.5-flash",
"semantic": "anthropic/claude-haiku-4-5",
"default": null
}| Slot | Runs when |
|---|---|
spark | Read-only research agents |
ember | Code-writing agents |
webSearch | Web search agent |
desloppify | Cleanup pass after code edits |
verify | Adversarial review after code edits |
compact | Context compaction |
semantic | Genome one-line summaries |
default | Fallback for background tasks |
Resolution: taskRouter[slot] → taskRouter.default → active model.
Agent features
"agentFeatures": {
"desloppify": true,
"tierRouting": true,
"dispatchCache": true,
"targetFileValidation": true
}| Feature | What it does |
|---|---|
desloppify | Run cleanup agent after code agents |
tierRouting | Auto-route trivial tasks to cheap model |
dispatchCache | Share file reads across dispatches |
targetFileValidation | Require file paths on dispatch tasks |
Toggle in the TUI with /agent-features.
Providers
Pick keys and add custom providers on the dedicated pages:
- All providers - env vars,
--set-keycommands, keyUrls. - Custom providers - any OpenAI-compatible API.
- Copilot - use your GitHub Copilot subscription.
Auth & key storage
Keys go to your OS keychain when available, with a file fallback otherwise.
| Platform | Backend |
|---|---|
| macOS | Login Keychain (security), service empryo |
| Linux | libsecret via secret-tool (GNOME Keyring, KWallet) |
Linux without secret-tool | ~/.empryo/secrets.json, mode 0600 |
| Windows | DPAPI (crypt32.dll) - %LOCALAPPDATA%\Empryo\secrets.dat, user-scoped |
| Windows without DPAPI | Plain JSON under same dir, mode-restricted |
| Windows (WSL) | Same as Linux above |
empryo --set-key <provider> <key> writes to whichever backend is active. Inspect with empryo --list-providers.
Lookup order
{ "keyPriority": "env" }| Value | Order |
|---|---|
"env" (default) | env var → keychain → file |
"app" | keychain → file → env var |
Use "app" when shell-exported keys keep overriding stored ones.
Pass a key per-launch
Env vars work for the TUI too - useful for one-off sessions or CI:
LLM_GATEWAY_API_KEY=sk-... empryo
ANTHROPIC_API_KEY=sk-ant-... empryoNothing is persisted. There is no --key flag - the TUI only reads stored keys and env vars.
Remove a key
/keys inside the TUI lists every provider with delete shortcuts. Or delete from the keychain directly (security delete-generic-password -a empryo -s anthropic-api-key on macOS).
Instruction files
Auto-load project rules from AI-tool markdown files:
{ "instructionFiles": ["empryo", "claude", "cursorrules"] }| Key | File | Default |
|---|---|---|
empryo | EMPRYO.md | on |
claude | CLAUDE.md | off |
cursorrules | .cursorrules | off |
github-copilot | .github/copilot-instructions.md | off |
cline | .clinerules | off |
windsurf | .windsurfrules | off |
aider | .aider.conf.yml | off |
codex | AGENTS.md | off |
amp | AMPLIFY.md | off |
Toggle in TUI with /instructions.
Privacy
Block files from the agent:
/privacy add .env
/privacy add secrets/**Built-ins already cover .env, .pem, credentials, id_rsa, .npmrc, .netrc, shadow, passwd.
Environment variables
| Variable | Default | Purpose |
|---|---|---|
EMPRYO_NO_GENOME | unset | Skip the Genome scan at startup. |
EMPRYO_MAX_OUTPUT_TOKENS | 64000 | Per-step output cap for all agents (forge + subagents + web-search). Raise for reasoning models that hit finish_reason=length. |
EMPRYO_PRESETS | unset | Comma-separated preset specs to load on boot. Set automatically by --plugin <spec> flags. See presets. |
EMPRYO_NO_PROMPT | unset | Skip first-run addon wizard (set to 1). Useful in CI. |
EMPRYO_DEBUG_API | unset | Dump per-step API requests to ~/.empryo/api-export/. |
EMPRYO_DEV_UI | unset | Show dev-only slash commands (/ui-demo, etc). |
EMPRYO_ENABLE_GHOSTTY | unset | Force-enable the embedded floating terminal on Windows (off by default - see Windows notes). |
EMPRYO_HEARTH_SOCKET | <configDir>/hearth.sock | Override the Hearth IPC socket path. |
EMPRYO_HEARTH_APPROVAL_TIMEOUT_MS | 300000 | Approval timeout for remote tool calls. |
EMPRYO_HEARTH_DENY_READ_REMOTE | unset | Block read-only tools from remote surfaces (set to 1). |
EMPRYO_PROXY_VERSION | latest | Pin a CLIProxyAPI version when installing the proxy addon. |
EMPRYO_AUTO_INSTALL_ADDONS | unset | Comma-separated addons to install automatically (proxy,neovim). |
Hooks
Covered on the hooks page. Short version: Empryo reads hooks.{Event} from all 5 config sources (Claude Code's three + Empryo's two), fires all matches.
Storage
/storage shows per-component disk usage (Genome, sessions, plans, memory, input history, binaries, fonts) with one-click cleanup.
Scope priority
Session → Project → Global. Changes via commands land in whatever scope the command targets. Use /model-scope to move the active model between project and global.