似曾相识
    
对Claude Code会话历史进行语义搜索。通过意义而不仅仅是关键字来询问过去的对话。
似曾相识 是一个 MCP服务器 它对Claude Code JSONL会话进行索引,并直接从Claude Code提供混合搜索(矢量+全文)。
运作原理
~/.claude/projects/*/ deja index index.db
*.jsonl ──────────────► (SQLite + vec + FTS5)
embeddings
│
│ deja serve (MCP stdio)
▼
Claude Code
"search past sessions"- 索引 --解析JSONL会话文件,提取会话回合,嵌入
multilingual-e5-small,存储在SQLite中 - 服务 --MCP服务器打开索引并通过stdio传输回答搜索查询
搜索通过互易秩融合将向量KNN(语义相似性)和FTS5(关键字匹配)结合起来。
安装
pip install dejasearch或来源:
git clone https://github.com/CynepMyx/deja.git
cd deja
pip install -e .第一次运行下载嵌入模型(约117 MB)。
用法
构建索引
deja index # incremental — only new/changed files
deja index --reindex # full rebuild扫描全部 ~/.claude/projects/*/*.jsonl 文件夹。
添加到克劳德代码
添加 ~/.claude.json 在...之下 mcpServers:
"deja": {
"type": "stdio",
"command": "/path/to/deja/.venv/Scripts/deja.exe",
"args": ["serve"],
"env": {
"PYTHONUNBUFFERED": "1"
}
}重新启动Claude Code——deja将显示为已连接的MCP服务器。
MCP工具
| 工具 | 说明 |
|---|---|
search | 跨所有会话的混合语义+关键字搜索 |
get_context | 获取一个包含周围转弯的块(±窗口) |
get_session_chunks | 获取会话的索引块(不是原始消息) |
搜索 参数:
query(string)--要搜索什么limit(int,默认值10)--最大结果project(字符串,可选)--按项目筛选date_from/date_to(字符串,可选)--ISO日期范围
自动索引(可选)
Claude Code会话结束时自动索引。添加一个停止挂钩 ~/.claude/settings.json:
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "/path/to/deja/.venv/bin/deja index"
}
]
}
]
}在带有Git Bash的Windows上,用shell脚本包装:
#!/bin/bash
DEJA="/path/to/deja/.venv/Scripts/deja.exe"
[ -f "$DEJA" ] && "$DEJA" index >/dev/null 2>&1 &"command": "bash /path/to/deja-index.sh"PID锁可防止并发索引器——在多个会话中是安全的。
堆栈
- 快速嵌入 --ONNX嵌入(
intfloat/multilingual-e5-small,384昏暗) - sqlite-vc --SQLite中的矢量KNN搜索
- SQLite FTS5 --全文关键字搜索
- FastMCP --MCP服务器框架
演出
| 度量 | 值 |
|---|---|
| 增量索引 | \<30秒 |
| 搜索延迟(热) | \<500毫秒 |
| 首次搜索(冷启动) | \<5秒 |
| RAM(搜索) | ~150 MB |
| RAM(索引) | ~300 MB |
发展
pip install -e ".[dev]"
pytest