Single source of truth for all context root discovery. Referenced by: context-scout agent, context-discovery skill, any agent needing project context.
.oac.json exists? YES → read context.root → done (fast path)
NO → run discovery chain
Found? YES → signal main agent to write .oac.json (if project-local)
NO → return setup tips
Glob: .oac.json
If the file exists, read it and extract context.root:
{
"version": "1",
"context": {
"root": ".claude/context"
}
}
context.root as the resolved context root. Stop here.context.root is set but that directory has no navigation.md: fall through to Step 2 and warn the caller.Only runs if Step 1 found no .oac.json (or the path in it was invalid).
Check each path in order. Stop at the first that has a navigation.md file:
1. Glob: .claude/context/navigation.md → root = .claude/context (project-local)
2. Glob: context/navigation.md → root = context (project-local)
3. Glob: .opencode/context/navigation.md → root = .opencode/context (project-local)
4. Check: ~/.claude/context/navigation.md → root = ~/.claude/context (global install)
5. Glob: {PLUGIN_ROOT}/context/navigation.md → root = {PLUGIN_ROOT}/context (plugin fallback)
{PLUGIN_ROOT} is provided in your session context under OAC System Paths.
~ expands to the user's home directory ($HOME on Mac/Linux, %USERPROFILE% on Windows).
First match wins.
After a successful discovery chain match, signal the main agent (not context-scout — it is read-only) to write .oac.json at the project root only if the resolved root is project-local:
| Resolved root | Write .oac.json? |
|---|---|
.claude/context |
✅ yes |
context |
✅ yes |
.opencode/context |
✅ yes |
~/.claude/context |
❌ no (global install — applies to all projects, no per-project pointer needed) |
{PLUGIN_ROOT}/context |
❌ no (machine-specific path — don't commit this) |
Content to write at project root .oac.json:
{
"version": "1",
"context": {
"root": "{resolved_root}"
}
}
If all steps fail, do not error. Return this message to the user:
No context found for this project.
Option 1 — Download standard context bundles (recommended):
Run: /install-context
Downloads coding standards, security patterns, workflows, and more.
Option 2 — Point to docs you already have:
Create .oac.json at your project root:
{
"version": "1",
"context": { "root": "path/to/your/docs" }
}
Option 3 — Proceed without context:
Standards won't be applied — code quality may be inconsistent.
Always return these three values:
| Field | Value |
|---|---|
context_root |
Resolved path (e.g. .claude/context) |
source |
oac.json | discovery:claude | discovery:context | discovery:opencode | discovery:plugin | none |
write_oac_json |
true if main agent should create .oac.json with this root, else false |
write_oac_json: true but cannot write the file itself..oac.json..oac.json after a successful install — no discovery needed..oac.json exists, discovery chain never runs again (fast path always wins).