Give your AI a real interface.
Your agent calls one API. Frayme streams back live, interactive UI — validated before it renders, on an open standard.
ask
real json-render ops · rendered live by the open-source SDK · not a video
the model
A model that composes interfaces.
Everything else here rests on this: Frayme runs its own model, purpose-trained to turn intent into a real, valid interface. That is why you get a component tree instead of a paragraph describing one.
Trained for one job
Hundreds of millions of tokens of interface composition — not a general model asked nicely to output JSON.
Speaks the format natively
It emits json-render operations directly, so the interface streams in as it thinks rather than after.
Knows the whole catalog
Every one of the 189 components, their props and their events — checked against the catalog before anything renders.
from intent to interface
One call. A living interface.
ask
Show me last quarter’s pipeline.
POST /v1/compose
Your agent keeps the brain and sends one plain-language intent — no layout code, no component names to memorise.
← event · markClosedWon
- {"op":"add", "path":"/root", "page"}✓
- {"op":"add", "path":"/elements/header", "PageHeader"}✓
- {"op":"add", "path":"/elements/stats", "StatGroup"}✓
- {"op":"add", "path":"/elements/chart", "Candlestick"}✓
- {"op":"add", "path":"/elements/table", "DataTable"}✓
- {"op":"add", "path":"/elements/action", "Button"}✓
Every operation is checked against the component catalog before it reaches the browser — an invalid interface never renders.
£1.4M
47
32%
Real components, not markdown. When someone clicks, the interaction returns to your agent as a structured event.
for developers
You keep the brain. Frayme is the hands.
'use client';
import { useEffect } from 'react';
import { FraymeRenderer, useFraymeCompose } from '@frayme/runtime/react';
import '@frayme/runtime/styles.css';
export function AgentAnswer({ prompt }: { prompt: string }) {
const { compose, spec, restartKey } = useFraymeCompose();
useEffect(() => { void compose({ prompt }); }, [compose, prompt]);
return <FraymeRenderer spec={spec} restartKey={restartKey} />;
}The spec is portable json-render, rendered by an MIT runtime — it drops into the agent framework you already use.