小岛AIAI 航行日志

小岛 / 岛刊社 / 文章

前端原型总返工?Meta 把 150+ 组件写进了 Agent 的上下文

小岛AI

Astryx 不替你决定审美,却能把组件、模板和设计 Token 的边界先交给人和 Agent。它适合 React 19 的设计系统场景,也必须接受仍在 Beta 的现实。

Agent 工程行业与公司

让 AI 接手一个已有 React 页面,最烦的往往不是它不会写 JSX。

它会写,而且写得很勤快。问题是它不知道这个项目里按钮该长什么样、间距该从哪套 Token 取、设置页应该复用哪张布局、为了改一个弹窗到底要不要再造一层 CSS。几轮下来,页面能跑,团队也开始不太想接手了。

Meta 最近开源的 Astryx,让我觉得值得看的点就在这儿。它不是来替你选审美的,也不该被当成“下一套复制粘贴组件库”。它试图做的是更朴素的一件事:让人和编程 Agent 面对同一份组件、模板和设计 Token 说明书。

截至本文核对时,这个仍处于 Beta 的仓库有 26,743 个 Star。官方说它来自 Meta 内部约八年的设计系统实践,覆盖过 13,000+ 个应用,公开了 150+ 个无障碍组件、主题、模板和 CLI。数字当然不等于适合你的项目,但至少说明它不是刚搭起来的一页 landing page。

最短的试法也很明确:在一个 React 19 的试验分支装上 CLI,然后把组件目录写进 Agent 能读到的项目说明里。

npm install -D @astryxdesign/cli
npx @astryxdesign/cli init

Astryx 官方仓库的主视觉与项目说明

图注:Astryx 官方仓库主视觉;本文的判断只基于公开文档,未做生产迁移实测。

真正有意思的是它给 Agent 留的入口。

不要让 Agent 从 CSS 里猜项目规则

Astryx 的核心包 README 写得很直接:装好 CLI 之后,运行上面那次 init,它会把组件索引写进项目里的 AGENTS.md 或 CLAUDE.md。

这条命令不会突然让 Agent 有了设计品味。它做的事更像把项目里已有的“零件目录”塞到 Agent 伸手就能拿到的位置:有什么 Button、哪些 Template 可以起一个 dashboard、颜色和圆角从哪里读、组件怎么换主题。

接着,Agent 或开发者可以查具体组件,而不是让模型凭印象拼一个看上去差不多的版本:

npx @astryxdesign/cli component Button
npx @astryxdesign/cli component --list

这和给模型一张长长的设计规范 PDF 不太一样。PDF 里写了“保持一致性”,模型点头;CLI 把可用组件、props、变体、示例和模板放到它实际调用得到的上下文里。前者像在会议室里说“大家注意一下”,后者才像把货架贴上标签。

这里有个很容易被“Agent ready”营销词盖过去的细节:设计系统首先是一份可执行的约定,不是一盒彩色积木。 组件名、可用变体、间距 Token、页面模板和升级方式,如果只存在于资深前端脑子里,模型接手时就必然会发明自己的答案。人也一样,新同事进来只是把这个猜测过程放慢了。

所以我更愿意拿三个问题检查它有没有用:

  • Agent 要加一个表单时,能不能先找到现有的 Field、Button 和错误态,而不是另造一套?
  • 设计改了主色或圆角时,改 Token 后能不能在多个页面一起收敛,而不是到处搜 hex 值?
  • 组件不够时,团队能不能在可追溯的源码和约定里扩展,而不是每个页面各包一层“临时通用组件”?

Astryx 官方提供的 component、template、theme build、swizzle 和 upgrade --apply 这些命令,分别触到的是这几件事。它们不是替产品经理画流程,也不保证生成结果好看;它们是在给人和 Agent 提供同一个查找、选择、扩展和升级的入口。

如果你的项目已经有自己的设计系统,这种思路也比“把整个前端交给 AI 重画”靠谱得多。先让它知道什么可以复用,再让它写页面;先约束可选项,再讨论创意。否则每次新开一个对话,Agent 都像刚搬进空办公室,顺手买一套完全不同的椅子。

组件、模板与 Token 被整理进 Agent 可读取上下文的示意图

图注:本文根据官方 CLI 与组件索引机制绘制的工作流示意,不是 Meta 产品截图。

它不是只给 StyleX 用户准备的

看到 Meta、React 19、StyleX 这几个词,很多人会下意识把 Astryx 放进“看起来很完整,但一接入就要重写样式体系”那一栏。官方文档给出的路线没有那么极端。

它内部用 StyleX 写组件,但消费端可以继续用 Tailwind、CSS Modules 或普通 CSS;主题是 CSS 自定义属性覆盖;需要越过顶层 API 做定制时,还可以用 swizzle 导出组件源码。官方还专门给了 Tailwind 共存的 CSS layer 顺序。这里的关键词不是“不需要迁移”,而是不用先接受一种样式宗教,才有资格用组件。

最适合它的场景,是你已经在 React 19 里做产品,页面不止一个 demo,团队又开始让 AI 帮忙补页面、修表单、做设置页和管理后台。你需要的不是更多一锤子生成,而是一套能让后续改动不太跑偏的地基。

官方模板也给了一个很实在的切口:dashboard、settings、forms、detail page 这类高频页面不必从空白 div 开始。对 Agent 来说,模板不是把视觉直接定死,而是把 header、content、panel 这些空间关系先说清。你仍要给产品自己的导航、信息层级和文案负责,但至少不用每次都让模型重新发明“设置页应该怎么摆”。

反过来,如果你正在赶一个一次性页面、技术栈还不是 React 19,或者团队的组件库已经稳定且 Agent 也能可靠读到现有规范,没必要为了“Agent ready”四个字换血。Astryx 仍是 Beta,接入成本、包体积、和现有 Token 的映射、无障碍细节,都得在你的仓库里跑一遍再下结论。

还有一点别混在一起:让 Agent 读到规范,不等于把设计决策外包给它。它仍然分不清一个指标卡该不该出现、表单步骤该不该拆、空状态是不是在掩盖流程没想清楚。Astryx 能提供的是一致的基础件和查询路径;业务语义、视觉取舍和最后的界面验收,还是产品、设计和前端一起扛。把边界讲明白,反而能少掉一轮“模型怎么这么笨”的无效抱怨。

从一个小页面开始,别把设计系统当迁移项目

如果要试,我会把第一步压得很小:新建一个内部设置页或数据面板,不动线上老页面,先做成能随时回退的小试验。先装核心包和一个主题:

npm install @astryxdesign/core @astryxdesign/theme-neutral @stylexjs/stylex

再让 CLI 把目录写进 AGENTS.md 或 CLAUDE.md,让 Agent 先用 component --list 看清家底。官方还提供 dashboard、settings 等模板;它们更适合拿来观察布局和 slot 怎么组织,不适合不看现有导航就整段贴进业务。

试验页跑完后,别只看“截图变好看了没有”。把同一个小任务交给 Agent 两次:一次不给组件目录,一次给它目录和 Token 说明。对照它新建了多少重复样式、是否复用了正确的交互状态、改主题后有没有漏掉局部颜色。这样的对照比一句“AI 更懂设计了”有用得多,也更容易让团队决定要不要继续扩。

验收时再补一条很现实的标准:让不参与试验的同事接手这个页面,看他能不能在十分钟内找到对应组件、主题入口和覆盖方式。Agent 只是把改动速度拉高,代码能否被第二个人理解,才决定这次加速是不是留下了债。设计系统的价值,常常不是在第一张截图里出现,而是在第五次修改时还没有散架。

这里有一个容易被忽略的小坑:官方特别提醒,直接敲没带 scope 的 astryx,可能会解析到另一个 npm 包;命令尽量写完整的 @astryxdesign/cli。另一个坑在 Tailwind 的 CSS layer 顺序,放错了不是报错,而是页面安静地长歪。最会折磨人的就是这种不爆炸、但每个按钮都哪里不对的情况。

在新页面小范围试用组件系统,再决定是否扩大的示意图

图注:从单个内部页面开始验证组件、主题与 Agent 协作边界;为本文绘制的示意。

我不觉得 Astryx 的意义是“以后 Agent 就能自动做出好设计”。审美、产品判断、信息层级,照样没人替你兜底。

但它至少把问题从“让 Agent 别乱写”往前推了一步:把项目里能复用的东西,变成它真的读得到、查得到、用得上的东西。对正在被 AI 加速前端改动的团队来说,这比又看一场神奇 demo 实在得多。

你现在的项目里,Agent 最常猜错的是组件、Token,还是页面结构?