Browser automation
jat-pilot
Drive your own browser — consent-scoped agent automation.
jat install pilotAgents that browse usually get their own throwaway browser. Sometimes the thing you need is behind your logged-in session — a gated download, a click-through terms page, an app only your account can reach. jat-pilot lets an agent drive your real browser, but only with your consent: it acts on a tab you explicitly enabled, and refuses every tab you didn't.
The model
Consent is the contract
Consent is enforced by jat-pilot itself, per tab. You run pilot enable <tab>; anything the
agent tries on a tab you didn't enable exits with a refusal, not an
action. It drives a dedicated browser profile on its own debug port —
never your daily profile's zero-auth port — so the fleet can never reach a
session you didn't hand it.
The verbs
Layered by altitude
Prefer the highest-level verb that works. Each rung drops closer to the metal — start at the top and only descend when you have to.
- 1 element visible text · labels · aria
Preferred. Survives redesigns — no selectors to rot.
pilot element click --text "Save" - 2 page CSS selectors
Drop down when the text collides or there's nothing to match on.
pilot page fill "#email" you@example.com - 3 js raw evaluate
The escape hatch. Full page access — reach for it last.
pilot js "return document.title"
A real testing driver
Keyboard and verification verbs make it more than a clicker — synthetic events most handlers ignore, real trusted input they don't.
jat-pilot key "Control+K" trusted keypress via CDP — real shortcuts, not synthetic events
jat-pilot console --filter error capture console + runtime errors, including ones already fired
jat-pilot assert --selector ".modal" --count 1 verification oracle — exit 0 if the DOM matches, 3 if not
Setup
jat install pilot pilot setup && pilot tabs pilot enable 0 tab 0 enabled — agent may now act on this tabPart of the jatstack
jat-pilot is the browser jat's agents reach for when a job needs your real, logged-in session — the one no throwaway profile can stand in for. Pair it with jat-secret and an agent can resolve the credential and drive the flow it unlocks, all on your own machine. The parts assume each other; together they're worth more than the sum.
How the family fits togetherFull verb reference and the consent model on GitHub.
View on GitHub