AgentKits Memory
by AityTech
Persistent Memory System for AI Coding Assistants
Your AI assistant forgets everything between sessions. AgentKits Memory fixes that.
Decisions, patterns, errors, and context — all persisted locally via MCP.
Website • Docs • Quick Start • How It Works • Platforms • CLI • Web Viewer
English · 简体中文 · 日本語 · 한국어 · Español · Deutsch · Français · Português · Tiếng Việt · Русский · العربية
______________________________________________________________________
特性
| 特点 | 优点 |
|---|---|
| 100%本地 | 所有数据都保留在您的机器上。没有云,没有API密钥,没有帐户 |
| 快速燃烧 | 原生SQLite(better-splite3)=即时查询,零延迟 |
| 零配置 | 开箱即用。无需设置数据库 |
| 多平台 | Claude Code、Cursor、Windsurf、Cline、OpenCode——一个设置命令 |
| MCP服务器 | 9个工具:保存、搜索、时间线、详细信息、召回、列表、更新、删除、状态 |
| 自动捕获 | 钩子自动捕获会话上下文、工具使用、摘要 |
| 人工智能丰富 | 背景工作人员通过人工智能生成的摘要丰富观察结果 |
| 向量搜索 | sqlite-vec语义相似性与多语言嵌入(100多种语言) |
| 网络观众 | 浏览器用户界面,用于查看、搜索、添加、编辑、删除记忆 |
| 三层搜索 | 渐进式披露节省了约87%的代币,而获取一切 |
| 生命周期管理 | 自动压缩、存档和清理旧会话 |
| 导出/导入 | 以JSON格式备份和恢复内存 |
______________________________________________________________________
运作原理
Session 1: "Use JWT for auth" Session 2: "Add login endpoint"
┌──────────────────────────┐ ┌──────────────────────────┐
│ You code with AI... │ │ AI already knows: │
│ AI makes decisions │ │ ✓ JWT auth decision │
│ AI encounters errors │ ───► │ ✓ Error solutions │
│ AI learns patterns │ saved │ ✓ Code patterns │
│ │ │ ✓ Session context │
└──────────────────────────┘ └──────────────────────────┘
│ ▲
▼ │
.claude/memory/memory.db ──────────────────┘
(SQLite, 100% local)- 设置一次 —
npx @aitytech/agentkits-memory配置您的平台 - 自动捕获 --Hooks在您工作时记录决策、工具使用和摘要
- 上下文注入 --下一节课从往届课的相关历史开始
- 后台处理 --工作人员用人工智能丰富观察结果,生成嵌入,压缩旧数据
- 随时搜索 --AI使用MCP工具(
memory_search→memory_details)查找过去的上下文
所有数据都保留在 .claude/memory/memory.db 在你的机器上。没有云。不需要API密钥。
______________________________________________________________________
重要的设计决策
大多数内存工具将数据分散在markdown文件中,需要Python运行时,或者将代码发送到外部API。AgentKits Memory做出了根本不同的选择:
| 设计选择 | 为什么重要 |
|---|---|
| 单一SQLite数据库 | 一个文件(memory.db)包含一切——记忆、会话、观察、嵌入。无需同步分散的文件,无合并冲突,无孤立数据。备份=复制一个文件 |
| 原生Node.js,零Python | 在Node运行的任何地方运行。没有conda,没有pip,没有virtualenv。与您的MCP服务器使用相同的语言 npx 命令,完成 |
| 代币高效三层搜索 | 首先搜索索引(~50个标记/结果),然后是时间线上下文,然后是完整的细节。只取你需要的东西。其他工具将整个内存文件转储到上下文中,在不相关的内容上燃烧令牌 |
| 通过钩子自动捕捉 | 决策、模式和错误会在发生时记录下来,而不是在你记得保存它们之后。会话上下文注入在下次会话启动时自动发生 |
| 本地嵌入,无API调用 | 矢量搜索使用本地ONNX模型(多语言e5-small)。语义搜索离线运行,无需任何成本,支持100多种语言 |
| 后台工作人员 | AI富集、嵌入生成和压缩异步运行。您的编码流程从未被阻塞 |
| 从第一天起就支持多平台 | 一个 --platform=all flag同时配置Claude Code、Cursor、Windsurf、Cline和OpenCode。相同的内存数据库,不同的编辑器 |
| 结构化观测数据 | 通过类型分类(读/写/执行/搜索)、文件跟踪、意图检测和AI生成的叙述来捕获工具使用情况,而不是原始文本转储 |
| 无工艺泄漏 | 后台工作程序在5分钟后自动终止,使用基于PID的锁文件进行过时锁清理,并优雅地处理SIGTERM/SIGINT。没有僵尸进程,没有孤立的工人 |
| 无内存泄漏 | 钩子作为短时间进程运行(而不是长时间运行的守护进程)。数据库连接在关闭时关闭。嵌入子流程具有有界重生(最多2个)、挂起请求超时以及所有计时器和队列的优雅清理 |
______________________________________________________________________
网络观众
通过现代网络界面查看和管理您的记忆。
npx @aitytech/agentkits-memory web然后打开 http://localhost:1905 在您的浏览器中。
会话列表
使用时间线视图和活动详细信息浏览所有会话。
内存列表
通过搜索和命名空间过滤浏览所有存储的内存。
添加内存
使用键、名称空间、类型、内容和标签创建新的内存。
内存详情
使用编辑和删除选项查看完整内存详细信息。
管理嵌入
生成和管理语义搜索的向量嵌入。
______________________________________________________________________
快速开始
选项1:克劳德代码插件市场(建议用于克劳德代码)
只需一个命令即可作为插件安装——无需手动配置:
/plugin marketplace add aitytech/agentkits-memory
/plugin install agentkits-memory@agentkits-memory这将自动安装钩子、MCP服务器和内存工作流技能。安装后重新启动Claude Code。
选项2:自动设置(所有平台)
npx @aitytech/agentkits-memory此自动检测您的平台并配置所有内容:MCP服务器、钩子(Claude Code/OpenCode)、规则文件(Cursor/Windsurf/Cline),并下载嵌入模型。
针对特定平台:
npx @aitytech/agentkits-memory --platform=cursor
npx @aitytech/agentkits-memory --platform=windsurf,cline
npx @aitytech/agentkits-memory --platform=all选项3:手动MCP配置
如果您更喜欢手动设置,请在MCP配置中添加:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@aitytech/agentkits-memory", "server"]
}
}
}配置文件位置:
- 克劳德代码:
.claude/settings.json(嵌入mcpServers按键) - 光标:
.cursor/mcp.json - 帆板运动:
.windsurf/mcp.json - Cline/OpenCode:
.mcp.json(项目根)
3.MCP工具
配置后,您的AI助手可以使用这些工具:
| 工具 | 说明 |
|---|---|
memory_status | 检查内存系统状态(先调用!) |
memory_save | 保存决策、模式、错误或上下文 |
memory_search | \[步骤1\] 搜索索引——轻量级ID+标题(~50个标记/结果) |
memory_timeline | \[步骤2\] 获取内存周围的时间上下文 |
memory_details | \[步骤3\] 获取特定ID的完整内容 |
memory_recall | 快速主题概述——分组总结 |
memory_list | 列出最近的回忆 |
memory_update | 更新现有内存内容或标签 |
memory_delete | 删除过时的记忆 |
______________________________________________________________________
渐进式披露(代币高效搜索)
AgentKits内存使用 三层搜索模式 与预先获取完整内容相比,这节省了约70%的令牌。
运作原理
┌─────────────────────────────────────────────────────────────┐
│ Step 1: memory_search │
│ Returns: IDs, titles, tags, scores (~50 tokens/item) │
│ → Review index, pick relevant memories │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Step 2: memory_timeline (optional) │
│ Returns: Context ±30 minutes around memory │
│ → Understand what happened before/after │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Step 3: memory_details │
│ Returns: Full content for selected IDs only │
│ → Fetch only what you actually need │
└─────────────────────────────────────────────────────────────┘工作流示例
// Step 1: Search - get lightweight index
memory_search({ query: "authentication" })
// → Returns: [{ id: "abc", title: "JWT pattern...", score: 85% }]
// Step 2: (Optional) See temporal context
memory_timeline({ anchor: "abc" })
// → Returns: What happened before/after this memory
// Step 3: Get full content only for what you need
memory_details({ ids: ["abc"] })
// → Returns: Full content for selected memory代币节省
| 方法 | 使用的代币 |
|---|---|
| 老的 获取所有内容 | ~500个令牌×10个结果=5000个令牌 |
| 新 渐进式披露 | 50×10+500×2=1500个代币 |
| 储蓄 | 减少70% |
______________________________________________________________________
CLI命令
# One-command setup (auto-detects platform)
npx @aitytech/agentkits-memory
npx @aitytech/agentkits-memory setup --platform=cursor # specific platform
npx @aitytech/agentkits-memory setup --platform=all # all platforms
npx @aitytech/agentkits-memory setup --force # re-install/update
# Start MCP server
npx @aitytech/agentkits-memory server
# Web viewer (port 1905)
npx @aitytech/agentkits-memory web
# Terminal viewer
npx @aitytech/agentkits-memory viewer
npx @aitytech/agentkits-memory viewer --stats
npx @aitytech/agentkits-memory viewer --json
# Save from CLI
npx @aitytech/agentkits-memory save "Use JWT with refresh tokens" --category pattern --tags auth,security
# Settings
npx @aitytech/agentkits-memory hook settings .
npx @aitytech/agentkits-memory hook settings . --reset
npx @aitytech/agentkits-memory hook settings . aiProvider.provider=openai aiProvider.apiKey=sk-...
# Export / Import
npx @aitytech/agentkits-memory hook export . my-project ./backup.json
npx @aitytech/agentkits-memory hook import . ./backup.json
# Lifecycle management
npx @aitytech/agentkits-memory hook lifecycle . --compress-days=7 --archive-days=30
npx @aitytech/agentkits-memory hook lifecycle-stats .______________________________________________________________________
程序化使用
import { ProjectMemoryService } from '@aitytech/agentkits-memory';
const memory = new ProjectMemoryService({
baseDir: '.claude/memory',
dbFilename: 'memory.db',
});
await memory.initialize();
// Store a memory
await memory.storeEntry({
key: 'auth-pattern',
content: 'Use JWT with refresh tokens for authentication',
namespace: 'patterns',
tags: ['auth', 'security'],
});
// Query memories
const results = await memory.query({
type: 'hybrid',
namespace: 'patterns',
content: 'authentication',
limit: 10,
});
// Get by key
const entry = await memory.getByKey('patterns', 'auth-pattern');______________________________________________________________________
自动捕捉挂钩
Hooks会自动捕获您的AI编码会话(仅限Claude Code和OpenCode):
| 钩子 | 触发器 | 动作 |
|---|---|---|
context | 会话开始 | 注入前一个会话上下文+内存状态 |
session-init | 用户提示 | 初始化/恢复会话,记录提示 |
observation | 工具使用后 | 通过意图检测捕获工具使用情况 |
summarize | 会话结束 | 生成结构化会话摘要 |
user-message | 会话开始 | 向用户显示内存状态(stderr) |
设置挂钩:
npx @aitytech/agentkits-memory自动捕获的内容:
- 带路径的文件读/写
- 代码更改为结构化差异(之前→ 之后)
- 开发人员意图(错误修复、功能、重构、调查等)
- 会议总结,包括决定、错误和下一步行动
- 会话内的多提示跟踪
______________________________________________________________________
多平台支持
| 平台 | MCP | 挂钩 | 规则文件 | 设置 |
|---|---|---|---|---|
| 克劳德代码 | .claude/settings.json | ✅ 完整 | CLAUDE.md(技能) | --platform=claude-code |
| 光标 | .cursor/mcp.json | — | .cursorrules | --platform=cursor |
| 帆板运动 | .windsurf/mcp.json | — | .windsurfrules | --platform=windsurf |
| 克莱恩 | .mcp.json | — | .clinerules | --platform=cline |
| OpenCode | .mcp.json | ✅ 已满 | -- | --platform=opencode |
- MCP服务器 适用于所有平台(通过MCP协议的内存工具)
- 钩子 在Claude Code和OpenCode上提供自动捕获
- 规则文件 教Cursor/Windsurf/Cline记忆工作流程
- 内存数据 始终存储在
.claude/memory/(单一事实来源)
______________________________________________________________________
背景工作者
每次会话后,后台工作人员都会处理排队的任务:
| 工人 | 任务 | 描述 |
|---|---|---|
embed-session | 嵌入 | 生成用于语义搜索的向量嵌入 |
enrich-session | AI丰富 | 用AI生成的总结、事实、概念丰富观察结果 |
compress-session | 压缩 | 压缩旧观测值(10:1-25:1)并生成会话摘要(20:1-100:1) |
工作进程在会话结束后自动运行。每位工人:
- 每次运行最多可处理200个项目
- 使用锁文件防止并发执行
- 5分钟后自动终止(防止僵尸)
- 最多检索3次失败的任务
______________________________________________________________________
AI提供者配置
AI富集使用可插拔的提供者。默认值为 claude-cli (不需要API密钥)。
| 提供者 | 类型 | 默认型号 | 备注 |
|---|---|---|---|
| Claude CLI | claude-cli | haiku | 用途 claude --print,不需要API密钥 |
| OpenAI | openai | gpt-4o-mini | 任何OpenAI模型 |
| 谷歌双子座 | gemini | gemini-2.0-flash | 谷歌AI工作室密钥 |
| 开放路由 | openai | 任意 | 集 baseUrl 到 https://openrouter.ai/api/v1 |
| GLM( 日语) | openai | 任意 | 集 baseUrl 到 https://open.bigmodel.cn/api/paas/v4 |
| 奥拉玛 | openai | 任意 | 集 baseUrl 到 http://localhost:11434/v1 |
选项1:环境变量
# OpenAI
export AGENTKITS_AI_PROVIDER=openai
export AGENTKITS_AI_API_KEY=sk-...
# Google Gemini
export AGENTKITS_AI_PROVIDER=gemini
export AGENTKITS_AI_API_KEY=AIza...
# OpenRouter (uses OpenAI-compatible format)
export AGENTKITS_AI_PROVIDER=openai
export AGENTKITS_AI_API_KEY=sk-or-...
export AGENTKITS_AI_BASE_URL=https://openrouter.ai/api/v1
export AGENTKITS_AI_MODEL=anthropic/claude-3.5-haiku
# Local Ollama (no API key needed)
export AGENTKITS_AI_PROVIDER=openai
export AGENTKITS_AI_BASE_URL=http://localhost:11434/v1
export AGENTKITS_AI_MODEL=llama3.2
# Disable AI enrichment entirely
export AGENTKITS_AI_ENRICHMENT=false选项2:持久设置
# Saved to .claude/memory/settings.json — persists across sessions
npx @aitytech/agentkits-memory hook settings . aiProvider.provider=openai aiProvider.apiKey=sk-...
npx @aitytech/agentkits-memory hook settings . aiProvider.provider=gemini aiProvider.apiKey=AIza...
npx @aitytech/agentkits-memory hook settings . aiProvider.baseUrl=https://openrouter.ai/api/v1
# View current settings
npx @aitytech/agentkits-memory hook settings .
# Reset to defaults
npx @aitytech/agentkits-memory hook settings . --reset优先: 环境变量覆盖settings.json。Settings.json会覆盖默认值。
______________________________________________________________________
生命周期管理
管理内存随时间的增长:
# Compress observations older than 7 days, archive sessions older than 30 days
npx @aitytech/agentkits-memory hook lifecycle . --compress-days=7 --archive-days=30
# Also auto-delete archived sessions older than 90 days
npx @aitytech/agentkits-memory hook lifecycle . --compress-days=7 --archive-days=30 --delete --delete-days=90
# View lifecycle statistics
npx @aitytech/agentkits-memory hook lifecycle-stats .| 阶段 | 发生了什么 |
|---|---|
| 压缩 | AI压缩观察结果,生成会话摘要 |
| 档案 | 将旧会话标记为已存档(从上下文中排除) |
| 删除 | 删除已存档的会话(选择加入,需要 --delete) |
______________________________________________________________________
出口/进口
备份和恢复您的项目记忆:
# Export all sessions for a project
npx @aitytech/agentkits-memory hook export . my-project ./backup.json
# Import from backup (deduplicates automatically)
npx @aitytech/agentkits-memory hook import . ./backup.json导出格式包括会话、观察、提示和摘要。
______________________________________________________________________
内存类别
| 类别 | 用例 |
|---|---|
decision | 架构决策、技术栈选择、权衡 |
pattern | 编码惯例、项目模式、重复方法 |
error | Bug修复、错误解决方案、调试见解 |
context | 项目背景、团队惯例、环境设置 |
observation | 自动捕获会话观察结果 |
______________________________________________________________________
存储
记忆存储在 .claude/memory/ 在您的项目目录中。
.claude/memory/
├── memory.db # SQLite database (all data)
├── memory.db-wal # Write-ahead log (temp)
├── settings.json # Persistent settings (AI provider, context config)
└── embeddings-cache/ # Cached vector embeddings______________________________________________________________________
CJK语言支持
AgentKits内存具有 自动CJK支持 用于中文、日文和韩文文本搜索。
零配置
当 better-sqlite3 如果已安装(默认),CJK搜索将自动工作:
import { ProjectMemoryService } from '@aitytech/agentkits-memory';
const memory = new ProjectMemoryService('.claude/memory');
await memory.initialize();
// Store CJK content
await memory.storeEntry({
key: 'auth-pattern',
content: '認証機能の実装パターン - JWT with refresh tokens',
namespace: 'patterns',
});
// Search in Japanese, Chinese, or Korean - it just works!
const results = await memory.query({
type: 'hybrid',
content: '認証機能',
});运作原理
- 原生SQLite:用途
better-sqlite3为了获得最佳性能 - 三角图标记器:带有三元组的FTS5为CJK匹配创建3个字符序列
- 智能回退:短CJK查询(\
______________________________________________________________________
许可证
麻省理工学院
______________________________________________________________________
Give your AI assistant memory that persists.
AgentKits Memory by AityTech
Star this repo if it helps your AI remember.
