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 skills add dwarvesf/dwarves-kit --skill web-driftgit clone --depth 1 https://github.com/dwarvesf/dwarves-kitWrote 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/dwarvesf/dwarves-kit/web-drift)<a href="https://agentmods.dev/skills/dwarvesf/dwarves-kit/web-drift"><img src="https://agentmods.dev/badge/skills/dwarvesf/dwarves-kit/web-drift/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/dwarvesf/dwarves-kit/web-drift"><img src="https://agentmods.dev/badge/skills/dwarvesf/dwarves-kit/web-drift.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
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.1 | $0.00101 | $0.03537 |
| Opus 5.5 | $0.00040 | $0.01415 |
| Sonnet 5.5 | $0.00020 | $0.00707 |
| Haiku 4.5 | $0.00010 | $0.00354 |
Grade A, and why
web-drift 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 8d 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 — 174 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Web drift
Scope and triggers
Also fires on "audit our websites", "are our sites still readable by an agent". Enumerates every site the consumer declared in WEB_DRIFT_SITES, probes each over read-only HTTP with lib/webcheck (groundwork, page, and API tiers), verdicts each check with evidence, and files the fixes as board rows in the repo that owns the site's source, plus a report. Page-speed/Lighthouse/Core Web Vitals is a different tool and a different question. No answer-engine-citation probe ships here. This repo holds no website source: the loop files rows, it never edits a site.
Overview
Audit every declared public website against the agent-readiness contract and file the fixes.
This is the live-site instance of docs/patterns/audit-loop.md: enumerate, verdict with
evidence, apply, gate through the operator.
kit:ci-drift already reaches the network, so reaching outward is not the novelty. What is new
is the surface: no in-kit loop audits a public HTTP surface, and the fix lands in whichever repo
builds that site, never here.
The contract this measures: an agent that runs no JavaScript should be able to find the site, fetch a page, read its content, tell a dead URL from a live one, and call its API if it has one. A deploy can break any of those silently, and nothing in a repo notices.
The four slots (per the audit-loop pattern)
| Slot | This instance |
|---|---|
| Item set | one (site, check) pair. The site axis is WEB_DRIFT_SITES, enumerated by python3 lib/webcheck/webcheck.py sites (comma or whitespace separated, never colon: every URL carries one). The check axis is fixed by the contract below. A site is not the item: a site with one hard fail and eight warnings has no single verdict, and a tier that does not apply has to drop out of the denominator, which only works per check. WEB_DRIFT_SITES unset means no sites are declared: report that and stop. The kit ships no hostname. |
| Contract | each site stays discoverable, fetchable, and understandable without JavaScript: the groundwork tier (robots, sitemap, llms.txt, unknown-path status, markdown negotiation with Vary), the page tier (title, meta description, one h1, 500+ visible characters, canonical, OG, JSON-LD, internal links), and the API tier where the site exposes an API |
| Evidence class | live HTTP responses, quoted from webcheck audit output. A hard fail and a warning are each quoted evidence. No response at all is not evidence. |
| Apply mechanics | no code edit lands in this repo. Each FIX becomes one row appended to the _meta/BACKLOG.md of the CONSUMER repo that owns the site's source, in the shared kanban format (| ID | Item | Notes & source | Status |, status queued). The row is written with the board's row verb, BACKLOG_FILE=<consumer>/_meta/BACKLOG.md bash lib/board/backlog.sh add --notes '<notes & source>' -- '<item>' (in the kit install root; it mints the id under the board lock and uses the consumer table's own column count), never a hand edit. The item and notes quote fetched page text, so pass each in single quotes with an inner ' written '\'', and keep the --. bin/board board --backlog-file <path> renders it back and bin/board set <ID> <state> moves it afterwards. Plus a report listing every verdict. UNSURE items go in the report for the operator, never into a row. A consumer with no _meta/BACKLOG.md has nowhere to file: the refusal guard (Step 1) stops the whole run against that consumer rather than falling back to a local ledger this skill would then own. |
| Closing evidence | a row closes only when a later webcheck audit <url> shows that (site, check) pair green. The next run re-audits every site carrying an open row FIRST and reports each open row as still-failing or now-green. Without that the loop cannot fail, because a filed row proposes a fix and nothing re-tests it. |
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.
- 8d ago Changed 3648b94be739
- 1mo ago Changed · +4 lines · -129 tokens per session 8d8380a23930
- 1mo ago Changed da27710e9311
- 1mo ago Changed · +6 lines a73f9b3295e5
- 1mo ago Changed 67fb3df14465
- 1mo ago First seen · 164 lines · 230 tokens per session scan A 0b2f2f9581b4
web-drift is a skill published in the GitHub repository dwarvesf/dwarves-kit (12 stars, last pushed today), licensed MIT. It adds 101 tokens to every session and 3,537 once invoked, about $0.0004 per session on Opus 5.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-09-04.
Other skills, from other repositories
project-specification
Transforms project briefs into testable specifications with user stories and acceptance criteria. Use after brainstorming, before planning.
multi-agent
A process for coordinating multiple coding agents by splitting work among scouts, workers, reviewers, and repair agents. Each agent has a defined role and task.
gsd-new-project
Initialize a new project with deep context gathering and PROJECT.md.
gsd-resume-work
Resume work from previous session with full context restoration.
spec-kitty-mission-system
Understand how Spec Kitty missions work: the 4 built-in mission types, how they define workflows via step contracts and action indices, how missions and work packages relate, how templates are resolved through the 6-tier chain, and how doctrine artifacts (procedures, tactics, directives) compose mission behavior.…
spec-kitty-runtime-review
Review runtime-owned outputs using the Spec Kitty review workflow surface, then direct approval or rejection with structured feedback. Triggers: "review this work package", "check runtime output", "approve this step", "review WP", "is this WP ready to approve", "check this implementation". Does NOT handle: setup-only…