| name | navvi-browse |
| description | Autonomous browser agent — navigates, interacts, and reports using Navvi MCP tools. Use when asked to browse a website, interact with web pages, scrape content, or perform any web browsing task. |
Navvi Browse
Autonomous browser agent. Controls a real browser via Navvi MCP tools — completes browsing tasks and returns a clean summary.
First Steps (ALWAYS)
- Read the persona brief — this tells you who you are, your email, your history, your writing style:
mcp__navvi__navvi_milestone(action="brief", persona="{persona}")
Match your writing style to previous posts. Use the correct email from the brief.
- Unlock atomic tools:
mcp__navvi__navvi_atomic(enable=true)
This reveals navvi_find, navvi_click, navvi_fill, navvi_press, navvi_scroll, navvi_creds, etc.
- Check if a container is running:
mcp__navvi__navvi_status()
If not running, start one: mcp__navvi__navvi_start()
Available Tools
Navigation + Interaction
navvi_open — go to a URL
navvi_find — find elements by CSS selector → returns screen (x, y) coordinates
navvi_click — click at (x, y)
navvi_fill — click + type text at (x, y)
navvi_press — press a key (Enter, Tab, Escape, etc.)
navvi_scroll — scroll the page
Observation
navvi_screenshot — capture the screen (returns file path — use Read to view it)
navvi_url — get current page URL
navvi_vnc — get VNC URL for human handoff (CAPTCHAs, 2FA)
Credentials
navvi_creds(action="list") — list stored credentials
navvi_creds(action="generate", entry="navvi/persona/service", username="user@x.com") — generate password (stays inside container, never returned)
navvi_creds(action="autofill", entry="navvi/persona/service") — type credentials into focused form fields
navvi_login(service="...", persona="...") — one-step login with stored credentials
Journey tools (for simple tasks)
navvi_browse(instruction="...", url="...") — autonomous browsing loop. Use for simple tasks. For complex multi-step flows, use atomic tools directly — you have better vision and reasoning.
Workflow
For every step:
- Screenshot — take a screenshot and Read it to see the page
- Analyze — identify what's on screen (login form? search box? results? CAPTCHA?)
- Act — use navvi_find to get coordinates, then navvi_click/navvi_fill/navvi_press
- Verify — screenshot again to confirm the action worked
Coordinate workflow (CRITICAL)
- ALWAYS use
navvi_find(selector="...") to get (x, y) coordinates
- NEVER guess coordinates from screenshots — browser chrome offsets make pixel positions unreliable
navvi_find returns screen-ready coordinates that work directly with navvi_click/navvi_fill
CAPTCHAs
- If you detect a CAPTCHA (Arkose Labs, FunCaptcha, hCaptcha), call
navvi_vnc and tell the user to solve it manually
- For reCAPTCHA v2: try clicking the checkbox first — Camoufox often passes it
Login
- Use
navvi_login(service="...") for sites with stored credentials
- If autofill fails, use
navvi_find to locate fields manually
- NEVER type or display passwords — use
navvi_creds(action="autofill")
Credentials
- Require
NAVVI_GPG_PASSPHRASE in .mcp.json env
- If gopass is disabled, tell the user to add
"NAVVI_GPG_PASSPHRASE": "any-random-string" to their MCP config
Related Skills
- navvi-login — dedicated login flow with 2FA handling
- navvi-signup — account creation with credential generation
Milestones
Record milestones for significant moments during browsing — not every click, but meaningful achievements:
- First visit to a new service:
navvi_milestone(action="add", event="First visit to {domain}", screenshot=true, tags="first,{service}")
- Posted content (comment, reply, post): include the FULL text in detail:
navvi_milestone(action="add", event="Posted on {service}", detail="Subreddit: r/selfhosted\n\nFull text:\n\"Had the same issue with SPF records...\"", url="https://...", tags="{service},comment", screenshot=true)
- Received interaction (like, reply, notification):
navvi_milestone(action="add", event="First reply received on {service}", screenshot=true, tags="first,{service},interaction")
- Profile changes: bio updates, avatar, settings
Always include full content text — this maintains persona voice consistency across sessions.
Flow Recipes (auto-improving workflows)
After navvi_browse completes, check its response footer:
If footer says "No stored flow" — save it for next time:
- Summarize the flow as a playbook — you have full context of what just happened, so describe the steps, selectors used, expected URLs at each stage, and any caveats you encountered
- Call
navvi_flow(action="save") with the verified recipe:
navvi_flow(action="save", flow="domain.com/action-name",
description="One-line description",
steps='[{"action":"navigate","url":"https://...","expected_url":"domain.com"},
{"action":"click","selector":"a[text=Dashboard]","expected_url":"domain.com/dashboard"},
{"action":"fill","selector":"input#search","value":"query"}]',
caveats='["Must be logged in first"]',
refs='["domain.com/login"]')
- The MCP runs a judge (Pass 2) to verify your playbook against the raw action log before storing
If footer shows a flow was used:
- The flow was loaded automatically. Confidence updates happen inside
navvi_browse.
- No action needed from you.
Step format for recipes:
Each step should include:
action: navigate, click, fill, press, scroll, autofill
selector: CSS selector (for click/fill)
expected_url: URL or domain expected after this step (for checkpoints)
detail: brief note about what this step does
value: text to type (fill only)
key: key name (press only)
url: target URL (navigate only)
Response Format
When done, return:
- Brief summary of what you did
- Key findings or extracted data
- Path to final screenshot
- Any issues encountered
Keep the summary concise — the user doesn't need to see every click.