Glancey
这个项目已经日落了。 Claude底层模型的改进使得Glancey提供的语义代码搜索功能不再必要。Claude Code现在能够很好地处理代码库理解,因此外部索引层几乎没有增加任何价值。该软件包将继续在npm上供现有用户使用,但不计划进一步开发或维护。感谢所有尝试过的人!
一个MCP插件,为Claude code和其他AI编码代理添加语义代码搜索,为它们提供整个代码库的深层上下文。
特性
- 语义代码搜索:自然语言查询在整个代码库中定位相关代码
- 代币节省:通过仅返回相关代码块,大大减少了上下文使用
- 多个嵌入后端:谷歌双子座(免费)或Ollama(本地)
- LanceDB矢量存储:通过混合BM25+密集匹配实现快速高效的矢量搜索
- MCP兼容:适用于Claude Code、Cursor和其他MCP兼容工具
- Web仪表板:实时监控索引状态、令牌节省和使用统计数据
- 珠子集成:如果您的项目使用 珠子
安装
快速安装(推荐)
将Glancey添加到Claude代码中:
claude mcp add --scope user --transport stdio glancey -- npx -y glancey重新启动Claude Code以开始使用语义搜索。
全局安装(替代)
为了更快的启动(每次运行时不检查npm):
npm install -g glancey这会自动将Glancey注册到Claude Code。手动更新 npm update -g glancey.
手动注册
如果自动注册不起作用,请手动添加到克劳德代码中:
claude mcp add --scope user --transport stdio glancey -- npx -y glancey@latest验证安装
在Claude Code中,运行 /mcp 在MCP服务器列表中查看Glancey。
初始化项目(推荐)
安装Glancey后,运行 /init_project 在Claude Code中设置您的项目:
/init_project这将创建:
- CLAUDE.md -AI代理如何使用Glancey工具的说明
- 提交后挂钩 -当提交绕过
commit工具 - 斜杠命令 -
/glancey,/dashboard,/agents,以及/init-project
钩子安装在 .husky/ 如果你使用赫斯基,否则 .git/hooks/.
提示: 如果您的代理没有使用Glancey工具(转而使用grep/find),请运行/glancey提醒一下。启动新代理(子代理、工作树等)时,告诉他们运行/glancey在开始任务之前,让他们知道使用Glancey的语义搜索而不是手动探索。
斜杠命令
Glancey将以下斜线命令安装到 .claude/commands/ 用于克劳德代码:
| 命令 | 描述 |
|---|---|
/glancey | 简要展示工具使用技巧和快速参考。使用此功能提醒代理使用语义搜索而不是grep/find。 |
/dashboard | 在浏览器中打开lookey web仪表板,实时监控索引状态、令牌节省和使用情况。 |
/agents | 启动1-10个并行的Claude Code代理,每个代理在一个 珠子 在自己的git工作树中执行任务。支持 --auto-merge, --count N, --model MODEL,以及 --budget N 旗帜。 |
/init-project | 在当前项目中初始化lookey——设置CLAUDE.md、提交后钩子和斜线命令。 |
项目级安装
对于特定于项目的MCP配置,添加 .mcp.json 到您的项目根目录:
{
"mcpServers": {
"glancey": {
"command": "npx",
"args": ["-y", "glancey@latest"]
}
}
}项目配置
创建一个 .glancey.json 项目根目录中的文件,用于自定义索引行为。所有选项都是可选的——Glancey使用合理的默认值即可开箱即用。
最小配置
对于大多数项目,您只需指定要包含的内容:
{
"patterns": ["**/*.ts", "**/*.js"],
"instructions": "This is a TypeScript monorepo. Use semantic search to find relevant utilities."
}完整配置示例
{
"patterns": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
"excludePatterns": ["**/node_modules/**", "**/dist/**", "**/*.test.ts"],
"embedding": {
"backend": "gemini"
},
"chunking": {
"maxLines": 100,
"overlap": 20
},
"search": {
"semanticWeight": 0.7,
"keywordWeight": 0.3
},
"dashboard": {
"enabled": true,
"port": 24300,
"openBrowser": true
},
"instructions": "Project-specific instructions for AI agents working with this codebase."
}配置选项参考
| 选项 | 描述 | 默认值 |
|---|---|---|
patterns | 要索引的文件的全局模式 | ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.go", "**/*.rs", "**/*.java", "**/*.rb", "**/*.php", "**/*.c", "**/*.cpp", "**/*.h", "**/*.hpp", "**/*.cs", "**/*.swift", "**/*.kt"] |
excludePatterns | 要排除的文件的全局模式 | ["**/node_modules/**", "**/dist/**", "**/.git/**", "**/build/**", "**/target/**", "**/__pycache__/**", "**/venv/**", "**/.venv/**", "**/vendor/**", "**/*.min.js", "**/*.min.css"] |
embedding.backend | 嵌入提供程序: "gemini" 或 "ollama" | 基于可用的API密钥的自动检测 |
embedding.model | 覆盖默认嵌入模型 | 后端默认 |
embedding.ollamaConcurrency | 最大并发Ollama请求数(1-200) | 100 |
indexing.batchSize | 每个嵌入批处理请求的文本(1-1000) | 200 |
chunking.maxLines | 每个块的最大行数 | 100 |
chunking.overlap | 块之间的重叠线用于上下文连续性 | 20 |
search.semanticWeight | 语义(向量)相似度权重(0-1) | 0.7 |
search.keywordWeight | BM25关键字匹配权重(0-1) | 0.3 |
dashboard.enabled | 启用web仪表板 | true |
dashboard.port | 仪表板服务器的端口 | 24300 |
dashboard.openBrowser | 仪表板启动时自动打开浏览器 | true |
instructions | 返回的项目特定说明 get_project_instructions | 没有 |
默认行为
没有a .glancey.json 文件,Glancey将:
- 索引常用源代码文件(TypeScript、JavaScript、Python、Go、Rust、Java、Ruby、PHP、C/C++、C#、Swift、Kotlin)
- 排除构建工件、依赖关系和生成的文件
- 如果满足以下条件,请使用Gemini嵌入
GEMINI_API_KEY已设置,否则使用当地Olamaqwen3-embedding:0.6b - 将代码拆分为100行块,重叠20行
- 使用70%语义/30%关键字权重的混合搜索
- 在端口24300上启动仪表板
环境变量
设置这些环境变量以配置嵌入后端:
| 变量 | 描述 | 默认值 |
|---|---|---|
GEMINI_API_KEY | Google Gemini API云嵌入密钥(免费套餐可用) | 无 |
OLLAMA_URL | 本地嵌入的自定义Ollama服务器URL | http://localhost:11434 |
GLANCEY_PROJECT | 覆盖项目路径以索引 | 当前工作目录 |
后端选择优先级:
- 如果
embedding.backend在配置中设置,使用该后端 - 如果
GEMINI_API_KEY已设置,请使用Gemini - 回退到Ollama(必须在当地运行)
Glancey如何节省代币
AI编码代理通常需要读取整个文件来理解你的代码库,这会消耗大量的上下文令牌。Glancey通过以下方式大幅减少了代币使用:
| 无眩光 | 有眩光 | 节省 |
|---|---|---|
| 读取5-10个文件以查找身份验证代码(约5000行) | search_code 返回3个块(约150行) | ~97% |
| 读取整个文件以了解结构 | get_symbols_overview 返回紧凑列表 | ~80-90% |
| 浏览许多文件以了解代码库 | summarize_codebase + list_concepts | ~95% |
| 读取并比较文件中的重复项 | search_similar 返回目标结果 | ~90% |
代币储蓄仪表板
web仪表板显示实时令牌节省统计数据:
- 预计节省的代币:使用语义搜索避免的令牌总数
- 效率:保存的潜在代币百分比
- 文件无法读取:由于目标搜索而跳过的文件计数
- 跟踪操作:有助于节省的搜索操作数量
运作原理
- 分块:你的代码库被拆分为语义块(函数、类等)
- 嵌入:每个块都转换为向量嵌入
- 搜索:查询只查找最相关的块,而不是整个文件
- 返回:只有匹配的块被发送到AI,保存上下文令牌
建筑
┌─────────────────────────────────────────────────────────────┐
│ MCP Server (index.ts) │
│ Exposes tools: index_codebase, search_code │
└─────────────────┬───────────────────────────────────────────┘
│
┌─────────────────▼───────────────────────────────────────────┐
│ CodeIndexer (indexer.ts) │
│ - AST-aware chunking for supported languages │
│ - Incremental indexing (only re-index changed files) │
│ - Hybrid search (semantic + keyword scoring) │
└─────────────────┬───────────────────────────────────────────┘
│
┌─────────────────▼───────────────────────────────────────────┐
│ Embedding Backends (embeddings/) │
│ Gemini │ Ollama (local) │
└─────────────────┬───────────────────────────────────────────┘
│
┌─────────────────▼───────────────────────────────────────────┐
│ LanceDB Vector Store │
│ Stored in .glancey/ directory │
└─────────────────────────────────────────────────────────────┘嵌入后端设置
Glancey会自动选择最佳可用后端(按优先级顺序):
- 谷歌双子星 (如果
GEMINI_API_KEY已设置,可用免费等级)
export GEMINI_API_KEY=AIza...- 奥拉玛 (推荐给大多数用户-免费、本地、无费率限制)
Ollama设置(推荐)
Ollama提供免费的本地嵌入,没有API速率限制。非常适合索引大型代码库。
要求: Ollama 0.2.0或更新版本(用于批量嵌入API)
- 安装Ollama 从 ollama.com
- 验证版本 (必须为0.2.0+):
ollama --version- 拉动嵌入模型:
ollama pull qwen3-embedding:0.6b- 验证它是否正常工作:
ollama run qwen3-embedding:0.6b "test"就是这样!当未设置Gemini API密钥时,Glancey将自动使用Ollama。
模型选项
| 型号 | 尺寸 | 质量 | 最适合 |
|---|---|---|---|
qwen3-embedding:0.6b | 639MB | 良好 | 大多数用户(默认) |
qwen3-embedding:4b | 2.5GB | 更好 | 16GB+RAM的用户 |
qwen3-embedding:8b | 4.7GB | 最佳 | 32GB+RAM的用户 |
要使用其他型号,请添加到您的 .glancey.json:
{
"embedding": {
"backend": "ollama",
"model": "qwen3-embedding:4b"
}
}看 项目配置 对于所有配置选项,包括如何指定后端。
用法
安装后,您将可以访问这些工具:
index_codebase
索引您的代码库以进行语义搜索:
> index_codebase
Indexed 150 files, created 800 chunks.使用自定义图案:
> index_codebase(patterns: ["**/*.py"], excludePatterns: ["**/tests/**"])search_code
使用自然语言搜索:
> search_code(query: "authentication middleware")
## Result 1: src/middleware/auth.ts:1-50
...get_index_status
检查索引状态:
> get_index_status
{
"indexed": true,
"fileCount": 150,
"chunkCount": 800,
"lastUpdated": "2024-12-27T12:00:00Z"
}clear_index
清除索引:
> clear_index
Index cleared.get_project_instructions
从配置中获取特定于项目的说明:
> get_project_instructions
Use semantic search for exploring this codebase. Always run tests before committing.仪表盘
Glancey包括一个用于监控索引状态和使用情况的web仪表板。
访问仪表板
当MCP服务器运行时,仪表板会自动启动,可在以下位置访问:
http://127.0.0.1:24300浏览器在启动时自动打开(可配置)。
仪表板功能
- 索引状态:文件索引、块创建、上次更新时间
- 嵌入后端:当前后端和索引路径
- 配置:项目路径、块设置、搜索权重
- 文件模式:包括/排除正在使用的模式
- 命令用法:MCP工具使用的实时图表(使用 charts.css)
- 珠子集成:问题跟踪器状态和就绪任务(如果配置了珠子)
仪表板配置
通过配置仪表板 dashboard 选项在 .glancey.json。参见 配置选项参考 了解详情。
运作原理
- 索引:代码文件被分块为~100个重叠的线段
- 嵌入:使用您选择的后端将每个块转换为向量
- 存储:矢量存储在LanceDB中(
.glancey/目录) - 搜索:嵌入自然语言查询,并将其与存储的向量进行匹配
支持的语言
TypeScript、JavaScript、Python、Go、Rust、Java、Ruby、PHP、C/C++、C#、Swift、Kotlin等。
故障排除
“没有可用的嵌入后端”
此错误意味着没有设置API密钥,Ollama无法运行/访问。
解决:
- 设置Ollama(推荐):
# Install from https://ollama.com, then:
ollama pull qwen3-embedding:0.6b- 或者设置Gemini API密钥:
export GEMINI_API_KEY=AIza...
“嵌入维度不匹配”
当在嵌入后端之间切换时(例如,从Gemini到Ollama)会发生这种情况。每个后端产生不同的向量维度。
解决方案: 强制完全重新索引:
> index_codebase(forceReindex: true)索引速度慢
大型代码库最初可能需要时间进行索引。
提示:
- 使用
excludePatterns跳过不必要的目录(测试、生成的代码) - Ollama在当地使用更快,但需要更多资源
- 后续运行使用增量索引(仅更改文件)
指数腐败
如果您遇到奇怪的搜索结果或错误:
解决方案: 清除并重建索引:
> clear_index
> index_codebase或手动删除 .glancey/ 目录和重新索引。
许可证
麻省理工学院-参见 许可证 了解详情。
贡献
欢迎投稿!请阅读我们的 贡献指南 在提交PR之前。
相关项目
积分
内置:
灵感来源:
