AI agent builders
Playwright MCP and custom agents — without the giveaway robotic clicks that flag your agent as a bot.
MCP · Playwright · agents
v0.8MIT licensedBuilt on Playwright
The Playwright wrapper that gives browser automation a heartbeat. Real Bezier paths, real typing rhythm, real pre-click dwell — driven by four personalities you can extend, compose, or replace.
await human.click('#submit');travelLive. Powered by @humanjs/core rerolls every cycle
Side by side
Same selector. Same Playwright underneath. The library only edits how it gets to the button — and how it leaves.
// Playwright — straight to the click
await page.click('button[type=submit]');
// Done. No hover, no path,
// no human signal whatsoever.// HumanJS — humanized click
import { createHuman } from '@humanjs/playwright';
const human = await createHuman(page, {
personality: 'careful',
seed: 'session-42',
});
await human.click('button[type=submit]');
// Bezier path · micro-jitter
// pre-click dwell · post-action settleTry it
Click anywhere in the box. The cursor draws a real Bezier path to the point you picked — exactly the same code that drives human.click() in tests.
Now the keyboard
The cursor isn’t the only thing that gives an automation away. HumanJS types at the personality’s natural pace — with optional typos and the backspace recovery a real user would do without thinking.
And the pace
Real users pause to read before they click. HumanJS models that pause from word count and the personality’s reading speed — code reads slower than prose, scan mode skims, and `<pre>` tags auto-detect when you don’t specify.
And the motion between
Robotic scroll fires one big delta. Humans roll a wheel — accelerate, peak, decelerate, occasionally pause, sometimes overshoot. `human.scroll()` models that from a deterministic planner, and `distracted` will pass the target and correct back the way real eyes do.
Bottled motion
`human.record()` wraps any session — `toVideo()` writes an mp4 of what the user actually saw, `toTimeline()` writes the structured action log AI agents and tests can replay. Drag the scrubber to step through a captured session, or switch personalities to see how each shapes the recording.
Three audiences
Playwright MCP and custom agents — without the giveaway robotic clicks that flag your agent as a bot.
MCP · Playwright · agents
Catch race conditions that only surface at real human pace. One flag flips to instant mode for fast CI.
Playwright · Vitest · CI
Record polished walkthroughs without driving the cursor by hand. Same script, smoother output.
Loom · YouTube · screencasts
Under the hood
Curved trajectories with overshoot, sub-pixel jitter, and bell-curve velocity. No straight lines, no instant teleports.
Same seed, same trajectory. Snapshot-test friendly.
One flag bypasses all humanization. Tests stay fast in CI.
Per-character timing with typo + backspace recovery.
human.read(text) pauses based on word count.
Extend personalities, actions, primitives. Day-one architecture.
The lab
Personalities are pure data. Pick one, drag the sliders, watch the cursor change live. Then ship that config as a preset of your own.
careful
Reads everything twice.
High dwell, medium curvature. Slow, deliberate trajectories.
live from @humanjs/core
Live overrides
{ personality: 'careful',}
Get started
HumanJS wraps Playwright. Same selectors, same locator API. The only thing that changes is what happens between two points.
01Install
$ pnpm add @humanjs/playwright02Use it
import { chromium } from 'playwright';
import { createHuman } from '@humanjs/playwright';
const browser = await chromium.launch();
const page = await browser.newPage();
const human = await createHuman(page, {
personality: 'careful',
seed: 'session-42',
});
await human.goto('https://example.com');
await human.click('button[type=submit]');
await browser.close();03Or drive it from an AI agent
claude mcp add humanjs -- npx -y @humanjs/mcp· Designed scope
HumanJS humanizes the timing between two points. It doesn't pretend to be a full anti-detection stack. Here's what we ship — and what we leave to others.
MIT licensedlatest v0.8
In v1
Out of scope