Company Brain 权限图谱完全指南:3 层企业记忆为何永不越权泄露
【免费下载链接】company-brainOpen-sourcing our company brain - A teammate in your Slack that remembers everything your team says, and can go do the work.项目地址: https://gitcode.com/gh_mirrors/co/company-brain
Company Brain(公司大脑)是一个开源项目,它能让你把 AI 团队成员装进 Slack——它会记住团队说过的每一句话,还能真的去动手干活。而本文要讲清它的核心安全设计:Company Brain 的权限图谱(permissions graph)。这套"3 层企业记忆 + 读写分离 + 租约借用"机制,让 AI 永远只以"提问者本人的权限"行动,从架构上杜绝了越权与记忆泄露。
一、核心理念:不是"共享大脑 vs 私有大脑",而是一张图 🕸️
很多团队型 AI 会把记忆粗暴地分成"公共区"和"私有区"。Company Brain 的做法完全不同:
记忆会写入对话发生的那间最窄的房间;而一段对话能读到什么,取决于"它在哪里发生"以及"谁在问"。
并且这里没有任何静默授权——每一次安装、频道推广、临时授权,都需要一个真实的人明确点下"接受"。完整的权限设计说明见官方文档 docs/guide/permissions.md。
二、3 层企业记忆:每条消息只写入 1 个地方
| 记忆层 | 数量 | 可见范围 |
|---|---|---|
| 🧑员工记忆(Employee memory) | 每人 1 份 | 只有你在 DM 中可见 |
| 🔒私有频道记忆(Private channel) | 每个私有频道 1 份 | 仅该频道成员可见 |
| 🌐公共频道记忆(Public channel) | 全组织 1 份 | 全组织可引用 |
一条消息只会写入其中恰好一份——它发生在哪个房间,就落到哪个房间里。
底层实现上,这三种记忆对应三类容器标签(user_<用户ID>、slack_channel_<频道ID>、sm_org_shared),写入时由 slackMemoryContainerTag() 函数根据"作用域"(DM / 私有频道 / 公共频道)唯一确定标签,从代码层面保证了"每条消息只写一层"。
三、读取权限矩阵:越私密的房间,能看到的越多 🔍
写入很窄,读取却是有规则地"更宽"。下面是 Company Brain 的读取权限矩阵:
| 提问发生在 | 机器人可以读取 |
|---|---|
| 公共频道 | 公共频道记忆 |
| 私有频道 | 该频道记忆 + 公共频道记忆 |
| 与机器人的 DM | 你的员工记忆 + 公共频道记忆 +你所在的全部私有频道记忆 |
这段逻辑的核心实现是 resolveBrainReadContainerTags():DM 场景下,它会解析提问者所属的所有私有频道,并只把这些频道的记忆加进"可读取集合"。
为什么 DM 是最宽的座位?因为它恰好是最私密的:机器人在那里用"你本人能看到的一切"来回答你。反之,公共频道里所有人都能读,所以它只敢引用"全组织都知道"的内容。
⚠️关键安全保证:如果你不在某个私有频道里,它的记忆对你根本不存在——连在 DM 里靠推理套话也不可能。机器人永远只以提问者自己的权限去读,无法暴露你本来就看不到的东西。
例子:你在 DM 里问"Acme 那单我们怎么定的?",它可以引用公共#sales频道、你所在的私有#acme-deal频道,以及它了解你的信息,并标注答案出处。同一问题发到#general公共频道,它就只能从公共信息作答——#acme-deal的上下文在那里根本不在作用域内。
应用内的 Graph 页面也遵循同一原则:只展示公共频道记忆 + 你自己的员工记忆,绝不出现在队友的记忆。
四、工具权限:组织级共享"只读",个人连接才能"写" 🔧
GitHub、Linear 这类工具可以两种方式接入:组织级(共享)和个人级。无论哪一层应答,结果都受该连接在工具里的可见范围约束——Company Brain 绝不会拿到超出连接账号权限的"万能钥匙"。
| 读 | 写 | |
|---|---|---|
| 行为 | 优先用你个人的连接,没有则回落到组织共享 | 只允许走你个人的连接 |
| 原因 | 给你"有权看到的最大范围" | 动作归属到一个真实的人,而非共享服务账号 |
也就是说:组织级共享连接对所有人(含管理员)都只读。你要创建 issue、评论 PR?机器人会提醒你"先个人接入"。写入能力的归属设计保证了每个写操作都能追溯到一个真人。接入细节见 docs/guide/connectors.md。
五、租约机制(Leasing):向同事"借 10 分钟权限" 🤝
有时候任务需要的工具,你和组织都没接,但某位同事个人接了。Company Brain 不会直接失败,而是在 Slack 里发一张卡片,直接问那位同事:"这次请求,借不借?"
四条铁律:
- 绝不静默授权——必须真人点卡批准
- 短时效:授权有效期 10 分钟;无人应答的租约请求 15 分钟后自动过期
- 可以拒绝——同事说不,请求就到此为止
- 部分工具不可租:例如 Gmail 仅限个人使用
时效常量定义在 LEASE_TTL_MS / LEASE_REQUEST_EXPIRY_MS(10 * 60 * 1000与15 * 60 * 1000),过期处理与审批流转逻辑见 src/brain/lease/decision.ts;候选借出人只能从真实连接中解析,且仅限组织内已验证成员,见 src/brain/lease/policy.ts。
💡 租约是"最后手段"。想一劳永逸?让管理员把工具接到组织层即可。
六、角色分工:谁能改什么?👥
- Owner / 管理员:安装到 Slack、添加组织级工具连接与组织级技能、修改组织设置(模型、工作区提示词、主动性)、创建可发往私有频道的自动化、管理所有人的自动化
- 普通成员:用 Slack 登录、接入自己的工具、编写个人技能、管理自己的自动化
角色记录在 D1 数据库的member表中(owner/admin/member)。
七、总结:为什么 Company Brain 的记忆"永不越权" 🛡️
- 写窄读宽:消息只写入最窄的房间,读取严格按"提问者的真实权限"展开
- 身份即权限:读什么取决于"谁在哪个房间问",不存在超权限的记忆池
- 写操作必归属真人:组织级连接只读,写入只能走个人连接
- 临时借用全程留痕:10 分钟有效、15 分钟过期、可拒绝、关键工具不可租
这套 3 层企业记忆的权限图谱,让"团队共享大脑"与"个人隐私"不再是二选一——这正是 Company Brain 敢于把 AI 放进 Slack 的底气。
📖 延伸阅读:docs/guide/permissions.md(权限图谱)、docs/guide/connectors.md(连接器)、docs/guide/automations.md(自动化如何在同一张权限图上运行)
【免费下载链接】company-brainOpen-sourcing our company brain - A teammate in your Slack that remembers everything your team says, and can go do the work.项目地址: https://gitcode.com/gh_mirrors/co/company-brain
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考