Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/crawlio-app/crawlio-browser/extractnpx skills add Crawlio-app/crawlio-browser --skill extractgit clone --depth 1 https://github.com/Crawlio-app/crawlio-browserWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/crawlio-app/crawlio-browser/extract)<a href="https://agentmods.dev/skills/crawlio-app/crawlio-browser/extract"><img src="https://agentmods.dev/badge/skills/crawlio-app/crawlio-browser/extract.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00027 | $0.00952 |
| Opus 5 | $0.00014 | $0.00476 |
| Sonnet 5 | $0.00005 | $0.00190 |
| Haiku 4.5 | $0.00003 | $0.00095 |
Grade A, and why
extract scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 108 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Extract
Extract structured data from a page. Detect tables, pull JSON-LD, extract repeated DOM patterns. Produces findings on completeness, row counts, and schema consistency.
When to Use
- Extract tabular data from a page (pricing, specs, listings)
- Pull JSON-LD or structured data from
<script>tags - Detect repeated DOM patterns (cards, lists, grids)
- Assess data quality (missing columns, truncation, schema gaps)
- Extract data from async-loading pages
- Read visually-rendered data invisible to DOM (canvas, images, anti-scrape)
Protocol
Acquire -> Normalize -> Analyze with Evidence Mode.
1. Connect
connect_tab({ url: "https://target.com/data-page", background: true })
2. Acquire + Normalize
await smart.waitForNetworkIdle({ timeout: 10000 }); // wait for async content
const data = await smart.extractData(); // detectTables + extractTable + JSON-LD
const page = await smart.extractPage(); // meta and structured data context
// data.tables[] — selector, columns[], rows[], totalRows, truncated
// data.structuredData — JSON-LD objects from <script> tags
// page.gaps[] — what failed during extractPage
For deeper control, use individual methods:
const candidates = await smart.detectTables(); // scored table-like structures
const table = await smart.extractTable("table.pricing"); // specific table extraction
For visually-rendered data (canvas, images, anti-scrape sites):
const ocr = await ocrScreenshot({ fullPage: true });
3. Analyze — produce findings
for (const table of data.tables || []) {
smart.finding({
claim: `Found ${table.totalRows} rows in table "${table.selector}"`,
evidence: [
`columns: ${table.columns.map(c => c.name).join(', ')}`,
`truncated: ${table.truncated}`
],
sourceUrl: page.capture.url,
confidence: table.truncated ? "medium" : "high",
method: "extractData", dimension: "data-structure"
});
// Data quality — flag sparse columns
const empty = table.columns.filter(c => c.fillRate < 0.5);
if (empty.length) {
smart.finding({
claim: `${empty.length} columns in "${table.selector}" are >50% empty`,
evidence: empty.map(c => `${c.name}: ${Math.round((1 - c.fillRate) * 100)}% empty`),
sourceUrl: page.capture.url, confidence: "medium",
method: "extractData", dimension: "data-quality"
});
}
}
if (data.structuredData?.length) {
smart.finding({
claim: `${data.structuredData.length} JSON-LD blocks found`,
evidence: data.structuredData.map(s => `@type: ${s['@type'] || 'unknown'}`),
sourceUrl: page.capture.url, confidence: "high",
method: "extractData", dimension: "data-structure"
});
}
return {
findings: smart.findings(),
tables: data.tables?.length || 0,
structuredData: data.structuredData?.length || 0
};
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 108 lines · 27 tokens per session scan A 1a20357b6db4
extract is a skill published in the GitHub repository Crawlio-app/crawlio-browser (6 stars, last pushed 25d ago), licensed Apache-2.0. It adds 27 tokens to every session and 952 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
nekoro-browser
浏览器自动化——打开网页、搜索、点击、截图、执行 JS、填表、上传文件、处理对话框。通过 Chrome 扩展的 chrome.debugger API 操控用户日常浏览器,保留登录态,不开调试端口。触发词:"浏览器"、"打开网页"、"搜索"、"截图"、"点击"、"填表"、"上传文件"、"自动化操作"。.
owb
Open Web Bridge (OWB) — drive the user's own real browser with the owb command. Read pages behind their existing logins, gather and cross-check information, fill forms, walk multi-step flows, debug their site, audit responsive/accessibility behavior, and capture or reverse-engineer network traffic. Use this whenever…
browser
Use this skill when the user says browser, /browser, test in Chrome, inspect a webpage, verify a localhost app, capture screenshots, check console/network errors, run browser QA, or automate browser flows with the Mochi browser MCP.
control-chrome-bridge
Drive the user's real Chrome browser — their own profile, tabs, cookies and logged-in sessions — through the chrome-bridge MCP server. Use for tasks that need existing browser state: reading a page behind a login, filling a form on a site the user is signed into, testing a local app in a real browser, or inspecting…
tabrix_browser
Route AI assistant browser tasks to Tabrix first. Use when the user needs to control their real Chrome session, reuse existing login state or tabs, operate a remote browser over Streamable HTTP, or troubleshoot Tabrix browser automation. Prefer Tabrix over shell commands, synthetic browser sandboxes, or alternative…
aipex-browser
AI-powered browser automation using the AIPex Chrome Extension via MCP bridge. Use this skill when the agent needs to control a Chrome browser — navigating pages, clicking elements, filling forms, capturing screenshots, managing tabs, or downloading content — by connecting to the AIPex MCP bridge.