Notion 和 puppyone 都是工作空间,但服务的对象不一样。
Notion 是给团队和个人用的全能工作空间,团队的人在里面写文档、做协作。
puppyone 是给 AI Agent 用的开源工作空间。当你的团队在用 Cursor、Claude Code、n8n 这些 agent,又想给它们一个能共享文件、能版本控制、能自部署的地方,你要的就是 puppyone。
两者怎么选,或者怎么搭着用,看你的活儿主要是人在做还是 agent 在做。
30 分钟把 Cursor / Claude Code 接到 puppyone + NotionGet startedNotion 是给团队和个人用的全能工作空间。团队在里面写规格、做决策、整理 wiki,几个人一起编辑、留评论。从一开始它就是给真人用的,不是给 agent 用的。
puppyone 是开源的、给 AI Agent 用的 File Workspace。代码在 github.com/puppyone-ai/puppyone。
适用场景很简单:你的团队在用 Cursor、Claude Code、n8n、CrewAI 这些 agent,又想给它们一个能共享文件、能版本控制、能开源自部署的工作空间。文件用 Markdown 或 JSON 存,agent 直接读写。
你在找开源的方案,puppyone 就是。
我们跟 30 多个团队聊过,搜这个词的人,通常都是撞上了下面 4 类场景里的某一种。注意每段最后那句话:真正的问题,不是 Notion 不够好。
你想让 Cursor 在写代码时能 read_file 直接拿到 Notion 上的产品规格。写了个集成,跑两天发现:每个 token 一秒就 3 次请求的额度,团队几个 Cursor 实例一起跑就互相挤,HTTP 429 满天飞。
这不是 Notion 不够好。Notion 的限流是按人的节奏卡的,人本来就不会一秒钟发 100 次请求。真正的问题是,你需要在 Notion 外面套一层缓存加文件镜像。
你跑了 3 个 agent:researcher 在 findings 这一页加 section A,writer 加 section B,formatter 改格式。三个一起 push,发现页面历史是后写覆盖前写,谁手快谁说了算,而且 Notion 历史里也看不出来"这段是 agent A 写的"。
这不是 Notion 不够好。Notion 的协作机制本来就是给真人设计的(OT + 在线状态、几秒钟一改)。真正的问题是,你需要一套带 commit、能自动合并的版本控制,而不是后写覆盖前写。
你想让 finance-bot 只读 /finance/ 下的页面、researcher 只读 /specs/ 和 /research/、cursor 只能写 /scratch/cursor/。可 Notion 的权限只分到人、页面、workspace 这三级,没有"按 agent 分"的概念。一个集成 token 就是整个 workspace 的钥匙,要么全开要么不开。
这不是 Notion 不够好。Notion 的权限本来就是按真人公司组织划的(人、群组、workspace)。真正的问题是,你需要"按 agent + 路径"分权限的那一层,而这一层 Notion 压根不打算管。
周三发现某个 agent 的 prompt 漂移了,把 /research/ 下面某些段落改坏了。Notion 的版本历史是按 block 一条一条 undo,能往回查的窗口还有限。你回答不出"agent X 这 24 小时改过哪些段落",更别说"只把 agent X 在某段时间的写入抹掉、其他 agent 和真人的修改全留下"。
这不是 Notion 不够好。页面级的版本历史给人用是够的。真正的问题是,你需要 Git 那种 commit、diff、按需回滚的能力。
上面 4 个场景里只要中了一个,你要的就不是替代 Notion,而是在 Notion 旁边加一层。
表面看,puppyone 像是 Notion 在 Agent 场景下的替代品。但真正替代的,是你为了让 Agent 能用上 Notion 而手搓的那一堆胶水:
| 你现在在维护的胶水 | puppyone 这层把它做了 |
|---|---|
| block 转 markdown 的转换器(Notion 改一次 schema 你跟着改一次) | Notion 连接器在导入的时候自动转成 markdown 文件 |
| 定时轮询脚本(Notion 不给 webhook) | 文件系统原生事件,hook 想订阅就订阅 |
| 自己写的权限代理(Notion API token 颗粒太大) | 按 agent 分的 Access Point,能读哪些路径、能写哪些路径都写明白 |
| 自己搭的跨会话临时存档(agent 重启就忘了) | 文件系统天然就持久,关掉再打开东西还在 |
| 自己写的多 agent 合并逻辑(Notion 是后写覆盖前写) | 内置的 Mut 自动合并,每个 commit 都带是谁写的 |
| 自己造的版本/回滚工具(Notion 只能按 block undo) | Git 那套 commit + diff,可以按 agent + 时间段精确回滚 |
| 自己接的 Slack/Postgres/Gmail(每家一份转换器) | 内置 SaaS 连接器,统一落成文件夹 |
不是 Notion 解决不了这些,是 Notion 压根不打算碰。这层胶水活儿,puppyone 一开始就是冲着它来的。
每个 agent 在 puppyone 里都有自己的工作目录。关掉会话再打开,所有临时笔记、todo、跑出来的东西全都在原地。昨天你让 Claude Code 跑了 4 小时的 codebase 分析、结果写到 /scratch/claude/notes.md,今天打开新会话第一句不用再补"还记得我们昨天聊的 X 吗",Claude 直接 read_file /scratch/claude/notes.md 就接着干。
Notion 不是干这个的。Notion AI 看的上下文是单页面的,每个 chat 各管各的;外部 agent 想知道"我昨天写了什么",只能拿 Notion API 一遍遍轮询。
puppyone 内置的 Mut 就是冲着 agent 做的版本控制。3 个 agent 同时改 /research/findings.md 的不同段落,服务端那边自动合并,每个 commit 都带是谁写的标签,没人需要手动解冲突。下午发现 formatter 把表格改坏了,一句 puppyone revert --by formatter-bot --since "13:00" 就把它这段时间的写入单独抹掉,其他 agent 和真人改的全留着。
Notion 这块插不上手。Notion 的协作机制是给真人写的,里面就没有"谁是哪个 agent"这一层。
每个 agent 自己一个身份,能读哪些路径、能写哪些路径明摆着,文件系统这层就给你拦下来:
researcher-agent READ /specs/, /research/ WRITE /research/
cursor-agent READ /codebase/, /research/ WRITE /scratch/cursor/
finance-bot READ /finance/ WRITE /finance/reports/
researcher 写不进 /scratch/cursor/,cursor 读不到 /finance/。万一 token 泄了,能搞坏的也就是它自己那点 scope。
Notion 给的颗粒达不到。Notion 的权限只分到人、页面、workspace 这三级,没有"按 agent 分"。
每次写文件就是一次 commit,谁写的、什么时候、改了什么全都有:
puppyone log /research/ # 这个目录最近的变更
puppyone diff @yesterday # 昨天到现在的所有改动
puppyone revert /research/ \
--by claude-research-bot --since "Tue 18:00" # 精确抹掉某个 agent 某段时间的写入
Notion 的版本历史做不了这事。它是按 block 一条条 undo,没法做"按 agent 精确回滚"。
/integrations/
notion/specs/feature-x.md ← Notion 里的页面
slack/eng-channel.json ← Slack 频道历史
postgres/customers.snapshot ← Postgres schema + 数据快照
github/repo-puppyone/PRs.json ← GitHub PR / issue
Agent 一句 read_file /integrations/notion/specs/feature-x.md 拿到干净的 markdown,不用再写 block 转换器、不用再去对付 3 次/秒的限流。
Notion 不是干这个的。它是协作文档,不是 SaaS 数据中转站。想要中转站,每家 SaaS 你都得自己接一遍。
把 Notion / Slack / Postgres 接成 Agent 能直接 cat 的文件夹Get started这事不是 "Notion vs puppyone" 二选一,而是"协作层 vs Agent 工作空间层",两边各干各的:
| 维度 | 协作层(Notion 在这) | Agent 工作空间层(puppyone 在这) |
|---|---|---|
| 给谁用 | 一起协作的人 | 共用工作空间的几个 agent |
| 基本单位 | 页面 + 富文本 block(人读人写) | 文件 + commit(agent 读 agent 写) |
| 怎么接 | 网页、移动 app、REST API | MCP、bash、SSH、REST |
| 权限分到哪 | 到人、到页面、到 workspace | 到 agent,能读哪些路径、能写哪些路径 |
| 频率限制 | 一个 token 3 次/秒,撞了就 HTTP 429 让你等 | 自部署不卡 |
| 几个一起写 | OT + 在线状态,最后写的覆盖前面 | Mut 自动合并,每条 commit 带是谁写的 |
| 版本历史 | 按 block 一条条 undo(往回查的窗口有限) | Git 那套 commit + diff,可按 agent 精确回滚 |
| 变更通知 | 没 webhook,得定时轮询 | 文件系统事件,hook 想订阅就订阅 |
| 持久性 | 完全持久(人写的不会丢) | 完全持久(agent 写的也不会丢) |
| 数据怎么进来 | 手贴 / 浏览器剪藏 / 第三方同步工具 | 内置 Notion、Slack、Postgres、GitHub 等连接器 |
| 部署 | 只能云上 | 开源 + Docker 自部署,云端可选 |
表里 Notion 那边的数据来自:Notion API 限制文档、MCP 集成文档、2026 年 4 月的 Workers for Agents 公告。
每一行不是在比"谁更好",而是在说"谁负责哪一块"。协作层那块 puppyone 没打算碰(也碰不过),Agent 工作空间层那块 Notion 也没打算管。
老实说一句:不是所有团队都需要 puppyone。
团队还没开始用 Agent,全是真人协作 → 留在 Notion 就够了,puppyone 用不上。等哪天开始接 Cursor / Claude Code / n8n 跑批量活儿了,再回来。
就 1 个 Agent,偶尔跑跑,比如周末跑个 summary → Notion + 官方的 Notion MCP server 八成够用。3 次/秒在低频场景下卡不住,就一个 agent 也不存在并发问题。先用着,撞墙了再换。
几个 Agent 同时跑批量任务(典型:AI 公司、AI 工程团队、要给客户的 Agent 做 internal tools 的 SaaS) → 该加 puppyone 这一层了。3 次/秒限流、没法按 agent 分权限、几个 agent 互相覆盖、没法精确回滚,这 4 件事撞上任何一件,都够你头疼一周。
完全 AI-driven 的公司,Agent 是主要写手,人只过最后一道 → puppyone 当主,Notion 当辅。Notion 留给真人审完再发的那一步,agent 干活全在 puppyone 里。
要是你在头两类里,老实说,你现在不需要 puppyone。我们宁可你晚点回来,也不希望你现在硬上、过两天嫌过度工程。
不叫迁移。你不用弃 Notion,是给 Notion 旁边加一层。4 步:
puppyone connect notion:挑要接进来的 Notion space / database,puppyone 把它们镜像成 /integrations/notion/... 下的 markdown 文件,定时刷新(默认 5 分钟,可改)。
puppyone connect notion --space "Engineering" --target /integrations/notion/
puppyone agent create cursor-research \
--read=/integrations/notion/specs/,/research/ \
--write=/scratch/cursor/
接完之后,Cursor / Claude Code / n8n 一律通过 puppyone 读写,再也不直接撞 Notion API。3 次/秒限流、按 agent 分权限、按 agent 精确回滚,这些事都在 puppyone 这一层一并解决。
一句话:只要是"以页面为基本单位、给真人用"的协作文档工具,给 Agent 用都会撞上同一类问题。puppyone 是补在它们旁边的那一层,跟飞书、语雀、钉钉文档之间,同样不是谁替代谁的关系。
| 工具 | 接口频率 | Sandbox 是否持久 | webhook | 能否按 agent 分权限 |
|---|---|---|---|---|
| Notion | 一个 token 3 次/秒 | Workers for Agents 跑完就忘 | 无 | 不能 |
| 飞书 | 等级 4:50 次/秒 + 1000 次/分(官方文档) | Aily 沙箱 5 分钟、1GB、跑完就忘 | 部分 API 有 | 不能 |
| 语雀 | 限频较松,产品定位在"写作" | 没有 sandbox | 无 | 不能 |
| puppyone | 自部署不卡 | 文件系统天然就持久 | 文件事件,hook 想订阅就订阅 | 每个 agent 一份 Access Point |
国内常见的搭法是飞书做团队协作(人写人读),puppyone 做 Agent 工作空间(agent 读 agent 写),中间用 puppyone 的飞书连接器把数据打通。语雀(国内对比可参考)中文写起来最舒服,但产品就盯着"写作"这件事,多 agent 不在它的考虑范围里。
那你到底算不算 Notion 替代品? 不算。我们替代的是你为了让 Agent 能用上 Notion 而手搓的那堆胶水:block 转换器、轮询脚本、自己写的权限代理、自己造的版本控制。Notion 还是留在原地,照样做团队的协作。要是你的活儿主要是人在做,puppyone 用不上;要是主要是 agent 在做(或者人和 agent 混着干),puppyone 就是补在 Notion 旁边的那一层。
能一行命令把 puppyone 接进 Cursor / Claude Code 吗? 能。puppyone 有官方 MCP server,Cursor、Claude Code、Claude Desktop、Continue 这些只要支持 MCP,都是一行配置就能接上。具体看 Cursor 集成指南。
Notion 自己出了 AI 和 MCP server,puppyone 还有必要吗? 看你要不要"给 agent 一个自己的工作空间"。Notion AI 是塞在 Notion 里给 Notion 用户用的助手,Notion MCP server 是 agent 接 Notion 数据的入口,它们管的是"agent 怎么读到 Notion 里的东西",没管"agent 怎么有自己的工作空间、怎么跨会话不丢状态、怎么并发不冲突、怎么按 agent 精确回滚"。后面这几件 puppyone 在做,跟 Notion MCP server 不冲突,可以一起用。
puppyone 跟飞书、语雀能一起用吗? 能。puppyone 的 SaaS 连接器是开放的,飞书、语雀、钉钉文档都能同样接进来。国内常见的搭法是飞书做团队协作,puppyone 做 Agent 工作空间。
和 Mem0 / Zep / Letta 这些 agent memory 平台是什么关系? 不冲突。它们管的是 memory 这一层:一条条事实怎么存、怎么召回、怎么过期;puppyone 管的是工作空间这一层:多个 agent 怎么共用一份文件、怎么版本控制、SaaS 数据怎么接进来。经常是一起用的:agent 用 Mem0 存用户级的小事实,用 puppyone 存共享的文件和跨会话的状态。详细对比可看 2026 年最佳 AI Agent Memory 平台清单。
数据存在哪?能自部署吗? puppyone 是开源项目(github.com/puppyone-ai/puppyone)。云端版我们托管,企业版可以挂自己的 S3;自部署走 Docker,所有数据(包括 commit 历史)都在你自己机器上。
你不用在 Notion 和 puppyone 之间二选一。Notion 留在协作层,照常给团队的人用;puppyone 在它旁边做 Agent 工作空间,负责跨会话状态、并发合并、按 agent 分权限、按 agent 回滚,外加把 Slack、Postgres、GitHub 这些数据也一起接进来。中间一行命令就把数据通起来,agent 读 puppyone,不再直接撞 Notion API。撞过 3 次/秒限流、撞过几个 agent 互相覆盖、撞过想给 agent 限权限做不到、撞过想精确回滚某个 agent 做不到,你需要的是这一层,不是替代 Notion。
给你的 AI Agent 一个真正的工作空间,30 分钟接通 Cursor + NotionGet started