【免费下载链接】company-brain
Open-sourcing our company brain - A teammate in your Slack that remembers everything your team says, and can go do the work.
Company Brain 是 supermemory 开源的团队级 AI 智能体:它常驻 Slack,记住团队在会话与工具中产生的一切知识,基于团队自己的上下文作答,还能直接操作 GitHub、Linear、Notion 等工具,并在合适时机主动开口。本文以仓库根目录 README.md 为主体,结合 docs/guide 用户指南、docs/architecture.md 架构说明、docs/agent.md 运行时说明、docs/slack.md Slack 行为说明以及 wrangler.jsonc、package.json 等配置文件,完整讲解它的能力模型、私有权限设计、五分钟部署流程、Free/Paid 计划差异与本地开发方式,并在关键环节给出源码级佐证。读完本文,你可以独立在自己的 Cloudflare 账号上部署一套 Company Brain,并理解其记忆、权限、工具连接与主动性机制的底层原理。
项目背景:从付费产品到开源自托管
Company Brain 原本是 supermemory 公司的一个付费产品,拥有数千用户;团队在产品停运后把整个产品开源,并重构为运行在你自己的 Cloudflare 账号上的自托管版本。它在 Slack 中扮演一个“真正的队友”:
- 记住团队在 Slack 线程、文档、工单中散落的知识;
- 基于这些知识回答问题,而不是从互联网或猜测量生成答案;
- 直接去执行工作:开 issue、读 PR、翻仓库;
- 在会话需要它已知的信息时主动开口,无需被 @mention。
README 中的典型场景是一个无人提及机器人的对话:
#eng
Alex:is prod down? a couple of customers are pinging me
Company Brain:Not fully down.
api/searchis elevated, 42 errors in the last 15 minutes, and Kush is already on it. Probably this morning's deploy.
没有人 @它,它因为“知道答案”而开口。这正是 Company Brain 与普通聊天机器人最本质的区别——主动性与记忆的结合。更完整的行为示例(提问、执行、主动开口)见 docs/guide/overview.md。
核心能力一览
README 以一张能力表概括了 Company Brain 的七大能力维度:
| 能力 | 说明 |
|---|---|
| 🧠Remembers(记忆) | 记住所加入频道中的决策、项目、负责人与上下文,随团队对话持续更新,无需任何人刻意记录 |
| 💬Answers from your team(回答) | 答案来自团队自己的对话和已连接工具,而非互联网或猜测 |
| 🛠️Acts in your tools(行动) | 通过 MCP 连接 GitHub、Linear、Notion、Google Workspace 及数百个其他工具;替你开 issue,而不是叫你自己去开 |
| 📣Speaks up(主动开口) | 在会话需要它已知信息时插话;可在组织级与频道级分别调节话痨程度 |
| 💻Runs code(运行代码) | 自带沙箱:克隆仓库、运行脚本,并把图表、CSV、PDF 直接交回 Slack |
| 🌙Works while you sleep(后台工作) | 定时向频道或 DM 推送摘要,也能自行发起研究 |
| 🎓Learns your way(学习团队风格) | Skills 教会它团队的可复用流程、格式与语气;Workspace Prompt 设定它在全工作区的行为基调 |
从仓库依赖看,这些能力有明确的实现载体:package.json 中的@modelcontextprotocol/sdk(工具连接)、@cloudflare/sandbox与@daytona/api-client(代码沙箱)、@cloudflare/codemode与quickjs-emscripten-core(Code Mode)、cron-schedule(定时自动化)、supermemory(记忆后端)。
私有优先:权限图(Permissions Graph)设计
Company Brain 的记忆不是一个大的共享桶,而是一张权限图(permissions graph):它永远只以提问者自身的访问权限来读取记忆。完整的权限语义在 docs/guide/permissions.md 中有详细说明,其核心可以概括为“三层记忆”:
- 员工记忆(Employee memory):每人一份,由你与机器人的 DM 以及它长期对你的了解构建,只在自己的 DM 中可见;
- 私密频道记忆(Private channel memory):每个私密频道一份,只对该频道成员可见;
- 公开频道记忆(Public channel memory):每组织一份,公开频道的任何持久信息都落在这里,整个组织都能调用。
一条消息只写入它发生所在的那个房间对应的记忆层。而“能读什么”则随房间的私密程度放大:
| 提问位置 | 可读取范围 |
|---|---|
| 公开频道 | 公开频道记忆(组织共享脑) |
| 私密频道 | 该频道记忆 + 公开频道记忆 |
| 与机器人的 DM | 你的员工记忆 + 公开频道记忆 + 你所在的所有私密频道记忆 |
因此 DM 是“视野最广的座位”——它用你自己能看到的一切来回答;而公开频道相反,因为全组织都能看到,它只调用全组织都被允许知道的信息。如果你不在某个私密频道里,那个频道的记忆对你不存在——即使在 DM 中也不能被推理出来。底层实现上,这些记忆对应 supermemory 容器标签(container tags):sm_org_shared(公开频道记忆)、slack_channel_<频道 id>(私密频道)、user_<用户 id>(个人)。这一点在 docs/architecture.md 的记忆小节中同样得到印证。
工具访问遵循同样的“跟随你、而非跟随连接”原则:GitHub、Linear 等工具可有两种连接范围——Organization(共享),由管理员配置一次作为全团队的只读回退;Personal(个人),自己的连接用于自己的读取与操作。读取时优先用个人连接,没有则回退组织共享连接;写入永远只通过个人连接,把动作归属到真实的人,而不是共享服务账号。组织共享连接对包括管理员在内的所有人只读——如果你请求写入而只有组织连接可用,机器人会要求你个人连接该工具。
还有一种**租借(Leasing)**机制:当某个请求需要你或组织都没有连接、但某位同事个人连接了的工具时,机器人会在 Slack 中给该同事发一张卡片请求批准或拒绝临时租借:
- 没有任何静默授权:必须由真实的人接受卡片;
- 访问是短期的且限定于触发它的那一次请求:授权持续 10 分钟,未应答的请求 15 分钟后过期;
- 同事可以拒绝,请求就直接作废;
- 部分工具(如 Gmail)完全不可租借,仅限个人连接。
权限的治理分层也很清晰:owner(第一个登录的人)与admin可以安装 Slack、添加组织共享工具连接与组织级 Skills、修改组织级设置(模型、工作区提示词、主动性)、创建投递到私密频道的自动化并管理所有人的自动化;成员用自己的 Slack 登录、连接个人工具、编写个人 Skills、管理自己的自动化。需要注意:当前构建版本还没有把某人提升为 admin 的界面,角色存放在 D1 数据库的member表中(owner、admin或member)。
快速开始:两条路径
README 针对不同用户给出了两条入手路径:
| 场景 | 路径 |
|---|---|
| 💬 想直接用在自己的 Slack 里 | 一键部署(Deploy to Cloudflare)、两个 API key、一个引导你完成 Slack 应用创建设置的 setup 页面,数据库自动建立 |
| 🔧 想本地开发/魔改 | TypeScript 运行在 Cloudflare Workers 之上,使用 Durable Objects 与 D1,记忆托管在 supermemory,可全部在本地运行 |
五分钟部署(Deploy in five minutes)
部署流程是 README 的重头戏,完整步骤如下。
第 1 步:点击部署,提供两个密钥
点击Deploy to Cloudflare按钮部署,会要求提供两个 secrets:
SUPERMEMORY_API_KEY:大脑存放记忆的后端密钥,在 console.supermemory.ai 获取;MODEL_API_KEY:Anthropic、OpenAI、Google 或 xAI 的任意一把密钥,大脑会根据密钥自动识别 provider,你直接向 provider 付费、无加价;OpenRouter 密钥同样可用,一个账号即可触达所有 provider 的模型。
除此之外的一切都由系统自动供给:D1、KV、Durable Objects 和 Workers AI。从 wrangler.jsonc 可以看到这些资源的实际绑定:D1 数据库(bindingDB)、KV 命名空间(BRAIN_KV)、两个 Durable Object(COMPANY_BRAIN_AGENT与Sandbox)、AI binding(AI),以及 Gmail/Granola 的速率限制绑定。
第 2 步:打开/setup
在新建的 worker 上打开/setup,它会按顺序检查以下四项:
- 数据库:D1 迁移是否已执行。worker 会在首次请求时自行应用迁移;若失败,页面会显示原因并提供Run migrations按钮重试;
- 记忆:
SUPERMEMORY_API_KEY是否已设置; - 模型:
MODEL_API_KEY是否持有 Anthropic、OpenAI、Google、xAI 或 OpenRouter 密钥(从密钥内容检测 provider),或已设置ANTHROPIC_API_KEY等 provider 专属变量。使用 OpenRouter 密钥时所有模型都经 OpenRouter 路由;某 provider 自己的密钥设置后,对该 provider 仍优先于 OpenRouter; - Slack:Slack 应用凭据是否已保存。
[!NOTE] Company Brain 安装进已有的Slack 工作区,不会替你创建工作区。还没有?先在 app.slack.com 创建一个。
第 3 步:创建 Slack 应用
在/setup点击Create the Slack app,它会用已填好你部署 URL 的 manifest(事件、交互性、两个 OAuth 重定向)打开 Slack。选择你的工作区创建应用后,把Basic Information → App Credentials中的Client ID、Client secret和Signing secret复制回/setup表单。
Slack 会用签名密钥校验事件与交互性 URL;如果创建应用时它们被标记为未验证,保存凭据后在Event Subscriptions下点击Retry即可。这背后的校验机制在 docs/slack.md 中有详细说明:事件接口使用x-slack-signature+x-slack-request-timestamp,拒绝时间偏差超过 5 分钟的请求,以SLACK_SIGNING_SECRET做 HMAC-SHA256 验签——用的是 Slack 签名机制,而不是 Better Auth 的会话 cookie。
第 4 步:用 Slack 登录
点击Sign in with Slack。第一个登录的人创建组织并成为 owner。此后同一 Slack 工作区的人都可以登录;其他工作区的人会被拒绝。
第 5 步:安装到 Slack(管理员)
点击Install to Slack(在/setup或大脑主页上)。只有 owner 和 admin 可以安装。批准 Slack 的同意屏幕后:
- 交接回 Slack:应用 UI 欢迎你回来并引导你去 Slack;
- Home 频道:智能体创建
#company-brain、邀请你并在那里发布一条介绍; - 调研:它从你的 Slack 工作区推断公司域名并开始学习公司信息;如果部署设置了
CONTEXT_DEV_API_KEY,还会读取公司网站; - 频道:管理员卡片提供把机器人加入公开频道的选项。它从不静默加入:你点一次,它再逐个加入你的公开频道并自我介绍;私密频道只有在有人邀请时才进入;
- 团队成员:自动开始向团队成员铺开——从 Slack 工作区拉取成员并发送欢迎 DM;没有按座席计费的机制,因此无需逐个邮件邀请;
- 你的 DM:你会收到一封带按钮的欢迎 DM,用于连接你的第一批工具。
[!NOTE] **试试看:**在
#company-brain或 DM 中问一句“What does {your company} do?”。
安装后,你的团队用 Slack 在/登录查看大脑主页:一个记录它记住的一切的实时记忆图,以及工具、模型、主动性、自动化、Skills 的设置页。应用 UI 的三大区域(Home、Graph、Configure)在 docs/guide/setup.md 中也有描述。
Free 计划还是 Workers Paid?
Company Brain 可以在 Cloudflare 免费计划上运行,但 Workers Paid($5/月)更好,如果团队重度依赖大脑则物有所值:
| 能力 | Free | Workers Paid |
|---|---|---|
| 长而多步的回答 | 可能被截断:免费计划每次请求允许 50 次出站调用 | 有完整工具循环的空间 |
| 代码沙箱(shell、git、Python) | 需要 Daytona key(DAYTONA_API_KEY) | 内置,运行在 Cloudflare 容器上;Daytona 仍可用如果你更喜欢 |
除此之外两者完全一致,包括Code Mode:当大脑写代码来串联工具调用或处理团队目录时,它运行在 worker 内部的 QuickJS 中,而不是依赖付费的 Dynamic Workers。要在 Workers Paid 上启用内置容器,需取消 wrangler.jsonc 中Workers Paid块的注释、将CONTAINER_SANDBOX设为"on"并重新部署。该配置块在 wrangler.jsonc 中以注释形式存在:包含containers(class_nameSandbox、镜像./sandbox/Dockerfile、instance_type: "basic"、max_instances: 10),而vars.CONTAINER_SANDBOX默认值为"off",SANDBOX_TRANSPORT为"rpc"。沙箱实现位于 src/brain/tools/sandbox 目录(含 daytona-client、cloudflare-client、availability 等模块),Daytona 依赖@daytona/api-client,见 package.json。
本地开发(Local development)
README 给出了三条命令的本地启动流程:
bun install cp .dev.vars.example .dev.vars # fill in the two keys bun run dev注意事项:
- 如果启用了 Workers Paid 块,Docker 必须在运行以支撑沙箱容器;
- Slack 必须能访问你的机器,所以要把一个隧道指向 dev server,在
.dev.vars中把PUBLIC_URL设为隧道 URL,并从隧道的/setup页面创建 Slack 应用; - 修改 src/db/schema 中的 schema 后,运行
bun run db:generate:它会生成迁移并打包进 worker,worker 在下次请求时自动应用。这正是 package.json 中db:generate脚本(drizzle-kit generate && bun scripts/bundle-migrations.ts)所做的事情,迁移产物位于 drizzle 目录,本地/远程迁移分别对应db:migrate:local与db:migrate脚本。
项目本身是 TypeScript + Hono(hono4.x),运行在 Cloudflare Workers 之上,使用 Agents SDK(agents依赖)的 Durable Object 承载智能体逻辑,D1 做结构化存储,supermemory 做向量记忆后端——这与 README 中“TypeScript on Cloudflare Workers, Durable Objects and D1”的描述完全对应。
源码级补充:运行时与 Slack 行为的实现锚点
为了让读者在 README 之上能够继续深入,这里给出三个与 README 主题直接相关的源码级观察(详细论证见 docs/architecture.md、docs/agent.md、docs/slack.md)。
智能体运行时(Agent runtime):核心是CompanyBrainAgent这个继承自 Agents SDKAgent的 Durable Object 类,按 supermemoryorgId每组织一个实例(getAgentByName(..., orgId))。它的公开方法按领域分组,覆盖 Slack 回合(onSlackEvent、onSlackChimeIn、onSlackContextEvent、onSlackReaction、onSlackMembershipEvent)、审批与租借(onApprovalDecision、onLeaseDecision)、连接(onSlackConnectComplete)、安装与公开频道铺开、团队生命周期(onSlackTeamJoin、onSlackUserChange)、研究、定时任务与自动化 CRUD 等。模型角色有明确分工:Main/Triage/Research 三套模型与 effort 配置,非 Anthropic 主模型会安装跨 provider 回退候选。与本仓库目录对应,智能体逻辑位于 src/brain/turn,Slack 逻辑位于 src/brain/slack。
Slack 事件路由:事件入口POST /brain/slack/events在验签、去重、解析工作区后快速应答({ok:true}),用waitUntil把实际处理派发给 Durable Object。事件被分类为:可回答(DM、app_mention@机器人、机器人应留在的线程消息)、chime 候选(频道顶层消息)、上下文保留等。主动插话的判定依据slack/triage.ts,预算控制依据slack/chime-budget.ts——README 中“你可以决定它有多话痨”对应的就是频道 chime 预算常量(如每频道每小时绝对上限 12 条、普通配额 6 条、最小间隔 3 分钟等)。公开频道铺开则采用 7 天窗口、跳过#general/#company-brain/私密/归档/Slack Connect 频道,文档写入sm_org_shared,并通过账本 +client_msg_id保证介绍消息恰好一次。
内存写入回退:Slack 回合的内存写回按频道私密性作用域化(conversations.info失败即关闭),由模型提议save_memory、后端规范容器标签;私密频道中未映射的发送者跳过写入——这与权限图中“消息只写入它发生的那个房间”的规则严格对应。
深入阅读路径
- docs/guide/README.md — 用户指南索引:概念(overview/setup/permissions/connectors/automations/outside-slack)与使用场景(support/incidents/meeting-recall/acting-in-tools 等 11 个场景);
- docs/guide/permissions.md — 权限图、三层记忆与工具访问作用域的完整说明;
- docs/guide/connectors.md — 工具连接器清单与文档导入方式;
- docs/guide/automations.md — 定时自动化与主动插话(chime-in)的完整判定与护栏;
- docs/architecture.md — 系统地图、记忆读写容器、工具组装与存储分层;
- docs/agent.md — Durable Object 运行时、模型角色、配置项(含 AI Gateway 三项必填配置)与数据表;
- docs/slack.md — Slack HTTP 面、事件分发、triage/chime 预算、公开频道铺开与身份供给;
- wrangler.jsonc 与 package.json — 部署绑定与依赖清单;
- src/brain — 智能体、Slack、记忆、工具、租约、自动研究、定时任务等核心实现;
- src/worker.ts — worker 入口。
Apache 2.0 许可,由 supermemory 构建与开源。
【免费下载链接】company-brain
Open-sourcing our company brain - A teammate in your Slack that remembers everything your team says, and can go do the work.
相关推荐
Multica:让 AI 编码智能体上看板协作的开源团队工作区——架构、运行时与自部署实战指南
Multica:让 AI 编码智能体上看板协作的开源团队工作区——架构、运行时与自部署实战指南 本文以 Multica 官方中文 README 为主体,带你吃透
人工智能AI Agent代码智能体项目管理研发协作Agno Team 学习能力全指南:让多智能体团队自动记忆用户、实体与决策
Agno Team 学习能力全指南:让多智能体团队自动记忆用户、实体与决策 导读 本指南围绕 Agno 仓库中 cookbook/03_teams/12_lea
人工智能大模型AI AgentAgent 框架多智能体工具调用RAGAgent 工作流Agent 记忆TencentDB-Agent-Memory 团队记忆控制台前端:MemoryPanel Web 开发与部署实战指南
TencentDB Agent Memory 团队记忆控制台前端:MemoryPanel Web 开发与部署实战指南 本指南以仓库中 MemoryPanel/w
人工智能大模型AI AgentAgent 记忆后端前端MCP 服务
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考