Use when asked for a full revision of an existing marketing or practitioner website — positioning, content, proof, bilingual parity, technical quality and CI — with every change validated on the live site. Orchestrates the whole run from customer evidence and jobs to be done (requests, won and lost proposals, feedback) and a positioning decision through a baseline persona walkthrough, work packages in customer language, a fact-and-quote verification gate, a live feedback loop with the owner, a follow-up persona walkthrough, a technical review and a final all-URL check with retrospective. Trigger on "full revision of the website", "website overhaul", "site refresh", "reposition and rewrite the site", "content and technical review, everything validated live", or when the owner reviews on the live site and wants feedback batched into pushes. NOT for a code-only review-and-fix (use a code review-and-remediation skill), NOT for a gap inventory without changes (use an NFR/gap-audit skill), NOT for a single page's copy (use a copy-editing skill).
Take an existing website from "it doesn't bring in the right requests" to "repositioned, rewritten in the customer's language, every claim sourced, technically sound, and every change confirmed on production". The positioning decision and the proof carry the value; the text follows.
This skill orchestrates. It calls other skills for the specialist parts and adds what they don't cover: the owner loop, the fact gate, the persona before/after, and the release rhythm.
A package counts as done only when it is committed, the CI pipeline for that exact commit has finished green (checked, not assumed), and the change is confirmed on the live site with scripts/live_verify.sh and the URLs sent to the owner. A red pipeline is fixed before the next package; never make it green by skipping a check, lowering a threshold or removing a gate without the owner's approval. The run as a whole is done only when the phase 9 final check reports zero problems on production. A step that can't be completed (no deploy access, CI down) is reported as not verified, with the reason — never as done.
final_check.py on the current
site). Then send the owner one report with all open questions
bundled. One question per message only in the positioning interview
(phase 1b), where each answer changes the next question.final_check.py --require-snippet <tag> when the tag is in the HTML;
when the host injects it only for real browsers, look for sitemap
pages with zero views in the dashboard instead.final_check.py checks that repository files outside the
build output are not served; pass individual paths with
--private-path, or --private-from <repo dir> --build-dir <dir> to
cover every top-level repository entry automatically.docs/decisions.md, or the plan).
Every positioning or naming choice goes there before it goes on the site.Before any positioning choice, understand what buyers are trying to get done, in their own words. Read what you can reach yourself first, then ask the owner for the rest in one bundled request:
Anonymise people; ask per organisation whether it may be named. Record the analysis with references/customer-evidence-template.md: per source the trigger, the job, the desired outcome, objections and anxieties, the literal words used, and the buying process. Summarise the recurring jobs and objections. They drive the positioning (phase 1b), the personas and their questions (phase 2) and the FAQ headings (phase 4). If the owner has no requests yet, say so and mark every persona assumption as unverified.
Run references/persona-walkthrough-template.md on the live site before rewriting: fixed personas, fixed questions, a score per question with the URL and the literal fragment that answers it. Save it; phase 7 repeats it with the same personas and questions.
Write the plan from references/revision-plan-template.md: goal, acceptance criteria, tiered work packages (A mechanical, B text within a fixed design, C owner judgement), routing per tier (who or which model does which tier), and a retrospective section that is filled during the run, not at the end.
Every quote, number, date, source tag and anecdote must be verified literally against the primary source before it ships. Summaries, indexes and earlier agent output are not sources. Unverifiable means removed, and the owner is told. Procedure and the recurring failure patterns: references/fact-verification.md.
Also in this gate: image rights (own photos, publisher covers, recognisable people's consent), sensitive metadata (GPS, serial numbers, author, software) stripped from every image while keeping its colour profile, names policy respected in file names and alt text, price and competitor comparisons with their source and date, and content that changes by itself later (date-gated flags, scheduled publication).
Repeat phase 2 with the same personas and questions on the live site. Report before/after per persona, new gaps, and contradictions between pages (numbers, dates, roles). Fix or explicitly accept each one.
final_check.py covers FAQ questions, the rest is a manual
check on one page per template.All take their site-specific values as arguments; run with --help or
read the header comment.
scripts/final_check.py --base <origin> [--sitemap <path>] [--extra-url <path>] [--forbid-name <text>] [--forbid-term <word>] [--term-skip-prefix <path>] [--term-allow <phrase>] [--placeholder <text>] [--require-snippet <text>] [--private-path <path> ...] [--private-from <repo dir> --build-dir <dir>]
— prints problems per URL, exit 1 if any; checks that repository files
outside the build output are not served. --base may be a local
preview server of the build. --term-allow exempts an exact phrase
(e.g. a "what this is not" line), --placeholder adds the project's own
dummy values to the launch-blocker check; both come from the site
config.scripts/parity_check.py --dist <build dir> --base <origin> --from-lang <xx> --to-lang <yy> [--pairs <file>] — prints language
pairs whose structure or word ratio differs, exit 1 if any. Pages are
paired via hreflang; --pairs (<from path> <to path> per line) covers
sites with different slugs per language or no hreflang links.scripts/live_verify.sh <origin> <patterns file> — lines
present|absent <path> <text>, prints failures and totals.scripts/exif_scan.sh <image dir> — self-tests the filter, then lists
files with sensitive metadata (GPS, serials, author, software), exit 1
if any; the header has the strip command that keeps the colour
profile.Real failures from earlier runs, with the fix: references/pitfalls.md.
vannifr/agent-skills
0e43fd4
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.