关于 hmem — Humanlike Memory for AI Agents
hmem 是面向 AI Agent 的持久化记忆框架,基于 SQLite 实现五级分层记忆,并按需加载内容,以减少 token 消耗。适合需要跨会话、跨设备和跨 AI 提供商保留项目上下文的开发者。
主要功能
- 01五级分层懒加载记忆
- 02基于 SQLite 的持久化存储
- 03自动记录会话并关联到项目
- 04后台 Haiku 检查点提取经验与决策
- 05技能文件按需加载
- 06提供 TypeScript SDK
适用场景
- 01新会话开始时快速加载项目简报
- 02跨设备与不同 AI 工具共享项目记忆
- 03搜索过去的错误和决策记录
MCP 相关
hmem 提供两个 MCP 服务:日常使用的 hmem(13 个工具,用于读写、搜索和项目管理)以及用于批量维护的 hmem-curate(11 个工具)。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
hmem — 面向 AI Agent 的类人记忆
你的 AI 会忘掉会话之间的一切。hmem 可以解决这个问题。
只需调用一次 load_project()。约 3000 个 token。你的 Agent 就能了解项目中所有重要信息——过去的每个错误、每项决策、每个待办任务——跨会话、跨设备、跨 AI 提供商。无需为每次对话单独设置。也不用“让我重新阅读代码库”。它就是会记住。
AI Agent? 跳过此文件。请阅读 AGENT_SETUP.md——这份文档是为你而非人类编写的。
命名说明(v8.0): 这个软件包曾短暂以
its-over-9k(1.x)的名称发布。现在它又叫hmem——纯粹的记忆框架,不包含其他内容。its-over-9k这个名称现在属于一个独立项目:o9k token-efficiency meta-framework,它会组合此类技能和插件。相关项目:TIM——hmem 的下一代继任者(超图记忆、CRDT 同步)。
这是什么
hmem 不是笔记插件,而是面向 AI Agent 的记忆框架——一套完整的基础设施层,用于持久、可移植且节省 token 的知识,让知识能够跨越会话边界、设备切换和提供商变更。
四大核心保障:
| 支柱 | 含义 |
|---|---|
| Token 效率 | 5 级按需加载——读多少,就付多少,从不多付 |
| 可移植性 | 在 Claude、Gemini、GPT、本地模型和任何 MCP 客户端之间共享相同的记忆 |
| 高效存储 | 分层树形结构——上下文随深度扩展,而非平铺追加 |
| 不浪费上下文 | 自动捕获会话内容 + 项目简报 = 无需重新阅读 |
问题所在
每个 AI 会话都从零开始。你的 Agent 会问相同的问题、犯相同的错误、与上周的决策自相矛盾,还会浪费 50k 个 token 加载昨天已经处理过的上下文。
你试过各种变通办法——CLAUDE.md 文件、自定义提示词、手动粘贴上下文。但这些办法无法扩展。你有 10 个项目,在 3 台设备之间切换,还会使用不同的 AI 工具。
解决方案
You: "Load project"
Agent: [calls load_project("P0048") — 3000 tokens]
Agent: "v1.2.9, TypeScript/SQLite/npm. 3 open bugs, 8 roadmap items.
Last session: rebrand complete, rename_id bug fixed (89 changes).
Next: O-Entry Auto-Purge. What's the focus today?"
就这么简单。只需 3000 个 token,就能获得完整的项目简报。Agent 会了解技术栈、架构、未解决的 Bug、近期决策,以及你上次停下的位置——即使昨天的“你”是在另一台机器上使用另一个 AI 的你。
工作原理
Level 1 ── One-line summary (always loaded — ~5k tokens for 300+ entries)
Level 2 ── Paragraph detail (loaded on demand)
Level 3 ── Full context (loaded on demand)
Level 4 ── Extended detail (loaded on demand)
Level 5 ── Raw/verbatim data (loaded on demand)
会话开始时,Agent 会加载第 1 级摘要——每条记忆占一行。需要细节时,它会逐层深入。300 条记忆只需 5k 个 token 即可浏览概览。单个项目约需 3000 个 token。
不会丢弃任何摘要内容。 第 1 级是压缩视图,但第 2 至第 5 级保留了完整的原始文本,逐字不差,并可按需访问。
框架功能
自动会话记忆
每次对话都会自动记录。不需要“保存你的工作”之类的提示,也不需要手动创建检查点。
You type → Agent responds → Stop hook fires → Exchange saved to O-entry
→ Linked to active project
→ Haiku auto-titles the session
在会话中途切换项目?O 条目也会随之切换。在另一台设备上开始新会话?下一个 Agent 会看到所有设备上的每次交流——对话永远不会消失。
Haiku 后台检查点
每经过 N 次交流(可配置,默认值为 5),一个 Haiku 子 Agent 就会在后台启动。它会阅读近期对话,提取经验教训、遇到的错误和作出的决策,然后将这些内容写入长期记忆——并拥有完整的 MCP 工具访问权限。主 Agent 不会受到任何打扰。
检查点还会在项目中写入一条交接说明:“已完成以下工作,以下工作正在进行,下一步是……”。下一个 Agent 无论使用哪台设备、哪个提供商,都能从你上次停下的位置准确接续。
基于项目,而非基于会话
会话无关紧要。项目才是一切。
- O-条目关联到当前活动项目,而非会话
- 检查点计数器统计项目交互次数,而非会话消息数
load_project会显示近期对话及其完整上下文,涵盖所有设备
技能系统
hmem 附带完整的技能层——结构化行为文件,Agent 可按需加载。技能定义 Agent 应如何执行某项操作(调试、编写记忆、整理条目、处理会话开始),与记忆和提示词相互独立。
npx hmem update-skills # Pull latest skills to your AI tool's skill directory
技能会独立进行版本管理和更新。无需重新安装,Agent 就能变得更智能。默认附带 21 项技能:
| 技能 | 触发时机…… |
|---|---|
hmem-session-start | 每次会话开始时——加载项目,并显示待处理的 git 工作、未完成任务和路由错误的 O-条目 |
hmem-using-hmem | 会话开始时加载的元技能;定义强制执行的记忆习惯 |
hmem-read | 从长期记忆中读取内容(搜索、前缀筛选、find_related、跨项目读取) |
hmem-write | 写入 hmem 时——选择前缀和树形位置、添加标签、检测重复项 |
hmem-search | 用户提到某件事却未提供 ID 时(“之前遇到的那个 bug”“上周的事”) |
hmem-new-project | 创建 P-条目时——处理架构、章节和 O-条目关联 |
hmem-new-error | 按严格的 5 级框架创建 E-条目时 |
hmem-activate | 在会话中途切换活动项目,或修复路由错误的交互时 |
hmem-context | load_project 输出不足时,加载特定上下文 |
hmem-recall | 调度 Haiku 子 Agent 搜索 hmem 时 |
hmem-dispatch | 为任何搜索、查找或计算调度独立子 Agent 时 |
hmem-curate | 清理 .hmem 文件时(标记为过时、修正标题、合并重复项) |
hmem-migrate-o | 将 O-条目迁移到与项目绑定的 5 级结构时 |
hmem-consolidate | 将会话检查点摘要合并为一份最终 O-条目摘要时 |
hmem-wipe | 执行 /clear 前的准备——保存高价值知识、更新 Next Steps |
hmem-config | 查看或更改记忆设置、钩子、同步和检查点时 |
hmem-setup | 首次为 Claude Code / Gemini CLI / OpenCode 安装 hmem 时 |
hmem-sync-setup | 设置 hmem-sync 以实现跨设备同步时 |
hmem-update | 更新流程——运行 npm update -g、同步技能、应用迁移 |
hmem-release | 发布 hmem 前的检查清单 |
hmem-subagent | 为 hmem-dispatch 调度的子 Agent 提供模板 |
公司记忆
除了个人记忆,Agent 还可以维护一个共享的公司存储库——独立的 company.hmem,供多个 Agent 和团队成员读取。个人记忆和公司记忆可以共存;Agent 会同时查询二者。
import { openCompanyMemory } from 'hmem';
const store = openCompanyMemory('/path/to/project');
可嵌入的 SDK
hmem 附带完整文档的 TypeScript SDK——可将 HmemStore 直接导入你自己的 Agent、工具或自动化流水线:
import {
HmemStore, openCompanyMemory, resolveHmemPath,
loadHmemConfig, saveHmemConfig, DEFAULT_CONFIG, DEFAULT_PREFIXES, formatPrefixList,
searchMemory,
} from 'hmem';
import type {
AgentRole, MemoryEntry, MemoryNode, HmemConfig,
SearchResult, SearchOptions, SearchScope,
} from 'hmem';
const store = new HmemStore('/path/to/agent.hmem');
const results = searchMemory('/path/to/project', 'auth token bug', { maxResults: 5 });
MCP 工具
hmem 附带两个 MCP 服务:
hmem(日常使用,13 个工具)——读取、写入、搜索和项目生命周期管理。hmem-curate(维护,11 个工具)——批量编辑、架构迁移、备份和恢复。仅在整理时启用。
hmem — 日常使用的服务(13)
| 工具 | 功能 |
|---|---|
read_memory | 5 级惰性读取——按 ID、前缀、搜索、时间或标签读取 |
write_memory | 创建包含标题、正文、标签和链接的新条目 |
append_memory | 向现有条目添加子节点 |
update_memory | 更新字段:标题、正文、标签、irrelevant、链接 |
search_memory | 使用 FTS5 全文搜索,并标明子节点来源 |
find_related | 根据标签重合度查找上下文相关的条目 |
load_project | 激活项目 + 获取完整简报 + 最近的会话 |
read_project | 读取项目但不激活(用于比较或参考) |
create_project | 按标准架构创建新的项目条目 |
list_projects | 列出所有项目及其状态摘要 |
flush_context | 将当前会话上下文保存到长期记忆 |
move_nodes | 将子树移动到其他父节点下(也存在于整理服务中) |
set_active_device | 注册设备并在设备间切换 |
hmem-curate — 维护服务(11)
| 工具 | 功能 |
|---|---|
memory_stats | 按前缀统计数量、总 token 数、收藏项、主题标签和陈旧条目列表 |
memory_health | 查找失效链接、孤立标签、空条目和断开的链 |
export_memory | 将整个 .hmem 导出为可移植的 JSON 快照 |
import_memory | 将 JSON 快照导入 .hmem(破坏性操作) |
update_many | 批量更新一组条目(irrelevant、标签、正文等) |
tag_bulk | 在多个条目中添加或移除标签 |
tag_rename | 在所有条目中全局重命名标签 |
move_memory | 将整个条目移动到新的 ID 槽位 |
move_nodes | 将子树移动到其他父节点下(也存在于主服务中) |
rename_id | 重命名条目的 ID;重写所有指向该条目的链接 |
reset_memory_cache | 使内存中的 L1 缓存失效(在直接写入 SQL 后使用) |
日常使用的 hmem 服务由 hmem init 自动注册。hmem-curate 默认不启用,因为其中的工具具有破坏性——需要整理时再注册:
npx hmem mcp-add-curate # adds the curate server to Claude Code (user scope)
然后仅在整理会话期间通过 /mcp 启用它。其他 MCP 客户端请参阅手动设置。
CLI 命令
执行 npm install -g hmem-mcp 后,hmem 二进制文件会加入 PATH。
面向用户
| 命令 | 用途 |
|---|---|
hmem init | 为 AI 工具(Claude Code、OpenCode、Gemini CLI、Cursor、Windsurf、Cline)提供交互式安装程序。标志:--global / --local / --tools <list> / --dir <path> / --no-example |
hmem update-skills | 将捆绑的技能文件复制/同步到检测到的 AI 工具(在 npm install 时自动调用) |
hmem mcp-add-curate | 在 Claude Code 中注册 hmem-curate MCP 服务(可选;整理时通过 /mcp 启用) |
hmem doctor | 检测宿主配置中过时或已弃用的 hmem MCP 条目 |
hmem stats | 记忆统计 + 按项目估算 token 数 + 🔴 4k 阈值标记 |
hmem setup-hook | 将 SessionStart 钩子重新添加到 Claude Code 设置中(如果已移除) |
hmem version | 显示版本 |
钩子驱动程序(由 AI 工具调用,不要手动调用)
| 命令 | 接入位置 | 功能 |
|---|---|---|
hmem hook-startup | UserPromptSubmit | 注入首条消息的上下文(记忆概览、项目列表、同步状态)。定期提醒创建检查点。从 stdin 读取 JSON |
hmem log-exchange | Stop(同步) | 将最新交互追加到当前活动的 O 条目 |
hmem checkpoint | Stop(异步) | 在后台调用 Haiku/DeepSeek——提取经验、错误和决策;更新项目交接备注 |
hmem context-inject | SessionStart[clear] | 在 /clear 后注入项目 + 规则上下文 |
hmem deactivate | SessionStart[clear] | 清除当前会话的活动项目 |
hmem statusline | statusLine | 渲染 Claude Code 状态栏(设备 · 活动项目 · 检查点计数)。从 stdin 读取 JSON |
整理
| 命令 | 用途 |
|---|---|
hmem delete <ID> | 永久删除条目(仅限整理者,绝不会同步) |
hmem migrate-o-entries | 将 O 条目迁移到当前项目绑定的架构 |
hmem summarize-session <id> | 为会话生成摘要节点 |
同步(需要安装 hmem-sync)
| 命令 | 用途 |
|---|---|
hmem sync push | 将本地记忆推送到同步服务器 |
hmem sync pull | 从同步服务器拉取最新记忆 |
hmem sync status | 显示服务器 URL · 身份验证状态 · 上次同步时间戳 |
hmem sync setup [--join] | 交互式设置密码短语和设备 |
备份 / 迁移
| 命令 | 用途 |
|---|---|
hmem export-staging <hmem> <json> | 将 .hmem SQLite 导出为可移植的 JSON 暂存文件 |
hmem import-staging <json> <hmem> | 将 JSON 暂存文件重新导入 .hmem |
hmem serve 会直接启动 MCP stdio 服务——你的 AI 工具会自动启动它;你只需在调试时手动运行。
记忆类别
默认前缀(可通过 hmem.config.json 中的 prefixes 配置):
| 前缀 | 类别 | 示例 |
|---|---|---|
| P | 项目 | hmem | Active | TS/SQLite/npm |
| L | 经验教训 | HMEM_AGENT_ID must be set in hooks — resolveHmemPath falls back to wrong DB |
| T | 任务 | T0033 hmem-sync SaaS monetization — recurring monthly tier design |
| E | 错误 | 158 spurious O-entries created when Haiku MCP lacked HMEM_NO_SESSION guard |
| D | 决策 | Project-based O-entries over session-based — sessions are meaningless |
| M | 里程碑 | v1.0.0 — package renamed to hmem, npm rebrand complete |
| S | 技能 | Skill: TypeScript debugging with source maps |
| N | 导航器 | 高层导航条目(某个主题的目录) |
| H | 人员 | User Skill: TypeScript 9, Architecture 9, React 3 |
| R | 规则 | Max one npm publish per day — batch changes |
| O | 原始记录 | 自动记录的对话历史(每次交流、每台设备) |
| I | 基础设施 | Strato Server | Active | Linux | Ubuntu 22.04 |
| C | 约定 | Tag scheme: lowercase, prefer existing tags before inventing |
在 hmem.config.json 的 prefixes 下列出自定义前缀(例如,A 表示应用,F 表示函数参考),即可添加这些前缀——它们会自动出现在 read_memory({ prefix: "X" }) 筛选条件中。
快速开始
1. 安装
npm install -g hmem-mcp
2. 运行交互式安装程序
npx hmem init
它会检测你的 AI 工具、创建记忆目录、配置 MCP,并安装所有钩子:
| 钩子 | 时机 | 作用 |
|---|---|---|
UserPromptSubmit | 每条消息 | 第一条消息:加载记忆概览。每第 N 条:提醒创建检查点 |
Stop(同步) | 每次响应 | 将交流记录到当前 O 条目 |
Stop(异步) | 每次响应 | 由 Haiku 自动为未命名会话添加标题 |
SessionStart[clear] | 执行 /clear 后 | 重新注入项目上下文 |
3. 验证
重启 AI 工具,然后:
read_memory()
空响应 = 正常工作(首次运行)。错误 = 检查故障排除部分。
手动设置
Claude Code — 编辑 ~/.claude/.mcp.json
{
"mcpServers": {
"hmem": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/hmem/dist/mcp-server.js"],
"env": {
"HMEM_PROJECT_DIR": "/home/yourname/.hmem",
"HMEM_AGENT_ID": "DEVELOPER"
}
}
}
}
查找路径:
echo "Node: $(which node)"
echo "Server: $(npm root -g)/hmem/dist/mcp-server.js"
Open Code — 编辑 ~/.config/opencode/opencode.json
{
"mcp": {
"hmem": {
"type": "local",
"command": ["/absolute/path/to/node", "/absolute/path/to/hmem/dist/mcp-server.js"],
"environment": { "HMEM_PROJECT_DIR": "/home/yourname/.hmem" },
"enabled": true
}
}
}
Cursor / Windsurf / Cline
编辑 ~/.cursor/mcp.json、~/.codeium/windsurf/mcp_config.json 或 .vscode/mcp.json:
{
"mcpServers": {
"hmem": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/hmem/dist/mcp-server.js"],
"env": { "HMEM_PROJECT_DIR": "/home/yourname/.hmem" }
}
}
}
配置
HMEM_PROJECT_DIR 中的 hmem.config.json(或 Agents/NAME/ 中):
{
"memory": {
"maxCharsPerLevel": [200, 2500, 10000, 25000, 50000],
"maxDepth": 5,
"checkpointMode": "auto",
"checkpointInterval": 5,
"recentOEntries": 10,
"maxTitleChars": 50,
"prefixes": { "X": "Custom" }
},
"sync": {
"serverUrl": "https://your-server/hmem-sync",
"userId": "yourname",
"salt": "...",
"token": "..."
}
}
| 键 | 默认值 | 作用 |
|---|---|---|
checkpointMode | "remind" | "auto" = 后台 Agent 写入 L/D/E。"remind" = 向主 Agent 显示提示 |
checkpointInterval | 5 | 检查点之间的交互轮数。0 = 禁用 |
checkpointProvider | "anthropic" | "anthropic" 或 "openai"(任何兼容 OpenAI 的服务:DeepSeek、Groq、……) |
checkpointModel | "claude-haiku-4-5-20251001" | 已配置服务提供商的模型名称 |
checkpointBaseUrl | — | 兼容 OpenAI 的基础 URL(例如 https://api.deepseek.com/v1) |
checkpointApiKeyEnv | 服务提供商默认值 | 保存 API 密钥的环境变量。默认值:ANTHROPIC_API_KEY 或 OPENAI_API_KEY |
recentOEntries | 10 | 在 load_project 中显示的近期会话数 |
prefixes | 内置 | 添加自定义条目类型 |
所有键都是可选的。缺少的键将使用默认值。
各运行环境的检查点设置
自动检查点 Agent 会在每 N 次交互后于后台运行。它需要调用大模型,有三种自动选择的方式:
- 环境变量中有 API 密钥(任何运行环境)→ 直接调用服务提供商 API。请在
hmem.config.json中配置checkpointProvider、checkpointModel和checkpointApiKeyEnv。适用于 Pi、Hermes、OpenCode 和 Claude Code。 - 没有 API 密钥,但 PATH 中有
claudeCLI → 使用子进程回退方案(claude -p)。Claude Code / Claude Max 用户无需配置。 - 两者都没有 → 检查点会失败,并提示配置错误。
推荐的低成本设置(DeepSeek,约比 Haiku 便宜 10 倍):
{
"memory": {
"checkpointMode": "auto",
"checkpointProvider": "openai",
"checkpointModel": "deepseek-chat",
"checkpointBaseUrl": "https://api.deepseek.com/v1",
"checkpointApiKeyEnv": "DEEPSEEK_API_KEY"
}
}
然后在你的 shell 配置文件中执行 export DEEPSEEK_API_KEY=sk-...。适用于任何运行环境。
Claude Code / Claude Max(无需配置): 无需设置服务提供商选项——子进程回退方案会使用你现有的 claude 登录信息。
各运行环境的交互日志记录: Claude Code 使用 Stop hooks(由 npx hmem init 安装)。Pi 使用内置扩展(src/extensions/pi-hmem.ts)。Hermes 需要 hermes-hmem 插件(参见 plugins/hermes-hmem/README.md)。OpenCode 使用与 Claude Code 相同的 hook 系统。
⚠ Pi 用户: 基于 Hook 的交互日志记录目前在 Pi 运行时中无法正常工作。交互不会自动保存到 O 条目。在此问题解决之前,可通过
hmem checkpoint手动创建检查点。
跨设备同步
使用零知识 AES-256-GCM 加密,在所有设备间同步记忆。
npm install -g hmem-sync
npx hmem-sync connect # Interactive wizard — first device creates, others join
将 HMEM_SYNC_PASSPHRASE 添加到 MCP 配置中,即可在每次读写时自动同步。
多服务冗余
{
"sync": [
{ "name": "primary", "serverUrl": "https://server1/hmem-sync", "userId": "me", "salt": "...", "token": "..." },
{ "name": "backup", "serverUrl": "https://server2/hmem-sync", "userId": "me", "salt": "...", "token": "..." }
]
}
公告
向所有设备上已同步的 Agent 广播:
npx hmem-sync announce --message "Server URL changing — update your config!"
Windows
在安装了 Git for Windows 的 Windows 系统上,Claude Code 默认会通过 Git Bash 执行 hook 和 statusLine 命令。Git Bash 的 MSYS2 运行时在启动时会间歇性崩溃,导致命令尚未运行就被终止。
修复方法:在 ~/.claude/settings.json 的每个 hook 命令和 statusLine 中添加 "shell": "powershell"。
完整可用配置请参见 settings.windows.example.json。主要区别如下:
{
"env": {
"HMEM_PATH": "C:/Users/YOUR_USERNAME/.hmem/Agents/DEVELOPER/DEVELOPER.hmem"
},
"hooks": {
"Stop": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "node C:/Users/YOUR_USERNAME/AppData/Roaming/npm/node_modules/hmem/dist/cli.js log-exchange",
"shell": "powershell"
}]
}]
},
"statusLine": {
"type": "command",
"command": "node C:/Users/YOUR_USERNAME/AppData/Roaming/npm/node_modules/hmem/dist/cli.js statusline",
"shell": "powershell"
}
}
运行 npm root -g,获取适用于你机器的正确 node_modules 路径。
Windows 上的 statusLine: 设置
"shell": "powershell"后即可稳定运行。不设置时,statusLine 会间歇性消失。
故障排查
| 问题 | 修复方法 |
|---|---|
read_memory() 失败 | 检查 HMEM_PROJECT_DIR 是否为绝对路径,以及目录是否存在 |
nvm:node not found | 使用绝对路径:which node → 将其用作 "command" |
| Hook 未触发(Claude Code) | 重启 Claude Code。检查 ~/.claude/settings.json 是否包含全部 4 个 hook |
| Hook 未触发(Pi) | 已知问题——Pi 的 hook 集成目前无法正常工作。可使用 hmem checkpoint 手动创建检查点作为临时解决方法 |
| 未记录交互 | 检查 HMEM_AGENT_ID 是否与 Agents/ 目录名称一致 |
| 同步失败 | 运行 npx hmem-sync connect 重新进行身份验证 |
更新
npm update -g hmem # MCP server + SDK
npm update -g hmem-sync # Sync (if installed)
npx hmem update-skills # Refresh skill files
License
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。