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.json

Your personal settings: provider overrides, hooks, tools, and the context block.

<workspace>/.stella/settings.json

Settings for this project. These win over every other scope, and this file is also a trust boundary.

<repo>/stella.toml

The 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.json

Organization-wide defaults (see below). The only scope that can set authority or enterprise_telemetry.

~/.stella/credentials.toml

Stored API keys, written with owner-only permissions.

<workspace>/.stella/mcp.toml

MCP servers to connect at session start.

<workspace>/.stella/tools/*.toml
<workspace>/.stella/domains.toml

The domain list stella init builds for your project.

<workspace>/.stella/memories/*.md
<workspace>/.stella/rules/*.md

Promoted rules and guard rules. Also read from .claude/rules/ and ~/.stella/rules/.

<workspace>/.stella/private/store.db

Local 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:

  1. project<workspace>/.stella/settings.json (checked first)
  2. org-managed — a file your organization manages (checked second)
  3. 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.

How settings scopes mergeorg-manageda ceiling — off stays offproject — .stella/settings.jsonbeats user, for keys it is trusted withuser — ~/.stella/settings.jsonyour defaults, always appliedeffective settingsmerged per keymost specific wins — except that an org “off” can be narrowed further, never re-opened

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

Output and run options

Tools, hooks, and context

Fleet, trust, diagnostics

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:

~/.stella/settings.json
{ "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.json

Run 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:

~/.stella/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 status