snapsurflisted
Install: claude install-skill zumerlab/snapsurf
# snapsurf — browse by reading semantic diffs instead of screenshots
> MACHINE-GLOBAL install (~/.snapsurf). Refresh after source changes:
> `node tools/install-global.mjs`
SnapSurf is a Playwright daemon with the SnapSurf SDK injected on every navigation, plus
a CLI driven from Bash and an MCP server that exposes the same verbs as tools. Read the
semantic diff after each action; ask for pixels when the report cannot answer the
question.
NOTE: if the SnapSurf MCP tools (browser_open/find/act/verify/…) are available in this
session, prefer THEM over the CLI — same daemon, structured output.
Read the fields, not the prose: every reply carries `structuredContent`, and each tool
description says which field it fills. Parsing the fenced text is never necessary.
Four fields decide whether an answer is usable, and all four are honest about what they
do NOT know: `blocked`+`challenge` (content withheld, not a thin page), `failure`
{layer,code} (dns/tls — never reached HTTP), `authState` (always `unknown` until the
workflow proves identity; `cookiesForOrigin` is evidence, not authentication), and
`truncated` (escalate with browser_text, never record a cut value).
For long text, call `browser_text` with `maxChars: 3000` (maximum 12000), then pass
its returned `continuation` object directly to the next call. Text is retained from
the first read (`capturedAt`); continuations keep the same observation and session,
and fail after expiry. CLI: `text <id> --max-chars 3000`, then the re