/skill-score — make "this skill is effective" provable, then prove it moved

SkillDev tools

One repeatable pass that keeps the skill pack itself effective — the one surface no other scorecard grades. Runs the skill-effectiveness scorecard (`fak skill-effectiveness-scorecard`) over every .claude/skills/*/SKILL.md, reads the skill-debt work-list, and retires it worst-first by ADDING the real affordance — a sharp "Use when …" trigger, a reference that resolves on disk, the commit-by-path discipline a committing skill owes the shared trunk, a witness step, a scoped allowed-tools — never by spraying a keyword. Re-measures to PROVE skill-debt dropped.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the /skill-score — make "this skill is effective" provable, then prove it moved skill

What this skill tells your AI

The instructions your AI receives, as published by anthony-chaudhary/fak in .agents/skills/skill-score/SKILL.md and read by ahel’s review.

What this does. The pack measures fak from every angle, but until this skill the skills themselves had no measuring stick — "this skill is good" was an unfalsifiable claim. This is the skill pack's own checking layer. It makes "improve the skills" a repeatable, evidence-grounded pass: measure the skill-debt, retire it worst-first by adding the real affordance, then re-measure to prove the number dropped. It is an instance of /score-2x pointed at .claude/skills/, and a sibling of the scorecard doctrine.

The headline metric is skill-debt: the count of concrete, re-derivable affordances a skill is missing across nine KPIs in four groups (discover / operate / trust / economy). Driving it to zero means every skill is discoverable, safe to operate, and trustworthy by construction. The shape is the family's: run the scorecard → read the skill-debt work-list → retire debt worst-first (real affordances only) → re-measure and prove the drop → commit ONLY the skill lane by explicit path.


The measure (nine KPIs over every .claude/skills/*/SKILL.md)

fak skill-effectiveness-scorecard folds these into a composite score + the skill-debt integer. HARD KPIs emit skill-debt; the two ECONOMY KPIs are SOFT (they lower the score but never gate — the cheap fix for either is a keyword, which is gaming).

KPIHARD/SOFTone unit of skill-debt is…
description_presentHARDa skill with no real description front-matter (the trigger surface)
trigger_clauseHARDa description that says WHAT but not WHEN — no "Use when / Use to / Use after …"
name_resolvesHARDfront-matter name: ≠ the directory, so /name won't invoke it
refs_resolveHARDa cited tools/*.py / docs/* / sibling SKILL.md that does not exist on disk
tools_scopedHARDa skill that COMMITS but declares no allowed-tools (least privilege)
commit_disciplineHARDa committing skill that never names commit-by-path / -- <paths> / never git add -A
proof_stepHARDa committing skill with no verify / witness / re-measure step
anti_gamingSOFTa metric-driving skill with no anti-gaming / honesty clause
context_budgetSOFTa SKILL.md over ~300 lines (over-budget skill text)

refs_resolve is the ungameable anchor — a cited helper either exists on disk or it doesn't, cross-checked against the real tree, so you can't drop it by editing text. The commit-discipline cluster (commit_discipline, proof_step, tools_scoped) gates ONLY the skills that commit to the shared trunk — the highest-privilege ones.

Step 1 — Run the scorecard (it builds your work-list)

go run ./cmd/fak skill-effectiveness-scorecard            # human scorecard (per-KPI + work-list)
go run ./cmd/fak skill-effectiveness-scorecard --json     # machine payload
go run ./cmd/fak skill-effectiveness-scorecard --json > /tmp/skill-base.json   # record the baseline

It exits non-zero whenever skill-debt > 0. Read corpus.score, corpus.skill_debt, and corpus.breakdown (per-KPI debt, worst first). Record skill_debt = N before touching anything — you need the before-number to prove the delta.

Step 2 — Retire skill-debt worst-first, by ADDING the real affordance

Attack the heaviest KPI first (breakdown[0]). Each fix is a genuine improvement to the skill, not a keyword:

  • trigger_clause — add a real "Use when / Use after …" clause to the description that says when the model should fire it. Write the true trigger, not a filler.
  • refs_resolve — the skill cites a tool/doc that moved or was deleted. Fix the path to the real file, or remove the dead citation. (Never invent a file to satisfy the check — that's the gaming this refuses.)
  • commit_discipline — add the commit-by-path / -- <paths> / never-git add -A rule to a committing skill so it can't sweep a peer's staged files on the shared trunk.
  • tools_scoped — add allowed-tools: to a committing skill, declaring its real tool surface (least privilege).
  • proof_step — add the verify / witness / re-measure step the skill was missing, so "it shipped" rests on evidence.
  • name_resolves / description_present — rename to match the dir, or write a real description. Structural; ungameable.

Editing a PEER's skill on this shared trunk is fine (additive frontmatter / a clause), but commit by explicit path so you don't sweep their other in-flight edits (Step 4).

Step 3 — Re-measure and PROVE the drop

go run ./cmd/fak skill-effectiveness-scorecard --json

Compare the new JSON against the baseline you recorded and state the delta plainly: skill-debt N → M (−k), score S → S'. Regenerate the committed snapshot so the doc matches the tree (Bash > for UTF-8):

go run ./cmd/fak skill-effectiveness-scorecard --markdown > docs/SKILL-EFFECTIVENESS-SCORECARD.md

If the current metric version reports skill-debt 0 / grade A, audit discovery and extend the bar per /score-2x Step 4 — tighten DESC_MIN_CHARS, lower CONTEXT_SOFT_MAX, or promote a SOFT KPI to HARD — then version and re-pin the control pane. Zero is a current observation, not a completed ledger.

Step 4 — Commit ONLY the skill lane, by explicit path

fak sync reconcile --apply
fak commit --path <the SKILL.md files you fixed> --path cmd/fak/skill_effectiveness.go --path docs/SKILL-EFFECTIVENESS-SCORECARD.md -m "<subject>" -m "<body: N→M skill-debt, what changed>" -m "(fak <leaf>)"
dos commit-audit HEAD                                    # MUST print [diff-witnessed] / verdict OK
fak sync push
  • Commit by explicit path via fak commit --path, never git add -A on this shared tree (the exact rule the commit_discipline KPI enforces — eat the dogfood). Stay on main; if a peer's MERGE_HEAD is set, wait for it to clear, then re-try the pathspec commit.
  • End the subject with a (fak <leaf>) trailer; docs(skills): for a skill-text pass.
  • dos commit-audit HEAD printing [diff-witnessed] is the green light.

The anti-gaming law (the measure is only as honest as the pass)

Retire a defect by changing the skill, never by gaming the detector. A missing trigger is fixed by writing the real trigger, not by pasting "Use when" onto a vague description; a dead refs_resolve is fixed by correcting the path to the real file, NOT by creating an empty file to satisfy the check; a missing proof_step is fixed by adding a real witness step, not the word "verify". If "fixing" a defect would mean faking the affordance, stop — that's not a real gap, and weakening the check to make it green turns the scorecard into theater. anti_gaming and context_budget are SOFT for exactly this reason: their cheap fix is cosmetic, so they score but never gate.

When to run this

  • After adding or editing a skill (a new SKILL.md lands with debt — retire it).
  • When a skill cites a tool/doc that moved or was deleted (refs_resolve catches it).
  • To drive the skill-2× program — one halving of skill-debt per focused pass.
  • On a /loop cadence to keep the pack discoverable, safe, and trustworthy as it grows.

The scorecard is read-only; this skill's only writes are your genuine skill fixes, docs/SKILL-EFFECTIVENESS-SCORECARD.md, and the Go subcommand itself.

Signals

GitHub stars
38
Forks
15
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
skill-score
Source
github.com/anthony-chaudhary/fak