Repo initialization
What `stella init` builds — the domain taxonomy, the code graph, semantic search, extension adoption, and everything that lands under .stella/.
stella works in any directory with no setup. One command gives it a head start by mapping out your codebase:
cd your-project
stella initWhat stella init does
- Guesses the domains in your code →
.stella/domains.toml. This is a short list of tags (auth, storage, api, and so on) that labels memories, reflections, and every node in the code graph. It lets the context engine connect a memory, a reflection, and a file that all belong to the same part of your project. It's also saved to.stella/private/context.db. - Builds the code graph →
.stella/private/codegraph.db. This is an index of your code's symbols and imports. Query it from your shell withstella searchinstead of guessing with grep. - Embeds your files for search by meaning, if you've set up an
embedding backend (
VOYAGE_API_KEY,OPENAI_API_KEY, orSTELLA_EMBED_URLplusSTELLA_EMBED_MODEL). This is what letsstella searchanswer a question like "which file strips secrets before logging" instead of only matching exact text. Without a backend, init says so in one line and skips this step. With one, it tells you how many files it embedded, and how many a large repo left for later, embedding them the first time a search reaches them. - Reuses your existing setup. Commands, skills, and agents already
defined for other tools — in
.claude/and.agents/directories, at both workspace and user scope — are linked into.stella/. You keep what you already built instead of starting over.
stella init works offline. With no provider key, it falls back to a
simpler guess instead of failing, so you can run it before setting up any key.
In interactive sessions, the code graph also builds itself in the
background and updates as files change. stella init does this once,
right away, and also builds the domain list. Run it again after a big
refactor to refresh both.
What lands where
Everything stella knows about your workspace lives under .stella/. It's
all plain files and SQLite databases. Inspect them, put them in version
control, or delete them — your choice.
Files to commit
.stella/domains.tomlThe domain tags stella init guesses.
.stella/memories/*.mdWorkspace memories, as plain Markdown.
.stella/rules/*.mdWorkspace rules: memories that got promoted, plus guard rules.
.stella/skills/Project-scope skills.
.stella/settings.jsonProject-scope settings.
.stella/mcp.tomlMCP servers to connect at session start.
.stella/tools/*.toml.stella/commands/ · .stella/agents/Local state
Never commit these:
.stella/private/codegraph.dbThe code graph index.
.stella/private/context.dbThe context store: memory nodes, reflections, episodes, and facts that keep track of when they were true and when stella learned them.
.stella/private/store.dbExecutions, events, token and cost data, the list of files touched, and
the file_locks table fleets use to coordinate.
.stella/private/fleet.dbThe fleet log: runs, tasks, attempts, commits.
.stella/private/reflections.jsonlThe reflection log written after each turn — lessons the context engine pulls out.
.stella/private/mcp_oauth.jsonOAuth tokens for MCP servers you've logged into. This is a secret. Never commit it.
.stella/worktrees/Dedicated worktrees for fleet tasks marked isolation = "isolated".
.stella/exports/Session telemetry exports: ZIP and HTML files.
If you're upgrading from an older version that wrote files directly under
.stella/, stella moves the safe ones into .stella/private/ automatically
the first time you run it. If a file has unsafe permissions, or is an active
SQLite WAL or SHM file, stella leaves it alone and shows a clear error
instead of touching it.
The same kinds of files exist at user scope under ~/.stella/: settings,
skills, agents, and credentials.
What to commit
The files listed above under "files to commit" are safe to share with your
team and put in version control, with one exception. If
.stella/settings.json has an inline api_key, keep that file out of
version control. Use
api_key_env or credentials.toml
instead.
Everything under .stella/private/ is local only, including MCP OAuth
tokens. stella writes a .stella/.gitignore for you that covers the private
directory, plus any stray database or reflection log left by an older
layout:
*.db
*.db-wal
*.db-shm
reflections.jsonl
private/If your project uses one root .gitignore file instead, add the private
directory plus the two extra directories that sit outside it:
.stella/private/
.stella/worktrees/
.stella/exports/Verify the result
# The index answers structural questions — offline, no API key.
stella search "where is Config defined"
stella search "what imports src/main.rs"
# The taxonomy it inferred.
cat .stella/domains.toml
# The store it will write telemetry into.
stella doctor# And the resolved provider, model, credential source, and workspace root.
stella configRun stella init again after a big refactor to rebuild the index and
refresh the domain list. It's safe to run more than once, and it works
offline: the code graph builds with no provider at all, the domain list
falls back to a simple guess based on your folders, and the semantic
embedding step just says it was skipped.
Next: set up your provider keys, then run your first task from the quickstart.