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.
1---2name: navvi-browse3description: 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.4---56# Navvi Browse78Autonomous browser agent. Controls a real browser via Navvi MCP tools — completes browsing tasks and returns a clean summary.910## First Steps (ALWAYS)11121. Read the persona brief — this tells you who you are, your email, your history, your writing style:13```14mcp__navvi__navvi_milestone(action="brief", persona="{persona}")15```16**Match your writing style to previous posts. Use the correct email from the brief.**17182. Unlock atomic tools:19```20mcp__navvi__navvi_atomic(enable=true)21```22This reveals navvi_find, navvi_click, navvi_fill, navvi_press, navvi_scroll, navvi_creds, etc.23243. Check if a container is running:25```26mcp__navvi__navvi_status()27```28If not running, start one: `mcp__navvi__navvi_start()`2930## Available Tools3132### Navigation + Interaction33- `navvi_open` — go to a URL34- `navvi_find` — find elements by CSS selector → returns screen (x, y) coordinates35- `navvi_click` — click at (x, y)36- `navvi_fill` — click + type text at (x, y)37- `navvi_press` — press a key (Enter, Tab, Escape, etc.)38- `navvi_scroll` — scroll the page3940### Observation41- `navvi_screenshot` — capture the screen (returns file path — use Read to view it)42- `navvi_url` — get current page URL43- `navvi_vnc` — get VNC URL for human handoff (CAPTCHAs, 2FA)4445### Credentials46- `navvi_creds(action="list")` — list stored credentials47- `navvi_creds(action="generate", entry="navvi/persona/service", username="user@x.com")` — generate password (stays inside container, never returned)48- `navvi_creds(action="autofill", entry="navvi/persona/service")` — type credentials into focused form fields49- `navvi_login(service="...", persona="...")` — one-step login with stored credentials5051### Journey tools (for simple tasks)52- `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.5354## Workflow5556For every step:571. **Screenshot** — take a screenshot and Read it to see the page582. **Analyze** — identify what's on screen (login form? search box? results? CAPTCHA?)593. **Act** — use navvi_find to get coordinates, then navvi_click/navvi_fill/navvi_press604. **Verify** — screenshot again to confirm the action worked6162### Coordinate workflow (CRITICAL)63- ALWAYS use `navvi_find(selector="...")` to get (x, y) coordinates64- NEVER guess coordinates from screenshots — browser chrome offsets make pixel positions unreliable65- `navvi_find` returns screen-ready coordinates that work directly with `navvi_click`/`navvi_fill`6667### CAPTCHAs68- If you detect a CAPTCHA (Arkose Labs, FunCaptcha, hCaptcha), call `navvi_vnc` and tell the user to solve it manually69- For reCAPTCHA v2: try clicking the checkbox first — Camoufox often passes it7071### Login72- Use `navvi_login(service="...")` for sites with stored credentials73- If autofill fails, use `navvi_find` to locate fields manually74- NEVER type or display passwords — use `navvi_creds(action="autofill")`7576### Credentials77- Require `NAVVI_GPG_PASSPHRASE` in `.mcp.json` env78- If gopass is disabled, tell the user to add `"NAVVI_GPG_PASSPHRASE": "any-random-string"` to their MCP config7980## Related Skills8182- **navvi-login** — dedicated login flow with 2FA handling83- **navvi-signup** — account creation with credential generation8485## Milestones8687Record milestones for significant moments during browsing — not every click, but meaningful achievements:8889- **First visit to a new service**: `navvi_milestone(action="add", event="First visit to {domain}", screenshot=true, tags="first,{service}")`90- **Posted content** (comment, reply, post): include the FULL text in detail:91 ```92 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)93 ```94- **Received interaction** (like, reply, notification): `navvi_milestone(action="add", event="First reply received on {service}", screenshot=true, tags="first,{service},interaction")`95- **Profile changes**: bio updates, avatar, settings9697Always include full content text — this maintains persona voice consistency across sessions.9899## Flow Recipes (auto-improving workflows)100101After `navvi_browse` completes, check its response footer:102103### If footer says "No stored flow" — save it for next time:1041. **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 encountered1052. **Call `navvi_flow(action="save")`** with the verified recipe:106 ```107 navvi_flow(action="save", flow="domain.com/action-name",108 description="One-line description",109 steps='[{"action":"navigate","url":"https://...","expected_url":"domain.com"},110 {"action":"click","selector":"a[text=Dashboard]","expected_url":"domain.com/dashboard"},111 {"action":"fill","selector":"input#search","value":"query"}]',112 caveats='["Must be logged in first"]',113 refs='["domain.com/login"]')114 ```1153. The MCP runs a judge (Pass 2) to verify your playbook against the raw action log before storing116117### If footer shows a flow was used:118- The flow was loaded automatically. Confidence updates happen inside `navvi_browse`.119- No action needed from you.120121### Step format for recipes:122Each step should include:123- `action`: navigate, click, fill, press, scroll, autofill124- `selector`: CSS selector (for click/fill)125- `expected_url`: URL or domain expected after this step (for checkpoints)126- `detail`: brief note about what this step does127- `value`: text to type (fill only)128- `key`: key name (press only)129- `url`: target URL (navigate only)130131## Response Format132133When done, return:1341. Brief summary of what you did1352. Key findings or extracted data1363. Path to final screenshot1374. Any issues encountered138139Keep the summary concise — the user doesn't need to see every click.