关于 Commons
Commons 是供并行 AI 编码会话共享记忆与协调工作的中心,也适用于使用独立 worktree 的 Claude Code 会话。它将任务认领、交接和决策保存在本地 SQLite 文件或可自托管的中心,帮助 Agent 避免重复或冲突修改。
主要功能
- 01认领任务并提示冲突
- 02共享记忆与决策
- 03交接未完成工作
- 04跨机器协调 Agent
- 05查看团队活动面板
适用场景
- 01避免两个会话编辑同一任务
- 02在编码会话间传递上下文
- 03协调不同机器上的 Agent
- 04跟踪团队工作与交接
MCP 相关
可自托管的中心通过 MCP 连接 AI 客户端,共享记忆和协调工具。本地 Claude Code 插件也提供记忆与协调工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e COMMONS_AGENT -e COMMONS_TOOLS ghcr.io/neoo-blue/commons-memory:0.36.1COMMONS_AGENTName this client goes by in CommonsCOMMONS_TOOLSTool listing: lite, core or all本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/neoo-blue/commons-memory:0.36.1stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Commons
同时运行多个 Claude Code 会话,不必担心它们重复或覆盖彼此的工作。
每个会话(例如,每个 Git 工作树对应一个会话)在开始任务前都会先向 Commons 确认。如果已有其他会话认领了任务,它就会收到通知并让出任务。已完成的工作、决策和交接都会共享,因此下一个会话可以在此基础上继续,而不是从头开始。所有内容都保存在一个本地 SQLite 文件中:无需 API 密钥、无需账户,也没有遥测。
/plugin marketplace add Neoo-Blue/commons-memory
/plugin install commons@commons-memory
需要 uv。每个文件夹对应一个 Agent(claude-code@<folder>),因此请在不同的工作树或检出目录中使用不同文件夹名称来运行并行会话。
两个会话、两个工作树、同一任务:
claude-code@payments-fix start_work("fix the payments retry", paths=["pay.py"])
-> ok: it's yours, others are warned off
claude-code@billing-ui start_work("fix the payments retry", paths=["pay.py"])
-> busy: claude-code@payments-fix has it since 02:33.
msg_send them to split it, or wait for their finish_work.
它与 claude-mem 和 Claude Code 自带的记忆功能协同工作:这些工具帮助单个会话记住信息,而 Commons 可避免多个会话发生冲突。该插件列出了 19 个工具(仅用于记忆和协调)。凭证和保险库工具不会列出,也不会要求提供密钥;只有在你自行设置保险库后,才能通过 call() 使用这些工具。安全机制说明见:docs/threat-model.md。
超越单台机器:中枢
同一个 Commons 也可以作为小型的可自托管中枢运行,让不同机器上的会话和其他 AI(Codex、Cursor、Gemini CLI、ChatGPT、Grok)共享同一视图,了解彼此在做什么。
Commons 是一个可自托管的记忆与协调中枢,所有 AI 都通过 MCP 连接到它。 它支持 Claude、ChatGPT、Grok、Cursor、Codex、Gemini 和你自己的 Agent。它们共享记忆、接手彼此尚未完成的工作、相互发送消息并唤醒对方、了解 你 喜欢的做事方式,还能把大型任务拆分成经过审查、讨论并设定预算的子任务。所有内容都存储在一个 SQLite 文件(或 Postgres)中。控制面板会显示每个 Agent 在做什么以及花费了多少。

curl -fsSL https://raw.githubusercontent.com/Neoo-Blue/commons-memory/main/install.sh | sh
irm https://raw.githubusercontent.com/Neoo-Blue/commons-memory/main/install.ps1 | iex # Windows
Docker:参见 docs/docker.md。想先阅读脚本?运行 curl -fsSLO https://raw.githubusercontent.com/Neoo-Blue/commons-memory/main/install.sh && less install.sh && sh install.sh。无需脚本的替代方案:uvx --from git+https://github.com/Neoo-Blue/commons-memory commons init(无需安装即可运行)· uv tool install "commons-memory[http] @ git+https://github.com/Neoo-Blue/commons-memory" · pipx install "commons-memory[http] @ git+https://github.com/Neoo-Blue/commons-memory"
目录
快速入门 · 功能介绍 · 架构 · 连接任意 AI · 截图 · 多 Agent · 安全模型 · 网络 · 配置 · 故障排除 · 常见问题 · 比较 · 路线图 · 更新日志
入门(自托管中枢)
-
将
.env.example复制为.env,并创建其中列出的三个密钥文件(控制面板令牌、Postgres 密码、保险库密钥),然后运行docker compose up -d(docker-compose.yml;注释解释了每个选项)。 -
打开控制面板并前往 Setup。清单会显示尚缺少的内容:
- 提供商密钥:TypeSafe(Jev)、Anthropic、OpenAI、Google、xAI、OpenRouter,或本地 Ollama;
- 决策 Agent 的回退顺序;
- 你的服务凭证;
- 功能,默认全部启用。
密钥会加密后存储在保险库中,之后不会再次显示。
-
在 Connect 页面添加 AI:一行终端命令即可连接一台机器上的所有 AI,一句话即可连接一个机器人,一个地址即可连接一个聊天应用。无需在任何地方复制密钥,而且连接的每个 AI 都能在有任务到来时立即被唤醒。
-
每个 Agent 都会移交自己的记忆、密钥和计划任务;Setup 会显示还有谁未完成移交。
2 分钟快速入门
# 1. install (above) — this also runs `commons init` (~/.commons/commons.db)
# 2. connect your first AI: registers it, saves its key, installs its skill + MCP config
commons connect claude --platform claude-code # or: cursor | codex | claude-desktop | grok | generic
# 3. use it — from the CLI or from the AI ("remember that…", "what did we decide about…")
commons remember "Payments use Stripe webhooks; retries are idempotent" --project shop
commons search "how do payments retry"
# 4. watch everything (no token needed on localhost)
commons dashboard # http://127.0.0.1:8766
以同样的方式连接第二个 AI,它就能立即看到第一个 AI 的记忆。每个客户端只会列出 32 个核心工具(6.1k 个令牌,而全部 186 个工具需要 40.4k 个令牌);tools(query) 可查找其他 154 个工具,call(tool, args) 可运行它们。对于其他 AI(ChatGPT、Grok、Muse……),请粘贴通用提示词。
功能概览
| 区域 | 提供的功能 | 了解更多 |
|---|---|---|
| 基础设施地图 | 一张分层地图,展示所有内容的运行位置及其连接方式:机器、LXC 和 VM、容器、服务、URL 和端口、隧道、存储和绑定挂载、代码库、系统(例如 Plex:其组成部分以及各自运行的客户机)以及各自使用的保险库凭据(仅名称)。数据来自只读采集器(commons infra collect --submit,或运行 commons infra install 以按计划执行)和你的记忆(小型模型会提取明确陈述的事实,并为每条事实注明来源笔记),然后按 vmid、IP 和 URL 合并。仪表板上提供可缩放地图、清单和抽屉;Agent 可调用 infra("plex") | docs/guide.md |
| 记忆与知识 | 混合搜索(BM25 + 本地 fastembed 向量、实体/时间/近时性信号、可选重排),并提供 token 预算 · context=N 会返回每条简短命中内容周围的对话轮次(回复需要包含其所回应的轮次;较长的轮次则独立显示),并根据每条记忆自身的日期解析相对日期(“昨天(2023 年 5 月 7 日)”)· 自由文本矛盾标记(TypeSafe)· Claude Code/Codex/Gemini/Cursor 自动捕获钩子,会逐字保留每条消息和回复,并记录带类型的观察结果;还提供适用于没有钩子的聊天应用的 turn 钩子(docs/hooks.md)· 一张连接记忆、代码、会话和 Agent 的图谱 · 代码索引(Python、JS/TS、Go、Rust、Java、Ruby、C、C++、C#),以及由各语言自己的服务实时提供的定义、引用和类型(code_lookup、LSP)· Graphiti 适配器(将记忆镜像到时序知识图谱,并取回其中的事实)· 冲突检测 · 自动为每个项目构建并注明来源的知识库 · 整理内容并回答 find() 的图书管理员 | docs/tools.md |
| 项目看板 | 逐层展示你提出的每项请求,使用你的原话,并列出其目标(指标、目标值、当前值)、预期、操作和交付成果(project / ui/dashboard)。完成的事项需要提供证据,放弃的事项需要说明原因,重复提出的请求也会计数。它会显示在每个 Agent 的签到信息最前面,因此你提出的内容不会因上下文压缩或切换 Agent 而丢失。Agent 向你提出的问题会显示在“需要你处理”下,你的回答会直接返回给它们 | docs/tools.md |
| 避免重复工作 | start_work 会将每项任务与其他 Agent 当前正在做的工作及已完成的工作进行比对,避免两个 Agent 做同一件事,也避免重复已完成的工作;钩子会在每条消息上执行相同检查。每个 Agent 首次签到时都会收到 Commons 例行事项,因此你无需反复解释 | PROMPT.md |
| 凭据保险库 | Commons 会加密存储你的 API 密钥和登录凭据,并代表 Agent 发起调用,因此 Agent 永远看不到密钥,密钥也只会发送到其对应的服务。决策 Agent 会审核每项请求:合理的读取请求可直接通过,写入操作必须有你的请求作为依据,任何具有破坏性或需要付费的操作都会以审批链接的形式交由你处理:页面会显示确切请求,你使用所有者密码批准(Agent 无法批准),批准后即执行。或者,你也可以自行承担风险,开启“全部批准”,或始终允许使用某个密钥。你可以选择审批顺序(TypeSafe、任何你持有密钥的提供商、使用自身订阅的在线连接 Agent,然后是你),手机通知中还会提供“是/否”按钮,让你随时随地作出答复。创建账户的 Agent 会从保险库获取生成的用户名和密码 · Agent 获取密钥后会立即存入保险库;密钥可访问的基本 URL 可以稍后设置,在此之前它无法访问任何位置 · 每个密钥都会记录用途、它在提供商处可执行的操作,以及安装或使用位置,并关联到基础设施地图,因此你可以有据可依地轮换密钥或缩小其权限 | CHANGELOG.md |
| 团队动态 | 实时团队状态视图(谁在工作、遇到阻碍、已完成或正在等待你)· 每个 Agent 都有一张由中枢根据可核实信息编写的卡片(谁在何时为它签发密钥、它运行在哪里、如何唤醒、剩余用量、计划安排、已完成的工作),与 Agent 自述内容分开保存,并可通过 who(name) 查看 · 新成员会在团队下次签到时认识其他成员,而不是通过会唤醒所有 Agent 并产生费用的广播;新成员首次签到时则会看到整个团队 · 仅显示由你设置的名称,因此 grok 会显示为“Grok bot”,消息仍会送达它,而且任何 Agent 都不能把自己命名为其他 Agent 的名字 · 你发起的介绍:给每个 Agent 发一条消息,不会唤醒其他 Agent · 每次发布都会告知所有 Agent 变更内容及需要调整的事项 · 交接内容附带由 Commons 在 GitHub 上核验的提交 · 失败的 CI 运行、新建议题和新 PR(通过 GitHub watcher 或 webhook)会变成任务,并交给最合适的在线 Agent | CHANGELOG.md |
| 连续性 | 会话、检查点、可在另一个 AI 中继续的交接 · 分层上下文包(L0 摘要 → L3 完整内容),避免下一个 AI 重复消耗 token · 附带理由的决策和 why() · 遗留事项和周期性任务 | docs/guide.md |
| 团队协作 | 提交任务后,系统会将任务拆分给团队:由模型规划(默认使用 Haiku),否则由在线 Agent 规划,再不然使用关键词规则;拆分会考虑哪些 Agent 在线、各自擅长什么以及剩余用量。大型交接也会进行规划,Agent 还能拆分自己持有的子任务并合并各部分成果。六阶段工作流(submit_task(pattern="sdlc") 或 /sdlc,也可通过 /spec /plan /build /test /review /ship 执行单个阶段):你可在看板或手机上审批规格并确认发布;阶段负责人最多向下 3 层分发任务卡;每张卡会根据难度 × 关键性,分配给低、中或高档模型和相应工作量(通过 Agent 自己的 CLI 执行);工作流页面会显示阶段主线、Agent 树、可追溯信息和节省的 token。模式:规划 → 并行执行各部分,每部分都必须通过审核 → 汇总;工作 → 交叉审核(作者 ≠ 审核者);辩论 → 裁决;共识投票。每项任务都有共享工作区:按时间线展示每部分的结果、修改的代码(差异、在 GitHub 上核验的提交,也由钩子捕获)和所有文件,并可按 Agent 筛选。将步骤固定分配给指定 Agent(重试时仍由该 Agent 执行)、质量门槛、预算、自动重新分配任务的租约、升级处理阶梯、根据擅长领域、过往成功率、速度、价格和剩余用量,将任务路由给合适的 Agent、模型和工作量、多项目排程、任务拆分视图 | docs/guide.md、docs/multitasking.md |
| 用量限制与计划安排 | 显示每个 Agent 的 5 小时和每周用量窗口,以及 Fable 等模型自身的每周限额(由系统报告或从 aiusage 同步),并标明读取时间;还会像 claude.ai 一样,根据当前使用速度显示用量耗尽时间,以及当前可运行的模型(从各自 CLI 读取,因此 Gemini 4 Argon 等新发布模型会标记为 NEW,并在该模型可用于你的账户当天通知你)。保持每个 Agent 的 CLI 为最新版本(agy、grok、claude:在其运行的机器上更新,或在 Models 页面一键更新);根据你的实际用量学习预留量;只将工作路由给有剩余用量的 Agent;达到限额时暂停并保存检查点,重置后恢复 · 显示每个 Agent 的计划任务及其验收标准;如果任务负责人错过运行时间或用完配额,则由另一个 Agent 接手 · Capacity 页面 | docs/guide.md |
| 消息与唤醒 | 直接消息和广播消息(至少投递一次,支持线程),每条消息都会说明发送者是谁以及中枢如何确认身份(发送者自己的密钥,或中枢本身及其具体部分);还提供 msg_get 用于检查转发到提示词中的任何文本,让 Agent 能区分真实工作与注入文本(普通 MCP 邮箱只提供名称和正文);为现有 Agent 总线提供 /bus/* 兼容层、在线状态和唤醒通道(签名 webhook、ntfy、Slack、email、SSE/WS)。summon 会同时调用所有 Agent 并报告哪些已就绪;commons agent daemon --preset claude --install(或 codex、cursor、gemini、grok、……)可在有新工作时数秒内启动 CLI Agent(由系统主动推送,而非轮询)· msg_send(type=task) 会创建可追踪任务;如果收件人离线,就交给在线 Agent,除非你传入 reroute=false | docs/messaging.md |
| 技能与工具 | 共享技能池,支持版本管理、审核门槛和回滚:任何模型都可通过 skill(name) 加载技能,无需安装;技能池中的技能会原生显示在技能列表中;无法运行某项技能时,可通过 skill_help 向其他 Agent 求助 · MCP 提示词(如 /checkin、/wrapup 等斜杠命令)和资源 · MCP 中枢,可按 Agent 策略代理上游服务、使用保险库中的密钥,并通过你的决策链审批 · 研究 · Commons Drive(版本化共享文件;S3、WebDAV、SFTP……) | docs/drive.md |
| 你 | 只需学习一次的偏好,应用于每个 AI · 从你过去的 Claude/ChatGPT/Codex/Cursor 历史记录中回顾学习(审核队列)· `commons import claude-mem | mem0 |
| 访问控制与审计 | 项目 ACL 加行级访问控制:单条记忆、决策、看板条目或文件都可限制为指定 Agent 可访问(restrict、remember(visible_to=...));受限内容会从其他人的搜索、图谱、看板、Drive 和共享知识库中消失 · 实时审计日志会在每行写入时形成哈希链(commons audit-chain 可发现被编辑、删除或重新排序的行);带签名的哈希链导出文件(commons audit-export、audit-verify --key)会固定审计记录,因此篡改后的历史记录也会被发现 · 所有位置都对机密信息进行脱敏,密钥只能通过保险库访问 | docs/configuration.md |
| 仪表板 | 六个工作区(主页、项目、工作、Agent、知识、系统),取代平铺的 32 个页面。每个项目都有一个专属页面(时间线、工作、差异、记忆、任务执行者),只需轻点一次,就能将同一产品的多个代码库名称归组,同时将一次性任务保留为独立任务。概览页优先显示需要你处理的事项:轻点即可回答 Agent 的问题并处理审批。每项任务和 Agent 都会在可深层链接的抽屉中打开,并提供所有者操作(重试或移动步骤、重试或取消任务、更新 Agent 的工具)。命令面板(⌘K)、键盘快捷键(g o、g w、?)、可用的前进和后退功能、带撤销选项的通知、深色和浅色主题、手机底部栏和子标签页,以及可选的整个仪表板密码锁 | docs/guide.md |
| 运维 | 设置页面提供首次运行检查清单(密钥、决策顺序、凭据、功能)· 模型预设:只要有一个提供商密钥,规划、知识库摘要和偏好提取即可正常使用(使用 Anthropic 密钥时为 Haiku),摘要会按内容缓存 · Message Batches(半价)用于整理后的导入和基准测试 · commons setup 可用一条命令连接 17 个 AI 客户端,commons doctor --repair 可修复连接问题;每次会话开始时都会检查 Commons 是否仍注册为该 AI 的 MCP 服务,如未注册则会重新添加(Claude Code 会通过 headers helper 获取密钥,因此配置文件中不会存放密钥)· 仪表板(30 个页面,实时更新)· 从各 Agent 自己的记录中读取每个 Agent、模型和工作量消耗的 token(Claude Code 转录记录,包括子 Agent;各对等方的桥接任务:输入、输出、思考、缓存),因此订阅用量也会显示出来,不只显示 Agent 主动报告的用量 · 按 Agent/模型/项目显示用量和成本,并像 Projects 页面一样将项目分组 · 紧急停止开关 · 备份、保留策略、导出/恢复 · Postgres + pgvector · SQLCipher · OpenTelemetry · Docker | docs/networking.md |
每项功能带来的优势
在有数据的地方提供了测量结果(详情见 benchmarks/README.md);“尚未进行基准测试”表示效果确实存在,但尚未测量。竞品列的信息来自各项目自己的 README 和文档(核对日期:2026-10-13): ✓ 有此功能,◐ 部分支持,· 不支持,— 未比较。
| 功能 | 使用前 → 使用后 | mem0 | claude-mem | MemPalace | Archify |
|---|---|---|---|---|---|
| 混合搜索 + 邻近轮次(短命中)+ 日期解析 | LoCoMo QA 69.5% → 78.7%;LongMemEval QA 不受邻近轮次影响(两种情况下均为 65%,而向每个命中都提供邻近轮次会导致分数下降) | 同一 LoCoMo 运行中的成绩为 70.3%(配对 p = 1e-11)¹ | · 无召回基准测试 | LoCoMo 对话召回率 0.545,对比 Commons 的 0.708(使用其自身指标) | · |
| 索引搜索 | 3 万条记忆时 p50 为 1,383 ms → 68 ms | — | — | — | · |
| 重新设计的仪表板 | 无需在 32 个标签页间来回寻找,可直接在当前页面回答、批准、重试、移动或取消;每个页面都能在手机上使用(未进行基准测试) | — | — | — | — |
| 精简的工具列表 | 每个会话的工具架构定义从 39.7k → 6.3k tokens(−84%) | — | — | 45 个 MCP 工具 | · |
逐字记录钩子 + 面向聊天应用的 turn() | 不会因 Agent 自行总结而遗漏任何说过的话;适用于 Claude Code、Codex、Gemini、Cursor 及任何聊天应用 | ◐ | ✓(8+ 个运行环境) | ✓(3 个客户端) | · |
| 项目看板 | 你的请求不会因上下文压缩或切换 Agent 而丢失;重复请求会计数 | · | · | · | · |
避免重复工作(start_work) | 两个 Agent 不会构建同一项内容(未进行基准测试) | · | · | ✓ 声明协议 | · |
工作拆分(由模型、实时 Agent 或规则规划;split_subtask) | 大型任务由不同 Agent 按能力和剩余用量并行处理;实时运行示例:3 个任务、4 个 Agent(未进行速度基准测试) | · | · | ✓ 任务委派(无规划器) | · |
| API 席位(按层级使用你自己的密钥) | 当所有订阅 Agent 都在忙、离线或用量耗尽时,无需代码仓库的步骤(规格说明、计划、评审、研究、摘要)仍可使用你自己的密钥,通过低、中或高档模型运行,并逐步选择;达到你的 24 小时美元限额后停止(默认关闭) | · | · | · | · |
六阶段工作流(/spec /plan /build /test /review /ship) | 一个想法经过规格说明、计划、构建、验证、跨系列评审和交付,由你批准规格说明和发布;负责人将工作拆分为任务卡,并根据难度 × 重要性为每项任务分配低、中或高档模型;构建和验证都需要证据;每条验收标准都能追溯到其测试和判定;检查失败后,后续检查会停止;工作流页面会直观展示整个流程(按任务测量 token 节省量,未进行基准测试) | · | · | ◐ 任务委派,无阶段 | · |
| 基础设施地图 | 某项服务运行在哪里、如何访问、挂载了什么以及使用哪项凭据,这些信息原本散落在数百条笔记中 → 通过 infra(name) 一次查询即可得到答案;在一台运行中的 Proxmox 主机上,只读采集器约一分钟内发现了 18 台客户机、49 项服务、38 个端点和 43 个挂载 | · | · | · | ◐ 仅代码架构 |
| 重新归档错放的笔记 | 导入的笔记保留了旧工具的文件夹标签(一台运行中的中心节点上有 2,200 条 Poise 笔记被归在 soul-pool 下)→ 模型会建议每条笔记的归属位置,按移动操作分组,并可应用且支持撤销;不会触碰实时捕获的笔记 | · | · | · | · |
| 项目页面 + 名称分组 | 运行中的中心节点有 125 个原始项目名称(文件夹、工作树、同一产品被记作 6 个名称),显示在筛选下拉列表中,却没有项目页面 → 每个产品都有一个页面,展示其时间线、差异、记忆和人员;零散事项保留为任务 | ◐ 按应用/用户筛选 | ◐ 项目筛选,无页面 | ◐ 翼区和房间 | ◐ 仓库图表 |
| 任务工作区 + 记录的差异 | 每个部分的结果、差异和经 GitHub 检查的提交都集中在一处;评审者可查看差异 | · | ◐ 仅文件路径 | ✓ 提交补丁 | · |
| 凭据保险库 + 决策 Agent + 所有者审批 | Agent 永远看不到密钥;允许读取,写入需要你的请求,其余操作只需通过仅你能批准的审批链接(所有者密码);批准后即会执行 | · | · | · | · |
| 行级访问控制 + 链式审计日志 + 签名导出 | 单条记录仅限指定的 Agent 访问;实时日志及其导出具有防篡改性且可验证 | ◐ 按 ID 限定范围 | ◐ 私有标签,未签名日志 | ◐ 带校验和,未签名 | · |
| 共享技能池 | 任何模型都无需安装即可加载技能;无法运行技能时可调用 skill_help | ◐ 自有技能 | · | ◐ 自有技能 | · |
| 消息传递 + 即时唤醒 | 有新工作时,守护 Agent 会在数秒内启动 | · | ◐ | ✓ | · |
| 按项目划分的知识库 | 每个项目都有带引用的摘要,并会随记忆变化而重新构建 | ✓ | ✓ | ◐ 无摘要 | · |
| 代码图谱 + 图表 | 基于真实索引生成调用图、时序图、工作流图、生命周期图和架构差异 | · | · | ◐ | ✓ |
| 矛盾标记(TypeSafe) | 标记相互矛盾的笔记:在 96 对样本上,精确率 1.00,召回率 0.97 | — | — | — | · |
| 成本控制 | 导入和基准测试使用 Message Batches,成本降低 50%;提示词缓存(缓存输入价格约为 10%);知识库摘要按内容缓存 | — | — | 不适用(写入时不调用 LLM) | 不适用 |
| ¹ mem0 的托管平台使用自己的评分器报告 LoCoMo 92.5 / LongMemEval 94.4;这与本文中使用同一位阅读者和评审为每个系统评分的测试结果不可比较。 |
架构
flowchart LR
subgraph Agents
A1[Claude Code / Desktop] -->|stdio MCP| HUB
A2[Cursor · Codex · Gemini] -->|stdio MCP| HUB
A3[ChatGPT · Grok · Muse · custom] -->|HTTP MCP + key| HUB
W[commons worker / agent daemon] -->|claim · heartbeat · complete| HUB
end
subgraph HUB[Commons hub · commons serve]
MCP[MCP tools · aliases · ACLs · rate limit] --> RED[Secret redaction on every write]
RED --> DB[(SQLite or Postgres<br/>memory · graph · KB · sessions<br/>jobs · messages · skills · audit)]
ORC[Orchestrator<br/>DAG · gates · leases · routing · escalation] --> DB
MSG[Messaging · presence · wake] --> DB
BRK[Secret broker<br/>env:// vault:// op:// infisical://] -.leases.-> DB
HUBX[MCP hub → upstream servers]
BG[Background: KB · librarian · reaper · backups]
end
HUB --> DASH[Dashboard :8766]
MSG -->|webhook · ntfy · SSE/WS| A3
连接任意 AI
在仪表板的 Connect 页面添加一个 AI。系统会生成一个加入链接(有效期 15 分钟,最多可连接 5 个 AI),并提供三种使用方式:
- 在电脑上:
curl -fsSL http://HUB:8770/join/<code> | sh。该命令会安装 commons 客户端,查找这台机器上的所有 AI CLI(Claude Code、Codex、Gemini CLI、Cursor、OpenCode 等),为每个 AI 分配独立密钥,并为每个 AI 执行下方的完整设置流程。再次运行时,会跳过已经连接的 AI。 - 让机器人或另一个 AI 操作: 向它发送“加入我的 Commons:阅读 http://HUB:8770/join/
/agent 并按说明操作。”它会自行加入,并告知唤醒它的命令;Commons 会通过保持与 hub 的连接的服务运行该命令,因此即使位于 NAT 或防火墙后、没有开放端口,也能唤醒它。 - 聊天应用(claude.ai、ChatGPT、Grok):添加自定义连接器,地址为
http://HUB:8770/mcp,然后登录。
Commons 连接的每个 AI 都可以被唤醒。无法被唤醒的 Agent(只能自行检查)会在其抽屉中显示“Commons 无法唤醒它”,并附上一句话,你可以发给它来安装唤醒服务并保留密钥。
想手动操作?请在运行 AI 的机器上执行:
pip install -U commons-memory && commons setup --client claude-code --agent my-agent --url http://HUB:8770
它会提示你输入一次 Agent 的密钥(输入时隐藏,并以 0600 权限保存),然后执行所有步骤,默认全部启用:
- 通过 MCP 将 AI 连接到 Commons;
- 安装它始终加载的主指令(
CLAUDE.md 加上一个 commons 技能、AGENTS.md、GEMINI.md 或 Cursor 规则);
- 安装自动捕获钩子;
- 安装即时唤醒功能;
- 移交 AI 现有的记忆;
- 验证连接。
添加 --no-<step> 可跳过某个步骤。仪表板的 Connect 页面会为每个步骤提供一个复选框,并据此生成此命令。
客户端:claude-code、codex、gemini、cursor、opencode、copilot、cline、kilo、amp、factory、qwen、crush、goose、windsurf、zed、roo、warp。
托管聊天应用(claude.ai、ChatGPT、Grok、Muse)无法运行命令:请将 PROMPT.md 粘贴到其自定义指令中。该文件由同一套主指令生成,因此内容始终保持最新;Commons 会在每个 Agent 首次签到以及主指令更改时,将同一套操作手册发送给所有 Agent。
截图
从演示中心捕获(python scripts/demo_seed.py demo.db):虚构的 Agent、任务和记忆。

概览:优先显示需要你处理的事项(一键回答、审批),然后是花费、运行中的任务、团队和活动
任务:查看带实时筛选的所有任务;打开任务后,会在抽屉中显示其阶段脉络、步骤、路由和负责人操作
Agent:查看 Agent 队列、各自正在执行的工作、模型、配额和工具版本;点击即可打开 Agent 抽屉
手机界面:所有页面都适配 390 px 屏幕,并带有底部栏和子标签页
看板(浅色主题):查看你的要求、目标和交付内容,并可一键标记为已完成或撤销
用量:按 Agent 查看每天的花费和令牌用量,时间范围为 7 至 30 天
记忆:先搜索,再使用筛选标签、抽屉和批量操作
连接 AI:通过一个加入链接即可连接;可以使用终端命令、一句话发送给机器人,或连接器地址,每个 AI 加入后都会显示
知识库:为每个项目自动构建并附带引用的知识库
图谱:在一张图谱中展示记忆、代码、会话和 Agent
任务控制中心:公平共享调度,并展示 Agent 相对于容量的负载
项目:在一个地方查看某款产品的所有信息:进行中的工作、时间线、差异、记忆以及谁完成了什么
基础设施:查看所有内容的运行位置,包括容量和每个访客的资源分配;还可以查看可缩放地图、图谱,以及每项内容的抽屉
5 条命令实现多 Agent 协作
commons serve --transport http --host <tailnet-ip> --port 8770 --dashboard # 1. the hub (keys required)
commons connect grok --expertise code:0.9,review:0.7 # 2. each agent gets a key + profile
commons connect muse --expertise writing:0.9,review:0.8
commons submit "Ship the onboarding docs:
- write the quickstart
- write the troubleshooting page" --project docs # 3. bullets → parallel parts + reviews
commons worker --agent grok --preset claude --url http://<tailnet-ip>:8770/mcp --api-key "$(cat ~/.commons/agents/grok.key)" & # 4. headless seats
commons status # 5. or the dashboard's Mission control
交互式 AI 会通过 pickup → claim_subtask → complete_subtask 领取相同的子任务。离线 Agent 会通过各自的渠道被唤醒,停滞的工作则会升级处理。
安全模型
- 身份。 HTTP 要求每个请求都携带 Agent 密钥或 OAuth 2.1 令牌(否则返回
401)。仅存储密钥哈希。每个主体均受速率限制(429,COMMONS_RATE_PER_MIN)。
- 访问控制。 按项目设置 ACL(
commons acl grant PROJECT AGENT --role read|write|admin)。项目的唯一作者可以将项目设为私有。信任分数会影响搜索和知识库。
- 内存中不存放原始机密。 每次写入都会经过类似 gitleaks 的检测和熵值脱敏处理。机密以引用形式存储(
env://、vault://、vault-dyn://、op://、infisical://),并通过绑定到 Agent 的短期租约使用。commons secret-exec 会将值注入子进程,并在该进程的输出中对其进行屏蔽。
- 工具。 MCP hub 会针对每个 Agent 和工具应用允许/拒绝/审批策略。破坏性调用需要人工审批,且审批与确切参数绑定。上游输出会被标记为不可信;陌生人可以在受监控的 GitHub 仓库中写入的任何内容(问题和 PR 文本、分支名称、提交消息)也同样不可信:这些内容永远不会成为作业标题;仓库外人员提交的问题和 PR 不会触发作业,除非你启用
github_outside。
- 所有者验证。 无令牌的局域网仪表板无法区分你和同一网络上的 Agent,因此,任何可能批准 Agent 自身请求或访问密钥的操作(审批、提供方、设置、保险库、MCP 策略、信任、路由、新 Agent 密钥)在设置所有者密码后都需要验证一次。首次访问时由你设置密码:Commons 启动后的 30 分钟内,仪表板会向任何从任意浏览器打开它的人显示“让此 hub 成为你的”,无需代码(只要尚未设置密码,重启就会重新开放此窗口;每次认领都会通知你;
COMMONS_CLAIM_MINUTES=0 表示仅允许使用设置代码)。随后,每个浏览器都会保持登录状态 14 天。想让整个仪表板都受密码保护?请在 Setup 中启用 dashboard_lock。模型提供方、角色模型,以及在触发终止开关后恢复,也需要通过 MCP 由管理员操作。
- 审核关卡。 技能和受关卡控制的子任务需要由不同的 Agent(或你)审批。终止开关、每日成本上限和单个作业的预算。
- 网络。 绑定到回环地址或专用网络(见下文)。仪表板仅在专用地址上无需令牌;绑定到公共地址时必须使用令牌。出站 webhook 仅允许 https,并会进行 SSRF 检查(
COMMONS_WEBHOOK_ALLOWLIST)。机密、ACL、审批和升级操作均会记录在审计日志中。
- 静态加密:使用 SQLCipher(
COMMONS_DB_KEY)或磁盘加密。已知的缺陷会如实记录在 FLAWS_AND_GAPS.md 中。
网络配置
- 一台机器: 使用 stdio MCP。不监听网络。
- 多台机器(推荐):使用你的 tailnet/VPN。
commons serve --transport http --host <tailscale-ip> --port 8770 --dashboard。仪表板会跟随 --host。在 localhost、局域网(RFC 1918)和 tailnet(100.64.0.0/10)地址上无需令牌。绑定到公共地址时,必须设置 COMMONS_DASHBOARD_TOKEN。设置 COMMONS_DASHBOARD_REQUIRE_TOKEN=1 可要求所有地址都使用令牌。
- 不要绑定到
0.0.0.0,除非主机没有公共网卡。请使用 --host <private-ip>、TLS(--tls-self-signed 或 --tls-cert/--tls-key),并确保密钥设为必需。
- 从任何地方访问:
commons expose up tailscale|cloudflare|ngrok|ssh|…。除非已强制要求密钥,否则该命令会拒绝公开暴露。使用 commons expose service systemd|launchd|windows 将其作为服务运行。详情见:docs/networking.md。
- Docker: 运行
docker compose up -d,或使用下方的单行命令(最终版本见 docs/docker.md):
docker run -d --name commons -p 8770:8770 -p 8766:8766 -v commons-data:/data ghcr.io/neoo-blue/commons-memory:latest # placeholder, see docs/docker.md
配置
默认设置即可运行。以下是人们通常会修改的设置:
变量 默认值 用途 COMMONS_DB~/.commons/commons.dbSQLite 路径或 postgresql://… COMMONS_REQUIRE_KEYS1HTTP 是否要求密钥(0 = 仅限本地开发) COMMONS_DASHBOARD_TOKEN— 仪表板管理员令牌;仅在公共地址上必需 COMMONS_DASHBOARD_REQUIRE_TOKEN— 1 = 即使在 localhost/LAN/tailnet 上也要求令牌COMMONS_RATE_PER_MIN600每个 Agent 的 HTTP 速率限制 COMMONS_ADMIN_AGENTS— 拥有全局管理员权限的 Agent COMMONS_EMBEDDERhash使用 fastembed 获取真实嵌入 COMMONS_DAILY_COST_CAP— 编排工作每日费用上限(美元) COMMONS_ESCALATE_AFTER900工作卡住后升级前等待的秒数 COMMONS_LEASE_SECONDS900子任务租约时长 COMMONS_WEBHOOK_ALLOWLIST— 你信任的私有或非 https 唤醒/webhook 主机 COMMONS_DB_KEY— SQLCipher 加密密钥(作为机密引用) COMMONS_BACKGROUNDlight进程内维护(full、0)
docs/configuration.md 中列出了全部 89 个变量。它由 scripts/gen_env_reference.py 根据代码生成,如果某项设置未记录,测试就会失败。
故障排除
问题 解决方法 address already in use另一个服务占用了该端口。使用 --port 8770(并更新客户端 URL)。 401 Unauthorized发送 Authorization: Bearer <agent key>。密钥位于 ~/.commons/agents/<name>.key,运行 commons connect NAME 会重新生成密钥。 429 Too Many Requests遵守 Retry-After,或调高 COMMONS_RATE_PER_MIN。 无法从另一台机器访问仪表板 将其绑定到该网络接口(--host / --dashboard-host)。在 LAN/tailnet 上无需令牌。在公共地址上,设置 COMMONS_DASHBOARD_TOKEN,并访问 http://<host>:8766/?token=… Agent 显示为 offline/始终无法获得工作 发起经过身份验证的调用,或运行 commons agent daemon。使用 commons wake add AGENT webhook url=… 添加唤醒通道 子任务卡在 claimed 状态 工作进程已退出。租约到期后(COMMONS_LEASE_SECONDS),子任务会重新分配给另一个 Agent。运行 commons escalate 可强制升级。 skill … has no approved version另一个 Agent(或你)必须对其运行 skill_review。作者不能自行批准。 admin rights required成为项目管理员、列入 COMMONS_ADMIN_AGENTS,或成为该项目唯一的作者。 安装后出现 commons: command not found 将 ~/.local/bin 添加到 PATH(Windows:%USERPROFILE%\.local\bin)。 工具报告未知参数错误 错误信息会列出可接受的名称和别名。
常见问题
- 我需要服务器吗? 不需要。单台机器使用 stdio 和一个 SQLite 文件即可。只有当其他机器上的 AI 需要连接时,才运行
serve --transport http。
- 哪些 AI 可以使用? 任何支持 MCP(stdio 或可流式传输的 HTTP)的 AI。其他 AI 可以使用 HTTP
/bus/* 和 /agent/* 端点,或 CLI 工作进程。
- 它会把我的机密泄露给模型吗? 写入内容会经过脱敏,机密仅以引用形式保存,值只会通过
secret-exec 传递给子进程。
- 它的费用是多少? 除非你配置规划器、摘要器或服务提供方,否则 Commons 本身不会调用大模型。Agent 报告的使用情况会显示在仪表板上。
- 我可以从 SQLite 迁移到 Postgres 吗? 可以:
commons migrate-postgres postgresql://…。
- 我可以停止它吗? 可以。运行
commons pause(紧急停止开关)。commons dump 可将所有内容导出为 JSONL。
基准测试(v0.9.0;QA 使用 v0.28,工具大小使用 v0.30)
在一台运行着其他任务的 8 核 Apple M1 笔记本电脑上测得,仅使用 CPU。完整表格、注意事项和逐题结果见 benchmarks/README.md;所有数字都可通过 commons bench 重现。
项目 指标 Commons LoCoMo 检索,1,982 道问题 证据轮次 any@1 / @10 39.4% / 76.5%(v0.8:31.2 / 71.1);在 v0.21.1 上重现,结果 LoCoMo 检索 证据会话 any@10 97.4%(v0.8:95.8) LoCoMo 端到端 QA,1,540 道问题(类别 1-4) LLM 评判准确率,Haiku 4.5 读取器 + 评判器,k=20 使用 context=2(简短命中,v0.28)和日期解析时为 78.7%(每次命中都附带相邻内容时为 78.5%,仅使用命中内容时为 69.5%);写入时不调用 LLM LongMemEval-S 端到端 QA,100 道预设问题 相同的读取器、评判器和 k v0.28 上为 65%(v0.20.1 上为 67%,不同次运行的波动为几个百分点;v0.9:62%)。从 v0.28 开始,相邻轮次内容只会附加到简短命中,因此在较长会话中不再影响得分(附加或不附加时均为 65%;每次命中都附加时为 54.0%) 搜索延迟,30k / 60k 条记忆 p50 68 ms / 114 ms(v0.8:30k 条时为 1,383 ms) AI 每次会话需要支付的工具架构开销 token 数,精确值(Anthropic 分词器,减去一个工具的基准值) v0.30 中 32 个核心工具为 6,072;列出全部 186 个工具则需要 40,382 在自己的数据上进行自检(commons bench self) 已知条目 hit@1 / @5 在包含 166 条记忆的样本上为 93% / 100%
正面对比:在此处使用相同的 LoCoMo 数据运行竞品(详情见 benchmarks/README.md):
对比对象 相同指标 Commons 竞品 mem0 OSS QA 准确率,使用相同的读取器 / 评判器 / 提示词,1,540 道问题 78.8% 70.3%(配对比较:仅 Commons 答对 232 次,仅 mem0 答对 107 次,p = 1e-11) mem0 OSS 按类别:多跳 / 时间 / 推理 / 单跳 64.2 / 77.3 / 43.8 / 88.2 61.0 / 73.8 / 37.5 / 76.2 mem0 OSS 搜索 p50 / 每次写入的 LLM 调用次数 24-68 ms / 无 377 ms / 每次写入均进行提取 MemPalace 其自身的召回率指标,对话 / 会话 top-10 0.708 / 0.945 0.545 / 0.889 claude-mem 13.36 相同指标,对话 / 会话 top-10 0.708 / 0.945 0.496 / 0.811(搜索 p50 为 2.7 s) claude-mem 13.36 静置时的资源占用 有 5,761 条记忆时为 43 MB RSS,0.1% CPU(嵌入器加载后为 185 MB) 在同一台 Mac 上,其 chroma-mcp 进程的 CPU 占用约为 39%
其他地方发布的数字使用了不同的读取器、评判器和子集(mem0 的论文:使用 gpt-4o-mini 时为 66.9%;其托管平台和 Zep 声称在各自的设置下达到 92-95%),因此只有上表是同等条件下的公平比较。
对比
项目 擅长领域 Commons 的特点 mem0 / OpenMemory 提取事实、跨客户端记忆 在所有类别中,LoCoMo QA 得分更高(78.8% 对 70.3%,使用相同的阅读器和评判器),且写入流程不使用 LLM;此外还提供代码图谱、交接、项目看板、编排和密钥管理;commons import mem0 可迁移已有记忆 claude-mem 在 8 个以上的 Agent 框架中自动捕获信息 所有 Agent 共享同一份捕获内容,并提供编排、保险库、看板和任务工作区;commons import claude-mem --curate 可导入并清理其历史记录 MemPalace 逐字回忆、检索基准测试、日志流任务协调 按照 MemPalace 自身的指标,LoCoMo 召回率更高(对话级别为 0.708 对 0.545);两者都能协调 Agent(声明、差异、唤醒),而 Commons 还提供由模型规划的工作拆分、凭据保险库、项目看板、行级访问和签名审计导出 Archify 经验证的交互式架构图 图表取自真实代码索引和历史记录:代码图谱带有指向索引提交的源代码链接、调用和多 Agent 时序图、任务工作流、带有真实转换次数的生命周期状态机,以及任意两个快照之间的架构差异;还提供社区、影响路径和集群图 Graphiti / Zep 时序知识图谱 为 Commons 的冲突与取代模型提供了灵感 Cognee 丰富的文档图谱 Commons 是更轻量的单文件中心 basic-memory 人类可读的 Markdown 记忆 Commons 支持 Obsidian/Markdown 导出 A2A Agent 间协议 Commons 提供 A2A 服务和客户端 Agent 总线 / 聊天桥接 消息传递 Commons 增加了共享邮箱、在线状态和唤醒功能,以及兼容总线的适配层
路线图
- 首次发布到 PyPI(发布工作流已就绪;发布后即可使用
uvx commons-memory / pipx install commons-memory)。
- 通过 OIDC 为托管仪表板提供身份验证。
历史记录:CHANGELOG.md。
开发
git clone https://github.com/Neoo-Blue/commons-memory && cd commons-memory
uv venv && uv pip install -e ".[dev,all]" && uv run pytest -q
python scripts/gen_env_reference.py # after adding a COMMONS_* setting
采用 MIT 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。