Cursor 把上线包了,出事时谁认账

Hello,我是飞飞。
昨天 Cursor 发了个更新。你在云端 agent 里说一句「给我做个应用」,它就把应用写出来、开一个 Postgres、配好登录、部署到托管环境,再给你一条能点开的链接。
以前这五件事得一件件办。现在一句话,剩下的交给它。
我先是觉得省事。转念又想,这条链接发出去之后,这套系统里还有几样东西写着我的名字?
它替你办的其实是五件事
拆开看。写应用、开数据库、配认证、找托管、发域名。这次更新把这五件串成了一条流水线,触发方式就是你在云端 agent 里明确说要建应用。
数据库是按需创建的 Postgres,托管由 Cursor 提供。发布时你选一个唯一域名,再拿到一条可访问的链接。仓库来源目前是 Cursor Origin 和 GitHub,GitLab 写着即将支持。
单看每一条都正常。凑在一起,分量就出来了。你交出去的是一整条上线链路,远不止一段代码。代码写错了能改,链路交出去,改起来就没那么容易。
它顺手替你选的默认值
开库这件事,最省事的是点一下,最不省事的也是点一下。
你拿到的是一个 Postgres。可它建在哪个区域、有没有自动备份、连接数上限多少、账单怎么算,你不一定知道。这些默认值平时不出声。出事的时候,它们会一起出声。
表结构更隐蔽。agent 按你说的需求建表,字段和关系是它理解的那个版本。你没参与设计,也就说不清哪里会先撑不住。等功能长起来,改一张表可能要停一次服务。到那时候你才会回头问,当初这张表是谁定的。
这些默认值来自 agent 的判断。它按最常见的情况替你选。最常见的情况,未必是你的情况。
默认值本身没问题。它只是把决定的成本推到了以后。以后你还是得付。
登录这道门不在你手里
更新说明里写得很直白:认证配在 Cursor SSO 后面。
翻译过来,是「谁能进这个应用」先要过的一关,验的是 Cursor 账号。应用可以分享给指定的人、组或者整个团队,这几种都要先登录 Cursor。个人套餐可以额外选择公开分享,那是另一个口子。
如果你做过带登录的产品,会知道用户表长什么样。邮箱、密码哈希、角色、邀请记录。这张表在你的库里,你能改,能导出,能删。走 SSO 之后,这道门挪到了别人家。你手里剩下的是一份「谁被允许」的名单,账号体系本身还在别人那儿。
对外卖的产品还要多算一层。你的用户在别人家的账号体系里注册。找回密码的邮件不走你的服务器,封禁一个账号也得去别人家的后台点。这些都不致命,可它们全在你原来该管的那一栏里。
做内部工具,这大概正好,公司本来就在用 Cursor。要卖给别人用,这一条得先想清楚。
密钥进了别人的表
还有一句藏在后面:团队管理员可以查看团队里的每一个应用和每一个密钥。
这句话不吵不闹。但它是整篇更新里最该停一下的地方。
应用要连数据仓库,Cursor 会向你要凭证。你给了,它才能把这条链路跑通。同时,这份凭证进了管理员能看见的表。对团队来说这是治理能力。对个人来说,你等于把钥匙交给了一个组织。
我并不是说这有什么问题。它写得很清楚,管理员能看到、能加自定义安全规则、能批准被拦下的发布、能下架应用。说清楚本身是好事。
密钥还有个麻烦是轮换。你换一次,得先找到所有用过它的地方。它现在躺在别人的表里,你还得问一句,这张表里除了管理员,还有谁能看。
真正的麻烦在于,很多人点发布的时候不会读到这里。他们看到的是那条能点开的链接。
安全检查管到哪一步
发布前有一套检查。确定性规则和 agent 检查一起跑,专门看密钥有没有被写进应用文件、凭证有没有暴露。不通过就报出要修什么。检查不过、你不点发布,东西就不会上线。
这是实打实的护栏,比很多同类产品认真。
但它管的是「上线前别把钥匙落在门口」。它不管你做的这个东西该不该给这批人用,也不管那张表里该不该存这些字段。这些判断没法外包给一条检查规则。
护栏能挡住一个已知的错,挡不住一个你还没想过的决定。所以护栏越完善,越容易让人以为决定已经做完了。
我自己的上线清单
我没试过这个新功能,所以不评价它跑得顺不顺。我只拿自己那条链子对照一下。
我这个博客有两条部署路。一条把镜像推到服务器。脚本先拉新镜像,再发一个请求确认页面回 200,失败就把旧容器换回来。另一条推到 GitHub Pages 当镜像站。域名、证书、镜像仓库凭证、服务器密码,都在我自己的账号、仓库密钥和配置文件里。
这套东西麻烦,每年都要处理证书到期、token 过期。部署脚本里还专门留了一个已停止的旧容器,就是为了失败时有得退。
六月还有过一次。一个部署用的 token 悄悄过期,构建一路显示成功,最后那步认证失败,镜像站挂了整整一天我才发现。
但它有一个好处,出问题时我知道该翻哪里。域名在谁家注册,证书什么时候过期,日志落在哪台机器,回滚按哪个命令。这几样我答得上来。
托管服务把这些收走之后,你换来的是一句话上线。代价是这几样答案变成了别人的文档。
出问题时翻哪张清单
先把标题里那个问题答了。
出事的时候,认账的是点下发布的人和收下这个应用的团队。Cursor 提供的是检查、一条能上线的路,还有那条链接。责任不会跟着代码一起被托管走。
所以我现在看这类功能,会先列一张很短的单子。
域名归谁,能不能迁走。登录能不能换成自己的账号体系。密钥存在哪,谁有权限看。日志和回滚在谁手里。还剩一条,如果明天这项服务停了,应用还能不能活。
五条里没有一条是技术难题。全是所有权问题。接口改名、套餐下线、服务停运,这几年一直在发生。押上去的时候越顺手,撤下来的时候越费劲。而在「一句话做完」的产品里,所有权是最容易被顺手收走的东西。
这张单子不长,填起来却常常卡住。卡住的那一格,就是平时没想过的地方。
Cursor 这次把发布做得足够轻。轻到你会忘了,发布本来是一件要负责的事。
你会先交哪一样
我不觉得该因此不用它。内部工具、原型、给团队看的演示,这些场景里,省下来的五步是实打实的。
真要上线一个对外的东西,我会先花十分钟把上面那张单子填一遍。一个只给同事看的报表工具,整套交出去没关系。一个要收钱的对外服务,登录和域名这两样我会自己拿回来,哪怕多花两天。
链接是它给的,名字是你的。这句话听着像安慰,其实是一句提醒。提醒你,链接发出去那一刻,账才刚开始记。
你上线自己的东西时,最不敢交出去的是哪一样?域名、登录、密钥,还是那条出事时能回滚的路。