Reference
shelley.json
The optional config file, its two fields, and the environment variables Shelley reads.
Shelley mostly configures itself from flags, API keys in the environment, and settings you change in the UI (which live in the database). The config file is optional and small.
Using it
Shelley reads a config file only when you pass one:
shelley -config ~/.shelley/shelley.json --db ~/.shelley/shelley.db serve
There’s no default location. If the path doesn’t exist, Shelley carries on without it; if the file isn’t valid JSON, Shelley refuses to start. Unknown keys are ignored.
Fields
{
"default_model": "claude-sonnet-4.6"
}
| Field | Type | Does |
|---|---|---|
default_model |
string | Model selected by default for new conversations. The -default-model flag overrides it. If the model isn’t available, the first ready model is used instead. shelley models lists the IDs and marks the default with *. |
llm_gateway |
string | Base URL of an exe.dev-style LLM gateway. Details below; you probably don’t need it. |
That’s all of them. The struct that parses the file is shelleyConfig in
cmd/shelley/main.go.
On an exe.dev VM, Shelley runs with -config /exe.dev/shelley.json, and that
file has other keys too (links, terminal_url, and so on). Current
Shelley ignores them.
llm_gateway
With a gateway set, Shelley sends model requests through it instead of directly to the providers:
| Provider | Requests go to |
|---|---|
| Anthropic | <llm_gateway>/anthropic |
| OpenAI | <llm_gateway>/openai |
| Fireworks | <llm_gateway>/fireworks/inference |
| xAI | <llm_gateway>/xai |
The gateway is expected to add credentials itself. If ANTHROPIC_API_KEY,
OPENAI_API_KEY, or FIREWORKS_API_KEY is set, Shelley sends that key to
the gateway for that provider. Gemini doesn’t go through the gateway;
GEMINI_API_KEY still talks to Google directly.
The gateway is skipped when you pass -disable-gateway, and when Shelley
finds an exe.dev LLM integration (which -disable-llm-integration turns
off). Put together:
- Without a gateway, models come from any exe.dev LLM integration plus your provider API keys.
- With a gateway, Anthropic, OpenAI, Fireworks, and xAI models go through it,
and Gemini through
GEMINI_API_KEYif set. - With a gateway and an LLM integration, the integration wins. The gateway is
skipped, and so are
ANTHROPIC_API_KEY,OPENAI_API_KEY, andFIREWORKS_API_KEY; onlyGEMINI_API_KEYstill adds models. - Custom models added in the UI come on top.
predictableis always built in, but the UI only offers it under-predictable-only, which hides everything else.
See Models and API keys.
Environment variables
Besides the API keys (ANTHROPIC_API_KEY, OPENAI_API_KEY,
GEMINI_API_KEY, FIREWORKS_API_KEY; see Models and API keys),
Shelley reads:
| Variable | Effect |
|---|---|
SHELLEY_SKIP_VERSION_CHECK=true |
Don’t check GitHub for new releases. In-app upgrades are disabled too. |
SHELLEY_SOCKET |
The server shelley client and shelley mcp talk to when there’s no -url. Shelley sets it for the commands it runs. |
XDG_CONFIG_HOME |
Moves the default Unix socket to $XDG_CONFIG_HOME/shelley/shelley.sock. Nothing else: hooks, skills, and AGENTS.md stay under $HOME/.config. |
LISTEN_FDS, LISTEN_PID |
Set by systemd; read with serve -systemd-activation. |
Shelley sets these for the agent’s bash commands and the UI’s terminals, so your scripts can use them:
| Variable | Value |
|---|---|
SHELLEY_CONVERSATION_ID |
The conversation’s ID. |
SHELLEY_CONVERSATION_SLUG |
Its slug, once it has one. |
SHELLEY_MODEL |
The model in use. |
SHELLEY_CWD |
The working directory. |
SHELLEY_GIT_ROOT |
The git root, inside a repository. |
SHELLEY_PORT, SHELLEY_URL |
The server’s port, and http://localhost:<port>. |
SHELLEY_SOCKET |
The server’s Unix socket, unless disabled. |
SHELLEY_USER_EMAIL |
The exe.dev user’s email, when known. |
Empty values are left unset.
Other files Shelley reads
These aren’t configured in shelley.json; Shelley looks for them in fixed places.
| Path | What |
|---|---|
~/.config/shelley/AGENTS.md |
Your personal guidance. See AGENTS.md for the other locations. |
~/.config/shelley/<name>/SKILL.md |
Your skills. See Skills. |
~/.config/shelley/hooks/ |
Hook scripts. See Hooks. |
~/.config/shelley/shelley.sock |
The default Unix socket. |
~/.local/state/shelley/agents-md.git |
History of personal AGENTS.md edits made in the UI. |
Everything else (conversations, settings, custom models, MCP servers and their
logins) is in the database given by --db.