Prove who approved what.
When AI agents act for your customers,
decide what they may seedownloadchangesend.

When a customer lets an AI agent use your product for them, OneHuman decides what the agent may do: allow it, hide the sensitive parts, ask the person to confirm with a passkey, or refuse. It signs every decision on your server, so you can show which actions a human approved.

$npm i onehumanai
Recognises the agents your customers already use
Claude in ChromeClaude desktop browserChatGPT AtlasChatGPT AgentOpenAI CodexPerplexity CometPlaywright & Puppeteer driversWeb Bot Auth signed agentsAntigravityHumanised bots (ghost-cursor)
01

A customer signs in

Their clicks move like a hand. The endpoint returns the balance.

02

An AI agent attaches

Seen in 0.3 s. What is on screen is sealed before the agent reads it.

03

The endpoint decides

Balance masked. Export blocked. Every decision logged.

04

The person takes it back

A passkey proves presence. The session is theirs again.

bank.example.com/accounts
Welcome back
Current account · USD
Session protected
Available balance
$4,939.10
Show balanceDownload statement
Personal details
NameAda Lindqvist
IBANGB29 NWBK 6016 1331 9268 19
Phone+1 (415) 555-0142
✦Assistant
What’s my balance?
Reading the page…
Verify it’s youTouch ID · passkey
decision balance.read → allow · actor=human_like · HUMAN_KINEMATICS

Built for the session, not the door

Bot management works at the door. OneHuman works inside the session, at the endpoint that returns the data.

Detected at attach time

An agent leaves traces in the page: its overlay, the code it injects, the way it reads. OneHuman sees them 0.1–0.5 s after the agent attaches, before its first action.

Pointer physics per click

A hand curves, trembles and slows onto the target. A driver teleports and releases in 1–4 ms. Measured on 397 human clicks from 22 browsers and devices: 2 were read as a program. On 824 agent clicks, 2 passed as human. How we measured →

Policy per endpoint

allow · mask · step_up · block per resource, in your JSON, decided on your server, written to an audit log.

Seal on attach

What is already on screen is redacted the instant an agent appears. Its read sees ••••.

Proof a human agreed

When an action needs a person, they confirm with a passkey (Touch ID or Windows Hello). Every decision is signed on your server, and an auditor can check it offline without trusting us.

Observe first, enforce later

Start in observe: nothing blocked, everything recorded. Review, then flip one word.

What OneHuman does not do

Said plainly, so nobody finds out in production.

API keys and server calls

If an agent calls your API with a customer's API key or token, there is no browser and no page: OneHuman sees nothing. It protects signed-in web sessions.

Native mobile apps

iOS and Android apps are not covered. Mobile browsers are, but a tap often stays “undecided” today. Your rules say what happens then.

Backends that are not Node

The middleware runs in Node: Express, Connect, plain http, a Next.js custom server. Java, .NET, Go or Python need a Node service in front, which we have not shipped.

Identify people

It answers one question per session: is a program acting? It keeps no profile of a person. A passkey proves presence, not identity.

Stop every script

A script written for one site that fakes a human pointer can pass the behaviour check. That is why critical actions ask for a passkey. What gets through →

Send your data anywhere

Detection, rules, audit log and proofs run on your server. The portal only gets decision metadata, and only with an API key. Trust & privacy →

How it tells a hand from a program

Three kinds of pointer, live: a hand, a driver, a bot pretending to be a hand.

Human curved, trembling, slows onto the target Agent driver teleports, releases in 1–4 ms Humanised bot a smooth generated curve, too clean to be a hand

In 2026, people use their bank, their CRM and their insurer through an AI agent.Most apps cannot tell the agent from the person.OneHuman can.

Set it up in an afternoon, or let your coding agent do it

Run npx onehumanai init: it asks what to protect and how, shows every change, and wires it in when you say yes. Or hand your coding agent the npm link and say “install this”.

// npm i onehumanai: one package with the engine inside. Import only from 'onehumanai'
import { onehuman } from 'onehumanai';

const oh = await onehuman({
  secret: process.env.ONEHUMAN_SECRET,            // 32+ bytes, keep it stable: it signs tokens and decision proofs
  policy: './onehuman.policy.json',
  db: 'sqlite:./onehuman.db',
  identify: (req) => req.session?.userId ?? null,   // your login id, never a constant
  apiKey: process.env.ONEHUMAN_API_KEY,           // optional: the portal shows agent share, decisions, proofs
});
app.use(oh.middleware());                    // serves /onehuman/sdk.js, /health, /proof-keys and the SDK's API
app.get('/api/balance', oh.protect('balance.read'), (req, res) => oh.send(req, res, balance, maskBalance));

Try it against a real agent

Open a demo yourself and everything works. Then paste the prompt into an AI agent and watch the same account lock down.

Loading…

Know who agreed.

One install: npm i onehumanai. Everything runs on your own server. The SDK and middleware are Apache 2.0, and the engine's source is open with production use granted. Add an API key and the portal shows how many of your sessions had an AI agent in them.