AI代理的持久代码索引。确切地问你需要什么。
   ](https://www.nuget.org/packages/CodeCompress.Server)  
______________________________________________________________________
什么是CodeCompress?
CodeCompress是一个 代码智能工具 --可用作两者 MCP服务器 和一个 独立CLI --这赋予了AI编码代理 代码库的即时记忆.使用适合您工作流程的任何界面:MCP服务器直接与Claude Code等AI工具集成,而CLI在任何有终端的地方都可以工作。
代理不会在每次对话开始时扫描每个文件,而是查询一个持久的SQLite索引,以获取他们所需的符号、类型和依赖关系——只需一小部分令牌。
| 无CodeCompress | 有CodeCompress |
|---|---|
| Agent读取50多个文件以了解您的项目 | Agent调用 project_outline -获得约3–8k代币的完整API表面 |
| 每个会话在上下文上浪费了30-150k+个令牌 | 上下文加载令牌减少了80-90% |
| 子代理各自独立扫描相同的文件 | 所有代理共享一个持久索引 |
| 更大的代码库=每次等待时间更长 | 首次运行后索引时间恒定(增量) |
快速开始
先决条件
- .NET 10 SDK 或更高版本
选项A:MCP服务器(推荐用于AI工具)
选择你的工具并添加MCP服务器——就是这样。
Claude Code
claude mcp add --transport stdio codecompress -- dnx CodeCompress.Server --yesVS Code / GitHub Copilot
创建 .vscode/mcp.json 在您的项目中:
{
"servers": {
"codecompress": {
"type": "stdio",
"command": "dnx",
"args": ["CodeCompress.Server", "--yes"]
}
}
}Claude Desktop
增添 claude_desktop_config.json:
{
"mcpServers": {
"codecompress": {
"command": "dnx",
"args": ["CodeCompress.Server", "--yes"]
}
}
}Cursor
创建 .cursor/mcp.json 在您的项目中:
{
"mcpServers": {
"codecompress": {
"type": "stdio",
"command": "dnx",
"args": ["CodeCompress.Server", "--yes"]
}
}
}Windsurf
增添 ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"codecompress": {
"command": "dnx",
"args": ["CodeCompress.Server", "--yes"]
}
}
}Other MCP clients
CodeCompress使用stdio传输。为您的客户指出:
dnx CodeCompress.Server --yesShare with your team (.mcp.json)
将此文件提交到仓库的根目录。Claude Code和VS Code会自动获取它——每个团队成员都可以在零设置的情况下获得CodeCompress:
{
"mcpServers": {
"codecompress": {
"type": "stdio",
"command": "dnx",
"args": ["CodeCompress.Server", "--yes"]
}
}
}选项B:CLI(用于没有MCP的终端、脚本和代理)
作为全局安装。NET工具:
dotnet tool install -g CodeCompress然后从任何终端使用它:
codecompress index --path /path/to/project
codecompress outline --path /path/to/project
codecompress search --path /path/to/project --query "MyClass"CLI和MCP服务器共享同一个索引数据库,可以互换使用。跑 codecompress --help 对于所有命令,或 codecompress agent-instructions 为AI代理生成即贴指令块。
选项C:Web仪表板(本地UI)
启动暗模式的ExpressRoute仪表板,从浏览器浏览索引存储库、搜索符号并触发重新索引:
codecompress web打开时间 http://localhost:7070 默认情况下。选项:
codecompress web --port 8080 # custom port
codecompress web --open # open browser automatically
codecompress web --bind 0.0.0.0 # bind to all interfaces (LAN access)仪表板显示相同的全局 ~/.code-compress/index.db 作为MCP服务器和CLI,无需单独设置。
要更新,请执行以下操作: dotnet tool update -g CodeCompress
2.为你的项目建立索引
你的AI代理会打电话给你 index_project 当它需要代码库上下文时自动执行。您还可以显式触发它:
index_project(path: "/path/to/your/project")第一次运行做了一个 全文索引 --解析每个源文件并将符号存储在SQLite中。后续运行是 渐进的 --只有SHA-256哈希值更改的文件才会被重新解析。
3.开始编码
就是这样。你的代理现在可以即时访问你的代码库结构。它将自动使用以下工具 project_outline, get_symbol,以及 search_symbols 而不是读取原始文件。
运作原理
AI Agent CodeCompress Server ──┐
│
Developer CodeCompress CLI ──────┤
│
Index Engine
/ \
Language SQLite Store
Parsers ~/.code-compress/
(C#, Java, Go, TS, index.db
Rust, Python, …)MCP服务器和CLI共享同一个索引数据库——您可以使用其中一个进行索引,使用另一个进行查询。
- 索引 --CodeCompress遍历您的源文件,对每个文件进行哈希(SHA-256),并使用特定语言的解析器提取符号(函数、类、类型、常量)和依赖关系(导入/要求)。
- 商店 --所有内容都会进入本地SQLite数据库
.code-compress/index.db在项目目录中。该数据库使用FTS5虚拟表进行快速全文搜索。
- 查询 --代理调用MCP工具以获取压缩轮廓,按名称查找特定符号,在代码库中搜索,或检查自快照以来发生了什么变化。
- 与时俱进 --重新索引是增量的。只有内容哈希值更改的文件才会被重新解析。呼叫
index_project在任何会话开始时,或在进行更改后,它都会在几秒钟内完成。
保持索引最新
CodeCompress旨在以最小的努力保持最新状态:
| 场景 | 该怎么办 |
|---|---|
| 启动新的代理会话 | 呼叫 index_project --如果没有任何变化,则需要几秒钟 |
| 编辑文件后 | 呼叫 index_project 再次,只有更改的文件才会被重新解析 |
| 跨会话跟踪更改 | 使用 snapshot_create 上班前,然后 changes_since 看看有什么不同 |
| 强制重新索引 | 呼叫 invalidate_cache 然后 index_project |
CLAUDE.md/系统提示提示: 添加如下指令 *“每次会话开始时,请致电index_project要刷新代码库索引,请使用project_outline了解项目结构。"* 这可以确保您的代理始终有一个新的索引。
可用的MCP工具
索引
| 工具 | 它做什么 |
|---|---|
index_project | 为项目目录建立索引(默认情况下为增量) |
snapshot_create | 创建一个命名快照以跟踪随时间的变化 |
invalidate_cache | 强制对下一个进行全面重新索引 index_project 呼叫 |
list_repos | 列出全局数据库中索引的所有项目 |
上下文组装
| 工具 | 它做什么 |
|---|---|
assemble_context | 一键式上下文构建器 --在令牌预算内搜索符号、检索源代码并构建结构化概述。将5-10次手动工具调用替换为1。提供一个查询+可选的活动文件,用文件树、源代码块和令牌使用统计数据返回Markdown。大符号自动汇总。 |
何时使用assemble_context: 在任务开始时,当你需要广泛的背景时。对于特定符号的外科检索,请使用get_symbol或expand_symbol直接。
查询
| 工具 | 它做什么 |
|---|---|
project_outline | 整个项目的压缩API表面-类型、函数、签名 |
get_symbol | 按名称检索单个符号的完整源代码(支持 Parent:Child 合格名称) |
get_symbols | 在一次呼叫中批量检索多个符号(最多50个) |
get_module_api | 单个文件/模块的完整公共API |
expand_symbol | 从大型类中提取单个方法(比大型类少约60%的标记 get_symbol) |
get_hot_path | 仅返回符号中包含特定标识符和周围上下文的行(令牌比正文少10-40倍) |
search_symbols | 在符号名称、签名、父类型和文档之间进行全文搜索。当精确的FTS5返回零结果时,包含匹配的自动重试。 |
search_text | 跨文件内容的原始文本搜索(使用glob过滤) |
topic_outline | 基于主题的搜索,结果以大纲格式分组 |
find_references | 在代码库中查找对符号的所有引用 |
更改跟踪和导航
| 工具 | 它做什么 |
|---|---|
changes_since | 增量报告——自快照以来更改了哪些文件/符号 |
file_tree | 带注释的项目文件树 |
dependency_graph | 导入/要求文件的依赖关系图 |
project_dependencies | 项目间依赖关系图(.NET解决方案) |
相关性分析
| 工具 | 它做什么 |
|---|---|
blast_radius | 反向BFS——如果给定的文件或符号发生更改,则查找所有受影响的文件 |
find_unused_symbols | 尽力而为的死代码检测——没有传入引用的公共符号 |
服务器管理
| 工具 | 它做什么 |
|---|---|
stop_server | 优雅地关闭服务器以释放资源和DLL锁 |
注: 像Claude Code这样的MCP客户端会在下一次工具调用时自动重启服务器,因此停止它总是安全的。
MCP提示
CodeCompress提供4个预构建的工作流提示。在Claude Code和其他支持提示的MCP客户端中,您可以按名称调用它们,将分步工作流指南直接加载到您的上下文中。
| 提示 | 工作流 |
|---|---|
explore_codebase | index_project → project_outline → search_symbols → get_symbol |
find_impact | index_project → blast_radius → find_references → dependency_graph |
review_changes | snapshot_create → _\[进行更改\]_ → index_project → changes_since |
debug_symbol | search_symbols → get_hot_path → get_symbol → find_references |
每个提示符返回一个 ChatRole.User 该消息包含完整的工作流程、每个工具的令牌估计以及何时选择一种工具而非另一种工具的指导。
CLI: 跑codecompress prompts列出所有提示,或codecompress prompts --name explore_codebase打印特定提示的全文。
支持的语言
| 语言 | 扩展 | 状态 | 解析器 |
|---|---|---|---|
| 卢奥(Roblox) | .luau, .lua | 可用 | 基于正则表达式/模式 |
| CNET | .cs | 可用 | 树保姆AST |
| 变量/剃刀 | .razor | 可用 | 指令提取+C#委托 |
| 地形/HCL | .tf, .tfvars | 可用 | 基于正则表达式/模式 |
Java .java | 可用 | 树保姆AST | |
| 去吧 | .go | 可用 | 树保姆AST |
| Types/JavaScript | .ts, .tsx, .js, .jsx, .mjs, .cjs | 可用 | 树保姆AST |
| 生锈 | .rs | 可用 | 树保姆AST |
python .py, .pyi | 可用 | 树保姆AST | |
| .NET项目文件 | .csproj, .fsproj, .props | 可用 | 基于XML |
| JSON配置 | .json | 可用 | 基于结构 |
| YAML配置 | .yaml, .yml | 可用 | 基于结构 |
添加新语言需要实现一个 ILanguageParser 接口——存储、索引或MCP工具没有变化。
我的数据存储在哪里?
所有索引数据都存储在 单一全局数据库 在您的主目录中:
~/.code-compress/index.db- 一个SQLite数据库在所有索引项目中共享
- 包含:文件元数据、解析符号、依赖关系、FTS5搜索索引、每个索引项目的快照
- 没有数据离开您的机器 --无网络呼叫,无遥测
- 项目目录中没有存储任何内容——没有
.gitignore所需条目
要清除特定项目的索引,请调用 invalidate_cache (MCP)或 codecompress invalidate-cache --path (CLI)。要列出所有索引项目,请使用 list_repos (MCP)或 codecompress list (CLI)。
安全
- 只读 --永远不要修改源文件
- 路径遍历预防 --根据项目根进行规范化和验证的所有文件路径
- SQL注入预防 --所有查询都使用参数化语句
- 快速注射防护措施 --工具输出是结构化数据;原始输入永远不会回显为自由文本
- 仅限本地 --没有网络调用,没有遥测,你的代码留在你的机器上
代理配置
将以下内容粘贴到您的 CLAUDE.md, .cursorrules、系统提示或代理配置文件,以教导AI代理如何使用CodeCompress:
提示: 您还可以通过运行以下命令来生成此块 codecompress agent-instructions 如果您安装了CLI。# CodeCompress — Agent Instructions
CodeCompress is a code intelligence tool that provides compressed, symbol-level access
to the indexed codebase. Use it as your PRIMARY tool for code discovery instead of reading
raw files — it saves 80-90% tokens.
## Workflow
1. **Index first** — `index_project` (MCP) or `codecompress index --path ` (CLI).
Builds/updates the symbol database. Incremental — only changed files are re-parsed.
2. **Assemble context** — `assemble_context` / `codecompress assemble` for one-shot task context.
Combines search + source retrieval + file overview within a token budget.
3. **Get an overview** — `project_outline` / `codecompress outline` for the full codebase structure.
4. **Search** — `search_symbols` / `codecompress search` for FTS5 full-text symbol search.
`search_text` / `codecompress search-text` for raw file content search.
5. **Read symbols** — `get_symbol` / `codecompress get-symbol` to retrieve exact source code.
`expand_symbol` / `codecompress expand-symbol` for a single method (~60% fewer tokens).
6. **Find references** — `find_references` / `codecompress find-references` to trace usage.
7. **Dependencies** — `dependency_graph` / `codecompress deps` for import relationships.
## Tips
- Add `--json` to any CLI command for machine-readable output (snake_case keys).
- The index persists at `~/.code-compress/index.db` (global) — shared between MCP server and CLI.
- PREFER these tools over raw file reading. They are faster, more precise, and dramatically
reduce token consumption.从源头构建
git clone https://github.com/MCrank/code-compress.git
cd code-compress
dotnet build CodeCompress.slnx
dotnet test --solution CodeCompress.slnx要在本地运行MCP服务器:
dotnet run --project src/CodeCompress.Server要配置客户端以使用本地版本,请执行以下操作:
claude mcp add --transport stdio codecompress -- dotnet run --project /absolute/path/to/src/CodeCompress.ServerCLI工具
CLI提供与MCP服务器相同的功能——使用适合您工作流程的功能。两者共享相同 ~/.code-compress/index.db 全球数据库。
安装
dotnet tool install -g CodeCompress要更新到最新版本:
dotnet tool update -g CodeCompress用法
# Index a project (must be run first)
codecompress index --path /path/to/project
# Assemble task-relevant context in one call (new!)
codecompress assemble --path /path/to/project --query "authentication" --budget 30000
# Get a compressed codebase overview
codecompress outline --path /path/to/project
# Search for symbols (auto-retries with contains-match on zero results)
codecompress search --path /path/to/project --query "Authentication*"
# Retrieve a specific symbol's source code
codecompress get-symbol --path /path/to/project --name MyClass:MyMethod
# Search raw file contents
codecompress search-text --path /path/to/project --query "TODO"
# Retrieve a nested method without loading the whole class (~60% token savings)
codecompress expand-symbol --path /path/to/project --name MyClass:MyMethod
# Return only lines matching specific identifiers within a symbol (~10-40x fewer tokens)
codecompress get-hot-path --path /path/to/project --name MyClass:MyMethod --identifiers "userId,status"
# Batch retrieve multiple symbols at once
codecompress get-symbols --path /path/to/project --names "Foo,Bar,Baz"
# Get the public API surface of a single file
codecompress get-module-api --path /path/to/project --module src/Core/Foo.cs
# Search by topic — returns results in outline format
codecompress topic-outline --path /path/to/project --topic authentication
# Find all references to a symbol across the codebase
codecompress find-references --path /path/to/project --name ISymbolStore
# View directory structure (no index required)
codecompress file-tree --path /path/to/project
# Show file-level dependency graph
codecompress deps --path /path/to/project
# Show inter-project dependencies (.NET solutions)
codecompress project-deps --path /path/to/project
# Snapshot + change tracking
codecompress snapshot --path /path/to/project --label before-refactor
codecompress changes --path /path/to/project --label before-refactor
# Delete index to force full re-index
codecompress invalidate-cache --path /path/to/project
# Launch the web dashboard
codecompress web [--port 7070] [--bind localhost] [--open]JSON输出
添加 --json 对于机器可读JSON输出的任何命令(匹配MCP服务器输出的snake_case密钥):
codecompress search --path /path/to/project --query "Parser" --json代理说明
为AI代理生成可粘贴指令块:
codecompress agent-instructions这将输出一个可以粘贴到其中的markdown块 CLAUDE.md、系统提示或代理配置文件,以教导AI代理如何使用CLI进行代码发现。
CLI到MCP的等效性
| CLI命令 | MCP工具 | 说明 |
|---|---|---|
index | index_project | 构建/更新符号数据库 |
assemble | assemble_context | 令牌预算内的一次性上下文组装 |
outline | project_outline | 压缩代码库概述 |
get-symbol | get_symbol | 检索符号源代码 |
expand-symbol | expand_symbol | 提取嵌套符号(令牌减少约60%) |
get-hot-path | get_hot_path | 仅返回与符号内的标识符匹配的行 |
get-symbols | get_symbols | 批量检索多个符号 |
get-module-api | get_module_api | 文件的公共API表面 |
search | search_symbols | FTS5符号搜索(自动包含匹配回退) |
search-text | search_text | FTS5原始内容搜索 |
topic-outline | topic_outline | 大纲格式的基于主题的搜索 |
find-references | find_references | 查找所有符号引用 |
changes | changes_since | 自快照以来的增量 |
snapshot | snapshot_create | 创建索引快照 |
file-tree | file_tree | 目录树 |
deps | dependency_graph | 文件级依赖关系图 |
project-deps | project_dependencies | 项目间依赖关系(.NET) |
invalidate-cache | invalidate_cache | 强制全面重新索引 |
web | -- | 启动本地的DateTimeweb仪表板 |
