find-examples — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited find-examples (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Pull the strongest real pages and sections in a market and hand back what to steal.
This is the Page altitude of Web Anatomy: the market view. What the best pages in an industry do (structure, positioning, proof, copy), and how the user's own page compares when they share it.
audit-page report exists for that target, use its findings to make the comparison specific; if not, keep it lighter and more general. This is the merged home of the old benchmark-compare.Both modes stay lighter than research-best-practices, which goes deep on one section with a tiered ladder. This skill is the market scan; that one is the section deep-dive. For the grounded rework or the build, hand off to write-page.
Building a new page? This is where the user picks the exemplar. Surface the top homepages for the industry, let them choose ONE whose layout they want to follow, and hand off: its section order seeds the structure for write-page build mode, and the same exemplar drives the design in build-page. One pick, used twice (structure, then look). The benchmark has no stored page structure, so the exemplar's own section order is the source.
Always create a lightweight visual artifact:
.webanatomy/find-examples/{topic}-{YYYY-MM-DD}/report.md.webanatomy/find-examples/{topic}-{YYYY-MM-DD}/report.html.webanatomy/find-examples/{topic}-{YYYY-MM-DD}/references/The chat response is only the summary and file pointer. Do not dump the whole swipe file into chat.
If the environment cannot write files, explain the blocker and provide a compact inline version.
When file access is available, do not hand-write the final HTML. Write structured report data first:
.webanatomy/find-examples/{topic}-{YYYY-MM-DD}/report-data.jsonThen run the shared renderer from this skill pack:
node <skill-dir>/scripts/render-report.mjs --input=.webanatomy/find-examples/{topic}-{YYYY-MM-DD}/report-data.jsonResolve <skill-dir> relative to this SKILL.md. The renderer validates the report data, downloads every screenshotUrl into references/, writes report.md, writes report.html, and renders "screenshot unavailable" when no screenshot exists.
Use this report-data shape (v2):
title: plain and descriptive ({Topic} - benchmark examples), no editorial framingeyebrow, subtitle, targetsummary: string[] of max 3 bullets (each max 140 chars) on what the examples show. The first bullet renders as the "TL;DR:" lead sentence of the blue callout under the title.recommendations used as patterns (set recommendationsHeading: "Patterns"): { "title": "...", "why": "...", "how": ["..."], "refIds": ["..."] }[] - one entry per plain-English pattern. title is the pattern name; why (max 220 chars) is what makes it work; how is 1-5 adaptation bullets, each max 160 chars; refIds lists the example references showing it (their screenshots render inline; 2-3 render as options A/B/C). Skip priority/kind/prompt; this is a swipe file, not an audit.references: { "id": "...", "title": "...", "company": "...", "section": "...", "sourceUrl": "...", "screenshotUrl": "...", "caption": "...", "insight": "..." }[] - id is a stable kebab-case slug; insight is the one-line what-to-notice, max 200 chars. References not claimed by a pattern render in an "All references" gallery at the bottom; for a flat ranked list, leave recommendations empty and let all references render in the gallery.gapAnalysis (compare mode only): { "dimension": "...", "current": "...", "strongPattern": "...", "gap": "HIGH|MEDIUM|LOW" }[], max 6 rows, current and strongPattern max 90 chars each. The light read of the user's page against the benchmark winners. Omit in discover mode.currentSnapshot (compare mode only): { "label": "...", "text": "..." }[], max 6 items, the user's current page facts; rendered collapsed at the bottom. Omit in discover mode.working (compare mode only): string[] of 2-4 bullets, what the user's page already does well. Omit in discover mode.footerungrounded: true only on explicit no-MCP runsThe renderer enforces the budgets and fails loudly with the exact overruns. When it fails, rewrite the content shorter; never pad, never bypass the renderer with hand-written HTML.
Only fall back to hand-written HTML if the renderer cannot be run.
Infer these from the request and .agents/webanatomy-context.md when available:
enIf the request is for homepage or landing page examples, set scope to whole page and use search_pages first. If the section type is unclear for a section-level request, map aliases:
Ask one clarifying question only when the same request could map to different section types and the difference matters.
Trigger compare mode when the user gives a URL, screenshot, pasted copy, or local page and wants to know how it stacks up ("compare my page", "how far are we from the best", "gap analysis"). Discover mode runs first (find the market winners); then layer the comparison on top.
references/current.png when browser tools are available; if only text is fetched, note the screenshot is unavailable. Extract headline, CTA, proof, and visible structure into currentSnapshot. Do not compare against an imagined page..webanatomy/audit-page/{target}-*/audit.json matching the page. If found, use its recommendations and currentSnapshot to make the gap read specific and aligned with the diagnosis, rather than re-judging from scratch. If none exists, keep the comparison lighter and more general.HIGH, MEDIUM, or LOW and put the rows in gapAnalysis; capture 2-4 working bullets. Keep it a light read, not a full rework. For the grounded rework or build, hand to write-page.Always resolve an industry before searching. Do not leave industry blank.
Use this order:
.agents/webanatomy-context.md industryReal Estate, Fintech, Healthcare, AI, Developer Tools, Ecommerce, Marketplace, etc.SaaS for software/product examples, otherwise B2BDo not infer industry from the domain name alone. If a URL is provided, fetch or browse the page first.
If the page sells services as an agency, studio, consultancy, collective, broker, or done-for-you provider, set primary industry to Agency even when it serves a vertical. Use the vertical as a secondary benchmark angle.
For French real-estate or property-investment product pages, default to Real Estate. For French agencies serving real estate, default to Agency first and Real Estate second. If the industry is inferred, mention it in one sentence.
Also resolve locale before search:
frenConfirm the webanatomy MCP tools are available before searching. If connected, use live benchmark data. If not, tell the user up front ("Running without live benchmark data; using static guidance. Connect MCP for grounded results: https://docs.webanatomy.ai/quickstart"), then continue with a clearly labeled static fallback. Never surface this as an error or block the run.
Use the webanatomy MCP tools when available. Use search_pages for whole-homepage inspiration and search_sections for specific section patterns.
For whole-page or homepage examples, start with:
{
"industry": "<resolved primary industry>",
"locale": "<resolved locale>",
"min_score": 60,
"limit": 8
}For section-level examples, start with:
{
"section_type": "<section_type>",
"industry": "<resolved primary industry>",
"locale": "<resolved locale>",
"min_score": 80,
"limit": 8
}Treat min_score as a preferred quality floor, not a hard promise. The MCP may relax internally to avoid thin result sets. Keep the highest-priority examples first and choose final examples by relevance, visible evidence, and business-model fit.
If a secondary industry was inferred from page text, run a second search with the secondary industry and keep whichever examples best fit the business model.
If the result set is thin:
The tool may expose fields such as score, criteria_hits, marker coordinates, or raw scoring summaries. Use those internally to choose examples, but never expose them.
For page results, use analysis_bullets, strengths, and stealable_moves as plain-language evidence. For section results, use strengths and pattern_notes. There are no how/why/evidence sub-fields to read.
Pick 5-10 examples. Prefer:
Do not include a screenshot or company just because it is famous. The example has to illustrate the pattern.
For each selected benchmark result with screenshot_url:
references/.{company-slug}-{section-type}.png for sections or {company-slug}-homepage.png for page examples.report.md with a relative path.report.html.If download fails, keep the example only if the text evidence is strong. Label it as "screenshot unavailable" and include the source URL when present.
Do not expose marker JSON. If markers are available, translate them into visible composition notes.
Fill the v2 report-data shape and let the renderer produce both files. The report reads in this order:
summary) - the blue callout, 3 bullets max. In compare mode, the first bullet is the verdict (how the page sits vs the market).recommendations with recommendationsHeading: "Patterns") - one numbered card per pattern, its example screenshots inline, adaptation steps as how bullets.gapAnalysis, compare mode only) - the user's page vs the strong pattern, labeled HIGH/MEDIUM/LOW.working, compare mode only) - 2-4 things to preserve.currentSnapshot, compare mode only) - collapsed at the bottom.When the user asks for a swipe file, group by pattern (one card per pattern, examples in refIds). When they ask for a flat ranked list, leave recommendations empty and let all references render in the gallery in rank order. In compare mode, always include the gap layer.
After saving, respond in chat with:
write-page to turn the top gap into the grounded rework?"risk_reducer becomes "risk is lowered before the click."webanatomy-setup/references/house-style.md: no em-dashes, "The X…" not "Your X…", and never expose framework internals. Match the Locale from .agents/webanatomy-context.md when present.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.