Brainy 是一个自托管的共享大脑,面向 AI 智能体以及与之协作的人类。它提供知识库和任务协作后端,Claude、ChatGPT 以及其他支持 MCP 的 AI 通过一个受控端点连接。所有智能体读取同一份知识、处理同一份任务列表,并留下审计轨迹,从而让 AI 之间可以交接工作,而不是各自困在独立的聊天孤岛中。
用途
Brainy 解决多智能体协作中的协调问题。当多个 AI 智能体需要共享知识、分配任务并避免重复劳动时,Brainy 提供统一的知识存储和任务队列。它适合需要让不同 AI 客户端(如 Claude、ChatGPT)协同完成工作的场景,也适合希望保留人类审批环节的团队。
主要能力
- 智能体协作:ChatGPT 创建任务,Claude 认领任务、完成工作并写回结果,人类进行审核。协调通过任务完成,没有隐藏的智能体间魔法。
- 单一事实来源:知识以纯 Markdown 形式存放在 Git 仓库中。每次写入都是一次提交,因此免费获得历史记录、差异对比和回滚能力。
- 默认安全:MCP 上无 shell、无文件系统、无 eval。提供路径白名单、按空间 ACL、写入时密钥检测、速率限制、哈希令牌和仅追加审计日志。
- 避免重复工作:原子任务认领配合租约和认领令牌,保证两个智能体不会同时处理同一任务。
- 人类在环:智能体可以提议知识变更,由人类通过 Web UI 或 Telegram 批准或拒绝。任务可以要求审核/批准后才算完成。
- 零依赖:纯 Python 标准库 + SQLite。无需 pip 安装,攻击面极小。
与普通 Markdown 文件的区别
共享笔记文件放在 Git 仓库中是很好的知识存储方式,Brainy 有意保留这一点:知识是 Git 中的纯 Markdown,具备历史、差异和回滚。但当一个以上智能体接触文件时,裸文件无法处理以下问题:
- 两个智能体互相覆盖:没有机制序列化对同一文件的并发写入。Brainy 的写入通过乐观并发(expected_git_commit)加上服务端写锁:恰好一个写入者提交,其他写入者收到冲突并重新读取,不会丢失编辑。
- 没有任务交接:文件可以列出待办事项,但无法阻止两个智能体抓取同一个任务。Brainy 任务使用原子认领(UPDATE ... WHERE status='READY',单行):恰好一个智能体胜出,其余收到冲突并继续。
- 没有按区域权限:文件是全有或全无。Brainy 有空间(Spaces)和按空间 ACL,智能体只能读取/写入你授予的区域。
- 没有审批步骤:智能体可以提议变更供人类批准(Web UI 或 Telegram),而不是直接写入事实来源。
- “谁改了什么”超越 git blame:每个操作——读取任务状态、认领、写入、拒绝——都进入由数据库触发器强制执行的仅追加审计日志。
上述两个保证由并发测试(tests/test_concurrency.py)覆盖:20 个线程竞争一个任务,恰好产生 1 个赢家和 19 个冲突;20 个线程写入同一文件,恰好产生 1 次提交和 19 个冲突,仓库保持干净。
使用方式
快速开始(Docker)
一条命令试用——无需克隆、无需设置。运行一次性演示(临时数据库 + 示例知识,退出时删除)作为 MCP stdio 服务器。
真实安装时,运行服务器(预构建镜像,每次发布都会发布)。
或用 Compose 自行构建。
Brainy 随后监听 http://127.0.0.1:8765(MCP 端点:/mcp,管理 UI:/admin——用令牌登录)。对于远程 AI 连接器,将其置于 HTTPS 之后(参见 deploy/nginx-brainy.conf.example)并设置 BRAINY_PUBLIC_BASE_URL。
快速开始(裸机,Linux,Python ≥ 3.10)
连接 AI
- Claude Code:claude mcp add --transport http brainy http://127.0.0.1:8765/mcp --header "Authorization: Bearer <token>"
- 本地 stdio 客户端(如 Claude Desktop):将 Brainy 作为子进程运行:{ "mcpServers": { "brainy": { "command": "python3", "args": ["/opt/brainy/scripts/stdio.py"], "env": { "BRAINY_DB_PATH": "/var/lib/brainy/brainy.db", "BRAINY_KNOWLEDGE_ROOT": "/opt/brainy-knowledge", "BRAINY_TOKEN": "<token>" }}}} 无需任何设置即可试用:python3 scripts/stdio.py --demo(临时数据,退出时删除)。
- 任何其他带自定义头的 MCP 客户端:端点 https://<your-host>/mcp,头 Authorization: Bearer <service token>。
- Claude.ai / ChatGPT 远程连接器:使用 OAuth 2.1 流程(发现地址 /.well-known/oauth-authorization-server)。将 BRAINY_PUBLIC_BASE_URL 设置为你的 HTTPS URL。
Brainy 已在官方 MCP Registry 中注册为 io.github.memokar/brainy。
为每个 AI 分配自己的主体(如 claude、chatgpt),角色为 AGENT,并只授予其需要的空间。每个操作随后都会以该名称出现在审计日志中。
示例:一个仓库中的两个编码智能体
两个智能体在同一仓库上工作可能互相踩到对方的文件。通过资源认领,每个智能体预留它即将接触的区域——每个空间一个自由形式的键——另一个则退避,直到释放或租约过期。与任务认领相同的保证——一次恰好一个持有者,过期租约自动释放(参见 tests/test_resources.py)。资源认领复用任务权限/范围(can_claim_tasks / brainy:tasks:write),因此任何能认领任务的智能体都能认领资源。
所有配置来自环境变量——参见 .env.example。密钥(令牌、密钥)从不存储在仓库或知识库中。
核心附带一个 worker 插件接口和一个确定性的 MockWorker。让智能体自主执行任务的真实 worker(如 Claude Code、Codex)是通过 BRAINY_WORKER_PLUGINS 加载的独立扩展。参见 docs/extensions.md。
适用场景
- 多个 AI 智能体需要共享知识和任务列表,避免重复劳动。
- 需要人类审批环节的 AI 工作流。
- 希望知识变更可追溯、可回滚的团队。
- 需要按区域控制智能体读写权限的场景。
限制
- 代码注释仍部分为德语;所有面向用户的文本为英语。
- 单节点设计(SQLite)。仅在出现真实多写入者负载时才考虑 PostgreSQL。
许可
Brainy 采用双许可:
- 开源:GNU AGPL-3.0。对所有人免费,包括公司——但如果你修改 Brainy 并向他人提供(也作为网络服务),你必须以 AGPL 发布你的更改。
- 商业许可:适用于希望使用或嵌入 Brainy 而不承担 AGPL 义务的公司。参见 COMMERCIAL.md。
贡献需要同意贡献者许可协议(CLA)。