Comp AI CRM:让 AI 自己维护客户档案的开源 Agentic CRM

Comp AI CRM(仓库 trycompai/crm)是一个定位为 agentic-first 的开源 CRM:AI agent 不是 CRM 附加的一个功能,CRM 是 agent 记笔记的地方。截至 2026 年 8 月,它在 GitHub 上有 8.9k star、1.1k fork,最新版本 v1.15.3(2026-08-21 发布),MIT 协议,主语言 TypeScript(95.4%)。与"数据库 + 表单 + 聊天框"的传统路线不同,它把维护客户档案这件事整体交给一个自带部署、自带调度、自带工作队列的 agent,核心机制是一条铁律:关于人的信息,一律不猜。

传统 CRM 把最脏的活留给人类

大多数 CRM 是一个数据库加一个表单;所谓 AI CRM 则是在表单旁边挂一个聊天框。两者有一个共同点:把"搞清楚什么是真的、并把它记下来"这件事,留给一个有更要紧事做的人类。

Comp AI 把顺序倒了过来。它运行在自己的部署上、按自己的调度、对着自己的工作队列干活:自己决定下一个看什么,自己约跟进,花研究预算,预算用完就停。它不是请求-响应式的——关掉浏览器,它照常继续。

"关于人的信息一律不猜":证据账本机制

这套系统最反直觉的设计,是 任何工具都不接受置信度分数。原因很直接:让模型给自己的判断打分,它一定会偏向"显得有用"的方向错。

工具只报告观测到的事实,例如 crm.signature-block(读到某人的邮箱签名块)和 github.account-identity(读到某个 GitHub 账号身份)。账本(ledger)给证据定价:强证据写入档案,弱证据变成给人类的建议,由人来仲裁。

项目的解释一句话说透:自信地记错一个客户事实,比留一个空字段更糟——因为留空还能看出不知道,记错没人看得出错在哪。

agent 架构:文件即工具、技能、调度

agent 位于独立的 apps/agent,构建在 eve(Vercel 的文件系统优先持久 agent 框架)之上:一个工具是一个文件,一个技能是一个 markdown 文件,一个调度是一个文件,运行时负责持久化——会话在重部署后存活,工作从停止处恢复。

具体构成:

  • 18 个自研工具:read_crm_history、search_crm、identify_contact、research_person、enrich_company、record_fact、schedule_recheck 等;
  • 4 个 skills:evidence.md、identity-matching.md、data-boundaries.md、writing-a-brief.md——是 agent 阅读的散文,像代码一样版本化管理;
  • 1 个 schedule(dispatch.ts):它不决定内容,只负责领活——用 dueAt 租约(FOR UPDATE SKIP LOCKED)领取到期行,每行启动一个会话。两个 dispatcher 拿到的活互不重叠;运行崩溃后,租约到期自动释放,任务回到队列。

数据边界:沙箱无网络、无数据库

agent 的沙箱(grep / bash / glob,只在自己 workspace 内)采用 deny-all 出口策略:无网络、无 DATABASE_URL。web_fetch 和 web_search 运行在 app 运行时与模型侧,不走沙箱。作者的判断是:一个既没有凭据也没有出网的 shell 只是一个文本处理器,客户邮件正文经由 shell 命令离开系统的唯一路径被物理切除。

另一个务实设计是无任何 API key 也能运行:读自己的邮件线程、会议记录和签名块——这些是免费的,也是最好的证据,没有数据商能卖给你"从客户本人邮箱发出的回信"。每个外部来源都是可选项,agent 在每次会话开始时知道本机开了哪些来源,并据此规划,而不是靠一次次失败去发现缺口。可选来源包括 Context.dev 提供的公司品牌数据(logo、行业、域名背后的真名)和 LinkedIn 资料。

技术栈与三条代码原则

技术栈:Turborepo monorepo + Bun + Vercel;前端 Next.js App Router + shadcn/ui + nuqs(列表状态存在 URL 里,复制地址栏即可复现视图);API 是 NestJS + nestjs-trpc,路由类型由 NestJS 生成,从前端到 Prisma 行全程类型安全;数据层 Prisma + Postgres(Neon)+ 可选 Redis(Upstash);认证用 Better Auth,支持 Google / Microsoft / 自有 IdP,配合 ALLOWED_SIGN_IN 允许列表——这个变量未设置时没人能登录,失败方向是安全的。

代码库守着三条原则:智能永不在 API 层(Nest 只报告发生了什么,agent 决定含义);packages/ui 是 UI 的唯一来源(调用处不覆盖样式);刻意单租户(没有 organizationId)。

上手与部署

本地跑起来需要 Bun 和 Docker:

git clone https://github.com/trycompai/crm.git
cp .env.example .env
bun install
docker compose up -d
bun run db:deploy
bun run db:seed
bun run dev

.env 里需要设置三个关键值:BETTER_AUTH_SECRET、ALLOWED_SIGN_IN(你的邮箱域名或单个地址)、以及 Google 或 Microsoft 的 OAuth 凭据(二选一即可)。邮件同步是只读的(Mail.Read):CRM 能读邮件但永远不能发送、回复、移动或删除,且只向前读——首次连接只记录当前时间,不会把旧邮箱几年邮件灌进来。

生产部署是三个独立部署加一个 Postgres:Next.js 应用、NestJS API、agent。三者互不依赖,唯一必须一致的是 DATABASE_URL 和 BETTER_AUTH_SECRET。

它适合谁

对想要一个"agent 工作台"的团队,以及不愿意把客户数据交给 SaaS 的自部署者,Comp AI 是当前值得关注的候选:8.9k star 的增长速度说明概念被市场接受,MIT 协议意味着可以按需改造。

一句话带走:Comp AI 的重点不是"AI 帮你用 CRM",而是把"什么才是真的"这件事从人手里交给 agent 去查证,用证据账本和人工仲裁替代自信的猜测。对做 agent 工程的开发者,它的两个范式也值得记下——文件即工具 / 技能 / 调度的持久 agent 设计,以及沙箱无网络、无数据库的数据边界做法。