Phoenix.new:新的云端 AI 运行时
Phoenix 框架作者 Chris McCord 发布了 Phoenix.new:一个跑在云端的 Elixir 编码 agent,你描述应用、它生成可运行的 Phoenix 代码,几周内就能从零做出东西。
中文
复制

我是 Chris McCord,Elixir 的 Phoenix 框架作者。过去几个月,我一直在 Fly.io 做一个秘密项目,现在该拿出来给大家看看了。
我希望 LLM agent 在 Elixir 上能和 Python、JavaScript 上一样好用。去年 12 月,为了搞清楚要做到这一点需要什么,我开了个周末小项目,试试在 Elixir 里写一个编码 agent 到底有多难。
几周之后,它已经能吐出可以正常运行的 Phoenix 应用,还能驱动一个完整的浏览器内 IDE。我就知道这不会再只是个周末项目了。
如果你在 Twitter 上关注我,大概见过我随着这个项目推进不断放出的预告。现在我们对这东西已经相当认真了,是时候正式介绍一下。
各位,认识一下 Phoenix.new——一个开箱即用、完全在线的编码 agent,专为 Elixir 和 Phoenix 打造。我觉得它会成为构建协作式实时应用最快的方式。
来看看实际效果:
Phoenix.new 有意思在哪
第一,虽然它完全跑在浏览器里,但 Phoenix.new 会给你和 agent 各一个 root shell,运行在一台临时虚拟机(Fly Machine)上。这让我们的 agent loop 可以随意安装东西、运行程序,而不用担心搞坏你本地的机器。这些你都不用操心:打开 VSCode 界面,点一下 shell 按钮,你就已经在和 Phoenix.new agent 共用的那台隔离机器上了。
第二,这是我专门为 Phoenix 构建的 agent 系统。Phoenix 关注的是实时协作应用,而 Phoenix.new 明白这意味着什么。为此,Phoenix.new 在 UI 和 agent 工具里都内置了一个完整的浏览器。Phoenix.new agent 会以“无头”方式使用这个浏览器,检查自己改的前端,并与应用交互。因为是完整的浏览器,agent 看到的是真实的页面内容和 JavaScript 状态,而不是对着截图反复试——有没有人在场都一样。
Root 权限能带来什么
Agent 构建软件的方式,和你刚入行时一样,也和你今天做原型时一样。它们不会精心设计 Docker 容器的分层,也谈不上什么发布周期。Agent 想做的就是打开一个 shell,把手弄脏。
一台完全隔离的虚拟机意味着 Phoenix.new 的手可以随便弄脏。它想往 mix.exs 里加个包,那就加,然后跑一下 mix phx.server 或 mix test 看看输出。这当然没问题,每个 Agent 都能做到。但如果它想往基础操作系统里装一个 APT 包,它同样可以装,还能确认装成功了。整个环境都归它管。
这就把大量繁琐、重复的工作甩了出去。
在上周的 AI Startup School 演讲中,Andrej Karpathy 讲了他做餐厅菜单可视化工具的经历:用摄像头拍下文字菜单,再把所有菜品转成图片。代码是他和 LLM Agent 一起 vibe coding 出来的,这部分反倒简单,一个下午就跑通了。但把应用弄上线,花了他整整一周。
有了 Phoenix.new,我就是要正面解决这个问题。我们产出的应用从启动那一刻起就活在云上。它们有私密的、可分享的 URL(Agent 生成的任何绑定了端口的东西我们都能检测到,并在 phx.run 下给它一个预览 URL,端口转发是内置的),能接入 Github,还继承了 Fly.io 的全部基础设施护栏:硬件虚拟化、WireGuard、隔离网络。
Github 的 gh CLI 默认就装好了。所以 Agent 知道怎么 clone 任何仓库、怎么浏览 issue,你甚至可以授权它访问内部仓库,让它和你团队现有的项目与依赖配合起来。
完全掌控环境,也让 Agent 和部署之间形成了闭环。Phoenix.new 启动一个应用后,会盯着日志、测试应用。一旦某个操作触发错误,Phoenix.new 会注意到,然后动手去修。
实时观看它构建
Phoenix.new 能像用户一样与 Web 应用交互:用真正的浏览器。
Phoenix.new 环境内置了一个无头 Chrome 浏览器,我们的 agent 知道如何驱动它。让它给你的应用加一个前端功能,它不会只是把代码草拟出来、确认能编译、能过 lint。它会自己把应用跑起来,摆弄 UI,同时查看页面内容、JavaScript 状态和服务端日志。
Phoenix 的核心就是“live”实时交互,并为我们提供了无缝的 live reload。Phoenix.new 自身的界面里就包含正在开发的应用的实时预览,所以你可以靠在椅背上,看着前端功能一点点被构建出来。你打开的其他 .phx.run 标签页也会随之更新。太疯狂了。
不只是用来 vibe coding
Phoenix.new 已经能构建真正的全栈应用,包括 WebSockets、Phoenix 的 Presence 功能,以及真实的数据库。我现在就看到它在业务应用和协作应用上跑通。
但你能合理交给它的任务并没有固定边界。只要你能用 shell 和浏览器做到,我就希望 Phoenix.new 也能做到。而且它做这些任务时,你在不在场都行。
举个例子:设置一个 $DATABASE_URL,然后告诉 agent。agent 知道该用 psql 去探索它,并会根据发现的 schema 提出应用方案。它能根据数据库反推 Ecto schema。如果你偏爱 MySQL,agent 会直接 apt install 一个 MySQL 客户端,然后大干一场。
前沿模型的 LLM 拥有庞大的世界知识,泛化能力极强。在 ElixirConfEU 上,我在台上做了一场 vibe coding 俄罗斯方块的演示。Phoenix.new 一次成功,第一个 prompt 就搞定。网上可没有一大堆 Phoenix LiveView 版俄罗斯方块的例子!但很多人发布过俄罗斯方块代码,很多人写过 LiveView 的东西,而 2025 年的 LLM 能把这些点连起来。
到这里你可能会想——我能不能直接让它构建一个 Rails 应用?或者 Expo React Native 应用?或者 Svelte?或者 Go?
可以。
我们的系统提示词目前是针对 Phoenix 调校的,但你关心的那些语言都已经装好了。接下来往哪走,我们还在摸索,但增加新语言和新框架,肯定排在我计划的很前面。
异步 Agent 的未来
开发者工作流正处在一个巨大的跃迁点上。
Agent 今天就能干真活,人在不在都一样。坐稳了:未来的开发——至少在常见情况下——大概不太像是打开终端、找个文件来改,而更像是进到一个 CI 环境里,Agent 在那边全天候干活。
本地开发不会消失。但大部分迭代发生在哪里,会变。我已经在用 Phoenix.new 筛选 phoenix-core 个 GitHub issue,挑出要解决的问题。合上笔记本,去倒杯咖啡,等 PR 送上门——Phoenix.new 也懂 PR 是怎么走的。我们已经走到这一步了,而这个领域才刚开始。
我一开始瞎折腾的时候,没想到会走到这里。Phoenix 和 LiveView 那一路也差不多。当时那里有点特别的东西,项目就自己长出了生命。现在能分享这些工作,看看它会带我们去哪,我很兴奋。也等不及想看大家会做出什么。