postiz-app
天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。——孟子
排期是个日历问题,接入才是那堵墙
一句宣传语里的怪词
一个社交媒体排期工具,描述里写的是:终极的 agentic 社交媒体排期工具。
「agentic」这个词放在这里,第一眼有点错位。排期是日历问题——选时间、排队列、到点发出。这件事跟智能体有什么关系?
往下读才会发现,这个词不是包装,是这份文档里最有意思的一条线索:它同时给十四个社交平台和十五个 AI agent 开了门。
项目地址:https://github.com/gitroomhq/postiz-app
而它的自我介绍很朴素:一个用于排期、自动化和分析内容的社交媒体管理平台。可以用 Postiz Cloud 获得完全托管的体验,也可以把开源版部署在你自己的基础设施上。
两句话,两种形态,一套产品。整份文档后面的所有取舍,都是从这个分岔口长出来的。
十四个渠道,十五个入口
先把门牌号列清楚。
能排期的平台有十四个:Instagram、YouTube、Dribbble、LinkedIn、Reddit、TikTok、Facebook、Pinterest、Threads、X、Slack、Discord、Mastodon、Bluesky。
这份名单里有三个位置值得看一眼。Dribbble 是设计师的作品集社区,不是典型的内容平台;Slack 和 Discord 是聊天工具,不是广播渠道;Mastodon 和 Bluesky 是去中心化的。一个排期工具愿意接这些,说明它想覆盖的不是「营销渠道」,而是「你可能需要往外说话的地方」。
另一侧是十五个 agent 入口:ChatGPT、Claude、Claude Code、Codex、Cursor、OpenClaw、Hermes Agent、Grok Bot、Grok Build、Muse、Perplexity Computer、nanoclaw、Paperclip、MCP Server,以及一个给 AI agent 用的 CLI。
十五个里,有一半是「你自己在用的那个助手」,另一半是「协议和命令行」。这个组合透露了一件事:它不押注某一个 agent 会赢,它押注的是agent 会变成你操作软件的主要方式。
把这两列并排放着看,会看出一个对照:
| 一侧是渠道 | 一侧是入口 |
|---|---|
| Instagram、YouTube、TikTok 这类广播平台 | ChatGPT、Claude、Codex 这类通用助手 |
| LinkedIn、Dribbble 这类职业社区 | Claude Code、Cursor 这类写代码的工具 |
| Slack、Discord 这类聊天空间 | MCP Server、AI Agents CLI 这类协议层 |
| Mastodon、Bluesky 这类去中心化网络 | OpenClaw、Hermes、nanoclaw、Paperclip 这类具体实现 |
左边是内容要去的地方,右边是内容从哪来。中间那层,就是这个产品。
排期工具的传统形态是一个网页后台,你上去点日历。而这里的形态是:你在 Claude Code 里说一句「把这周的发布排了」,它去调接口。
技术栈是明牌
文档把栈写得很干脆:
- pnpm workspaces 组的多仓库
- NextJS,React
- NestJS
- Prisma,默认 PostgreSQL
- Temporal
- Resend,用来发邮件通知
六行,没有一句形容词。但这六行能读出很多东西。
前端 NextJS、后端 NestJS、共享类型,这是典型的 TypeScript 全栈单仓结构。Prisma 加 PostgreSQL 是常规选择。真正值得停一下的是 Temporal。
排期工具的核心难题不是「怎么存一条定时任务」,而是「三个月后的某天早上九点,这条帖子要真的发出去,而且如果平台当时挂了,它得知道该重试还是该放弃」。这是一个持久化工作流问题:状态要活过重启,步骤要可重放,失败要能补偿。
用 Temporal 而不是一个 cron 加一张表,等于承认了这件事的难度。而 Resend 放在这里也不突兀——发布失败要通知人,这是这类产品的最后一公里。
它想替你做的四件事
介绍那一节只有四条,但每条都指向一种不同的用户。
把所有的社交帖子排好期。 附带很多 AI 功能。
用分析来衡量你的工作。
和其他团队成员协作,交换或购买帖子。
邀请团队成员一起协作、评论、排期。
第三条最容易被略过,但它其实很不寻常。「交换或购买帖子」意味着这个工具假设了一种市场行为:内容团队之间会互相买卖素材或发布位。这不是一个单人工具会长出来的功能,它长出来的前提是,这个产品的用户里有大量的小型代理机构和内容团队。
第四条则是把协作做进了流程:邀请、评论、排期,三件事在同一个界面上完成。
再加一条定位:非常适合做自动化,通过 API 接 N8N、Make.com、Zapier 这类平台。
顺带说一句,功能那一节在文档里没有文字列表,只有四张截图。这个选择本身也是一种表达——有些东西说得再多,不如让人看见。
自动化那一侧:SDK、节点与公开 API
文档顶部有一排不太显眼的东西,其实是这个产品真正的接口层。
一个 NodeJS 的 SDK,包名是 @postiz/node。一个给 n8n 用的自定义节点。一个 Make.com 上的集成。除此之外还有公开 API,以及前面提到的 MCP Server 和一个给 agent 用的 CLI。
把这五样摆在一起,能看出一个很清楚的层次:最上面是给人点的界面,中间是给流程编排用的节点,最下面是给代码和 agent 用的协议。
n8n 和 Make.com 这类工具的用户,思考方式跟排期工具的用户不太一样。他们不想「进去排几条帖子」,他们想「当这个 RSS 有新条目时,自动生成一条内容,发到三个平台」。这是一个事件驱动的世界,不是日历驱动的世界。
而 MCP Server 的存在,把这件事又推进了一层:不需要你先搭一个工作流,agent 自己会调。
一个排期工具愿意同时维护 SDK、两个自动化平台的节点、一套公开 API、一个 MCP 服务和一个 CLI,说明它把自己定位成了基础设施而不是一个网站。网站要你打开它;基础设施要被别人调用。
免费的那一版,到底差在哪
整份文档里最值得读的,是那张 Cloud 与开源自托管的对比表。
先看它的开场白,只有一句:我们不「锁」功能,也不限制许可。
这句话很重。开源产品的商业化通常靠三件事:功能阉割、席位限制、用量限制。而这里说三样都不做。对比表也确实是这么写的:自托管版在渠道数、每月帖子数、团队成员数上都是无限,排期、日历视图、跨平台发布、重复发布、帖子评论与延迟、套组、签名,这些功能两边都有。
那么差价到底买的是什么?表格列得很细,我把它归成四类。
第一类:平台准入。
这一条是整张表里最硬的一行。Cloud 版为每个渠道准备了预先批准的应用,开箱即用;自托管版要你自己去每个平台注册开发者应用、走他们的审批流程,而 Meta、YouTube、TikTok 的审批可能需要几周。
这就是那堵墙。排期功能是代码能解决的,平台准入是代码解决不了的。你可以 fork 一份开源代码,但你 fork 不了一份已经通过的审核。
顺带说,这一行几乎解释了整个开源与云端的双形态策略。自托管版给你的,是一份完整的软件;它不能给你的,是别人已经替你盖好的章。
第二类:基础设施与运维。
Cloud 版由 Postiz 托管,数据在他们的基础设施里;自托管版跑在你自己的服务器上,数据不出你的环境。代价是 Postgres、Redis、存储、环境变量都要自己配,更新要自己拉镜像跑迁移,备份、可用性、安全补丁都是你的责任。
第三类:AI 能力的账怎么算。
Cloud 版按月配额给 AI Copilot、AI 图片、AI 视频,密钥由 Postiz 管;自托管版要自带 OpenAI 或其他厂商的 key,没有配额,钱直接付给模型厂商。AI 视频切片需要自己的 provider key 和额外配置。Smart Agent 同样,自带 LLM key 就能用。
这一条设计得挺干净:能力不锁,账单换个人付。对用量大的团队来说,这可能比订阅更划算;对不想碰 key 的人来说,Cloud 更省心。
第四类:责任。
自动更新与维护、可用性与备份、安全补丁、支持等级——Cloud 由 Postiz 负责,自托管由你负责。分析功能也是同理:自托管版能用,但需要你自己的应用凭证带上相应的分析权限。
把这四类放在一起,会看到一句几乎没被写出来但很清楚的话:免费的部分是软件,付费的部分是别的东西。
这也是为什么那句「我们不锁功能」站得住。它没有把功能当筹码,它把「你不必自己去跟十四个平台打交道」当成商品。
自托管的真实账单
把表格里那些零散的格子拼起来,自托管版的成本清单大概是这样的:
一台能跑 Docker 的机器,或者 Coolify、Railway、任意 VPS;Postgres 一个,Redis 一个,对象存储一个;一堆环境变量要自己填;升级的时候拉新镜像、跑迁移;出问题的时候,备份、可用性、安全补丁都在你这边;支持只有 Discord 和 GitHub 两个社区渠道。
功能上不欠你任何东西,责任上全交给你。
这也是那句「我们不锁功能、也不限制许可」的完整含义。功能不锁,是因为锁了也没用——真正让人付费的是那些没法用代码写出来的部分。
而对另一类用户来说,这份账单根本不成立。他们不缺服务器,缺的是审批;他们有工程师,缺的是运营。这时候自托管就不是省钱方案,是唯一方案。
合规那五条,写得比功能还硬
文档里有一节叫「Postiz Compliance」,只有五条,但每一条都在划清一件事:它不做什么。
第一,这个仓库是开源自托管版;Postiz 同时以 Cloud 形式存在。
第二,托管服务使用官方、经平台批准的 OAuth 流程。
第三,它不自动化、也不抓取社交平台上的内容。
第四,它不收集、不存储、不代理用户的 API key 或访问令牌。
第五,它从不要求用户把 API key 粘贴进托管产品;用户始终直接向平台认证。
这五条串起来,其实是在回答一个监管和平台都很在意的问题:你到底是「帮用户发内容」,还是「替用户冒充用户」。
区别在于凭证握在谁手里。如果 token 存在服务商那里,服务商就有了代替用户行动的能力;如果用户每次都是直接向平台完成 OAuth,服务商只是拿到了一份被授权的通道。后者更麻烦,也更安全。
一个排期工具主动把这套边界写进文档,说明它知道这门生意的敏感点在哪。
还有一条:数据放在哪
对比表里藏着一行很容易被跳过的字段:合规与数据驻留。
Cloud 版的数据在 Postiz 控制下的区域;自托管版可以在你选的任何区域,或者一个完全隔离的环境里跑。
对一个内容团队来说,这一行可能无关紧要;但对某些行业来说,这一行就是能不能用的全部理由——一条帖子发出去之前的草稿、素材、发布计划,本身可能就是不该出境的信息。
而这一行也解释了自托管版为什么值钱:它卖的不是功能,是「这些东西不必离开这栋楼」。
部署那一栏还留了一句很轻的自嘲:部署有时候可能挺难的,让你的 LLM 去部署它吧。
这句话读起来像玩笑,但它恰好呼应了整篇文档的另一个主题——这个产品假设你身边已经有一个 agent 了,连运维都可以交给它。
装法被挪到了文档里
有一点挺特别:这份文档里没有一行安装命令。
它只说,想让项目跑起来,请跟着 Quick Start 指南走。所有的命令、依赖、环境变量,都被搬到了另一个地方。
这个选择跟技术栈是自洽的。一个 NextJS 加 NestJS 加 Postgres 加 Redis 加 Temporal 的系统,安装步骤本来就长到不适合塞进文档;硬塞进去,只会得到一段永远跟不上代码变化的命令清单。
而对读者来说,这个选择其实传递了一个信号:这不是一个 npm install 就能玩起来的小工具,它是一个需要被部署的系统。前面那张自托管成本清单,就是这句话的注脚。
页首还挂着几条路:注册 Cloud、加入 Discord、看公开 API、看 SDK、看 n8n 节点、看 Make 集成。而那句「Discord,仅限开发者」也很有意思——社区是分层的,用的人和改的人不在同一个房间里。
广告位与那句自述
文档中间有一节是赞助,两种方式:单纯捐钱;或者把 logo 挂在主仓库上并带一个回链。
关于第二种,文档给了一句很实在的说明:Postiz 有超过 700 万次下载,每月两万次浏览。
这是项目自己的说法,放在招募赞助的语境里,读的时候心里该有个数。但它也解释了为什么一个开源项目需要赞助——十四个平台的接入要一直跟着改,这件事没有尽头。
许可与源码
源码以 AGPL-3.0 提供。
对比表里对这一栏的表述是:完整的源代码,可以自由 fork 和修改。
对一个要接十四个平台、还要跟着各家 API 一起变的工具来说,这条很重要。平台的规则改一次,接入层就得改一次;如果接入层在你的仓库里,你能自己动手;如果不在,你只能等。
最后
回到那个怪词。
「agentic」放在一个排期工具上,一开始像是蹭热度。但读完这十四个渠道和十五个入口,会发现它说的是一件很具体的事:这个工具假设操作它的不再是人的手指,而是某个 agent 的调用。
一旦这么假设,很多东西就得重做。日历要能被 API 读写,状态要能被程序查询,失败要能被重试——这些恰好也是 Temporal 存在的理由。
而真正让这个产品成立的,不是那套 TypeScript 全栈,也不是那十五个 agent 入口,是那张对比表里最不起眼的一行:Meta、YouTube、TikTok 的审批可能需要几周。
写代码的人能解决代码里的问题。剩下的那些,只能靠时间、靠流程、靠一家公司去替你排队。
所以这份开源的,是一套很好的软件。而那份要付费的,是别人已经替你排完的队。
