E-commerce · React
00:00 / 00:18Search, add to cart and check out: the payment waits for approval.
Recording in progress. The protocol track shows the real sequence.
Open source · MIT · Agentic UI SDK
Your buttons, links and form fields become tools an agent can call. Your users just ask, in text or voice, right inside your app: nothing to install on their side.
Built into your app · Nothing to install for your users · Text and voice
Independent · MIT licensed · Contribute
npm i @owllayer/reactWhy we built it
Most agents operate products the hard way: reading pixels, guessing which button to press, hoping the layout did not change.
Your components already know what they can do. OwlLayer AI lets them say it, as named actions that an agent built into your app can call.
Kouakou Ghislain Boris
Creator of OwlLayer AI
The problem
Today an assistant either talks without acting, or lives outside your product and guesses its way through the screen. Neither belongs in production.
The chatbot
Talks, cannot act
Blind automation
Acts, cannot be trusted
OwlLayer AI
Acts through your code
How it works
Take a component you already have. Add one declaration next to its action. The agent can now call it, and your code still does the work.
Your interface
€49
ShareWhat the agent receives
Before: your code today
import { useState } from 'react'; export function ProductPage({ product }) { const [quantity, setQuantity] = useState(1); const [added, setAdded] = useState(false); async function addToCart(productId, qty) { await cart.add(productId, qty); setAdded(true); } return ( <article> <h1>{product.name}</h1> <input type="number" min={1} value={quantity} onChange={(e) => setQuantity(Number(e.target.value))} /> <button onClick={() => addToCart(product.id, quantity)}> {added ? 'Added' : 'Add to cart'} </button> </article> );}After: with OwlLayer AI
import { useState } from 'react';import { useAgentTool } from '@owllayer/react';import { z } from 'zod'; export function ProductPage({ product }) { const [quantity, setQuantity] = useState(1); const [added, setAdded] = useState(false); async function addToCart(productId, qty) { await cart.add(productId, qty); setAdded(true); } // The same action, now callable by the agent. useAgentTool( { name: 'add_to_cart', description: `Add a product to the cart. On screen: ${product.name} (id ${product.id})`, schema: z.object({ productId: z.string(), quantity: z.number().int().min(1), }), risk: 'low', }, async ({ productId, quantity }) => { await addToCart(productId, quantity); setQuantity(quantity); return { productId, quantity }; }, ); return ( <article> {/* …same markup as before… */} </article> );}Nothing else changes: same state, same handler, same markup. The highlighted lines are all you add. Docs
Live storyboard
The user asks in the chat. The agent calls the tools the current screen offers, and the list changes as the pages change.
Night Owl Hoodie
Organic cotton · Navy
€49
Size
Shop assistant
Online
Available to the agent
App-wide
This screen
Tool names and risk levels come from the open-source React demo.
Paste an address. The scanner opens the page as a person sees it and lists the actions an agent could take there: search, add to cart, book, send. With the code to declare each one.
See it act
Real demos, recorded as they run. Beside each one, the protocol track shows what the agent did, step by step.
Search, add to cart and check out: the payment waits for approval.
Recording in progress. The protocol track shows the real sequence.
Edit the catalog in plain language: deleting a product needs a yes.
Recording in progress. The protocol track shows the real sequence.
Plan a trip out loud: the booking is confirmed by the traveller.
Recording in progress. The protocol track shows the real sequence.
Integration & models
Pick the integration that matches your product and the model that fits your use case. The same actions work across text, speech and realtime audio.
Your stack
OwlLayer AI Runtime
AITP · Policy · Approval · Context
Your model
Trust
Every action is an explicit capability of your application. Nothing runs that your code did not declare.
Four risk levels
Approval required
No DOM scraping
Agents receive structured contracts and the context you publish, never the rendered page.
Docs →Schema validation
Every tool defines the input it accepts before execution.
Docs →Risk-aware policy
High and critical actions can require a human decision first.
Docs →Scoped context
Only data you publish becomes visible to the agent.
Docs →Your handlers decide
Side effects, permissions and transactions stay in your code.
Docs →Keys stay on the server
Provider credentials never ship in the browser bundle.
Docs →The server has the last word
Your server can block any tool, even one that a page has declared.
Docs →An approval the page cannot touch
The approval window renders in a closed Shadow DOM, out of reach of page scripts.
Docs →No. The agent is part of your web app: your users open your site and ask, in text or by voice. No extension, no desktop app, no AI subscription of their own. Your server holds the model keys.
MCP declares tools on the server side: what your services can do. OwlLayer AI declares them on the interface side: your components and HTML elements become the actions available on the current screen. They work together, and the same agent can use both. MCP bridges are on the roadmap.
Yes. With the browser package, a few data-owllayer attributes on a button, a link or a field turn it into a tool, in plain HTML or a server-rendered page. React, Vue, Svelte and Angular packages follow the same model.
It can only call tools your interface declared, with input that passes their schema. High and critical tools pause for a human decision, your own handler performs the work, and your server can block any tool.
No. Wrap your app with the provider, then add tools one component at a time. Pages, routing and business logic stay as they are.
Tools live in client components. Server Components are untouched.
You do. The runtime runs on your server with your provider keys, and the agent only receives the context you choose to publish.
OpenAI, Google Gemini and Anthropic Claude for text and tool calling; OpenAI Realtime and Gemini Live for realtime audio; LiveKit for voice rooms; Whisper and Google for speech-to-text; OpenAI, Google and ElevenLabs for speech synthesis.
OwlLayer AI is in 0.x: the public packages are released and tested, and APIs can still change between minor versions. Pin your versions and read the changelog before upgrading.
Delete the provider and the tool declarations. There is no proprietary data format and nothing to migrate.
Open source
Read the code, run the demos, open an issue, send a pull request. The roadmap and the discussions are public.
npm i @owllayer/reactStart with one button and one action. Grow from there.