mcpField
C
compound-memory

compound-memory

本地服务
github.com/chinwe记忆与知识1今天更新

关于 compound-memory

compound-memory 是面向多 AI Agent 的本地共享记忆系统,将记忆保存为带元数据的 Markdown 文件,并通过使用反馈调整可信度、归档闲置内容及记录本地 git 历史。它提供 MCP 工具和 CLI,并支持可选语义检索。

主要功能

  1. 01以 Markdown 文件本地保存记忆
  2. 02共享与 Agent 私有命名空间
  3. 03根据使用反馈更新可信度
  4. 04闲置记忆归档并可恢复
  5. 05每次写入自动提交本地 git
  6. 06可选向量检索并回退到词法检索

适用场景

  1. 01让多个 Agent 共用项目约定和偏好
  2. 02跨会话检索已确认的事实与经验
  3. 03反馈记忆使用结果以调整可信度
  4. 04通过 CLI 检查记忆库状态

MCP 相关

该项目提供 MCP 服务,包含 memory_write、memory_search、memory_get、memory_link 和 memory_feedback 五种工具;也提供用于运维的 CLI。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"chinwe-compound-memory": {
"command": "uvx",
"args": [
"compound-memory"
],
"env": {
"COMPOUND_MEMORY_ROOT": "<COMPOUND_MEMORY_ROOT>",
"COMPOUND_MEMORY_AGENT_ID": "<COMPOUND_MEMORY_AGENT_ID>"
}
}
}
}
启动命令uvx compound-memory
需要配置的环境变量
COMPOUND_MEMORY_ROOTStore root directory. A leading ~ or $HOME/${HOME} is expanded; unset or blank falls back to $HOME/.agents/memory
COMPOUND_MEMORY_AGENT_IDStable host agent id (e.g. agent-claude). Required for a multi-agent store: process identity wins over a self-reported source. Unset is only for a single trusted caller; stats.attestation.warning and the server log say so

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypicompound-memory0.5.11

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

compound-memory

CI PyPI Python License: MIT

English | 简体中文

以本地优先的方式为多个 AI Agent 共享记忆——使用纯 Markdown 文件,随着使用不断积累价值。记忆以带有 frontmatter 注释的 Markdown 文件形式存储在你的磁盘上,每次确认使用都会增强记忆;被忽略的记忆会衰减并进入可恢复的归档,每次写入时都会自动提交到本地 git 历史记录。

为什么

每次 Agent 会话都从零开始:偏好需要重新询问,项目约定需要重新发现,同一个陷阱会再次踩中。compound-memory 为你的所有 Agent 提供一个共享存储:

  • 本地优先——数据不会离开你的机器;记忆是人类可读的 Markdown 文件,而不是不透明数据库中的行。
  • MCP 原生——仅提供 5 个工具(memory_write / memory_search / memory_get / memory_link / memory_feedback)作为唯一的读写边界;适用于任何 MCP 宿主(Claude Code、ZCode、WorkBuddy、……),并提供完整的命令行用于运维。
  • 持续积累——确认使用会提升置信度,相关记忆会作为邻近内容被召回,来自不同宿主的验证会计为独立证据,而蒸馏会将许多原始记忆合并为更少、更精炼的记忆。
  • 专为多 Agent 设计——提供所有人都能读取的 _shared 命名空间,以及由各宿主持有的 agent-* 私有命名空间;跨宿主验证按宿主跟踪。
  • 可选语义召回——通过 sqlite-vec + BGE 嵌入进行向量搜索;不可用时会自动平滑回退到纯词法搜索。使用 COMPOUND_MEMORY_EMBEDDING_MODEL(默认为 Xenova/bge-small-zh-v1.5)和 COMPOUND_MEMORY_EMBEDDING_DIM(默认为 512)覆盖模型;修改任一项都属于运维操作,需要显式执行 rebuild-index。

快速开始

面向 AI Agent

将这一行命令粘贴到你的编码 Agent(Claude Code、Cursor、ZCode、……)中,其余工作交给它完成:

Set up compound-memory (https://github.com/chinwe/compound-memory) — a local-first multi-agent shared memory (MCP server + CLI) — on this machine. Do not clone the repo for a normal install. Initialize the store with `uvx --from compound-memory compound-memory init` (defaults to ~/.agents/memory). Register its stdio MCP server in this host's MCP config: command `uvx`, args `--from compound-memory compound-memory-server`, env `COMPOUND_MEMORY_ROOT=$HOME/.agents/memory` and `COMPOUND_MEMORY_AGENT_ID=agent-<your-host-id>`. Verify by calling `memory_search` and expecting a `{"hits": [...]}` response; if the host needs a restart to load MCP servers, tell me. Use `uv run --directory <repo>` only when developing against a local checkout. Short English setup and the search → feedback → write loop: docs/agent-integration.en.md. Full per-host configs: docs/agent-integration.md.
面向人类
1. 安装

Python ≥ 3.11。默认情况下不会克隆仓库:

# Default: PyPI. Hosts launch the MCP server with
#   uvx --from compound-memory compound-memory-server
# Optional CLI on PATH:
uv tool install compound-memory   # or: pip install compound-memory

# Developer / local checkout only — not the default host launch
git clone https://github.com/chinwe/compound-memory.git
cd compound-memory && uv sync --extra dev
2. 初始化存储

默认路径为 ~/.agents/memory;可通过 COMPOUND_MEMORY_ROOT 环境变量覆盖。开头的 ~ 或 $HOME 会展开;空白覆盖值会回退到默认值。

uvx --from compound-memory compound-memory init
# after `uv tool install`: compound-memory init
3. 将其接入 MCP 宿主(推荐)

这样日常使用的 Agent 就能自动读写共享存储。无需仓库路径:

{
  "mcpServers": {
    "compound-memory": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "compound-memory", "compound-memory-server"],
      "env": {
        "COMPOUND_MEMORY_ROOT": "$HOME/.agents/memory",
        "COMPOUND_MEMORY_AGENT_ID": "agent-<your-host-id>"
      }
    }
  }
}

uvx 接受包名;服务控制台脚本为 compound-memory-server,因此必须使用 --from。如果 uvx 不在 PATH 中,请将 command 设为绝对路径 ~/.local/bin/uvx。对于任何多 Agent 存储,COMPOUND_MEMORY_AGENT_ID 都是必需的:进程身份优先于模型声称的身份,因此伪造的 source 无法写入其他宿主的命名空间,也无法虚增跨宿主验证数据。对于共享 _shared 的使用,如果该变量未设置或为空,将直接失败:stats 和 doctor 会以状态码 1 退出(但仍会打印诊断信息)。MCP 工具会继续运行,且服务会在启动时记录同样的警告。没有该 ID 时,身份由使用者自报,可能被伪造。

本地检出是开发者使用方式,不是第二种默认方式:执行 uv sync --extra dev 后,command 为 uv,args 为 ["run", "--directory", "<absolute-repo-path>", "compound-memory-server"]。

验证:让你的 Agent 调用 memory_search(使用任意关键词)——如果返回 {"hits": [...]},说明连接成功。或者运行 uvx --from compound-memory compound-memory doctor(设置了 COMPOUND_MEMORY_AGENT_ID 且存储可写时退出状态码为 0;未设置或为空时退出状态码为 1)。

Claude Code 插件

需要 Claude Code 和 uv(uvx 必须位于 PATH 中)。本仓库托管一个可自托管的市场。向 Anthropic 官方目录提交插件不在本项目范围内。

claude plugin marketplace add chinwe/compound-memory
claude plugin install compound-memory@compound-memory

这会安装 integrations/claude,并通过 COMPOUND_MEMORY_AGENT_ID=agent-claude 启动 uvx --from compound-memory compound-memory-server(如果需要使用其他 ID,可在宿主中覆盖该环境变量)。SessionStart 钩子会在新会话中添加一条简短提醒;验证和禁用步骤见插件 README。这些市场和插件文件不包含在 PyPI sdist 或 wheel 中:MANIFEST.in 会将其排除,且 scripts/wheel_smoke.sh 会检查构建产物。

WorkBuddy / CodeBuddy 插件

需要 WorkBuddy 或 CodeBuddy,以及 uv(uvx 必须位于 PATH 中)。本仓库在 .codebuddy-plugin/marketplace.json 中托管一个可自托管的市场。

/plugin marketplace add chinwe/compound-memory
/plugin install compound-memory@compound-memory

这会安装 integrations/workbuddy,并通过 COMPOUND_MEMORY_AGENT_ID=agent-workbuddy 启动同一个 PyPI 服务。SessionStart 钩子会在新会话中显示一条简短的硬性规则提醒,且不会读取存储库。Claude 市场文件保持不变。

ZCode 插件

需要 ZCode 桌面应用和 uv(uvx 必须位于 PATH 中)。ZCode 将本仓库的 .claude-plugin/marketplace.json 作为其市场目录,因此无需单独的市场文件。

克隆仓库,然后在 ZCode 中依次选择:插件市场 → 添加 → 添加插件市场,粘贴克隆路径(即包含 .claude-plugin/ 的目录),并在 个人 → compound-memory 下安装 Compound Memory (ZCode)。这会安装 integrations/zcode,并通过 COMPOUND_MEMORY_AGENT_ID=agent-zcode 启动同一个 PyPI 服务,同时提供 SessionStart 硬性规则提醒和简短技能。该插件的 MCP 服务名为 compound-memory;如果 ~/.zcode/cli/config.json 已注册同名服务(手动配置方式,见 docs/agent-integration.md 的 §3),请只保留其中一种配置。

4. 下一步

将 skills/compound-memory/SKILL.md 中的使用协议(搜索 → 反馈 → 写入循环)注入宿主。简短英文版见 docs/agent-integration.en.md;完整协议见 docs/agent-integration.md §6。

演示

compound-memory CLI 演示:init → write → search → feedback → stats

一个完整循环:write → search → feedback(含跨主机首次验证奖励)→ 存储健康状况。以下是 v0.4.0 的实际输出,长负载已截短:

uv run compound-memory init
{ "ok": true, "root": "~/.agents/memory" }

两台不同的主机各写入一条稳定事实(新记忆的 confidence 从 0.5 开始,uses 为 0):

uv run compound-memory write \
  "Deploy serverless functions on this platform times out at 10s — keep handlers under that budget" \
  fact agent-claude --key vercel-timeout
{
  "id": "20261007_86adf1",
  "ns": "_shared",
  "type": "fact",
  "source": "agent-claude",
  "content": "Deploy serverless functions on this platform times out at 10s — keep handlers under that budget",
  "confidence": 0.5,
  "uses": 0,
  "key": "vercel-timeout",
  "validated_by": []
  ...
}
uv run compound-memory write \
  "User prefers concise replies with tables and code examples" \
  fact agent-zcode --key user-style

搜索按得分排序(--explain 会附加每条命中的排序组成部分,供调试使用):

uv run compound-memory search "serverless timeout"
[
  {
    "id": "20261007_86adf1", "score": 1.0292, "similarity": 1.0,
    "type": "fact", "source": "agent-claude",
    "content": "Deploy serverless functions on this platform times out at 10s — keep handlers under that budget",
    "neighbors": []
  },
  {
    "id": "20261007_6a0c0c", "score": 0.5211, "similarity": 0.4919,
    "type": "fact", "source": "agent-zcode",
    "content": "User prefers concise replies with tables and code examples",
    "neighbors": []
  }
]

另一台主机使用了这条记忆,并按默认的 success 结果反馈回来——uses +1,conf +0.1;由于报告者 agent-workbuddy ≠ 来源 agent-claude,首次跨主机验证还会额外增加 +0.15:

uv run compound-memory feedback 20261007_86adf1 agent-workbuddy
{
  "id": "20261007_86adf1",
  "confidence": 0.75,
  "uses": 1,
  "last_used": "2026-10-07",
  "validated_by": ["agent-workbuddy"],
  "evidence": {
    "success_count": 1, "failure_count": 0, "contradiction_count": 0,
    "last_verified": "2026-10-07",
    "recent": [{ "date": "2026-10-07", "agent": "agent-workbuddy", "outcome": "success" }]
  }
  ...
}

一目了然地查看存储健康状况(固定分桶直方图、活跃度、提炼产出):

uv run compound-memory stats
{
  "total": 2, "archived": 0, "active": 2,
  "avg_confidence": 0.625,
  "by_type": { "fact": 2 },
  "by_ns": { "_shared": 2 },
  "review_queue_entries": 0,
  "uses_histogram": { "0": 1, "1-2": 1, "3-5": 0, "6-9": 0, "10+": 0 },
  "confidence_histogram": { "<0.3": 0, "0.3-0.6": 1, "0.6-0.8": 1, "0.8-1.0": 0 },
  "recent_feedback_7d": 1, "cross_validated": 0,
  "distilled_total": 0, "distilled_recent_7d": 0
}

当前的 stats 还包含 retrieval(mode:vector 或 lexical,以及向量通道关闭时的 reason)、attestation(attested,以及未设置 COMPOUND_MEMORY_AGENT_ID 时的 warning),和 expired_active(有效期 valid_until 已过的活跃区记忆;此快照中为 0)。cross_validated 统计 validated_by 中列有至少两个不同 Agent 的记忆——上面的单次跨主机验证正确地使其保持为 0。memory_search 携带相同的 retrieval 对象。CLI search 始终返回纯数组。未设置或留空 COMPOUND_MEMORY_AGENT_ID 时,CLI stats 以状态码 1 退出;doctor 是单页检查(认证、检索、写入锁、git),使用相同规则,并额外检查根目录、锁和 git 错误。MCP 工具不会因缺少 Agent ID 而停止。

请注意以下三点:

  • 新记忆的 confidence 从 0.5 开始,并根据证据变化——反馈会携带结果:success 会提高置信度,failure 会降低置信度(下限为 0.05),contradiction 会将其冻结并放入审核队列,obsolete 会立即归档。同一主机的 success 基础增量会记录在 evidence.host_bumps 中,每台主机最多增加 0.3(单台主机最多可使置信度达到 0.8;ADR-0012)。
  • 来自不同主机的首次验证会获得独立奖励(每台主机、每条记忆仅一次),并留下 validated_by / evidence 记录——置信度代表正确性的证据,而非受欢迎程度。
  • 命中项会自动嵌入一跳邻居(此处为空——尚无链接;memory_link 会创建双向链接,后续检索时可免费一并召回)。

复利如何产生

复利来源机制
① 使用强化每次 memory_feedback 都会推进 uses 和 last_used。置信度随结果变化。默认的 success:+0.1,该主机的基础增量存储在 evidence.host_bumps 中,上限为 0.3(单台主机最多可使置信度达到 0.8;ADR-0012)。failure:−0.2(下限为 0.05,重复失败会累积)。contradiction:冻结置信度,并添加一条审核队列记录。obsolete:立即归档。unknown:记录事件,置信度不变
② 链接价值memory_link 会创建双向链接;memory_get 会提取一跳邻居;search 命中项会嵌入最多 3 个精简邻居(仅活跃记忆;使用 --no-neighbors 可禁用)
③ 提炼distill-plan(CLI,确定性候选项 + suggested_action:merge / promote / review)→ Agent 编写成品 → distill-apply 原子提交(成品链接回来源;来源会归档,但可恢复)
④ 跨 Agent 验证仅对 success,来自非 source 主机的首次反馈会增加 +0.15(每台主机、每条记忆仅一次;记录在 validated_by 中;不占用同一主机的 host_bumps 上限)

评分(权重是 src/compound_memory/scoring.py 中的 W_* 常量):0.70·similarity + 0.15·confidence + 0.10·recency(0.5+0.5·e^(−Δt/τ)) + 0.05·type weight。启用向量通道后,排序会切换为 RRF 融合,并使用 ε=0.04 的先验值打破平局(参见规范中的“index as cache”)。

5 个 MCP 工具

工具用途要点
memory_write写入记忆type:episode/fact/insight/skill/decision;source:你的 Agent ID;为 fact/insight/decision 提供稳定的 key;可选的 valid_from/valid_until(ISO 日期)、project 范围和 lesson_role(lesson 或 avoid;普通记忆可省略)。超过 262144 个字符的 content 会被拒绝,且不会写入任何内容
memory_search检索返回按分数排序的 {"hits": [...], "count", "retrieval"}(默认 top_k=5);最多嵌入 3 个经过截断的单跳邻居;默认使用双通道(_shared + 调用者自己的私有 ns);可选的 project(失败即关闭)和 explain。CLI search 仍返回裸数组
memory_get按 ID 获取始终包含 found 键;提取单跳邻居,不设数量上限,并保留已归档的邻居(search 最多返回 3 个,将内容截断至 80 个字符,并丢弃已归档的邻居)。两种路径都会省略已过期的邻居。访问私有 ns 目标需要 reader
memory_link链接两条记忆双向链接;两侧必须位于同一 ns;私有 ns 链接需要所有者身份
memory_feedback报告记忆的实际表现每种结果都会递增 uses 并更新 last_used。默认 outcome=success:conf+0.1,同一主机的基础增量通过 host_bumps 封顶为 0.3(单个主机最高为 0.8;ADR-0012);首次跨主机验证 +0.15(不受封顶限制)。failure −0.2(下限 0.05);contradiction 会冻结置信度并加入审核队列;obsolete 会立即归档;unknown 会记录事件,但置信度不变。采用命中结果后必须调用——这是让存储不断累积价值的闭环

工具描述中嵌入了协议规则本身,因此即使没有注入宿主侧规则,Agent 也能保持闭环。简短的英文闭环说明:docs/agent-integration.en.md。完整参数参考:docs/agent-integration.md。

CLI

以下是检出仓库后的命令(在克隆目录中运行 uv run)。未克隆仓库的宿主可改用 uvx --from compound-memory compound-memory …。

uv sync --extra dev              # first clone: build .venv (later `uv run` reuses it)

uv run compound-memory init               # initialize an empty store
uv run compound-memory write "Vercel Serverless has a 10s timeout" episode agent-workbuddy
uv run compound-memory search "Vercel timeout"   # default top_k=5; hits embed one-hop neighbors (limit 3, --no-neighbors to disable)
uv run compound-memory feedback <id> agent-claude
uv run compound-memory decay          # run from cron
uv run compound-memory revive <id>    # revive an archived memory
uv run compound-memory distill-plan   # distillation candidates: suggested_action is merge / promote / review; also report-only negative_salience and contradiction_pairs
uv run compound-memory dream --ns _shared   # read-only report: distill-plan section (including the negative sections) + decay_signals + equal stats snapshots (no writes, no LLM)
uv run compound-memory maintain            # one ops pass: read-only dream → optional decay → health-snapshot. Decay is off unless --with-decay or RUN_DECAY=1 (DECAY=1). No --propose, no dream-apply
uv run compound-memory dream --ns _shared --propose  # system proposes: qualifying clusters go to <root>/distill/dream-proposals.json; a human runs dream-apply. Default off; empty pack is []
uv run compound-memory dream-apply --proposals apply.json --source agent-workbuddy --dry-run  # gated apply preview; drop --dry-run to run distill-apply on admitted rows
uv run compound-memory distill-apply "the merged insight" insight agent-workbuddy --sources <id1>,<id2>  # atomic: product (links, origin=distillation) + source archival, one commit
uv run compound-memory doctor           # one-page health check; exit 1 if AGENT_ID is unset, root is missing, the lock is broken, or git is unusable
uv run compound-memory stats            # health: uses/confidence buckets + liveness + distillation yield; exit 1 if AGENT_ID is unset
uv run compound-memory rebuild-index  # rebuild the search cache anytime
uv run compound-memory review-queue   # conflict queue (CLI-only entry)
uv run compound-memory git-log        # audit trail

更多操作:explain <id>(查看单条记忆的置信度构成和证据详情)、forget <id> --agent <id>(永久移除,ADR-0009)、review-resolve(裁定冲突)、extract <transcript|dir>(确定性地挖掘会话转录)。

架构

Agent (MCP client / CLI)
  └─ memory_write | memory_search | memory_get | memory_link | memory_feedback
       └─ MemoryStore (~/.agents/memory)
            ├─ namespaces/_shared/{episode,fact,insight,skill,decision}/*.md   shared area
            ├─ namespaces/agent-*/...                                          private areas
            ├─ archive/...                                                     decayed archive (revivable)
            ├─ index/tokens.json                                               rebuildable lexical cache
            ├─ index/vectors.db                                                rebuildable vector cache (optional)
            ├─ review-queue.md                                                 fact/insight/decision conflict queue
            └─ .git/                                                           auto-commit on every write

定时蒸馏准备(launchd / cron / systemd)

根据 ADR 0001,确定性准备任务按计划运行,而判断工作(总结 / 合并)仍由调用方 Agent 负责。每天 09:00,dream 会将只读报告写入 <root>/distill/last-plan.json(distill 对象是候选列表;不会归档或遗忘任何内容)。调度器持续调用 dream;dream-apply 是由调用方明确提供的应用操作,不属于定时器的一部分。选择一种调度器——launchd(macOS 标准工具,可在睡眠后补执行)、systemd user timer(Persistent=true,同样可补执行)或 cron(可移植性最高,但不会补执行)——三者都会运行同一个平台无关的 scripts/distill-prepare.sh。现成模板:scripts/com.compound-memory.distill-prepare.plist.tmpl(launchd)、scripts/compound-memory-distill-prepare.{service,timer}.example(systemd)和 scripts/compound-memory-distill-prepare.cron.example(cron)。填好的 launchd / systemd / cron 命令见中文版 README。脚本会运行 set -eu:任何失败都会以非零状态退出(可通过 launchctl list / systemctl --user list-timers / cron 邮件查看,日志位于 distill/prepare.log)。distill/ 是运行时产物目录(会自动加入 git 忽略列表)——不会产生提交噪声;只有在 Agent 完成判断后,distill-apply 才会提交一个原子提交。

每日维护(一个定时任务)

compound-memory maintain 是唯一的每日任务:只读执行 dream(写入 <root>/distill/last-plan.json,生成与 dream 相同的报告,绝不使用 --propose)→ 可选的 decay → health-snapshot。快照会在衰减后运行,因此如果运行了衰减,记录的就是衰减后的存储状态。默认执行 dream + health-snapshot。衰减默认关闭,除非传入 --with-decay 或设置 RUN_DECAY=1(DECAY=1 是别名)。任何步骤失败都会以非零状态退出,并在 stderr 中指出失败步骤;后续步骤不会运行。

scripts/distill-prepare.sh 仍是仅执行 dream 的准备路径。不要将定时任务指向 dream --propose、dream-apply 或 distill-apply(ADR-0001 / #72 / #97):提案和合并仍是需要人工/Agent 明确执行的步骤。scripts/daily-maintain.sh 是轻量的 launchd/cron 包装脚本(在 PATH 中解析 uv,然后执行 compound-memory maintain)。它不会编排这些步骤。

在检出目录中,只需一行 cron 配置(关闭衰减):

0 9 * * * COMPOUND_MEMORY_ROOT=$HOME/.agents/memory $HOME/.local/bin/uv run --project <repo> compound-memory maintain >> $HOME/.agents/memory/distill/daily-maintain.log 2>&1

启用衰减的同一任务:在前面加上 RUN_DECAY=1。launchd 的 ProgramArguments 数组可以使用相同的 uv、run、--project、<repo>、compound-memory、maintain(在 EnvironmentVariables 中设置 COMPOUND_MEMORY_ROOT,并且仅在需要衰减时设置 RUN_DECAY)。轻量包装脚本是确保不依赖 PATH 的替代方案:使用设置了 UV_BIN 的 /bin/sh <repo>/scripts/daily-maintain.sh。如果定时任务只需刷新 dream 报告,请继续使用 distill-prepare.sh。

文档

开发

uv run pytest tests/ -q     # full suite (MCP tool boundary + distillation + lifecycle/index/CLI + input defense)
uv run mypy src/compound_memory/   # whole package, non-strict except the modules below

storage.validation、storage.paths 和 server 使用 pyproject.toml 中按模块设置的严格标志进行检查(与 CI 在 Ubuntu / Python 3.13 上运行的 mypy 调用相同)。其他模块仍使用较宽松的全局配置。不要在 [[tool.mypy.overrides]] 块中设置 strict = true:mypy 会将该配置应用于全局选项,从而对整个包进行严格检查。

测试切入点:通过进程内的 mcp.Client(server) 测试 MCP 工具边界(无需子进程),并为核心模块(评分 / 索引 / 存储操作)编写单元测试。CI 会在 Linux 和 Windows 上,针对 Python 3.11/3.12/3.13 运行测试、类型检查,以及纯 wheel 安装冒烟测试。

平台支持

macOS、Linux 和 Windows 上的 Python ≥ 3.11。

macOS / LinuxWindows
安装pip / uv wheel 或克隆相同。CI 安装纯 wheel,并运行 init / write / search / 服务入口点
写入锁flock,等待锁释放msvcrt 字节范围锁,轮询最长 30s。等待超时则写入失败(WriteLockError);不会在未加锁的情况下继续
无法创建锁文件发出警告,继续写入,不加锁相同。这是文件系统故障,而非锁竞争
文件权限原子替换时保留 POSIX 模式位不支持 POSIX 权限;跳过权限对齐步骤
向量召回可选的 vec extra + 本地 BGE 模型使用相同的代码路径。Windows CI 不安装 vec extra;缺少该项时会执行词法搜索,并通过 stats.retrieval 报告
定时蒸馏准备launchd、systemd 用户定时器或 cron(仅 dream 使用 distill-prepare.sh)不提供官方 Task Scheduler 模板;需自行将 cron 或 Task Scheduler 指向 scripts/distill-prepare.sh
每日维护一个 cron/launchd 任务:compound-memory maintain(或 scripts/daily-maintain.sh)相同命令。仅在使用 --with-decay 或 RUN_DECAY=1 时执行衰减
Git 历史PATH 中的 git相同

发布

PyPI 版本不可变,且标签必须与 pyproject.toml 中的 version 匹配(发布工作流会验证这一点,若不匹配则明确报错)。发布通过 GitHub Actions + PyPI Trusted Publisher(OIDC,无需令牌)进行:推送类似 v0.1.0 的标签,release.yml 会自动构建并发布。


MCP Registry 名称:mcp-name: io.github.chinwe/compound-memory

server.json 记录 PyPI 软件包 compound-memory(stdio)。其中不包含仓库路径。主机配置仍使用 uvx --from compound-memory compound-memory-server,因为软件包名称与服务控制台脚本不同。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。