Repository navigation
Code vocabulary routing for auto
auto, the default search mode, now also runs hybrid (vector plus keyword search) when a query names something from the repo's code, even a name with no _ or digit, such as psycopg or PageFetcher. Before, auto caught only words with a _ or digit, such as SCREE_FIRST_SYNC_MB or R7-Q2.
Each sync builds a vocabulary of names from the repo:
- Dependency names from
requirements*.txt,pyproject.toml,package.json,go.modandCargo.toml. - Mixed-case names from imports and declarations in Python, JavaScript, TypeScript and Go, such as
PageFetcheranduseState.
Privacy
- Code is read for names only, under the same
.gitignore,.screeignore, size and symlink rules as markdown. - Only the lowercased names are stored, in the repo's local index. Code is never chunked, embedded, sent to the API or returned by
read_doc. - Names come only from where code declares or imports them, never from values, strings, comments or docstrings.
- Code under hidden folders such as
.claude/and.github/adds no names, and vendored folders such asnode_modulesandvendorare skipped. - A symlink must point to a file of its own kind: a
.mdlink to a source file is refused.
Routing quality
- A stoplist of about 350 common words keeps plain questions on
semantic. It covers question words, packages named after ordinary words (requests,markdown,sync) and mixed-case plain words (setUp,FileName). - On two repos with code and docs, most questions naming code switched to
hybrid, and no plain question did. - A word the stoplist misses can still send a plain question to
hybrid.-mode semanticis always available.
Limits
- At most 20,000 source files are read per sync. Each file adds at most 2,000 names, and the vocabulary holds at most 100,000.
- Unchanged files aren't parsed again. Names are rebuilt when the extractor changes.
- The vocabulary refreshes on a full sync: at startup, on takeover, on
reindex, or on a resync. The file watcher doesn't re-read code between syncs.
scree doctor
doctor reports the vocabulary size and how many names also appear in the notes. doctor -v prints a sample, showing only names that also appear in the notes.
Upgrading
- The index schema moves to v4. It upgrades automatically when an index is opened, and the next sync fills in the vocabulary.
- Restart Claude Code sessions, or reconnect scree with
/mcp, so they run the new binary. An older binary can still open a v4 index, but it doesn't keep the vocabulary.
Other
- A test that timed out on slow macOS runners now has a longer deadline.
- The docs at https://scree.jrpko.dev are updated for this release.
Full changelog: v0.1.0...v0.2.0
Changelog
- f00d335 Docs: v0.1.0 is cut; drop it from the registry to-do
- 5dc9a9c Route auto to hybrid on names from the repo's code
- cc10a9c Tests: give the stale-path writer test 15s
- eda5346 Vocab: close the markdown-symlink leak and tighten the vocabulary
- b38c04c Vocab: count a code name only when the notes mention it
- 27903f2 Vocab: route on the vocabulary alone; gate only doctor's sample
- 756baa9 Vocab: take names only from name positions