You read the exact markdown
The panel shows it as plain text, never rendered, alongside the domain it will match. Activate arms it, Discard deletes it.
Skills
Turn it loose on a site and it maps itself. It reads robots.txt and the sitemap, explores, screenshots, writes down what it worked out, then hands you a skill to read before you arm it. Walk it through a job once and that becomes a skill of your own. And the obvious commands never bother a model at all.
Automated site discovery
An agent that has never seen your site burns its first minutes rediscovering it: where search lives, what a button is really called, why the list looks empty until you scroll. So let it learn the place once. Browsentic reads the site’s own robots.txt and sitemap.xml, looks up public background on the domain, then explores for a few minutes, screenshotting as it goes. From then on every instruction on that domain arrives already knowing its way around. Elsewhere those notes stay inert.
Invoke with
@site-mapper map this site
A map in flight is written to a staging directory the skill loader cannot read. An unreviewed map is not merely unused, it is never opened.
The panel shows it as plain text, never rendered, alongside the domain it will match. Activate arms it, Discard deletes it.
It cannot click, fill or submit, cannot leave the site, and stays pinned to the tab it started in. Switching tabs stops it rather than following you.
15 pages, 10 screenshots and 10 minutes by default; 40, 24 and 30 minutes are the hard limits enforced by the daemon.
Record once, replay later
Press record in the composer, then work through the job yourself. Click across the pages, fill the fields, submit the form, press stop. Browsentic breaks what you did into ordered steps, names each one after what you accomplished, and keeps them in a list you can rename. That is a browsing skill of your own making. From then on, “do it like last time” is the whole instruction.
Invoke with
record my browsing session
Every field you fill becomes a placeholder ({{email}}, {{invoice_number}}) and the assistant asks you for the value when it replays.
Passwords, hidden fields, one-time codes and anything shaped like a card number are dropped whether or not you opt in to literal values.
The steps are a plan, not a script. The agent re-checks each target against the live page and prefers the visible text it recorded over the CSS selector, because selectors are what a redesign breaks first.
If a step no longer lands, the run halts and tells you which one, instead of finding a different route to the same effect.
Local intent classification
So every instruction is scored against a local grammar first. Confident single-step commands run in the browser and stop there, marked with a bolt on the timeline. Everything else goes to the agent with the text untouched. The bias is deliberately toward escalating, because the two mistakes are not symmetric: escalating something it could have handled costs a round trip, while acting on something it misread spends a wrong click on your real page.
Invoke with
yarn check:intent "take me to the checkout page"
back, forward, reload · open github.com · scroll to the top · press enter · click Sign in · google something · stop recording
“is there a login button?” · “open the settings menu” · “click Buy now” · “scroll down and tell me what it says” · “click it”
So do multi-step asks, conditionals, vague targets and consequential clicks, as does any local command that runs and fails.
Route one utterance through the grammar from the command line and see exactly why it went where it went.
Before any of it runs
A map in flight is written to a staging directory the skill loader cannot read. An unreviewed map is not merely unused. It is never opened.
The panel shows it as plain text, never rendered, alongside the domain it will match. Activate arms it, Discard deletes it.
A mapping run is read-only: it cannot click, fill or submit, cannot leave the site, and stays pinned to the tab it started in.
15 pages, 10 screenshots and 10 minutes by default. 40, 24 and 30 minutes are hard limits the daemon enforces.
Free and MIT licensed. Nothing to sign up for, no key to paste, and a fresh install connects to nothing until you redeem a pairing code yourself.
claude mcp add browsentic -- browsentic-mcp