皮质
AI编码代理的持久内存。Zero配置,适用于Cursor、Claude Code、Codex和任何兼容MCP的编辑器。
](https://www.npmjs.com/package/cortexmem)  ](https://nodejs.org)
当会话结束时,AI编码代理会失去所有上下文。CortexMem通过从git历史、代码库和会话上下文构建语义内存存储来解决这个问题,然后通过MCP工具进行搜索。
设置
步骤1:初始化项目
cd your-project
npx cortexmem init这会扫描你的git历史和代码库,在本地嵌入所有内容,并将其存储在 .cortexmem/store.db。它还生成编辑器配置文件(CLAUDE.md, .cursorrules, codex.md)指示AI代理自动使用cortexmem。
第一次运行下载嵌入模型(约30MB,一次性)。后续运行是 渐进的 并且只重新索引新的提交和更改的文件。
$ npx cortexmem init
CortexMem — initializing context for /Users/you/my-project
Full scan — first-time initialization...
Found 142 commits → 87 chunks
Found 38 files → 52 chunks
Embedding 139 chunks...
Storing in database...
Building project summary...
Generating editor configs...
Created: CLAUDE.md, .cursorrules, codex.md
Done!
Summary:
Git commits indexed: 142
Source files scanned: 38
Total chunks stored: 139
Storage: /Users/you/my-project/.cortexmem/store.db
Add to your MCP config to start using cortexmem with your AI agent.您可以选择包含项目规范或需求文档:
npx cortexmem init ./PROJECT.md步骤2:添加到编辑器的MCP配置中
光标 (添加到 ~/.cursor/mcp.json):
{
"mcpServers": {
"cortexmem": {
"command": "npx",
"args": ["-y", "cortexmem"]
}
}
}克劳德代码 (添加到 ~/.claude.json 或项目设置):
{
"mcpServers": {
"cortexmem": {
"command": "npx",
"args": ["-y", "cortexmem"]
}
}
}采用LLM动力压实 (可选,添加您的Anthropic API密钥):
{
"mcpServers": {
"cortexmem": {
"command": "npx",
"args": ["-y", "cortexmem"],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-..."
}
}
}
}重新启动编辑器。CortexMem正在运行。
ANTHROPIC_API_KEY是可选的。它通过以下方式实现基于LLM的会话压缩summarize_session没有它,其他一切都能正常工作,压缩使用确定性回退。
步骤3:没有步骤3
生成的编辑器配置文件(CLAUDE.md, .cursorrules, codex.md)指示您的AI代理自动使用cortexmem。它将:
- 启动时加载以前会话的上下文
- 在工作时保存决策、发现和约束
- 会话结束时的紧凑型内存
无需手动调用工具。
示例:会话是什么样子的
会话1:开始进行身份验证
您的AI代理会自动调用 get_context 会话开始时:
## CortexMem Context — my-project
Initialized: 2026-03-08T10:30:00Z
### Project Overview
my-project: Node.js/TypeScript API server. 142 commits, 38 files.
Stack: Express, PostgreSQL, Jest. Main modules: auth, payments, users.
### Index Stats
- Commit Summaries: 87 chunks
- Code Summaries: 52 chunks在工作过程中,代理会自动保存上下文:
save_context({
context_type: "decision",
content: "Using JWT with refresh tokens for auth. Access tokens expire in 15min, refresh tokens in 7 days. Stored in httpOnly cookies, not localStorage.",
related_files: ["src/auth/jwt.ts", "src/middleware/auth.ts"]
})
→ Saved decision context (id: 12, session: a1b2c3, branch: main)
save_context({
context_type: "constraint",
content: "Auth middleware must never be modified directly. Extend via plugins in src/auth/plugins/",
related_files: ["src/middleware/auth.ts"]
})
→ Saved constraint context (id: 13, session: a1b2c3, branch: main)
save_context({
context_type: "state",
content: "Auth implementation: JWT service done, middleware done, refresh token rotation TODO",
related_files: ["src/auth/jwt.ts"]
})
→ Saved state context (id: 14, session: a1b2c3, branch: main)在会话结束时,代理调用 summarize_session:
summarize_session({ session_summary: "Implemented JWT auth with refresh tokens" })
→ Compaction complete:
Session: Compacted 3 entries into session summary
Branch (main): Updated branch summary
Project: Updated project overview会话2:不同的日子,上下文得以保留
代理人打电话来 get_context 并且立即具有完整的上下文:
## CortexMem Context — my-project
### Project Overview
my-project: Node.js/TypeScript API with JWT auth (access + refresh tokens),
PostgreSQL, Express. Auth module complete, payment refactor in progress.
### Branch: main
JWT auth implemented with httpOnly cookies. Auth middleware uses plugin
architecture (never modify directly). Refresh token rotation still TODO.
### Recent Sessions (main)
#### Session a1b2c3 (2026-03-08)
Implemented JWT authentication with refresh tokens. Access tokens expire
in 15min, refresh in 7 days. Created plugin-based auth middleware.
Refresh token rotation is the next task.
### Index Stats
- Decisions: 1 chunks
- Constraints: 1 chunks
- State: 1 chunks
- Commit Summaries: 87 chunks
- Code Summaries: 52 chunks代理还可以搜索特定上下文:
get_context({ query: "auth middleware", depth: 3 })
→ ## CortexMem Context — my-project
Query: "auth middleware" | depth: 3
### [project > branch:main > session:a1b2c3] (87% match)
JWT auth with refresh tokens. Plugin-based middleware architecture.
**Details:**
- [Constraint] Auth middleware must never be modified directly. Extend via plugins
- [Decision] Using JWT with refresh tokens for auth. Access tokens expire in 15min...重新运行init(增量)
当您在更多提交后返回时:
$ npx cortexmem init
CortexMem — initializing context for /Users/you/my-project
Incremental update — scanning changes since last init...
8 new commits → 6 chunks
3 files changed
3 changed files → 4 chunks
Embedding 10 chunks...
Storing in database...
Building project summary...
Done!
Summary (incremental):
Git commits indexed: 8 (new)
Source files scanned: 38
Total chunks stored: 10 (new)运作原理
cortexmem init扫描你的git历史和代码库,将所有内容块化并嵌入到本地- 一切都存储在
.cortexmem/store.db,一个可跨编辑器和机器移植的SQLite文件 - 您的AI代理使用4个MCP工具来搜索、保存和压缩上下文
- 上下文以某种方式组织 金字塔:项目、分支和会话摘要,下面有原始块
上下文金字塔
Project Summary ← "What is this project about?"
├── Branch: main ← "What's happening on main?"
│ ├── Session a1b2c3 ← "What did we do 2 days ago?"
│ └── Session d4e5f6 ← "What did we do yesterday?"
└── Branch: feature/payments ← "What's the payments work?"
└── Session g7h8i9get_context()返回金字塔概览(约500-800个代币)get_context({ query: "..." })分层搜索,首先匹配摘要,仅在需要时钻取原始块summarize_session()卷起:会话块→ 会议摘要→ 分支摘要→ 项目概要
什么被索引
| 来源 | 提取了什么 |
|---|---|
| Git日志 | 提交消息、描述、文件更改模式 |
| 源文件 | 代码结构、函数、类、模式 |
| 配置文件 | 堆栈、工具、依赖关系 |
| 文档(.md) | 文档内容 |
| 项目文件 | 规格、要求(通过 cortexmem init ) |
| 会话上下文 | 代理保存的决策、约束和发现 |
MCP工具
| 工具 | 何时使用 | 功能 |
|---|---|---|
get_context | 会话开始,或当您需要特定上下文时 | 返回金字塔概述(无参数)或层次搜索(带 query).深度0-3控制粒度。 |
save_context | 当代理做出决定、发现某些东西、记录约束时 | 立即嵌入并存储。类型: decision, constraint, state, discovery, preference. |
summarize_session | 会话结束 | 将保存的上下文压缩到金字塔中。如果使用克劳德·海库 ANTHROPIC_API_KEY 已设置,否则将进行确定性回退。 |
get_status | Anytime | 快速统计:按类型、存储位置、上次初始化时间统计的块数。 |
上下文类型
| 类型 | 目的 | 示例 |
|---|---|---|
| 决定 | 架构/技术选择 | “ACID事务选择PostgreSQL而非MongoDB” |
| 约束 | 永不违反的硬性规则 | “永远不要直接修改身份验证中间件” |
| 状态 | 当前WIP状态 | “付款重构:已完成2/4项服务” |
| 发现 | 不明显的代码库事实 | “UserService是从6个地方调用的,而不是3个地方” |
| 偏好 | 代码样式约定 | “变量为Snake_case,类为PascalCase” |
命令行命令
cortexmem init [project-file] Scan git history + codebase, build context store
Incremental on re-run, only indexes new changes
cortexmem inject Inject/update a project file (spec, requirements)
cortexmem status Show what's stored
cortexmem Start MCP server (used by AI editors)可移植性
CortexMem将所有内容存储在一个文件中: .cortexmem/store.db
# Move to a new machine
scp .cortexmem/store.db user@newmachine:~/project/.cortexmem/
# Share with teammates (commit it)
git add .cortexmem/store.db
# Switch editors, same file works everywhere
# Claude Code -> Cursor -> Codex, no migration needed环境变量
| 变量 | 目的 | 默认值 |
|---|---|---|
ANTHROPIC_API_KEY | 启用LLM压缩 summarize_session | 无(确定性回退) |
CORTEXMEM_MAX_TOKENS | 默认最大令牌数 get_context | 3000 |
CORTEXMEM_MODEL | 压实模型 | claude-haiku-4-5-20251001 |
建筑
- 嵌入:
all-MiniLM-L6-v2通过@xenova/transformers.本地运行,不需要API密钥,约30MB型号 - 存储:SQLite通过
sql.js(WASM)。零原生依赖,适用于任何操作系统 - 搜索:混合关键字+矢量搜索。默认情况下为关键字,模型处于热态时为向量。两者都离线工作。
- 运输:MCP标准。可与任何兼容MCP的编辑器配合使用
发展
git clone https://github.com/Ashprakash/cortexmem.git
cd cortexmem
npm install
npm test # run 106 tests
npm run dev # run with tsx
npm run build # compile TypeScript许可证
麻省理工学院
