jahwag/zestmem
GitHub: jahwag/zestmem
ZestMem 是一个自托管的分布式记忆服务,为 AI 编程代理团队提供持久化、可语义检索的上下文知识存储,解决代理跨会话丢失决策信息的问题。
Stars: 1 | Forks: 0
[](https://github.com/jahwag/zestmem/actions/workflows/ci.yml)
[](https://github.com/jahwag/zestmem/actions/workflows/security.yml)
[](https://github.com/jahwag/zestmem/releases/latest)
[](LICENSE)
[](https://discord.gg/pR4qeMH4u4)
编程代理在会话结束时会丢失有用的决策。ZestMem 为团队提供了一个持久且可搜索的记忆服务,而无需存储他们的对话记录,也无需将其操作知识交给托管平台。
[](docs/images/zestmem-demo.mp4)
代理使用两个核心 MCP 工具:
```
agent-a → remember("Production deploys require signed images")
↓
PostgreSQL + vector search
↓
agent-b → recall("What constrains production deploys?")
"Production deploys require signed images"
```
ZestMem 是自托管的、经过身份验证的,专为使用 Codex、Claude Code、OpenCode 或任何 Streamable HTTP MCP 客户端的持久化团队而设计。
## 为什么选择 ZestMem?
| 替代方案 | 优势 | ZestMem 的增值 |
| --- | --- | --- |
| Markdown 和 JSON 文件 | 简单的本地笔记 | 排序召回、并发代理、所有权以及修订历史 |
| Redis 或 NATS | 快速协调和队列 | 具有来源追溯和语义检索的持久化知识 |
| 向量数据库 | 相似性搜索 | MCP 语义、访问控制、生命周期、归属以及可审计性 |
| 托管的代理记忆 | 快速入门 | 自托管以及对凭据、数据保留策略和数据存储位置的控制 |
ZestMem 不是对话记录器,也不能替代
[AgentBus](https://github.com/jahwag/agentbus)。AgentBus 负责在代理之间传递持久化消息;而 ZestMem 则用于保存他们日后应重用的知识。
## 五分钟入门
ZestMem 在设计上贴合生产环境:使用带有 pgvector 的 PostgreSQL 17、本地嵌入服务以及 OIDC 身份验证。系统不提供关闭身份验证的生产模式。
环境要求:
- Docker Compose 或 Podman
- OIDC 签发者和受众
- 本地主机上可用的 `8080` 和 `15432` 端口
```
git clone https://github.com/jahwag/zestmem.git
cd zestmem
cp .env.example .env
chmod 600 .env
```
编辑 `.env` 并至少设置以下内容:
```
POSTGRES_PASSWORD=replace-with-a-long-random-value
OIDC_ISSUER=https://login.microsoftonline.com/YOUR_TENANT_ID/v2.0
OIDC_AUDIENCE=api://YOUR_MEMORY_API_APP_ID
```
然后启动整个技术栈:
```
docker compose up -d
curl --fail http://127.0.0.1:8080/readyz
```
MCP 端点为 `http://127.0.0.1:8080/mcp`。内存浏览器位于 `http://127.0.0.1:8080/console/`。
预构建的二进制文件、校验和、签名、来源证明以及 SBOM 可从 [GitHub Releases](https://github.com/jahwag/zestmem/releases/latest) 获取。
## 代理所见
一旦操作员创建了主体和空间,经过身份验证的 MCP 客户端就可以存储聚焦的记忆:
```
{
"name": "remember",
"arguments": {
"target_space_id": "team-space-id",
"title": "Production image policy",
"body": "Production deploys require signed container images.",
"use_when": "Planning or reviewing a production deployment",
"kind": "decision",
"topics": ["deployment", "security"],
"idempotency_key": "deploy-image-policy-v1"
}
}
```
其他代理可以在不知道标题或确切措辞的情况下检索它:
```
{
"name": "recall",
"arguments": {
"query": "What constrains production deploys?",
"space_ids": ["team-space-id"],
"limit": 5
}
}
```
召回功能会返回排序后的候选结果和精简的元数据。仅当客户端明确读取选定的记忆时,才会获取完整正文。
## 架构
```
Codex / Claude Code / OpenCode
│
Streamable HTTP MCP
│
┌──────▼──────┐
OIDC ─►│ memoryd │◄─ memoryctl (operator)
└───┬─────┬───┘
│ │
PostgreSQL local embeddings
+ pgvector (TEI)
```
- PostgreSQL 是事实来源。
- Embeddings 提供候选检索;词法证据和元数据对客户端保持可见。
- 记忆具有版本控制、归因机制,并限定在特定空间范围内。
- 工作区声明可以限制哪些代理可以访问特定空间。
- 变更响应不会回显已存储的记忆正文。
## 运维方式
请将公共端点置于 TLS 保护之下,并保持 PostgreSQL、嵌入服务、健康检查和指标端口的私有性。当配置了 `MEMORY_DOMAIN` 时,包含的 Caddy 配置将通过 HTTPS 提供 MCP 端点服务。
对于远程部署,建议通过隧道访问控制台,而不是将其直接暴露:
```
ssh -N -L 18080:127.0.0.1:8080 user@memory-host
```
然后打开 `http://127.0.0.1:18080/console/`。
运维参考:
- [安全策略](SECURITY.md)
- [支持与 Orchard Discord](SUPPORT.md)
- [GitHub 备份与恢复](docs/github-backups.md)
- [版本验证](docs/verifying-releases.md)
- [发布流程](docs/releasing.md)
- [贡献指南](CONTRIBUTING.md)
健康检查端点(`/healthz`、`/readyz` 和 `/metrics`)属于运维接口,而非公开的产品 API。
## 项目状态
ZestMem 正处于积极开发阶段,并已发布签名的多平台二进制文件和容器镜像。随着越来越多的代理团队应用该模型,相关接口可能会进一步完善。
采用 [MIT License](LICENSE) 授权。
标签:AI智能体, EVTX分析, MCP, PostgreSQL, 人工智能, 向量检索, 测试用例, 用户模式Hook绕过, 记忆系统, 请求拦截