- Captured with consent
- Read by your agent as intent
- Through the Inverse API, paid per use
Deploying runs on your laptop. Paste it into your agent: it installs the Inverse skill, signs you in once, and ships this project. Free to start.
Inverse Interface
What people meant, handed to your agent.
Add the snippet to your app. It asks each person before it records, and Inverse hands your agent what they meant.
Open snippet
MIT, no accountThe recorder, consent prompt and event formats, in /v1.js and the inverse-interface package. It never records typing and asks each person first.
- Consent prompt, per person
- interface-event.v1 and intent.v1
- /v1.js
Inverse API
$2.00 per packageInverse turns a session into intent: what people tried, where they got stuck, and the evidence. It checks quality, stores the result and delivers it to your agent, and bills only for packages that pass.
- First five packages free
- Delivery over MCP and webhooks
- Keys and usage in Launch
Your model, run by Inverse
$0.50 per packageStore your OpenAI, Anthropic or compatible key on the project. Inverse calls your model, then runs the same checks.
- Your key, encrypted
- Shown only as its last four
- $0.50 instead of $2.00
<script src="https://www.inverse.at/v1-0.3.0.js" integrity="sha384-xOx29+7qQagCloCIx75FiNuQGMzkH5CKflpmvKlYYtroFwn1SBOYmuQeoA/C2Ugg" crossorigin="anonymous"></script> <script>Inverse.capture({ key: "pk_live_…", task: "Find pricing" }); </script>
Paste it into any page. It asks each person before it records, and resolves null if they choose Not now. Your publishable key works only from the domains you allow.
Estimate your monthly bill
Estimate. Live usage draws from prepaid credit; test keys are always free.
A consented session recorded as semantic events.
- Unit price
- $0.10
- Free each month
- 10
| Tier | Units | Each |
|---|---|---|
| First 10 | 10 | Free |
| Up to 1,000 paid | 490 | $0.10 |
| Capture per month | $49.00 | |
A session turned into an intent.v1 package your agent can read.
- Unit price
- $2.00
- Free each month
- 5
| Tier | Units | Each |
|---|---|---|
| First 5 | 5 | Free |
| Up to 1,000 paid | 45 | $2.00 |
| Intent per month | $90.00 | |
Coming soonYour agent asks a real person inside your app and gets the answer back. Unanswered asks aren't billed.
- Unit price
- $0.25
- Free each month
- None
| Tier | Units | Each |
|---|---|---|
| Up to 1,000 paid | 200 | $0.25 |
| Ask per month | $50.00 | |
Delivery pass-through, such as SMS at carrier cost, isn't included.
Coming soonA change your agent proposes that people accept or reject.
- Unit price
- $3.00
- Free each month
- None
| Tier | Units | Each |
|---|---|---|
| Up to 1,000 paid | 20 | $3.00 |
| Propose per month | $60.00 | |
Live rooms embedded through the API. Rooms on apps hosted on Inverse are covered by your plan.
- Unit price
- $0.004
- Free each month
- None
| Tier | Units | Each |
|---|---|---|
| Up to 1,000 paid | 1,000 | $0.004 |
| 1,001–10,000 paid | 1,000 | $0.003 |
| Rooms per month | $7.00 | |
Combined, all services
$256.00
- Capture $49.00
- Intent $90.00
- Ask $50.00
- Propose $60.00
- Rooms $7.00
Volume tiers apply per service. Prices in USD; pass-through delivery isn't included.
Credit is drawn at the prices above, only for live usage.
Compared with building it yourself
Inverse
$139.00 / month
500 captures, 50 packages
Build it yourself
$3,010.00 / month
- Build, spread over 12 months
- $2,000.00
- Upkeep
- $1,000.00
- Event storage
- $5.00
- Model tokens
- $5.00
Building it yourself costs less above about 1,241 intent packages a month, at these assumptions.
Assumptions
Consent prompt, recorder with typing redaction, event storage, the analysis prompt, quality checks, delivery to your agent.
Example. A small team checking a flow their agent shipped: 1,000 consented sessions a month, 100 turned into intent packages. Inverse: $289.00 a month. Building it: about $3,020.00 a month in the first year, mostly the build.
Covers Capture and Intent. Rooms and Propose aren't counted. Assumptions are estimates; change them to match your team.
API playground
Runs here, with sample data. No key needed.
Ask a person for consent, record what they do as semantic events, and end the session to get an intent package.
Good for
- See where people stall in a flow your agent just shipped
- Collect consented sessions from beta testers
- Record what happened when someone asks for help
<script src="https://www.inverse.at/v1.js"></script>
<script type="module">
const capture = await Inverse.capture({ key: "pk_live_…", task: "Check out" });
// null if they chose Not now. Later:
const pkg = await capture?.end(); // intent.v1
</script>What the person sees
Help improve this page?
Acme records what you click and say, never what you type. You can stop any time.
Send events you already record, from your server, and get back what the person meant: outcome, friction, questions.
Good for
- Turn events you already log into what people meant
- Hand your coding agent a ranked list of friction to fix
- Sum up a usability test before the next sprint
curl https://www.inverse.at/v1/intent-packages \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"task":"Check out","events":[
{"v":1,"t":1793491209600,"session":"ses_demo","kind":"rage_click",
"path":"/cart","target":{"label":"Pay","role":"button"}},
{"v":1,"t":1793491212000,"session":"ses_demo","kind":"say",
"text":"Why is Pay greyed out?"} …]}'Run the demo to see the response.
Coming soonYour agent asks a real person inside your app and gets the answer back. Unanswered asks aren't billed.
Good for
- Confirm a risky change with the person it affects
- Ask which of two options someone prefers, in place
- Get a missing detail mid-task instead of guessing
Your agent suggests a change. People see it above their pointer and accept or reject it; nothing runs until they accept.
Good for
- Suggest a fix while the person is in the flow that broke
- Offer a setting after repeated friction
- Let a teammate accept an edit during a live review
import { propose } from "inverse-embed/context";
await propose("https://www.inverse.at/apps/<room>", {
action: "trim",
args: { clip: "Intro", seconds: 3 },
reason: "Trim the intro to 3 seconds so the title lands on the beat.",
});
// In the app: kit.proposals({ apply: (p) => trim(p.args) });What the person sees
Claude code
Trim the intro to 3 seconds so the title lands on the beat.
Sign in with Inverse on your own domain: your server learns who someone is (a per-app id, never their email) and whether they've paid.
Good for
- Sign people in to your app on its own domain
- Recognize returning people without storing their email
- Check access before showing a feature
import { inverseAuth } from "inverse-embed/auth";
// INVERSE_CLIENT_ID and INVERSE_CLIENT_SECRET from Inverse Dev
const auth = inverseAuth();
export const GET = (req: Request) =>
req.url.includes("/callback") ? auth.callback(req) : auth.login(req);
// Anywhere on your server
const session = await auth.session(request); // null when signed outWhat the person sees
Sign in to continue to Acme
Acme sees an id for you and whether you've subscribed. Never your email.
Open a live room around any URL: everyone sees the same app, with cursors, voice and reactions.
Good for
- Run a usability session on a call, in the real app
- Show a customer a live build
- Pair with a teammate inside the app
import { room } from "inverse-interface";
const link = room({ url: "https://your-app.com" }); // opens it in a new tabRun the demo to see the response.
Hosting on Inverse
Deploy on Inverse, and the room comes with it.
One command from your terminal or your agent. Every link becomes a live room with a call on top, and Interface is already wired in.
What Inverse adds to your app
Before
Your app, on its own.
It works. One person at a time uses it, and you never hear how it went.
Ship
Ship it to Inverse. Now it's a room.
One command, one link. The room wraps your app; your code doesn't change.
Use together
People join and use it together.
Everyone's in the real app, with their own cursor and a call on top.
Hear
With consent, the room is heard.
What people say and react to becomes context, stamped “Speaker A”, and flows to your agent.
Propose
Your agent proposes. Someone accepts.
The change runs through your app's own code. Then the loop starts again.
1 of 3
Every link is a live room.
People join with a name and use the real app. Each has their own copy, with a call on top.
Features
- Lead, and everyone follows you
- Step in to talk
- Mark up the screen together
- Resume the same room later
- Private, link, email or public
2 of 3
Your app senses the room. Each person decides what it gets.
import { createInterfaceKit } from "inverse-embed/interface-kit"; button.onclick = async () => { const kit = await createInterfaceKit({ room: true }).start(); kit.on("transcript", (l) => show(l.by, l.text)); kit.on("reaction", (e) => burst(e.data.emoji)); };
Asked once per signal, in context. Agents see “Speaker A”, never a name. Video and sound never leave the browser.
Features
- Voice and reactions
- Attention and cursor intent
- Streams: shared JSON, attributed
- Pause all and Take back
3 of 3
Your agent hears what happened, and proposes what's next.
# your agent, connected from the room: ⋯ → Connect your agent tools: get_intent, get_transcript, get_stream, get_app_insights, propose # what people said: ×3 on the intro, “nothing happens for ages” propose { action: "trim", args: { clip: "Intro", to: 8 }, reason: "The intro runs 12s before anything happens." }
Terminal output is an example.
Nothing changes until someone accepts. The edit runs through your app's own code, and the agent sees the answer.
Features
- Insights: friction, questions, requests
- Intent API: JSON, SSE, LangChain
- MCP server for your agent
- Proposals people accept or reject
How it compares
Frontend hosting serves pages to one person at a time. Inverse serves the room around your app, and is newer at everything else.
| Capability | Frontend hosting | Inverse |
|---|---|---|
| Deploy a web app from your terminal | Yes | Yes |
| Own edge network, regions, SLA | Yes | Not yet |
| Custom domains | Yes | Pro and Team |
| Servers, databases, secrets | Often | Bring your own |
| People use the app together on a call | Build it yourself | Every link |
| Usage context your agent can read | Analytics dashboards | Intent API, MCP |
Start free. Upgrade when people show up.
Rooms, the call and the interface kit run in the browser and stay free on every plan. Plans set the limits our servers enforce.
Free
$0USD / month
For trying Inverse and shipping side projects.
- 3 apps
- 5 people per room
- 10% fee on app sales
Pro
Recommended$20USD / month
For developers whose apps people use every week.
- 25 apps
- 25 people per room
- 5% fee on app sales
Team
$60USD / month
For teams that own apps together. 5 developers included.
- Shared team workspace: 5 developers, then $12 each a month
- 200 builds a day
- 5% fee on app sales
Prices in USD per month. Payments by Stripe.
Questions
What does it cost?
Free covers 3 apps and 10 builds a day (5 until you sign in with GitHub). Pro is $20 a month and Team $60 a month, for higher limits, custom domains and longer insights. Everything that runs in the browser stays free. Selling an app costs 10% per sale on Free and 5% on paid plans, plus Stripe's processing fee. See pricing.
Where does my app actually run?
Builds and serving go through an established hosting provider's deployments API today; the rooms run on a separate realtime service. We don't run our own edge, regions or runtime yet, so we don't quote speed or uptime numbers. What Inverse adds is the room, the call and the context loop. Our own runtime is on the roadmap.
Will my app build?
Next.js, Vite, Astro, SvelteKit, Nuxt, Remix, React Router, SolidStart, Gatsby, Angular and Create React App are detected and built. Uploads are source only, up to 5,000 files and 50 MB. If your app needs a database or secrets, you configure those; Inverse doesn't provision them.
Do I have to move production?
No. Keep production where it is and ship the version you want people to use together to Inverse. It's one more command, not a migration.
Is it real co-editing?
Not by default. Everyone sees each other, follows the leader and can step in, but each person has their own copy of the app's state. Streams and cursors from the interface kit let your app share exactly what you choose.
Isn't sensing people creepy?
It's off unless your app asks, and then each person decides, one signal at a time. Agents see aliases like “Speaker A”, never names. Video and sound never leave anyone's browser. People can pause everything or take back what they shared.
No terminal needed
Drop a project. Inverse builds it and serves it.
Drag in a project folder or ZIP. Inverse leaves out dependencies and build output, builds it on its servers, hosts it, and gives you a link where every visit opens a live room.
Next.js, Astro, SvelteKit, Nuxt, Remix, React Router, SolidStart, Gatsby, Angular, Create React App and Vite. Free plan: 3 apps, 10 builds a day with GitHub sign-in.
Already deployed somewhere?
Paste your app's URL to open it in a room. Got an Inverse link? Join it here.
