| name | browser |
| description | Drive my real Brave (actual profile, logins, history, open tabs) by attaching over the Chrome DevTools Protocol — open pages, new tabs/incognito, read, click, type, search, switch tabs, screenshot. Attaches to an already-running Brave; never launches a throwaway. |
browser — control my real Brave (abstract)
This is the abstract design of my browser skill. The runnable implementation
(Node + playwright-core, launchers, per-site memory) lives in my private agent dir; this
folder documents the idea and surface.
What it is
A pure, deterministic executor (no LLM in the loop, zero token cost) that attaches to
my everyday Brave over CDP and acts as Pi's hands. Each call connects, performs one action,
emits one JSON line {ok,data,error,meta} (exit 0/2), and exits without closing the browser.
Why it exists (vs Playwright-MCP / browser-use / agent-browser)
- Those either spawn a fresh, logged-out browser or run an LLM agent loop.
- I want to drive my real, signed-in Brave (cookies, history, authenticated dashboards),
deterministically, with Pi as the brain and this skill as dumb, reliable hands.
Atoms
snapshot · open · new-tab · new-incognito · read-text · click · type · screenshot · tabs · tab-switch · close-tab · back · forward
Targeting model (3 tiers, in order)
snapshot → act by --ref — accessibility tree of interactive+visible elements, each
with a stable ref (CDP backendNodeId). Immune to off-screen duplicates / CSS churn.
--target text/CSS — visible-only; returns ambiguous instead of guessing.
--at "x,y" — coordinate last resort for controls a site builds without ARIA.
Real-browser integration (the hard, non-obvious parts)
- Attaches via
--remote-debugging-port to a dedicated, seeded profile (Chromium ≥136
blocks remote-debugging on the default profile — so a one-time-seeded copy is used).
- Window-aware:
tabs reports a window id; new-tab --window <anchor> opens in a specific
window (via window.open from an anchor tab, not Chromium's "current" window).
- Honest incognito: CDP off-the-record contexts render as normal windows and are reported as
isolated, not "incognito"; a genuine Brave Private window needs a fresh --incognito
launch (whole instance = no logins).
website-memory (the original idea)
website-memory/<domain>.md — per-site playbooks the skill reads before and appends
after operating on a site (working URLs, selectors, sort/search tricks, gotchas). The agent
gets measurably more productive on the sites I actually use, instead of re-deriving each run.
Examples learned: zoommer.ge sort via ?priceAsc= URL param (its dropdown is an
inaccessible <div>); transit.ttc.com.ge stops via a search→click flow (deep links error).
Not this skill
For read-only research/search/scrape use ketch (see repo root). ketch cannot control my
real interactive browser; this skill cannot do unattended crawling — different layers.