Skip to main content

Config File Location

FERAL reads its primary configuration from a JSON file at:
You can override this path by setting the FERAL_HOME environment variable:
When set, FERAL reads $FERAL_HOME/settings.json instead.

Configuration Hierarchy

FERAL merges configuration from four sources, each overriding the previous:
1

User config (lowest priority)

~/.feral/settings.json — your global defaults.
2

Project config

.feral/settings.json in the current working directory — project-specific overrides.
3

Local config

.feral/settings.local.json in the current directory — personal overrides not checked into version control.
4

Environment variables (highest priority)

Any FERAL_* env var overrides the equivalent setting. See the Environment Variables reference.
Add .feral/settings.local.json to your .gitignore to keep personal overrides out of version control.

Settings File Format

settings.json

Credentials Vault

Sensitive values (API keys, OAuth tokens) are stored separately in the encrypted BlindVault:
The vault is encrypted at rest with ChaCha20-Poly1305 (AEAD). The 32-byte master key lives in your OS keychain (macOS Keychain, GNOME Keyring, Windows Credential Manager) — there is no master password stored on disk; unlocking the vault requires the keychain entry to be present, so the brain decrypts transparently inside your OS account and refuses to start anywhere that entry is missing. At first boot FERAL prints a one-time recovery code (the master key, base32-encoded) you can use to recover the vault if the keychain entry is ever wiped; FERAL has no escrow. The decrypted credentials live only in process memory and the LLM never sees raw values — keys are injected at the HTTP layer at request time.
Never commit credentials.enc to version control. The setup wizard creates it automatically and pip install feral-ai adds ~/.feral/ to your gitignore patterns when you run feral setup.

Managing credentials

You can also set credentials via environment variables, which always take precedence over the vault:

Key Settings Reference

The coding Section

Knobs for the coding harness. Each one shipped as an environment variable only, so it was configurable per process but not persistable: an operator who wanted read-before-edit enforced had to re-export the variable on every launch. They are mirrored into settings.json so the choice survives a restart.
Precedence here is env-first, unlike the general rule above, and it is deliberate. Each of these is read from the process environment by its subsystem and from nowhere else. The environment variable is merged into the coding section on load and then re-emitted verbatim by export_as_env, so a shell that exports FERAL_READ_BEFORE_EDIT=enforce still beats settings.json. The defaults above are copied from each reader’s own default, so an install that never touches this section behaves exactly as it did before the section existed.
The environment variable names are in the Environment reference.

Example: Minimal Cloud Config

settings.json

Example: Fully Local Config

settings.json