Repository navigation
feat: add repo map codebase intelligence #1867
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 6 commits
Commits
Show all changes
20 commits
Select commit
Hold shift + click to select a range
71296b2
feat: add Codebase Intelligence — repo map with PageRank-ranked struc…
gnanam1990 a6dd10c
fix(repomap): invalidate rendered cache on file edits + Windows test fix
gnanam1990 e812baa
fix(repomap): expand directory focus paths
jatmn d5b6266
fix(repomap): satisfy deadcode check
jatmn b17fa09
Fix repo map review findings
jatmn e94c978
Resolve remaining repo map review findings
jatmn 2c0774f
fix(repomap): address review findings
jatmn 5d71793
fix(repomap): address review findings
jatmn 2a20b18
fix(repomap): resolve smoke and review follow-ups
jatmn 6518742
fix(repomap): preserve cached tag order
jatmn 56e0e34
fix(repomap): resolve review follow-ups
jatmn 1144813
fix(repomap): satisfy query promise lint
jatmn 626183a
Fix repo map context timeout cleanup
jatmn 5b7d2ed
fix: address repo map review findings
jatmn 29e1401
fix: cancel timed-out repo map context builds
jatmn 6c676bc
fix(repomap): preserve git file path whitespace
jatmn 7355fa3
fix(repomap): handle graph and parsing edge cases
jatmn 47af2b5
fix(repomap): preserve shell token positions
jatmn 058cb04
fix(repomap): respect configured cache home
jatmn db02bd7
fix(repomap): address review findings
jatmn File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,67 @@ | ||
| # Codebase Intelligence — Repo Map | ||
|
|
||
| The repo map feature gives the AI model structural awareness of your codebase at the start of each session. Instead of the model needing to explore the repository with `Grep`, `Glob`, and `Read` calls, it starts with a ranked summary of the most important files and their key signatures. | ||
|
|
||
| ## How it works | ||
|
|
||
| 1. **File enumeration** — Lists all tracked files via `git ls-files` (falls back to a manual directory walk when not in a git repo) | ||
| 2. **Symbol extraction** — Parses each supported source file with tree-sitter to extract function, class, type, and interface definitions, plus cross-file references | ||
| 3. **Reference graph** — Builds a directed graph where an edge from file A to file B means A references a symbol defined in B. Edges are weighted by reference count multiplied by the IDF (inverse document frequency) of the symbol name — common names like `get`, `set`, `value` contribute less | ||
| 4. **PageRank** — Ranks files by structural importance using PageRank. Files imported by many others rank highest | ||
| 5. **Rendering** — Walks ranked files top-down, emitting file paths and definition signatures, stopping when the token budget is reached | ||
|
|
||
| Results are cached to disk (`~/.openclaude/repomap-cache/`) keyed by file path, mtime, and size. Only changed files are re-parsed on subsequent runs. | ||
|
|
||
| ## Supported languages | ||
|
|
||
| - TypeScript (`.ts`, `.tsx`) | ||
| - JavaScript (`.js`, `.jsx`, `.mjs`, `.cjs`) | ||
| - Python (`.py`) | ||
|
|
||
| Additional language grammars will be added in future releases. | ||
|
|
||
| ## Enabling auto-injection | ||
|
|
||
| The repo map is gated behind the `REPO_MAP` feature flag, **off by default**. To enable auto-injection into the session context: | ||
|
|
||
| Set the environment variable before launching: | ||
|
|
||
| ```bash | ||
| REPO_MAP=1 openclaude | ||
| ``` | ||
|
|
||
| Or add it to your shell profile for persistent use. | ||
|
|
||
| When enabled, the map is built once per session and prepended to the system context alongside git status and CLAUDE.md content. The auto-injected map uses a 1024-token budget. | ||
|
|
||
| Auto-injection is skipped in: | ||
| - Bare mode (`--bare`) | ||
| - Remote sessions (`CLAUDE_CODE_REMOTE`) | ||
|
|
||
| ## The /repomap slash command | ||
|
|
||
| The `/repomap` command is always available regardless of the feature flag. It lets you inspect and tune the map interactively. | ||
|
|
||
| ```text | ||
| /repomap # Show the map with default settings (2048 tokens) | ||
| /repomap --tokens 4096 # Increase the token budget for a larger map | ||
| /repomap --focus src/tools/ # Boost specific paths in the ranking | ||
| /repomap --focus src/context.ts # Can use multiple --focus flags | ||
| /repomap --stats # Show cache statistics | ||
| /repomap --invalidate # Clear cache and rebuild from scratch | ||
| ``` | ||
|
|
||
| ## The RepoMap tool | ||
|
|
||
| The model can also call the `RepoMap` tool on demand during a session. This is useful when: | ||
| - The model needs structural context mid-conversation | ||
| - The user asks about specific areas (the model can pass `focus_files` or `focus_symbols`) | ||
| - A larger token budget is needed than the auto-injected default | ||
|
|
||
| ## Known limitations | ||
|
|
||
| - **Signatures only** — The map shows function/class/type declarations, not implementations. The model still needs `Read` to see function bodies. | ||
| - **Cold build time** — First build on large repos (2000+ files) can take 20-30 seconds due to WASM-based parsing. Subsequent builds use the disk cache and complete in under 100ms. | ||
| - **Language coverage** — Only TypeScript, JavaScript, and Python are supported. Files in other languages are skipped. | ||
| - **TypeScript references** — The TypeScript tree-sitter query captures type annotations and `new` expressions as references, but not plain function calls. This means the ranking slightly favors type-heavy hub files. | ||
| - **Git dependency** — File enumeration uses `git ls-files` by default. Non-git repos fall back to a directory walk with hardcoded exclusions. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| /** | ||
| * /repomap command - minimal metadata only. | ||
| * Implementation is lazy-loaded from repomap.ts to reduce startup time. | ||
| */ | ||
| import type { Command } from '../../commands.js' | ||
|
|
||
| const repomap = { | ||
| type: 'local', | ||
| name: 'repomap', | ||
| description: | ||
| 'Show or configure the repository structural map (codebase intelligence)', | ||
| isHidden: false, | ||
| supportsNonInteractive: true, | ||
| load: () => import('./repomap.js'), | ||
| } satisfies Command | ||
|
|
||
| export default repomap |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.