DevPik Logo
ai agentstypescriptreactagentic appsopen source

Agent-Native: Stop Making Your Agent Click Through the UI

Most tools teach an agent to operate your interface. Agent-Native argues the interface was never the API. Define a capability once and the agent, React, HTTP, MCP, A2A and the CLI all call the same function.

ByMuhammad Tayyab12 min read
All open source picks
BuilderIO/agent-native
The official repository — this write-up is not affiliated with the project.
5.0kTypeScriptMIT

What Agent-Native Is

Agent-Native is a TypeScript framework from Builder.io for building applications where an AI agent and a human interface are peers rather than one wrapping the other.

It passed 4,900 GitHub stars in roughly six months. The package versions tell you how fast it is moving: @agent-native/core is already past 0.182, which is a lot of releases for half a year.

The whole framework rests on one idea, and it is a good one. You define a capability once. The agent gets it as a tool. Your React code calls the same function. So do HTTP, MCP, A2A and the CLI. One implementation, one schema, one set of permissions, six ways in.

Define It Once, Six Callers Use It

An action is an ordinary TypeScript module with a zod schema and a run function:

ts
import { defineAction } from "@agent-native/core/action";
import { z } from "zod";

export default defineAction({
  description: "Return a friendly greeting.",
  schema: z.object({
    name: z.string().default("world").describe("Name to greet"),
  }),
  http: { method: "GET" },
  run: async ({ name }) => {
    return { message: `Hello, ${name}!` };
  },
});

That file does six jobs. The agent receives hello as a callable tool. React calls it with useActionQuery("hello", { name: "Alex" }). It is simultaneously an HTTP endpoint, an MCP tool, an A2A endpoint and a CLI command.

Look at what the description fields are doing. They are not comments. description on the action becomes the tool description the model reads, and .describe() on each field becomes the parameter documentation. The prompt engineering for your tools lives in the same file as the implementation, so it cannot drift from it.

The zod schema is the load-bearing part. It produces the JSON Schema the model sees, it validates what the UI sends, and it validates what the agent sends, all from one declaration. If you are hand-writing tool definitions elsewhere, a JSON Schema generator will show you the shape this is producing for you.

One naming detail to plan for: the same action surfaces as a TypeScript function, an HTTP route, an MCP tool name and a CLI command, and those four worlds disagree about casing conventions. A case converter is a duller fix than it sounds but you will want it when you are being consistent across all six surfaces.

The Agent Does Not Click Through the UI

This sentence from the README is the thesis:

The agent does not click through the UI. It works through the same action layer as the UI.

It is worth sitting with, because the entire browser-automation category exists to do the opposite. Tools that drive a real browser teach an agent to find the button, click the button, wait for the page, read the result. That approach earns its place when you do not control the application, which is most of the web.

But when you do control the application, driving your own UI is a strange choice. You are making the agent operate a lossy, brittle, visual rendering of an API you wrote. Every layout change breaks it. Every loading state is a race. The agent burns tokens reading a DOM to recover data your server already had structured.

Agent-Native's position is that the interface was never the API. The UI is one consumer of the action layer and the agent is another, which means the agent gets the same validation, the same permissions and the same implementation, with none of the clicking.

The trade is scope. This only works for applications you build with it. It is a framework, not an integration, so it has nothing to say about the SaaS tools you do not control. The two approaches answer different questions, and the honest summary is: drive the browser for other people's software, share the action layer for your own.

It Is Also Not Generative UI

Three similar-sounding ideas are circulating right now and they are genuinely different things. Worth separating, because the terms get used interchangeably and should not be.

What it means
Generative UIThe model produces the interface at runtime. The UI is an output.
AG-UI and A2UIProtocols for streaming agent state and events into a front end. The UI is a client.
Agent-NativeThe UI is hand-authored and shares an action layer with the agent. The UI is a peer.

Generative UI hands layout decisions to the model. Agent-Native does close to the reverse: a designer builds the interface, a developer builds the actions, and the agent is given the same capabilities rather than the ability to invent screens. If you want an interface that assembles itself per request, this is not that framework.

AG-UI and A2UI solve the transport problem of getting agent state to a browser. Agent-Native addresses a layer beneath that, namely what the agent and the UI are both calling in the first place. They are closer to complementary than competing.

Getting these three confused is easy and expensive, because they imply completely different amounts of design control.

Shared Data and Shared State

Shared actions are the headline, but two quieter pieces are what make the result feel coherent rather than like two programs sharing a database.

Shared data. Work the agent does appears in the UI. Work you do in the UI is visible to the agent. There is no sync step and no separate agent-memory store that slowly diverges from the real records.

Shared application state. The agent receives relevant UI context: which page you are on, which record is selected, which view is active. This is the part that removes a whole category of stupid conversation. Without it, every request starts with re-establishing context you can both plainly see. With it, "summarise this" has a referent.

Anyone who has built a chat sidebar into an existing app has hit this. The chat knows nothing about what the user is looking at, so you end up hand-rolling a context payload, deciding what to include, and updating it every time the app grows a new screen. Agent-Native treats that as framework responsibility rather than something each app reinvents.

What Comes in the Box

The framework ships the unglamorous infrastructure that usually eats the first month of an agentic app:

  • Agent chat, so people can delegate work and review results in the same interface.
  • Authentication and permissions, controlling who can see and change shared work. This is the one that matters most, because an agent with a tool layer and no permission model is a liability.
  • Skills and memory, giving agents reusable expertise and persistent context.
  • Automations, running agent work on schedules or events rather than only on request.
  • Agent teams, delegating to specialist agents in the same workspace or across connected agents.
  • PostgreSQL in production with PGlite for local development, on any Nitro-compatible host.

PGlite locally and Postgres in production is a good default. You get a real database in development without running a container, and no dialect surprises when you deploy.

The stated deal is "bring your LLM, SQL database, tools, and infrastructure. Everything you build stays yours." Worth noting that Builder.io is a commercial company, and frameworks from commercial companies sometimes grow a hosted path that becomes the easy one. Nothing here suggests that yet, and the architecture is portable by construction, but it is the thing to watch.

Because actions are exposed over HTTP as well, you will sometimes be poking at them with curl, where a URL encoder matters for query parameters and a JSON escaper saves time when you are embedding a payload in a shell command.

Nine Reference Apps, Not One Todo Demo

Most frameworks ship a counter and a todo list. Agent-Native ships nine open-source applications, all real enough to use:

AppWhat it does
ClipsRecord and understand meetings, screens, voice notes
DesignGenerate and refine interactive designs
SlidesCreate and edit on-brand presentations
AnalyticsAsk questions of your data, build dashboards
CalendarFind time, schedule events, manage bookings
MailPrioritise email, draft replies, follow up
AssetsCreate and organise on-brand media
ContentDraft, organise and publish content
PlansVisual plans with diagrams, wireframes, prototypes

This is the most useful thing in the repository and the reason to look even if you never adopt it. A framework's documentation tells you what the authors think the abstraction is for. Nine complete applications tell you whether the abstraction survives contact with real features like calendars, email threading and media handling.

They also double as starting points. "Fork the Mail app and change it" is a materially different proposition from "read the docs and build email from scratch".

Getting Started

One command:

bash
npx --yes @agent-native/core@latest create my-agent --standalone --template chat

--standalone gives you a self-contained app rather than something wired into a larger workspace, and --template chat starts from the agent chat surface. Other templates and a full walkthrough are in the getting started guide at agent-native.com.

From there the loop is: write an action in actions/, and it is immediately available to the agent, to React through useActionQuery, and over HTTP, MCP, A2A and the CLI. There is no registration step, no separate tool manifest, and no second place to update when a signature changes. That last property is the one that pays off over months.

A Licensing Footnote, Not a Trap

Worth a short, accurate note, because it is the kind of thing that gets reported badly in both directions.

The README has a License section that says MIT. The published packages agree: @agent-native/core, @agent-native/agentkit and @agent-native/toolkit each declare "license": "MIT" in their manifests. What is missing is a LICENSE file at the repository root, so GitHub's licence detection finds nothing and the repo page shows no licence badge.

In practice, if you install the packages you are on MIT terms and that is clear. The gap only matters if you are forking the whole repository or your employer's compliance process reads GitHub's detected licence field rather than the README, which plenty of them do.

It reads as an oversight rather than anything deliberate, and adding one file fixes it. Flagging it because "no licence detected" on a 4,900-star repo sets off scanners, and the answer is more boring than it looks.

Who Should Use It

A good fit if you are building a new application where an agent is a first-class participant rather than a chat box bolted to the side, you are already in TypeScript and React, and you want the permission model and the tool layer to be the same code.

A bad fit if you need an agent to operate software you do not control, which is browser automation's job, or if your stack is Python, or if you want an agent bolted onto a large existing app without restructuring how its capabilities are expressed.

Be aware of the age. The repository is about six months old and core is past version 0.182. That release count means active development and it also means the API is still moving. Pin your versions and read the changesets before upgrading.

The bet this framework makes is the interesting part, and it is worth stating plainly: applications built for agents will be structured differently from applications that had agents added to them. If that is right, the action layer belongs at the centre rather than being reverse-engineered out of a UI later. If it is wrong, you have still written a well-typed API with validation in one place, which is not a bad consolation prize.

Frequently Asked Questions

What does agent-native actually mean?

It means the application is structured so an AI agent and the human interface are peers calling the same capabilities, rather than the agent being bolted on afterwards. In Builder.io's framework you define each capability once as an action, and the agent uses it as a tool while React calls it as a function. Both paths share the same schema, validation, permissions and implementation.

How is this different from browser automation tools?

Browser automation teaches an agent to operate your interface: find the button, click it, read the result. Agent-Native's position is that the interface was never the API, so the agent calls the action layer directly and never touches the DOM. The trade is scope. Browser automation works on software you do not control, which is most of the web. Agent-Native only applies to applications you build with it, but within those it avoids the brittleness of driving a visual rendering of your own API.

Is Agent-Native the same as generative UI?

No, and they are close to opposites. Generative UI means the model produces the interface at runtime, so the UI is an output. In Agent-Native the UI is hand-authored by your designers and developers, and the agent is given the same actions rather than the ability to invent screens. AG-UI and A2UI are a third distinct thing: protocols for streaming agent state into a front end, which sit above the layer Agent-Native addresses.

What surfaces does one action expose?

Six. The agent gets it as a callable tool, React calls it through useActionQuery, and it is simultaneously available over HTTP, as an MCP tool, as an A2A endpoint, and from the CLI. The zod schema on the action produces the JSON Schema the model sees and validates input from every caller, so there is no separate tool manifest to keep in sync.

What does Agent-Native include besides the action layer?

Agent chat, authentication and permissions, skills and memory, automations that run on schedules or events, and agent teams for delegating to specialists. The data layer is PostgreSQL in production with PGlite for local development, deployable to any Nitro-compatible host. You bring your own LLM, database, tools and infrastructure.

Is Agent-Native free and open source?

Yes, MIT licensed. The README declares MIT and the published packages each carry MIT in their manifests. One caveat worth knowing: there is no LICENSE file at the repository root, so GitHub's licence detection reports nothing and compliance scanners that read that field will flag it. If you install the packages you are plainly on MIT terms.

How do I start a project?

Run npx --yes @agent-native/core@latest create my-agent --standalone --template chat. The standalone flag produces a self-contained app rather than one wired into a larger workspace, and the chat template starts from the agent chat surface. After that you add files under actions/ and each one is immediately available to the agent, to React, and over HTTP, MCP, A2A and the CLI.

Is it ready for production?

Treat it as early. The repository is roughly six months old and the core package is already past version 0.182, which signals fast iteration and an API that is still moving. Pin your versions and read the changesets before upgrading. The nine open-source reference applications are the best evidence available that the abstraction holds up on real features, and they are worth reading before committing.

Related DevPik tools

Muhammad Tayyab

Written by

Muhammad Tayyab

CEO & Founder at Mergemain

Muhammad Tayyab builds free, privacy-first developer tools at DevPik. He writes about AI trends, developer tools, and web technologies.

More open source picks