Reference
Formats and files grove reads and writes.
Symbol id
Every result across the whole surface carries a stable symbol id you can pass
from one tool to the next (outline / symbols / map → source / callers /
definition):
<lang>:<relpath>#<name>@<line>
lang— the grammar name (rust,python,typescript, …).relpath— the file path relative to the working directory.name— the symbol’s name.line— the 1-based line of the name.
Example: rust:core/src/ops.rs#symbols@153.
1-based lines & columns
Lines and columns are 1-based everywhere grove reports or accepts them (the
editor / grep -n convention) — including definition --at file:line:col. This
is a deliberate normalization; tree-sitter’s own points are 0-based.
.grove/config.json
The single, versioned source of truth for a project’s grove integration, written
by grove init and read by grove serve, grove-explore serve/config/tap,
and grove doctor (see
ADR 0002).
{
"version": 1,
"mode": "mcp-llm",
"explore": {
"provider": "ollama",
"base_url": "http://localhost:11434/v1",
"model": "qwen2.5-coder:7b",
"steering": "standard",
"allowed_tools": ["grove", "rg", "grep", "find"],
"tap": false,
"trace_retain": 50
}
}
mode— the integration mode (mcp·skill·both·mcp-llm·grammars), the harness-reconciliation key forinit/doctor.grove serveis unconditionally the 7-tool structural surface regardless ofmode—modeno longer selects a serve surface.mode: mcp-llmmeans “initregisters bothgroveandgrove-explorein the harness (.mcp.json,CLAUDE.md,AGENTS.md)”;grove-exploreis its own MCP server binary with its own always-onexploresurface, composable alongsidegrove serve.explore— present whenmodeismcp-llm; read bygrove-explore:provider—ollamaorllamacpp(both speak the OpenAI-compatible wire protocol).base_url,model— the inference endpoint and model id.steering— the steering arm:standard(merit),balanced(plan-first), orstrict(grove-first).allowed_tools— the tools the inner explorer may invoke.tap— record per-session traces under.grove/traces/(browse withgrove-explore tap).trace_retain— how many trace sessions to keep (0= keep all).
grove config/grove tapstill work as deprecated forwarding shims togrove-explore config/grove-explore tap— they print a one-line note and forward to the sibling binary. Use thegrove-explorespelling directly.
The legacy
.grove/explore.jsonis migrated forward toconfig.jsonon first load;grove doctorflags it until you remove it.
grove.lock
Written by grove lock (and grove init), pinning the grammars a project needs
by version + wasm sha256, so a checkout resolves the same grammars every time.
See Languages & grammars.