news 2026/9/29 2:47:27

Company Brain 开源部署与实战指南:在自有 Cloudflare 账号上部署一个能记忆、能动手的 Slack 团队智能体

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Company Brain 开源部署与实战指南:在自有 Cloudflare 账号上部署一个能记忆、能动手的 Slack 团队智能体

【免费下载链接】company-brain

Open-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 是 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,它会按顺序检查以下四项:

  1. 数据库:D1 迁移是否已执行。worker 会在首次请求时自行应用迁移;若失败,页面会显示原因并提供Run migrations按钮重试;
  2. 记忆:SUPERMEMORY_API_KEY是否已设置;
  3. 模型:MODEL_API_KEY是否持有 Anthropic、OpenAI、Google、xAI 或 OpenRouter 密钥(从密钥内容检测 provider),或已设置ANTHROPIC_API_KEY等 provider 专属变量。使用 OpenRouter 密钥时所有模型都经 OpenRouter 路由;某 provider 自己的密钥设置后,对该 provider 仍优先于 OpenRouter;
  4. 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 的同意屏幕后:

  1. 交接回 Slack:应用 UI 欢迎你回来并引导你去 Slack;
  2. Home 频道:智能体创建#company-brain、邀请你并在那里发布一条介绍;
  3. 调研:它从你的 Slack 工作区推断公司域名并开始学习公司信息;如果部署设置了CONTEXT_DEV_API_KEY,还会读取公司网站;
  4. 频道:管理员卡片提供把机器人加入公开频道的选项。它从不静默加入:你点一次,它再逐个加入你的公开频道并自我介绍;私密频道只有在有人邀请时才进入;
  5. 团队成员:自动开始向团队成员铺开——从 Slack 工作区拉取成员并发送欢迎 DM;没有按座席计费的机制,因此无需逐个邮件邀请;
  6. 你的 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/月)更好,如果团队重度依赖大脑则物有所值:

能力FreeWorkers 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.

项目地址:https://gitcode.com/gh_mirrors/co/company-brain
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 2:47:01

FileZilla Server 0.9.39 汉化绿色版部署与配置实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 2:46:55

大麦网抢票脚本保姆级教程:3步配置自动抢票

大麦网抢票脚本保姆级教程:3步配置自动抢票 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 手点"立即购买"总慢人一步?这个 大麦网抢票脚本 帮你把登录、查票、提…

作者头像 李华
网站建设 2026/9/29 2:46:47

MIPI LP RX调试全攻略:从协议到实战,解决没信号与花屏问题

1. 从一个“没信号”的调试现场说起如果你正在调试一块MIPI屏幕&#xff0c;上电后背光亮了、屏也热了&#xff0c;但画面就是黑的&#xff0c;示波器探头搭在LP信号线上却什么都抓不到&#xff0c;那你大概率已经踩进了MIPI LP RX这个坑里。LP&#xff0c;Low Power&#xff0…

作者头像 李华
网站建设 2026/9/29 2:46:28

工业级无人机调度平台开源架构实战:MAVLink+Celery+GeoHash

简介&#xff1a;这是一款面向工业级低空空域管理场景的开源无人机智能调度与管理平台&#xff0c;适用于无人机系统开发者、低空经济领域科研人员及电网、交通、城市安防等行业的技术实施团队&#xff0c;解决多机型协同调度、任务自动化执行与三维可视化管控等核心问题。资源…

作者头像 李华