THE SKILL AUDIT CARD · the library audit · scored, scanned, tested, proven, watched
WAKES WHEN a folder of skills is about to be rolled out, sold or installed, or Claude ignores or misuses the skills a team has
THE METHOD
check WORK PATH … --company NAME — intake (folders, folders of folders, .skill and .zip files; a lines file for skills whose packets are not on hand), then scale, rules and safety.
prompts WORK --template, filled as prompts.json: five FIRE and three NEAR per skill (references/PROMPTS-GUIDE.md); prompts WORK until no FAIL.
shelf WORK --fixtures FILES and probe WORK: one Claude project holding every skill's line beside the built-in skills, with the files the prompts mention; the probe's view kept on the record.
run WORK --models haiku,sonnet,opus --runs 2: each run fresh, unable to write files, run commands or reach the web; the first skill reached for and the exact model kept for every run; a failed call kept as an error with its reason; after four limit errors in a row it stops itself; resumable. mark WORK checks a results file written before Edition 2 for silent failures.
rewrite WORK SKILL "LINE" --set v2 --why …, then shelf … --set v2 and run … --set v2 --only … on the prompts the rewrite touches (references/WRITING-THE-LINE.md).
report WORK: AUDIT-REPORT.html, AUDIT-REPORT.md and audit.json.
Later: watch WORK --label DATE, then moved WORK --base results-current.jsonl --new watch/results-current-DATE.jsonl: WHAT-MOVED.html, WHAT-MOVED.md and moved.json.
REFUSES
Typing a rate that was not run
Dropping a model or a run because it lowers a score
Calling a rewrite better before it is run
Printing a secret
Installing a skill that carries a BLOCK
IT MAKES intake; check; scale; rules; safety; prompts; shelf; probe; run; rewrite; note; mark; report; watch — re-run every prompt of a set on the same shelf, into WORK/watch/results-<set>-<label>.jsonl; moved — what moved between two runs of the same lines: WHAT- MOVED.md, WHAT-MOVED.html, moved.json.
THE LAW Every number in the report comes from the machine and a run on the record. No score or rate is ever typed. No prompt, model or run is dropped because it lowers a score. Errors and timeouts are excluded and counted; a failed call is an error with its reason, never a choice. A rewrite is better only when the same prompts say so. The old line stays beside the new one. A safety BLOCK leads the skill's actions: do not install until it is cleared. A secret the scan finds is never printed: its shape, file and line are. The originals are never changed. The audit works on copies in its own folder. The scale here is the manifest layer. Nothing in this audit makes a skill witnessed. The limits are said in the report: sample size, who wrote the prompts, where the runs happened. A watch runs only on the shelf that was audited. A cell with no runs on one side is NO RUNS, never steady. A MOVED is confirmed by a re-run before any line is rewritten.
IN THE BOX scripts/skillaudit.py · scripts/triggertest.py · the scale · the method by hand · the writing and prompts guides · ten tests.
PROOF selftest 54/54; a live audit of a twelve-skill shelf and its first watch on the record (WITNESS.md) · witnessed 2026-10-13 · EDITION 2.
THE SEAL 96 of 100 · LEGENDARY · WITNESSED · Trigger 5 · Machinery 5 · Law 5 · Portability 5 · Proof 4
IT CAN BE WRONG an AI reading a text file: it can be wrong and can invent a number, a rule, a name or a date; check what matters against your own records and the source; the risk is yours. LICENSE-NOTE.md rides in the packet and is the licence.
THE PUNCH · SHA-256 OF SKILL.MD · 2B10B8B5EA5DBC34A3194B76
CITE THIS CARDTHE SKILL AUDIT CARD, Edition 2. Lund Studio LLC, Westminster, Colorado. https://lundr.tech/?view=skills-audit-card. Punch 2B10B8B5EA5DBC34A3194B76. Retrieved 2026-10-13.
What it is.
A teams and sellers' audit of a whole library of Claude skills, in five layers and one report:
Use it whenever a folder of skills is about to be rolled out, sold or installed, or Claude ignores or misuses the skills a team has. Not for a trigger test on its own (THE TRIGGER TEST CARD), a single scale score, writing a new skill.
It carries a machine that shows its working: intake; check; scale; rules; safety; prompts; shelf; probe; run; rewrite; note; mark; report; watch — re-run every prompt of a set on the same shelf, into WORK/watch/results-<set>-<label>.jsonl; moved — what moved between two runs of the same lines: WHAT- MOVED.md, WHAT-MOVED.html, moved.json — 54 checks in its selftest.
It answers requests such as “review these skills before we roll them out to the team”, “a vendor sent us these skill zips, are they safe and any good?”, “which of our skills does Claude ignore?”, “rewrite the descriptions that never get picked and prove it”.
Nine laws, written into the card.
They are in the card itself, so the AI follows them.
EVERY NUMBER IN THE REPORT COMES…Every number in the report comes from the machine and a run on the record. No score or rate is ever typed.
NO PROMPTNo prompt, model or run is dropped because it lowers a score. Errors and timeouts are excluded and counted; a failed call is an error with its reason, never a choice.
A REWRITE IS BETTER ONLY WHEN…A rewrite is better only when the same prompts say so. The old line stays beside the new one.
A SAFETY BLOCK LEADS THE SKILL'S ACTIONSA safety BLOCK leads the skill's actions: do not install until it is cleared.
A SECRET THE SCAN FINDS IS NEVER PRINTEDA secret the scan finds is never printed: its shape, file and line are.
THE ORIGINALS ARE NEVER CHANGEDThe originals are never changed. The audit works on copies in its own folder.
THE SCALE HERE IS THE MANIFEST LAYERThe scale here is the manifest layer. Nothing in this audit makes a skill witnessed.
THE LIMITS ARE SAID IN THE REPORTThe limits are said in the report: sample size, who wrote the prompts, where the runs happened.
A WATCH RUNS ONLY ON THE SHELF THAT WAS AUDITEDA watch runs only on the shelf that was audited. A cell with no runs on one side is NO RUNS, never steady. A MOVED is confirmed by a re-run before any line is rewritten.
The method.
check WORK PATH … --company NAME — intake (folders, folders of folders, .skill and .zip files; a lines file for skills whose packets are not on hand), then scale, rules and safety.
prompts WORK --template, filled as prompts.json: five FIRE and three NEAR per skill (references/PROMPTS-GUIDE.md); prompts WORK until no FAIL.
shelf WORK --fixtures FILES and probe WORK: one Claude project holding every skill's line beside the built-in skills, with the files the prompts mention; the probe's view kept on the record.
run WORK --models haiku,sonnet,opus --runs 2: each run fresh, unable to write files, run commands or reach the web; the first skill reached for and the exact model kept for every run; a failed call kept as an error with its reason; after four limit errors in a row it stops itself; resumable. mark WORK checks a results file written before Edition 2 for silent failures.
rewrite WORK SKILL "LINE" --set v2 --why …, then shelf … --set v2 and run … --set v2 --only … on the prompts the rewrite touches (references/WRITING-THE-LINE.md).
report WORK: AUDIT-REPORT.html, AUDIT-REPORT.md and audit.json.
Later: watch WORK --label DATE, then moved WORK --base results-current.jsonl --new watch/results-current-DATE.jsonl: WHAT-MOVED.html, WHAT-MOVED.md and moved.json.
What rides in the card.
In the card’s own voice, with a machine that shows its working.
THE MACHINEscripts/skillaudit.py · 15 commandsintake; check; scale; rules; safety; prompts; shelf; probe; run; rewrite; note; mark; report; watch — re-run every prompt of a set on the same shelf, into WORK/watch/results-<set>-<label>.jsonl; moved — what moved between two runs of the same lines: WHAT- MOVED.md, WHAT-MOVED.html, moved.json. 54 checks in its selftest. Needs: Python 3; Claude Code with `claude -p` for the trigger layer.
What it does once your AI has it.
intake On the record below
check On the record below
scale On the record below
rules On the record below
safety On the record below
prompts On the record below
shelf On the record below
probe On the record below
run On the record below
rewrite On the record below
note On the record below
mark On the record below
report On the record below
watch Re-run every prompt of a set on the same shelf, into WORK/watch/results-<set>-<label>.jsonl
moved What moved between two runs of the same lines: WHAT- MOVED.md, WHAT-MOVED.html, moved.json
On the record A live audit of a twelve-skill shelf (576 runs), rewrites proven on the same prompts, and the first watch a day later: 48 cells steady on Haiku and Sonnet
What it refuses, and where it hands off.
It refuses typing a rate that was not run; dropping a model or a run because it lowers a score; calling a rewrite better before it is run; printing a secret; installing a skill that carries a BLOCK.
a trigger test on its own, for one skill or a few → THE TRIGGER TEST CARD
a single score on the scale with the reasoning → the skill ranker
writing a new skill from scratch → a skill-writing tool
legal, security or compliance sign-off on what a skill does → the organisation's own lawyers or security lead
Trigger rates come from Claude Code runs; the Claude app's own rates may differ somewhat. It is an AI reading a text file: it can be wrong, so check what matters against your own records and the source.
What’s in the buy.
CARD.md — the whole card: its boot, law, method, machine, seals, refusals and hand-offs, ledger, score and what it carries · SKILL.md — the door your AI reads first · START-HERE.md — the first five minutes, for you
LINES-EXAMPLE.json + PROMPTS-GUIDE.md + SAFETY-RULES.md + THE-METHOD.md + UPLOAD-RULES.md + WRITING-THE-LINE.md — in references/, in the card's own voice
scripts/skillaudit.py — the machine: intake · check · scale · rules · safety · prompts · shelf · probe · run · rewrite · note · mark · report · watch · moved; see NEEDS below; selftest 54/54
WITNESS.md — the run on a realistic case as printed, and the trigger test on Haiku, Sonnet and Opus · SELFTEST.md — the machine's own test, as run at the cut · AUDIT.md, the twelve checks · MANIFEST.md, every file hashed
tests/evals.json — the cases it must take, hand off and refuse
MY-LEDGER.md — the card's memory, on your own machine · TIN.md, the nine lines on the tin · LICENSE-NOTE.md · HOSTS.md, where it runs
system/short-prompt.md and system/system-prompt.md — the doors for any AI without skills
PROOF · SELFTEST 54/54 · WITNESSED ON A RUN · THE RUN ON THE RECORD IN WITNESS.MD · EDITION 2 · PUNCH 2B10B8B5EA5DBC34A3194B76
ON EVERY DOOR · A CARD FOR YOUR AI, A FILE FOR YOUR COMPUTER
In Claude: turn on code execution under Settings › Capabilities, then Customize › Skills › + › Create skill, and upload the zip as it is — START-HERE.md in the box walks you through it, and tells you how to keep the ledger. In ChatGPT, Gemini and the rest: a Project, a GPT or a Gem with the card’s files attached and the short door in the box pasted as its instructions. The words run anywhere an AI reads Markdown; the machines run wherever the host runs Python. Witnessed in Claude only. The host marks →
Take it.
Nº 1187 — LAUNCHING SOON
Sold as is under the term printed. A card instructs an AI you operate; results depend on your model, your files and your judgement. Not medical, legal, tax or financial advice, never the person’s boss, and not a licence to practise. The terms →
One payment. The file is yours to keep and keeps working at its edition; new editions issued in the year after you buy reach you by email as replacement files. Tax is added at checkout where it applies. Nothing auto-renews.
A TERM, NOT A SUBSCRIPTION: NOTHING RENEWS ITSELF AND NOBODY IS CHARGED AGAIN. WHEN A TERM ENDS THE FILES STAY ON YOUR COMPUTER AND STAY READABLE — FREEZE, NOT LOSS.
THE MACHINE · IN THE OPEN · FROM THE CARD’S OWN WITNESS.MD AND SELFTEST.MD
skillaudit.py, every command showing its working.
A small Python program. Your AI runs it; you can too. The blocks below are pasted from the card’s own record, as printed.
intake
on the record below
check
on the record below
scale
on the record below
rules
on the record below
safety
on the record below
prompts
on the record below
shelf
on the record below
probe
on the record below
run
on the record below
rewrite
on the record below
note
on the record below
mark
on the record below
report
on the record below
watch
re-run every prompt of a set on the same shelf, into WORK/watch/results-<set>-<label>.jsonl
moved
what moved between two runs of the same lines: WHAT- MOVED.md, WHAT-MOVED.html, moved.json
selftest
54 checks that prove the machine; it must print 54/54
THE SELFTEST, AS PRINTED
PASS a sound skill scores 24/25, sound, 96 LEGENDARY
PASS a thin skill scores 9/25 thin, every criterion clamped to at least 1
PASS the hundred caps at 98
PASS the embedded scale matches assets/SKILL-SCALE-v1.json sub-check for sub-check
PASS the hand reader takes a quoted line whole
PASS the hand reader refuses ': ' in an unquoted line
PASS the hand reader folds a block line and keeps nested keys
PASS the hand reader knows 'yes' is not text
PASS intake finds six packets in a folder and a zip, plus one line on record
PASS the punch is the first 24 hex of sha256(SKILL.md), upper case
PASS a sound packet passes every upload rule with its manifest holding
PASS a broken packet fails on nested SKILL.md, extra key, name and angle brackets
PASS a line with ': ' unquoted fails the YAML rule
PASS a file the skill names but does not carry is reported
PASS a manifest that no longer holds is reported
PASS a line on record is checked as a line
PASS a description over 1,024 characters fails
PASS override text in SKILL.md is a BLOCK
PASS a bidirectional control is a BLOCK
PASS a zero-width watermark decodes and is only reported
PASS network code in a script is a WARN, the Claude command line an INFO
PASS a secret-shaped key is a BLOCK and is never printed
PASS an email is a WARN unless it is an example address
PASS a long blob is a WARN, the same blob in a data: URI is not
PASS the sound packet is CLEAR
PASS a prompt that names the skill is flagged; counts are kept
PASS the shelf writes every line byte for byte and finds the built-ins it can
PASS the stream reader keeps the exact model and the skill reached for
PASS a clean run environment drops the host's own session settings
PASS a rewrite that breaks an upload rule is not recorded
PASS a later rewrite set stands on the earlier ones
PASS the prompts a rewrite touches are its skill's own and the ones it was wrongly picked on
PASS reading the packets again keeps the tested line as the baseline and shows the packet's newer one
PASS an auditor's note reaches the report
PASS the report counts hits and wrong picks per model
PASS a rewrite is compared on the same prompts and proposed only when it is better
PASS the report page is one self-contained file: no outside fetches, every skill named, nothing under 14px
PASS a BLOCK leads the skill's actions
PASS Fisher's exact test: the tea-tasting table gives 17/35, an empty change gives 1, a clean sweep gives 2/C(24,12)
PASS the rule: MOVED under 0.05, WATCH under 0.20, else STEADY
PASS watch re-runs every prompt the set ran, on the same shelf, into watch/results-<set>-<label>.jsonl, keeping the model id
PASS a watch resumes: run again it adds nothing, and it names a model id the base never saw
PASS a watch refuses a shelf whose lines no longer match the set (a new line is a rewrite, not a watch)
PASS moved: 20/20 → 4/20 is MOVED down, 15/20 → 10/20 is WATCH, the same counts are STEADY, each with Fisher's p
PASS moved: wrong picks appearing (0/8 → 8/8 on two prompts) are counted on other prompts only and named by prompt
PASS moved notes a change in the answering model id, only where it changed
PASS moved compares only what both sides ran: an errored run, a prompt or a model on one side only is left out and said
PASS moved writes WHAT-MOVED.md, WHAT-MOVED.html and moved.json: a white page, dark ink, nothing under 14px, no outside fetch
PASS the same recorded picks a day apart: every cell STEADY, the model id change named, the watch's shelf confirmed
PASS a call the command line reports as failed is caught with its reason
PASS an answer with no tool and no text reads as a failed call
PASS marking flags only the silent failures, and keeps the file as it was beside it
PASS a failed run that a later run replaced is not counted as still failing; one never retried is
PASS triggertest.py's own selftest passes (selftest 11/11)
selftest 54/54
THE RUNS ARE PASTED FROM THE CARD’S OWN RECORD AS PRINTED. THE CASES ARE THE STUDIO’S OWN EXAMPLES (EXAMPLE CO IS FICTION); NO PRIVATE PERSON IS NAMED.
QUESTIONS AT THE TABLE
Asked before the wire.
What does it need from me?
Python 3; Claude Code with `claude -p` for the trigger layer.
Does it send anything anywhere?
Its machine reads what you point it at, and HOSTS.md says what it needs; python 3; Claude Code with `claude -p` for the trigger layer. The words run wherever an AI reads Markdown.
What is on the record?
The selftest (54/54), a run on a realistic case with every command and verdict pasted into WITNESS.md as printed (A live audit of a twelve-skill shelf (576 runs), rewrites proven on the same prompts, and the first watch a day later: 48 cells steady on Haiku and Sonnet); the twelve-check audit (AUDIT.md). The punch on the face is the SHA-256 of SKILL.md, so a downloaded copy can be checked against this room.
Can it be wrong?
Yes — it is an AI reading a text file. Trigger rates come from Claude Code runs; the Claude app's own rates may differ somewhat.
What will it never do?
It refuses typing a rate that was not run; dropping a model or a run because it lowers a score; calling a rewrite better before it is run; printing a secret; installing a skill that carries a BLOCK.
Who may use it?
One person, any number of their own AIs and computers; a team needs a company licence.