SiftCoder in large codebases¶
How SiftCoder maps to the Claude Code large-codebase best-practices playbook, and where to reach for a native Claude Code feature instead.
Symbol navigation: use LSP for live precision¶
mem_symbol_search is a memory-derived recall index — the symbols you have actually touched, with provenance (mem_why). It answers "where did I work on FooService, and what depended on it". It is extracted by a fast regex pass (src/memory/symbols.ts) over captured payloads; it is not a language server.
For live go to definition / find all references across a multi-language codebase, install Claude Code's code-intelligence (LSP) plugin plus the language-server binary for each language. LSP gives symbol-level precision and prevents text-pattern-matching errors.
The two are complementary, not competing:
| Need | Reach for |
|---|---|
| Where is this symbol now? Definitions, references | LSP (code-intelligence plugin) |
| Where have I been, and why is it this way? | mem_symbol_search + mem_why |
If a language server is available, prefer it for navigation and let memory recall stay focused on history and rationale.
Memory hygiene at scale¶
As a codebase grows, capturing observations on generated and vendored files dilutes retrieval. SiftCoder excludes them automatically:
- Capture exclusion — the capture hook drops paths matching the defaults (
node_modules,dist,build,coverage,target, lockfiles, minified/maps, …), plus everything in the repo's.gitignoreand.claudeignore. The daemon re-applies the defaults as an authoritative backstop. Disable withSIFTCODER_CAPTURE_IGNORE=0. - Sub-workspace scoping — in a monorepo, set
SIFTCODER_SUBSPACE(or write a.siftcoder/subspacefile) to partition memory per service, so retrieval doesn't mix unrelated subsystems. Default off — one memory per repo root, unchanged.
Context files: layered CLAUDE.md¶
/init writes a single root CLAUDE.md. Large codebases want a hierarchy — a lean root (pointers + critical gotchas) and per-subdirectory files (scoped conventions + per-dir test/build commands), loaded additively as Claude walks the tree.
- Scaffold/refresh it with
/siftcoder:codemap-claudemd. - Fold session conventions into the right file with
/siftcoder:knowledge— the Stop hook hints when a session produced conventions worth recording.
Path-scoped skills¶
The Salesforce skill family is paths:-scoped so it auto-loads only when work touches Salesforce files (**/*.cls, **/lwc/**, **/objects/**, …). In a mixed monorepo this keeps domain skills from loading where they don't apply. Explicit slash invocation still works everywhere.
Model-drift cadence¶
Instructions tuned for today's model can work against a future one. Review SiftCoder's model pins every 3–6 months — see the audit checklist in /siftcoder:siftcoder.