语义会话搜索工具

deja是一个MCP服务器,用于索引支持的AI编码代理的JSONL会话,并提供混合搜索(向量+全文),可直接从Claude Code中进行语义搜索。

  • by CynepMyx
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 CynepMyx/deja

使用说明

似曾相识

对AI编码代理会话历史进行语义搜索。通过意义而不仅仅是关键字来询问过去的对话。

似曾相识 是一个 MCP服务器 它对来自受支持的AI编码代理的JSONL会话进行索引,并直接从Claude Code提供混合搜索(矢量+全文)。

支持的来源

源 路径 状态
克劳德代码 ~/.claude/projects/*/*.jsonl 支持
Codex CLI ~/.codex/sessions/YYYY/MM/DD/*.jsonl 支持(v0.4+)
光标/双子座/开放代码 -- 计划中(#8)

运作原理

~/.claude/projects/*/        deja index         index.db
     *.jsonl           ──────────────►    (SQLite + vec + FTS5)
                        embeddings
                                           │
                                           │  deja serve (MCP stdio)
                                           ▼
                                      Claude Code
                                    "search past sessions"
  1. 索引 --解析JSONL会话文件,提取会话回合,嵌入 multilingual-e5-small,存储在SQLite中
  2. 服务 --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, all sources
deja index --reindex             # full rebuild
deja index --source claude-code  # only Claude Code sessions
deja index --source codex        # only Codex CLI sessions

默认情况下扫描每个支持的源。过滤器 --source.

添加到克劳德代码

添加到 ~/.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 (字符串,可选)--按项目筛选
  • source (string,可选)--按来源筛选: claude-code, codex
  • 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

许可证

麻省理工学院