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/spyrae/kronos-agent-os/structured-extractionnpx skills add spyrae/kronos-agent-os --skill structured-extractiongit clone --depth 1 https://github.com/spyrae/kronos-agent-osWrote 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/spyrae/kronos-agent-os/structured-extraction)<a href="https://agentmods.dev/skills/spyrae/kronos-agent-os/structured-extraction"><img src="https://agentmods.dev/badge/skills/spyrae/kronos-agent-os/structured-extraction.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.00026 | $0.00577 |
| Opus 5 | $0.00013 | $0.00289 |
| Sonnet 5 | $0.00005 | $0.00115 |
| Haiku 4.5 | $0.00003 | $0.00058 |
Grade A, and why
structured-extraction 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 5d 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 — 62 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Structured Extraction
Comparing anything means first making the sources agree on shape. Two listing sites will name the same thing three ways and omit a different field each. The whole job is doing that without quietly filling the gaps.
One schema, decided first
Write the fields down before fetching. For an offer of any kind, that is usually:
| Field | Notes |
|---|---|
name |
what the owner would call it |
url |
the page this row came from — always |
price |
as shown |
currency |
explicit on every row, never inferred from the site |
| one field per additional cost | deposit, shipping, utilities, duty |
source |
which site |
Add whatever the specific question needs, and no more. A schema with fields nobody will compare is a schema that invites guessing.
The rule that matters
A field the page did not state is missing, not zero, and not "probably the
usual". A listing without a stated deposit is not a listing with no deposit.
Leave it out, or mark it absent, and let the comparison refuse to rank that row —
compare_offers does exactly that, and the refusal is information.
Same for units and currency. 8.750.000 is a number written the way that site
writes numbers; Rp 8.750.000 is a price. Carry the currency per row, because
the moment two currencies meet in one total the total is wrong and looks right.
Method
fetch_pageon the item's own page — not the search listing.extract_structuredwith the field list. It runs a small model against the text and returns fields, which is cheaper and steadier than reading prose.- Check the rows. If one field is empty on every row from one site, the pattern is wrong, not the site.
- For more than a handful of rows, or any arithmetic beyond adding, use
run_code— a program that sums is checkable, a paragraph that sums is not.
Reporting
State per row where it came from and what was missing. A table that looks complete because the gaps were filled is worse than one with holes, because nobody can see which numbers to distrust.
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.
- 5d ago First seen · 62 lines · 26 tokens per session scan A 95b10aaead0f
structured-extraction is a skill published in the GitHub repository spyrae/kronos-agent-os (49 stars, last pushed 2d ago), licensed MIT. It adds 26 tokens to every session and 577 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-30.
Other skills, from other repositories
gh-issues
Fetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5]…
canvas
Display HTML content on connected OpenClaw nodes (Mac app, iOS, Android).
gog
Google Workspace CLI for Gmail, Calendar, Drive, Contacts, Sheets, and Docs.
node-connect
Diagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps. Use when QR/setup code/manual connect fails, local Wi-Fi works but VPS/tailnet does not, or errors mention pairing required, unauthorized, bootstrap token invalid or expired, gateway.bind, gateway.remote.url, Tailscale…
peekaboo
Capture and automate macOS UI with the Peekaboo CLI.
taskflow
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting…