research-best-practices — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited research-best-practices (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
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.
Produce a benchmark-backed research artifact for ONE section, not just chat. The goal is to answer: for this section, what does strong look like, and what are the levels the user can climb to, each grounded in real benchmark sections.
This is the Section altitude of Web Anatomy: take a section the user already knows they want to work on and return a tiered improvement ladder. The user picks a tier; write-page executes it.
Scope guard. This skill is for one section. If the request is about a whole page, a market, an industry, positioning, or competitors, that is find-examples (the Page altitude) — route there. If the user named a page but no section, ask which section to start with before researching. Confirm the single section first.
Always write:
.webanatomy/research-best-practices/{topic}-{YYYY-MM-DD}/report.md.webanatomy/research-best-practices/{topic}-{YYYY-MM-DD}/report.html.webanatomy/research-best-practices/{topic}-{YYYY-MM-DD}/references/The HTML report is the primary visual output. Chat is only a short summary and pointer to the saved files.
If the environment cannot write files, explain the blocker and provide the report inline.
When file access is available, do not hand-write the final HTML. Write structured report data first:
.webanatomy/research-best-practices/{topic}-{YYYY-MM-DD}/report-data.jsonThen run the shared renderer from this skill pack:
node <skill-dir>/scripts/render-report.mjs --input=.webanatomy/research-best-practices/{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} - what strong pages do), no editorial framingeyebrow, subtitle, targetsummary: string[] of max 3 bullets (each max 140 chars): the section, where strong sits, and the tier you would start at. The first bullet renders as the "TL;DR:" lead sentence of the blue callout under the title.recommendationsHeading: "Improvement ladder".recommendations: { "title": "...", "why": "...", "how": ["..."], "refIds": ["..."], "priority": "HIGH|MEDIUM|LOW" }[] - the ladder: exactly three tier cards, ordered Tier 1 -> 2 -> 3, each building on the one below. Title each Tier N - {label}: {one-line gist} with labels Foundational, Competitive, Best-in-class. why (max 220 chars) says what this tier unlocks over the tier below, tied to benchmark evidence ("3 of 5 references do X"). how is 1-5 imperative moves at that tier, each max 160 chars. refIds lists the benchmark sections that show the tier (screenshots render inline; 2-3 render as options A/B/C). priority is optional - use it for the conversion impact of reaching the tier, or omit. Optionally add a fourth card titled Avoid whose how lists the anti-patterns that keep this section stuck.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. Label web-captured examples [Web] in the caption. References not claimed by any finding render in an "All references" gallery at the bottom.gapAnalysis (max 6 rows, cells max 90 chars), currentSnapshot (max 6 items, collapsed at the bottom), working, footerungrounded: true - only for explicit no-MCP runs; lifts the floor of at least 3 findings carrying refIdsThe renderer enforces the budgets and the grounding floor, and fails loudly with the exact overruns. When it fails, rewrite the content shorter; never pad, never bypass the renderer with hand-written HTML. Put anti-patterns in recommendations too (a finding whose how says what to avoid), and source notes in footer.
Only fall back to hand-written HTML if the renderer cannot be run.
.agents/webanatomy-context.md when present.section_type (hero, pricing, testimonial, cta, faq, features, trust, etc.), the industry, and the target buyer. If the request is page/market/industry/competitor, hand to find-examples.SaaS/B2B and en fallbacks last.search_sections for that one section type. Run 3-5 angles: exact section in the industry, adjacent industry, broad market. Pull enough strong examples to span the range from table-stakes to standout.[Web], not benchmark examples.Confirm 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.
This skill works at the section altitude, so search_sections is the primary call. Run it for the one section type, across a few angles, with a high quality floor so the ladder spans real range:
{
"section_type": "<section_type>",
"industry": "<resolved primary industry>",
"locale": "<resolved locale>",
"min_score": 80,
"limit": 8
}Use search_pages only for light context (how this section sits inside a strong page); never make whole-page or market patterns the deliverable - that is find-examples. Use section result fields strengths and pattern_notes as section evidence. Keep scores, thresholds, raw summary IDs, and marker data internal.
For each selected benchmark result with screenshot_url:
references/.{company-slug}-{section-type}.png for section examples or {company-slug}-homepage.png for page examples.report.md with a relative path.report.html as a visual card with a caption.For live web examples captured through browsing, save screenshots into the same references/ folder and label them [Web]. Label benchmark screenshots [Benchmark].
If a screenshot cannot be downloaded, keep the reference only if the visible/text evidence is strong. Say "screenshot unavailable" and include the source URL when present.
Never expose marker JSON. If marker data is present, translate it into plain-language composition notes.
Do not ask for industry unless the report would be misleading without it. Infer it whenever possible.
Use this order:
.agents/webanatomy-context.md industryReal Estate, Fintech, Healthcare, AI, Developer Tools, Ecommerce, Marketplace, etc.SaaS for software/product research, 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.
Also resolve locale before search:
frenUse fewer, better references. A reference belongs in the report only if it directly supports the pattern.
Skip examples when:
Fill the v2 report-data shape and let the renderer produce both files. The report reads in this order:
summary) - the section, where strong sits, and the tier to start at, 3 bullets max.recommendations with recommendationsHeading: "Improvement ladder") - the three tier cards in order (Tier 1 -> 2 -> 3), each shown through its benchmark section screenshots inline, plus the optional Avoid card.[Web]/benchmark labels in their captions.footer.Each tier must build on the one below: Tier 2 assumes Tier 1 is done, Tier 3 assumes Tier 2. Do not repeat a Tier 1 move inside Tier 2. Write to be skimmed: every why is 2 lines max tied to evidence ("4 of 6 references do X"), every how is imperative bullets, one idea per sentence. No prevalence adjectives without a count.
After saving, respond in chat with:
write-page to apply a tier to the section?"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.