Configuration
How stella is configured: settings.json, credentials, workspace files, and the scope hierarchy.
stella reads its configuration from a few places. Most people only need an API key.
Teams and power users also reach for settings.json.
What lives where
~/.stella/settings.jsonYour personal settings: provider overrides, hooks, tools,
and the context block.
<workspace>/.stella/settings.jsonSettings for this project. These win over every other scope, and this file is also a trust boundary.
<repo>/stella.tomlThe same settings as settings.json, written in TOML so
your comments survive edits. See stella.toml.
Lives at the repository root, not under .stella/.
org-managed settings.jsonOrganization-wide defaults (see below). The only scope that can
set authority or enterprise_telemetry.
~/.stella/credentials.tomlStored API keys, written with owner-only permissions.
<workspace>/.stella/mcp.tomlMCP servers to connect at session start.
<workspace>/.stella/tools/*.toml<workspace>/.stella/domains.tomlThe domain list stella init builds for your project.
<workspace>/.stella/memories/*.mdSaved workspace memories.
<workspace>/.stella/rules/*.mdPromoted rules and guard rules. Also read from .claude/rules/ and ~/.stella/rules/.
<workspace>/.stella/private/store.dbLocal telemetry & store, stored in SQLite on your machine.
The settings hierarchy
stella reads settings.json from three scopes and merges them field by field. The more
specific scope wins:
- project —
<workspace>/.stella/settings.json(checked first) - org-managed — a file your organization manages (checked second)
- user —
~/.stella/settings.json(checked last)
A project setting overrides an org-managed one. An org-managed setting overrides a user one. This happens field by field, so a project can set just a base URL and still inherit an API key from a higher scope. The rest of stella's settings follow this same layering.
See settings.json for the full schema: all ten top-level
sections, the org-managed path, and worked examples. The same settings are also available as
stella.toml, a format that keeps your comments. Run
stella migrate config to convert an existing settings.json to TOML.
Configuration vs. credentials
- settings.json configures behavior: which base URL a provider uses, its display name, default model, and lifecycle hooks. It can also hold an API key.
- credentials.toml stores only API keys, written with owner-only permissions.
Both feed the credential chain.
Everything you can configure
You can configure stella three ways: files, environment variables, and command-line flags. Flags win over environment variables. Environment variables win over files. Each card below links to its own detail page.
Providers, models, and keys
Flags beat the environment, which beats the file.
The first hit in the credential chain wins; nothing below it is read.
A coding-plan endpoint, a proxy, or a gateway.
What stella config and stella models print.
Output and run options
text, json, or stream-json.
Enforced, not advisory: work stops cleanly once spend passes the cap.
For pipes, plain terminals, and recordings.
For CI logs and screen recordings.
Tools, hooks, and context
SessionStart, PreToolUse, PostToolUse.
Worker, verifier, and triage roles, each with its own model and sampling params.
Every tool ships on. The tools section is the one way to turn one off.
Groups such as task, scratch, mcp, or custom. Or use "*" for everything.
A script that can block any tool call before it runs.
Settings for learning, governance, promotion, efficacy, and retention. Off by default.
CGP providers reached over stdio or HTTP. Each one must pass a conformance check and get your consent first.
Connected at session start.
Your own executables, described as tool manifests.
Fleet, trust, diagnostics
One file every project on the machine inherits.
Unlocks project hooks, credential routing, context providers, tool grants, replacement prompts, and workspace custom tools.
Structured, owner-only, and off unless asked for.
OXAGEN_DEBUG and OXAGEN_MEDIA_LIVE also work as names for STELLA_DEBUG and
STELLA_MEDIA_LIVE. If you set both the old and new name, the STELLA_ name wins.
stella detects your provider automatically from whichever API key is present in your
environment. The smallest setup you need is one *_API_KEY environment variable.
Everything above is for when you want to change that default.
Common tasks
Point a Z.ai coding-plan subscription at its endpoint. Set this in user scope, since a
subscription is personal. Project scope needs
STELLA_TRUST_PROJECT=1:
{ "providers": { "zai": { "base_url": "https://api.z.ai/api/coding/paas/v4" } } }Full walkthrough: the coding-plan recipe.
Pin a model and a hard budget for an unattended CI run:
STELLA_MODEL=anthropic/claude-fable-5 STELLA_SPEND_LIMIT=5 \
stella run --output-format json "port the utils module to the new API"Ship org-wide defaults every project inherits, such as a gateway URL and team key. Projects can still override any field:
export STELLA_MANAGED_SETTINGS=/etc/stella/settings.jsonRun against a local OpenAI-compatible server, such as Ollama, vLLM, or LM Studio:
stella --model local/llama3.1 --base-url http://localhost:11434/v1 run "…"Gate a tool call through a guard script, in settings.json:
{ "hooks": { "PreToolUse": [ { "matcher": "mcp__github__push_files",
"hooks": [ { "command": "./scripts/guard.sh", "timeoutMs": 5000 } ] } ] } }Check your configuration
stella config # the fully resolved provider, model, key preview, and base URL
stella models # every provider with its effective base URL and key statusSession artifacts
stella can hand you a session you can carry to another machine, but it won't carry it there for you. Why that line is drawn there, what stella still owes you, and what it won't take on.
settings.json
Configure providers, agents, tools, context, and managed authority across project, org-managed, and user scopes.