Agent-Native

TypeScript framework for agentic apps

One action.
Two callers.

Define a capability once. The agent calls it as a tool, your React code calls the same function, and both go through the same validation and permissions.

The agent does not click through the UI. The project states it plainly: it works through the same action layer the interface uses.

actions/hello.ts

Example from the project
The agent calls ithello

Received as a tool, with the schema as its argument contract.

The UI calls ituseActionQuery("hello", { name: "Alex" })

Called from React, hitting the same implementation.

one definition underneath

The definition both sharedefineAction({
  description: "Return a friendly greeting.",
  schema: z.object({ name: z.string() }),
  run: async ({ name }) => ({ message: `Hello, ${name}!` })
})

Code is condensed from the project's own example, not a benchmark or a product screenshot.
The same action is also exposed over HTTP, MCP, A2A and the CLI.

Surfaces one action reaches

Shared data and shared application state follow the same principle: work done by the agent appears in the UI, and the agent receives the relevant UI state, such as the current page or selected record.