Vercel Labs Open-Sources fx: A Minimal Zig Coding Agent Betting on the Agent Engine, Not the Chat Window
Public since August and covered by press on October 22, fx is a Zig single-binary coding agent with no runtime whose conversation prints to terminal scrollback. Through fx ask, the Agent Client Protocol, and libfx, Vercel is betting on the embeddable agent engine — not another chat window. 3,555 stars and counting.

On October 22, tech media rushed to cover fx, the open-source coding agent from Vercel Labs. Read only that day's headlines and you'd think Vercel had just launched a shiny new toy — but the repository timestamp tells a different story: vercel-labs/fx was created on August 11, 2026, shipped experimentally back in August, and October 22 was merely the first time mainstream press paid attention. At the time of writing it holds 3,555 stars and 401 forks under Apache-2.0, with a warning printed in plain sight: Experimental. Use at your own risk.
Getting the timeline right matters, because the real story here is that fx was never "yet another AI chat window" — it is Vercel's wager on the infrastructure layer of the agent era.
First, the timeline: fx did not "launch" on October 22
The public record shows fx iterating since mid-August: 14 releases and 21 tags so far, over 3,400 commits. Version 0.0.11 in early October widened model-provider choices; 0.0.13 on October 4 added an Ultrafast mode for supported OpenAI models. The October 22 coverage was, in essence, the outside world noticing a project that had already been running for two months.
That "build first, announce later" rhythm is pure Vercel Labs: no launch event, no manifesto, just code thrown onto GitHub to speak for itself. Once you see that, fx's string of counter-intuitive design choices starts to make sense. To be precise about the record: "open-sourced on October 22" is inaccurate — the accurate phrasing is "experimentally public since August, first covered by mainstream tech press on October 22," and this article uses that framing throughout.
What fx actually is: a single-binary agent written in Zig
The README's first sentence sets the tone: "fx is a minimal coding agent CLI that still comes with batteries included." Technically, it is written in Zig and compiles to one native binary with zero runtime dependencies — it behaves identically on your laptop, in CI, or inside an agent sandbox. macOS and Linux, x86_64 and arm64, one install command:
curl -fsSL https://fx.sh/setup.sh | bash
Zig here is not a gimmick. One detail says it all: the CI pipeline fails a pull request if any benchmarked command — fx help, fx status --json — takes longer than 2 ms on Linux. Stable Apple silicon releases must also fit under a fixed size cap. Writing startup speed and binary size into CI as hard gates is rare among AI coding agents — most are still arguing about context windows and tool-call success rates while fx is busy making itself "as fast as ls."
The pivotal design: conversation goes to scrollback, not a fullscreen takeover
This is the sentence in the README most worth savoring: "Its output is closer to a Unix shell than an IDE, because the conversation prints into your terminal's scrollback instead of filling the screen."
In other words: nearly every terminal coding agent today (Claude Code, Codex CLI, OpenCode) is a fullscreen TUI — it seizes your terminal, your scrolling, your copy-paste, your tmux bindings. fx goes the other way: the conversation prints into the terminal's scrollback like any command's output. You scroll, search, and copy it like git log output; tmux bindings and copy mode keep working.
This is not an aesthetic preference; it is a philosophical split. The fullscreen TUI says "the agent is your new IDE"; scrollback says "the agent is your new shell command." The Unix wisdom is: do one thing well, emit text, let pipes compose. fx positions itself as a member of the Unix toolbox, not an app demanding your full attention. In the vibe-coding era this has teeth — as agents increasingly run in CI, sandboxes, and scripts, an agent that doesn't grab the screen, doesn't pollute terminal state, and composes with pipes is more useful than a prettier fullscreen UI.
The cost is visible too: early Hacker News feedback compared it with OpenCode and called fx "cool but not polished." Vercel knows what it's giving up — it's betting that the future of agents is not a better-looking chat box but a better-behaved pipe fitting.
Three embedding surfaces: fx's real ambition
The README has a dedicated section titled "Embed and extend," and it is the key to understanding fx. Vercel doesn't want you to "open fx and start chatting" — it wants you to embed fx into what you already have:
fx ask— the "one-shot task" interface for scripts and CI.fx ask "summarize the failing tests"returns an answer right in the shell; add--jsonfor structured output that pipes intojq -r .final_output. Notably, the docs include a "For coding agents" section teaching other agents how to drive fx viafx ask,fx status --json, andfx doctor --json.fx acp— editors connect over the Agent Client Protocol via stdio. No per-editor plugin needed; anything speaking ACP can attach to this agent backend.- libfx — the agent core as a JavaScript library, shipped as a native Node.js addon plus a WebAssembly build.
createFxAgent()runs the same agent core inside JS apps with your own tools, MCP clients, and skills;createFxTerminal()embeds the fx terminal. The repo'sexamples/already ships four runnable demos: node-chat, browser-agent (WASM behind a plain HTML form), nextjs-agent, and nuxt-agent.
See the layout: the CLI is only one of fx's three faces; the other two face the editor ecosystem and the JS application ecosystem. Vercel has also placed fx inside its AI SDK harness layer alongside Claude Code, Cline, Codex, Cursor, OpenCode, and Pi — positioned as one option behind a shared interface, not a replacement for anyone.
That answers "why Vercel didn't build another chat window": Vercel is building the engine supplier for the agent era. Chat windows are abundant; what's missing is an embeddable, scriptable, model-flexible agent core. fx is Vercel's open-source bet on what an agent engine should look like.
Model choice: genuinely open, or "Vercel-first"?
The README's provider list reads generously: sign in to Vercel AI Gateway, use a ChatGPT or Grok subscription, or connect any OpenAI-compatible Chat Completions endpoint (Ollama and OpenRouter are named). On paper, a model-agnostic exemplar.
Early Hacker News users pushed back: some reported that the default setup flow routes inference through Vercel AI Gateway. One commenter nailed it: fx is "an entry point to Vercel AI." That's not unfair — Vercel is a business and AI Gateway is its billing pipe — but it's not proof of fake openness either, since local Ollama models and OpenRouter genuinely work and the README documents them plainly.
My read: think of fx as "open core with a Vercel-first default path." It rhymes with Chrome and Google Search — the openness is real, and so is the commercial tilt of the default. For vibe-coding practitioners the only question that matters is: in your workflow, is fx a replaceable part, or an on-ramp into the Vercel ecosystem you can't leave? The evidence for the former is stronger today, but it's worth watching whether future versions make the default path "smoothly" slide toward Vercel's own gateway.
Three permission tiers: security as an explicit choice
fx's permission model deserves its own mention because it's more thought-through than most agents'. The default auto mode runs routine work — editing project files, running tests — without asking; anything else first goes to a dedicated model that checks the exact action for prompt injection or malicious behavior, and fx holds the action if the check flags it. Switch to ask to approve each action yourself, or full-access to turn checks off (the docs warn: only pass --full-access when the user explicitly asks).
The cleverness is making security a three-way explicit choice rather than a blunt on/off switch. The auto tier's "a model reviews the action" idea is characteristically 2026 — using AI to police AI's behavioral boundary. The README publishes no data on the reviewer's reliability or false-positive rate, so that part awaits community testing.
Around it sits a complete kit: AGENTS.md support (nested per-directory files plus a global ~/.fx/AGENTS.md), skills (loaded from .fx/skills and ~/.fx/skills, also compatible with .claude/skills and .agents/skills, loaded on demand to save context), MCP server management, subagent delegation, and sessions persisted under ~/.fx/sessions/ (older turns get compacted when context fills, with full text kept on disk). This is not a demo — it's a tool built to be lived with.
Why Zig? A technology choice that refuses to follow the crowd
Writing a CLI agent in 2026, the mainstream picks are Go (OpenCode), Rust, or TypeScript bundled wholesale. Vercel chose Zig — a language that hasn't even hit 1.0. Building needs only Zig 0.17.0; one zig build emits the binary, and the source tree is laid out cleanly: src/core for the agent loop, sessions, config, permissions, MCP, skills; src/acp for the protocol server; sdk/ for libfx; benchmarks/ and tests/e2e each in place.
The choice works on two levels. On the surface it's engineering: Zig's comptime and explicit memory management are a natural fit for "small and fast" — no GC pauses, no runtime baggage, cross-compilation as a first-class citizen (macOS/Linux × x86_64/arm64 in one shot). Deeper, it's a signal: Vercel is declaring fx's positioning through its technology choice. TypeScript would have said "a handy tool by app developers"; Zig says "we're here to build systems-level infrastructure." A team that won't follow the crowd on language choice is unlikely to follow it into building the 37th chat window either.
The risk sits in the same place: Zig's library ecosystem, talent pool, and long-term stability trail Go and Rust. Vercel's willingness to bet says the commitment to fx is strategic — nobody gambles an entire toolchain on a niche language for a throwaway experiment.
Head-to-head: fx vs. OpenCode vs. Claude Code
The most frequent comparison on Hacker News is with OpenCode. Side by side, the differences are almost mirror images:
- Interaction philosophy: OpenCode is a polished fullscreen TUI; fx is bare scrollback. One turns the terminal into an IDE; the other turns the agent into a shell command.
- Language and size: OpenCode is TypeScript/Bun; fx is a Zig single binary — startup speed and footprint aren't in the same league.
- Extension: both support MCP and skills, but fx additionally offers ACP access and libfx (Node addon + WASM) — finer-grained embedding.
- Model strategy: OpenCode leads with "bring your own key, any model"; fx is equally open on paper, but its default path leans visibly toward Vercel AI Gateway.
Against Claude Code the gap is generational: Claude Code is Anthropic's first-party child — model, tools, and UI deeply integrated, experience polished to a shine, but you can hardly step outside Anthropic's rails. fx is open territory: swappable models, swappable UI, and an agent core you can embed in your own JS app. One is a fully furnished showroom; the other is an unfinished frame with plumbing and wiring done. Move-in ready vs. renovate-it-yourself depends on who you are.
For everyday vibe-coding practitioners, my advice is blunt: for day-to-day coding, Claude Code and OpenCode still feel smoother today. But if you're building automated coding pipelines — agents fixing tests inside CI, scheduled agents tidying docs, agents embedded in corners of your own product — fx's fx ask --json and single-binary shape are among the most ergonomic options available. No silver bullets in tooling, only fit for the scenario.
Vercel's puzzle: Gateway, AI SDK, fx
Zoom out to Vercel's full board and the intent sharpens. Over the past year Vercel laid three layers: AI Gateway (model access and billing), AI SDK (the app-development framework layer, whose harness already lists Claude Code, Cursor, OpenCode, and others side by side), and fx (the agent execution engine). The relationship: Gateway monetizes, AI SDK locks in developers, and fx turns "an agent that does work" into an embeddable, distributable standard part.
It's a classic platform play: don't fight over app-layer experience; define what the engine of the agent era looks like. If enough editors, CI systems, and JS apps end up running agents on fx (or fx-compatible interfaces), Vercel owns a key choke point of the agent era — with the default model path conveniently passing through its own Gateway. The open-sourcing is sincere; the commercial calculus is clear-eyed; the two are not in conflict.
That's why the HN line "fx is an entry point to Vercel AI" deserves to be taken seriously without being over-read. The entry is open, the roads beyond it are documented in the README, and the choice belongs to the user. The thing to actually watch is the future: if fx's ecosystem grows large, will Vercel tighten the boundary of the "open core"? That's the ultimate test of every "open core + commercial gateway" model, and the answer is two or three years out.
A footnote: the name collided
The name fx may ring a bell for terminal veterans — indeed, there's a long-established terminal JSON viewer also called fx (written in Go), and it holds the Homebrew fx formula. A GitHub issue already debates the collision, with a contributor confirming that "packaging and command coexistence are under review." A small matter, but revealing of Vercel Labs' style: claim the name first, sort out conflicts later. Typical experimental-project temperament.
Hands-on: what fx can and can't do today
Setting strategy aside, here's the usability picture as of today (October 23, 2026):
Usable now: fx ask in CI is the most mature scenario — tests fail, the agent reads the logs, locates, fixes, re-runs, all with --json output for the pipeline to consume; fx -c resumes sessions for long tasks; skills and MCP compatibility (it reads .claude/skills directly) keeps migration costs low for Claude Code users; and there's a no-install browser demo to try before committing.
Handle with care: experimental is a description of reality, not a disclaimer. The 0.0.13 changelog documents a breaking change — checkpoints from newer libfx can't be restored by older versions, and embedders should read the migration guide (createFxAgent() renamed to createFxEngine() is one example). The auto tier's "model reviews the action" guard against prompt injection publishes no false-positive or coverage data — don't put it in front of untrusted input in production yet. And the naming collision is unresolved; Homebrew users should watch out for clashes with the JSON viewer fx.
Worth waiting for: the WASM build is still marked experimental, but the browser-agent example already proves "an agent running in the browser" is viable — if that path matures, any web page could embed a code-writing agent with no backend service. If more editors adopt ACP, fx could become the standard "editor-agnostic agent backend." Either landing changes fx's valuation logic.
Take: fx is a puzzle piece in vibe coding's infrastructure layer
Assembled, the picture is clear:
First, it bets on "agent as infrastructure," not "agent as app." While everyone builds better chat UIs, Vercel built something faster, smaller, and more embeddable. Single binary, no runtime, a 2 ms startup gate, scrollback output, --json pipes, the ACP protocol, WASM builds — every design decision says the same thing: I'm not here to be your IDE; I'm here to be your pipe fitting.
Second, the scrollback philosophy corrects the "IDE-in-terminal" trend. Over the past year terminal agents have grown ever more IDE-like: fullscreen, panels, hotkeys, status bars — heavier and heavier. fx reminds us the Unix tradition holds another path: small, fast, output-as-text, composable. In 2026, with agents flooding into CI and sandboxes, that path may have more life in it than it appears.
Third, experimental is meant literally, not modestly. The warning atop the README, the breaking change in the 0.0.13 changelog ("newer libfx checkpoints can't be restored by older versions"), the still-unresolved naming collision — all say this thing is evolving violently. Too early for production pipelines; but as a reference implementation of "what an agent engine should look like," it's already worth an evening of source reading for anyone building agent infrastructure (Zig 0.17.0 builds it; the layout is documented line by line in the README).
And a final honest word: whether fx succeeds depends less on Vercel than on how many editors and JS apps adopt ACP/libfx as their agent backend. Protocol and library wars are always ecosystem wars. Vercel open-sourced the engine and handed the wheel to the community — a beautiful move, but the game has just begun.
For the Chinese vibe-coding community there's one more layer of value: fx proves agent differentiation doesn't have to live in the model or the prompt. While everyone competes on system-prompt craft and tool-call success rates, Vercel differentiated across three dimensions — output shape (scrollback), distribution shape (single binary), integration shape (ACP/libfx) — each cut landing on the lifeblood of "agent as infrastructure." That "compete on a different axis" thinking is more worth copying than fx itself: whether you're building an agent product or embedding agents into your business, start with one question — does my agent have to be a chat window? fx's answer: not necessarily, and probably it shouldn't be.
Based on the vercel-labs/fx GitHub repository README and public commit history (verified October 23, 2026); Hacker News feedback and the naming-collision status are cited from October 22 secondary coverage. The repository is marked experimental; features and APIs may change at any time.
Comments (0)
Sources
Related articles

Xojo 2026 Release 3 (Oct 20) ships Agentic Mode: external coding agents edit project files, the IDE auto-reloads, runs the compiler, and feeds errors back — a real compile-reload-fix loop. A 30-year-old RAD tool betting on agents rebuts the 'AI belongs to new tools' story.

OpenAI's Oct 12-16 developer updates: free sandbox pre-warming for the Agents API (unattached sandboxes expire after 5 minutes); native Decisions API integration in GPT-Live that fires while the caller is still speaking; and prompt-to-voice — a custom GPT-Live voice from one text description, free to create — plus 9 new preset voices in German, French, Hindi, Japanese, and Korean. Catch: prompt-made voices are GPT-Live-only, 100 per org, disclosure required.

JFrog extends Shadow AI detection from repositories to developer workstations: the Agent Plugin discovers unregistered AI assets — skills, MCP servers, hooks — on laptops, scans them with deterministic local rules, and reports to a unified inventory. But the approved-list policy check is still a future release: visible, not yet stoppable. Individual developers should build their own skill inventory too.