关于 memex
memex 是面向软件工程 Agent 的开源 MCP 服务和钩子服务,将代码库变更整理为带时间与来源信息的工程上下文。它为 Claude Code 和 Codex 提供任务相关上下文,并在编辑依据失效时暂停编辑、要求修正。
主要功能
- 01构建代码库双时态知识图谱
- 02会话开始时提供工作上下文
- 03编辑前检查上下文是否仍有效
- 04恢复会话时提示变更文件
- 05为并行工作树提供独立视图
- 06对决策与问题进行记录和检索
适用场景
- 01让编码 Agent 获取当前代码库背景
- 02在代码变化后阻止依据过时的编辑
- 03查找模块、符号和架构决策
- 04识别文件变更可能影响的模块
MCP 相关
MCP 服务向客户端提供代码库上下文查询、影响预测、变更解释等工具,也支持记录决策和问题等写入工具,并暴露 MCP 资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y stifler-memex-mcpNEO4J_URIBolt URI of your Neo4j instanceNEO4J_USERNeo4j usernameNEO4J_PASSWORD密钥Neo4j passwordGEMINI_API_KEY密钥Google Gemini API key for entity extraction本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
14收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| repo | string | 否 | 用于限定结果范围的可选仓库绝对路径。 |
| scope | string | 否 | 用于筛选概要的可选相对路径(例如,'src/auth')。 |
| project | string | 否 | 用于限定结果范围的可选 project_id(可替代或补充 'repo' — 参见 `memex init --project-id`)。 |
详细介绍
memex:面向 Agent 软件工程的可信工程上下文
开源 MCP 服务和钩子服务,可在代码变更时持续更新 Claude Code 和 Codex 的工程上下文,并暂缓应用证据已发生变化的编辑。
守护进程、钩子服务和 MCP 服务,可将提交和文件变更转化为结构化工程知识,并在保留时效性和来源信息的前提下将其提供给 Agent,而不会让 memex 成为个人记忆或原始会话状态的来源。
memex 会为你的代码库构建双时态知识图谱(模块、符号、决策、问题、证据和代码演变)。v1 还会接入 Claude Code 和 Codex:每个会话启动时都会获得恰当的上下文,每次编辑都会根据当前代码进行检查,并准确告知 Agent 发生了什么变化。
memex 所在位置
| 网站 | memex.stifler.in |
| 源代码 | github.com/STiFLeR7/memex |
| Python 包 | memex-mcp on PyPI |
| Node 包 | stifler-memex-mcp on npm |
| MCP Registry | registry.modelcontextprotocol.io,登记名称为 io.github.STiFLeR7/memex |
| Claude Code 插件 | STiFLeR7/claude-plugins |
| 目录 | Glama · AI Agents Listing |
评估记录见 BENCHMARK.md,版本历史见 CHANGELOG.md,问题报告流程见 SECURITY.md, 参与项目开发的方法见 CONTRIBUTING.md。
https://github.com/user-attachments/assets/b14e3185-ea36-4ae5-bd18-2d34e6bf7be4
60 秒了解 memex v1。如果播放器无法加载,下载视频。
实时上下文(v1)
编码 Agent 基于代码快照工作。队友推送代码,另一个 Agent 编辑文件,分支发生变化,而 Agent 仍继续依据之前读取的内容操作。v1 会在 Claude Code 和 Codex 中保持该快照最新:
| 时机 | memex 的作用 |
|---|---|
| 会话开始 | 为任务提供有界工作集,并通过客户端自身的会话记录确认已交付 |
| 每次编辑之前 | 检查编辑所依据的上下文是否仍然成立。如果不成立,则暂缓编辑,向 Agent 提供范围明确的更正,并由其修订 |
| 恢复会话时 | 如果会话离开期间代码发生了变化,指出需要重新读取的文件 |
| 并行 Agent | 为每个关联的工作树提供独立视图,让并行工作的 Agent 各自看到自己的代码 |
| 试用 | memex v1 mode shadow 会记录需要更正的内容,但不做任何更改;钩子会在故障时放行;memex v1 rollback 会立即停止 memex |
uv tool install memex-mcp # installs the `memex` command
cd your-repo
memex v1 doctor # what is set up, what is missing, what to do next
memex v1 install claude # hooks in .claude/settings.json; global settings untouched
memex v1 install codex --neo4j-uri bolt://localhost:7687 # optional, for Codex
memex 需要你已在运行的 Neo4j 5 服务(无需 Docker)。钩子只会写入检出目录自身的项目配置,memex 也绝不会索取或存储你的客户端凭据。完整指南、主机配置示例和回滚说明: docs/v1/25_ONBOARDING.md。
flowchart LR
A[Your repository<br/>files + git] --> B[memex watcher<br/>tree-sitter + Gemini]
B --> C[Neo4j graph<br/>bitemporal facts]
C --> D[memex core<br/>ContextPacket selection]
D --> H[Hook service<br/>session start · edit checks · resume notice]
D --> E[Hermes MemoryProvider<br/>automatic read-only prefetch]
D --> F[MCP tools<br/>explicit lookup]
H --> G[Claude Code / Codex]
E --> G
F --> G
style B fill:#cfe8ff,stroke:#0066cc,color:#000
style C fill:#fff4cf,stroke:#cc9900,color:#000
style H fill:#d4f5d4,stroke:#2d8f2d,color:#000
安装
通过 Claude Code marketplace
/plugin marketplace add STiFLeR7/claude-plugins
/plugin install memex-mcp@stifler-marketplace
重启 Claude Code 会话。
安装或升级后的首次启动会下载 memex 的 Python 依赖项(约 40 秒),可能会超过 Claude Code 的 MCP 连接超时时间。请先预热,再重启:
npx -y stifler-memex-mcp --help # one-time download; later starts take a few seconds
如果 Claude Code 仍显示连接超时,请打开 /mcp 并重新连接 memex。如果工具提示 memex 无法连接 Neo4j,请启动 Neo4j(例如 docker start memex-neo4j);工具无需重启即可恢复。
手动安装
docker compose -f docker/docker-compose.yml up -d
cat > .env <<EOF
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=memex-local
GEMINI_API_KEY=your-key-here
EOF
npx stifler-memex-mcp init --repo .
npx stifler-memex-mcp watch --repo .
npx stifler-memex-mcp serve --repo .
Hermes 集成
Hermes 集成为只读模式。Hermes 会保留个人记忆、原始会话状态和执行状态。memex 通过有界的 ContextPacket 提供代码库工程上下文;它不会导入 Hermes 的 state.db、转录内容、提示词或工具结果。
将 memex 提供方添加到 Hermes 的配置文件中:
memory:
provider: memex
plugins:
memex:
repo_path: /absolute/path/to/repository
prefetch_timeout_seconds: 7
max_items: 8
max_chars: 12000
如果尚未安装 Hermes,请通过 MCP get_engineering_context 工具使用相同的上下文选择器。这两种方式共用与协议无关的 memex 核心,并在检索不可用时放行。
| 渠道 | 命令 |
|---|---|
| Claude Code marketplace | /plugin install memex-mcp@stifler-marketplace |
| npx(无需安装) | npx stifler-memex-mcp <cmd> |
| uv | uv add memex-mcp |
| pip | pip install memex-mcp |
| 源码 | git clone github.com/STiFLeR7/memex && uv sync |
团队自托管部署
适用于共享团队环境(一个 Neo4j + 一个 memex-server,默认启用身份验证,Neo4j 的端口绝不暴露给主机):
bash docker/bootstrap-team-env.sh
docker compose -f docker/docker-compose.team.yml up -d
完整流程、初始管理员密钥的保存方法,以及需要避免的 down -v 陷阱,请参阅 docker/TEAM-DEPLOY.md。
概览
| 属性 | 值 |
|---|---|
| 输出 | 持续从你的代码仓库填充的 Neo4j 图 |
| 存储 | 通过 Graphiti 使用 Neo4j。双时态:每条边都有 created_at 和可选的 expired_at |
| 上下文 | 有界、经过排序且感知来源的 ContextPacket |
| 实时上下文(v1) | 会话启动工作集、带作用域修正的编辑检查、恢复时的变更通知、按工作树划分的视图(Claude Code 和 Codex hooks) |
| 集成 | Hermes MemoryProvider、MCP 资源/工具、Claude Code、Cursor、Codex、Gemini CLI |
| 故障模式 | 失败时放行;即使没有 memex,Agent 仍会继续执行 |
| 粒度 | 通过分层 Leiden 聚类,可从 50 个模块扩展到 5000+ 个模块 |
| 综合 | Gemini Flash 将提交内容提炼为 Decision 节点;基于依据的综合使用 Pro |
| 置信度 | 在查询时计算。双区间衰减(已验证半衰期约为 139 天,未验证内容在 30 天后过时) |
| 写入治理 | 按节点类型设置 ACL、Agent 写入时进行意图确认、明确的 corroborates / supersedes 语义 |
| Goal 10 证据 | 8/8 次有效配对运行,处理组失败数为 0,处理组回归数为 0 |
生命周期
flowchart TD
Init[memex init<br/>extract baseline] --> Watch[memex watch<br/>daemon + git hooks]
Watch -->|commit| Extract[tree-sitter extract<br/>symbols, imports, lockfile]
Extract --> Synth[Gemini Flash<br/>diff → Decision nodes]
Synth --> Write[Graphiti add_episode<br/>+ post-hoc bitemporal SET]
Write --> Decay[Scheduler<br/>nightly confidence decay]
Decay -->|stale edges| Archive[expired_at = now]
Serve[memex serve<br/>MCP stdio/HTTP] -.->|reads| Write
Agent[AI agent] -->|14 MCP tools| Serve
Serve -->|record_decision / record_problem| Write
Cluster[memex cluster<br/>Leiden over hybrid edges] -.->|every N commits| Write
style Init fill:#e8f4ff,color:#000
style Watch fill:#fff4cf,color:#000
style Synth fill:#ffe0cc,color:#000
style Serve fill:#d4f5d4,color:#000
MCP 工具
共 14 个工具:8 个读取、4 个写入、2 个分析。
读取
| 工具 | 使用时机 |
|---|---|
get_project_context | 会话开始时。无论代码仓库大小如何,均返回少于 1500 个 token 的集群级简报 |
get_symbol_context | 编辑函数或类之前。返回调用方、被调用方和关联的决策 |
get_recent_decisions | 最近 N 天的架构决策,可按模块限定范围 |
get_open_problems | 按严重程度排序的活跃 bug 和技术债 |
search_context | 混合搜索:语义 × 关键词 × 图遍历 × RRF 合并 |
get_stale_context | 复合置信度低于阈值的边 |
explain_change | 给定提交 SHA,将差异与关联的 Decision/Problem 节点进行交叉引用,并请求 Gemini Pro 提供基于依据的解释 |
predict_impact | 给定文件路径,根据图耦合度返回可能受影响模块的排序列表(不调用 LLM) |
写入
| 工具 | 使用时机 |
|---|---|
record_decision | 做出技术选择后。支持 corroborates(强化)和 supersedes(替代) |
record_problem | 发现 bug 或技术债时 |
resolve_problem | 已跟踪的问题修复后 |
invalidate_edge | 存储的事实不再成立时 |
双时态置信度
置信度不是一个会发生变化的存储数值。它会在查询时根据 base_confidence、验证状态、自上次强化以来的时间以及访问次数计算。
flowchart LR
Edge[Edge created<br/>base_confidence] --> Q{Validated by<br/>a human?}
Q -->|yes| Slow[Slow regime<br/>half-life ~139d]
Q -->|no| Fast[Fast regime<br/>stale at exactly 30d]
Slow --> Score[Composite score<br/>conf × recency × rehearsal]
Fast --> Score
Score -->|below floor| Stale[get_stale_context surfaces it]
Score -->|access| Bump[last_reinforced_at updated]
Bump --> Score
style Slow fill:#d4f5d4,color:#000
style Fast fill:#ffd4d4,color:#000
| 属性 | 值 |
|---|---|
| 已验证半衰期 | 约 139 天 |
| 未验证内容的过时阈值 | 30 天(复合值 < 0.3) |
| 时效性 τ | 90 天(指数衰减) |
| 复合公式 | conf × recency × (1 + rehearsal_w × log(1 + access_count)) |
| 冲突相似度阈值 | 0.4(低于此值且有效期重叠时视为冲突) |
| 意图确认阈值 | 0.85(MCP 写入相似度检查) |
分层集群
memex cluster 对混合边图运行分层 Leiden:
| 边类型 | 权重 |
|---|---|
| 目录共置 | 1.0 |
| 模块导入 | 2.0 |
| 符号调用 | log(1 + calls) |
| 属性 | 值 |
|---|---|
| 算法 | 使用固定种子的 graspologic.partition.hierarchical_leiden |
| 命名 | 对模块文档字符串和符号名称进行 TF-IDF 排序取前 3 项;无法命名时回退到父目录 |
| ID 固定 | 跨次运行时 Jaccard ≥ 0.5(即使重命名,集群名称也保持稳定) |
| 用户覆盖 | .memex/clusters.yaml,可锁定任意分配 |
| 上下文预算 | 无论代码仓库有 50 个还是 5000 个模块,get_project_context 始终少于 1500 个 token |
衡量你的节省
memex 会在本地 SQLite 数据库(~/.config/memex/telemetry.db)中跟踪 Token 减少指标和人工审核操作。
你可以随时使用 CLI 查询节省情况:
memex stats
也可以查看原始 JSON 负载:
memex stats --json
也可以指定特定的代码仓库范围:
memex stats --repo /path/to/repo
这会返回以下内容的汇总:
- 周期摘要:
today、last 7 days、last 30 days和lifetime的调用次数、返回的 Token 数、朴素 Token 数(所请求文件的大小)、节省的 Token 数以及 Token 减少百分比。 - 热门工具:按节省的 Token 总数排序的最有价值工具。
- Agent 客户端:活跃的 Agent(Claude Code、Gemini CLI、Cursor、Codex)及其 Token 节省分布。
- 验证健康度:已验证、未验证和相互印证的节点总数,以及距离上次审核经过的天数。
同样的统计信息也可通过 HTTP MCP 传输方式获取:
GET /stats?repo=/path/to/repo
Authorization: Bearer <your-key>
连接你的 Agent
Claude Code
通过上方的 Marketplace 安装即可完成配置。手动配置请编辑 .claude/settings.json:
{
"mcpServers": {
"memex": {
"type": "stdio",
"command": "npx",
"args": ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
}
}
}
Cursor
添加到 ~/.cursor/mcp.json:
{
"mcpServers": {
"memex": {
"command": "npx",
"args": ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
}
}
}
Gemini CLI
添加到 ~/.gemini/settings.json:
{
"mcpServers": {
"memex": {
"command": "npx",
"args": ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
}
}
}
Codex
添加到 ~/.codex/config.toml:
[mcp_servers.memex]
command = "npx"
args = ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
Anthropic memory tool (memory_20250818)
memex 可以为 Claude 的原生记忆工具提供支持:Agent 从按会话生成的图谱投影和可写的临时区域中读取内容。
memex memory-tool serve --repo . # in-process
memex memory-tool serve --repo . --transport http # FastAPI on :7464
from memex.memory_tool import MemexAsyncMemoryTool
memory_tool = MemexAsyncMemoryTool(repo_root=".")
client.beta.messages.run_tools(..., tools=[memory_tool])
运作原则
| # | 原则 | 核心思路 |
|---|---|---|
| 1 | 双时态,绝不销毁 | 边会过期,而不会被删除。WHERE r.expired_at IS NULL 用于筛选当前状态 |
| 2 | 置信度通过计算得出,而非存储 | 修改数值容易造成无声偏移。每次读取时都重新计算 |
| 3 | 两种衰减机制 | 已验证事实缓慢衰减;未验证事实必须通过访问来证明其价值 |
| 4 | 人类参与决策 | memex review 会将置信度最低的 Decision 节点加入队列,供人工明确验证 |
| 5 | 写入治理 | 按节点类型设置 ACL。Decision.policy = open,Module.policy = locked。写入相似内容时确认意图 |
| 6 | Token 设有预算 | 通过 Leiden 聚类,get_project_context 在任何代码仓库规模下都控制在 1500 个 Token 以内 |
| 7 | 仅在提交时进行综合 | 监视器按防抖窗口批量处理。工具调用的热路径上不会调用 Gemini Flash |
| 8 | 综合使用 Pro,提取使用 Flash | explain_change 使用 Pro,因为依据来源很重要。其他所有操作都使用 Flash |
| 9 | 支持多代码仓库 | 一个监视器和一个 MCP 服务即可管理数百个代码仓库。使用 --repo 切换范围 |
| 10 | 本地优先 | Neo4j 在你的 Docker 中运行。唯一的外部调用是 Gemini,而且仅在提交时进行 |
何时使用 memex
| 适用场景 | 不适用场景 |
|---|---|
| 持续数周或数月的项目 | 一次性脚本、用完即弃的原型 |
| 你会在多个 Agent(Claude、Cursor、Codex)间协作,并希望共享上下文 | 你只会在一项任务中与一个 Agent 搭档 |
| 架构决策会随时间逐渐形成,需要记录下来 | 整个项目都能放进一个 200k Token 的上下文窗口 |
| 你希望能在任何会话中查询“我们对 X 做了什么决定” | 你的代码仓库已经足够小,可以直接粘贴到提示词中 |
| 多名开发者在同一代码库上使用 AI Agent | 你独自工作,且从不使用 /clear |
项目结构
memex/
├── memex/
│ ├── extractor/ tree-sitter + lockfile parsers
│ ├── graph/ Neo4j writes, confidence, archive, cluster engine
│ ├── synthesizer/ Gemini Flash → Decision nodes
│ ├── mcp_server/ 14 MCP tools (read + write + analytic)
│ ├── memory_tool/ Anthropic memory_20250818 adapter
│ ├── watcher/ daemon + git hooks
│ └── cli.py init / watch / serve / review / graph / cluster
├── tests/ unit, integration, and objective evaluation suites
├── docker/ Neo4j compose
├── npm/ npx wrapper (publishes as stifler-memex-mcp)
└── Dockerfile introspection-only image for MCP directory sandboxes
命令
| 命令 | 功能 |
|---|---|
memex init | 提取基线图状态,运行首次聚类 |
memex watch | 监听文件和 git 事件并写入 Neo4j 的守护进程 |
memex serve | 运行 MCP 服务(stdio、HTTP 或两者) |
memex review | 遍历置信度最低的决策,供人工验证的 TUI |
memex graph --output graph.html | 带有聚类叠加层的独立 D3 力导向布局 |
memex cluster [--rerun] [--dry-run] | 在混合边图上运行 Leiden;按 Jaccard ≥ 0.5 固定聚类 ID |
memex memory-tool serve | 使用图投影支持 Anthropic 的 memory_20250818 工具 |
memex stats [--json] [--repo <path>] | 显示上下文令牌节省量和遥测统计信息 |
许可证
MIT。请参阅 LICENSE。
作者
Hill Patel (@STiFLeR7)
核心贡献者与维护者
- Hill Patel (@STiFLeR7),架构师与维护者
- Nirvaan Lagishetty (@Nirvaan05),主要贡献者与维护者
贡献
请提交 issue 或 PR。uv sync --all-extras 会安装开发工具链。
在提交 PR 前,运行 uv run pytest -m "not integration" 执行离线测试套件,并运行 uv run ruff check .。版本升级时,必须同时更新 pyproject.toml、
npm/package.json、server.json 和团队 Docker 镜像标签。
发布历史见 CHANGELOG.md。v1 设计与评估记录位于
docs/v1/,v0.9 架构位于
docs/architecture/v0.9/。
Vannevar Bush,1945 年:“设想一种供个人使用的未来设备,它有点像机械化的私人档案和图书馆。它需要一个名字;随便造一个,叫 memex 就行。”
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。