원클릭으로
scrape
Pull structured data from a web page with the browse shim — navigate, extract, return JSON. Read-only.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Pull structured data from a web page with the browse shim — navigate, extract, return JSON. Read-only.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Fast headless browser for QA testing and site dogfooding. Navigate any URL, interact with elements, verify page state, diff before/after actions, take annotated screenshots, check responsive layouts, test forms and uploads, handle dialogs, and assert element states. ~100ms per command.
Chief Security Officer mode. Infrastructure-first security audit: secrets archaeology, dependency supply chain, CI/CD pipeline security, LLM/AI security, skill supply chain scanning, plus OWASP Top 10, STRIDE threat modeling, and active verification. Two modes: daily (zero-noise, 8/10 confidence gate) and comprehensive (monthly deep scan, 2/10 bar). Trend tracking across audit runs.
CEO/founder-mode plan review. Rethink the problem, find the 10-star product, challenge premises, expand scope when it creates a better product. Four modes: SCOPE EXPANSION (dream big), SELECTIVE EXPANSION (hold scope + cherry-pick expansions), HOLD SCOPE (maximum rigor), SCOPE REDUCTION (strip to essentials).
Update the installed vibestack pack to the latest release — detect the install (global git checkout or a project-local vendored copy), run the upgrade, run version migrations, and show what changed.
Safety guardrails for destructive commands. Warns before rm -rf, DROP TABLE, force-push, git reset --hard, kubectl delete, and similar destructive operations. User can override each warning.
Generate missing documentation from scratch for a feature, module, or entire project. Uses the Diataxis framework (tutorial / how-to / reference / explanation) to produce complete, structured documentation. Can be invoked standalone or called by /document-release when it finds coverage gaps.
| name | scrape |
| description | Pull structured data from a web page with the browse shim — navigate, extract, return JSON. Read-only. |
| allowed-tools | ["Bash","Read","AskUserQuestion"] |
| triggers | ["scrape this page","get data from","pull from","extract from","what is on this page"] |
Use to extract data from a page — "scrape", "get data from", "pull", "extract from", "what's on this page". Read-only: for form fills, clicks, or submissions use the browse daemon's interaction verbs, not this skill.
{{include lib/snippets/browse-setup.md}}
If BROWSE_NOT_AVAILABLE: fall back to curl + an HTML parse for static pages
(note that JS-rendered content and screenshots are unavailable), or stop and tell
the user the browse shim is needed.
Before prototyping a new scrape, check whether a codified skill already covers this target:
ls ~/.claude/skills/ 2>/dev/null | grep -iE '<site-or-domain-keyword>' || echo "NO_MATCH"
If a matching skill exists, suggest running it (/that-skill) instead of
re-deriving the flow. Only prototype when there's no match.
Confirm the URL and exactly which fields the user wants (single record, or a list with per-item fields). If it's ambiguous, ask once with AskUserQuestion.
"$B" goto <url>
"$B" text # full visible text — orient yourself
For structured values, pull them by selector with js (the stateless shim
evaluates against a fresh load) — e.g. a list of prices:
"$B" js "Array.from(document.querySelectorAll('.price')).map(e => e.textContent.trim())"
If the page is interactive (needs a click to reveal data), start the daemon and
use a chain or refs: "$B" daemon & then "$B" chain "goto <url>" "click <sel>" "text".
Assemble a JSON object (single record) or array (list) of the requested fields, mapping each item's selectors. Verify the count matches what's visible. Quote selectors exactly — never guess a value that isn't on the page.
Output discipline: emit ONE pipeable JSON document and nothing else — no
surrounding prose, no markdown fences, so the output can be piped into jq or a
file. Name any requested field that couldn't be found (as null with a short
note in a _missing array) rather than fabricating it. If JS-heavy content is
missing, retry once via the daemon with a short wait
("$B" chain "goto <url>" "wait 1500" "text").
Scraping fails in known ways (selector drift, JS-gated content, anti-bot walls). Handle them, don't paper over them:
_missing list — never present a partial
scrape as complete./connect-chrome
(the page needs a real logged-in session), B) adjust the target/fields,
C) give up — the site is protected or JS-gated beyond the shim.If this scrape worked and the user is likely to run it again, offer to /skillify
it into a reusable /<name> so the flow becomes one command next time.
/connect-chrome reuses their real session.{{include lib/snippets/capture-learnings.md}}