a11y-pass
Catch the accessibility failures that ship in almost every AI-built UI. Use after building any interactive component.
Read git log since initial scaffold + last 3 progress notes, draft feature additions to a SEPARATE suggestions file so feature_list.json stays immutable
$ npx -y skills add Archive228/loopkit --skill suggest-next-features --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/suggest-next-featuresContext preview
The summary Claude sees to decide when to auto-load this skill.
Read git log since initial scaffold + last 3 progress notes, draft feature additions to a SEPARATE suggestions file so feature_list.json stays immutable
name: suggest-next-features description: Read git log since initial scaffold + last 3 progress notes, draft feature additions to a SEPARATE suggestions file so feature_list.json stays immutable when_to_use: feature_list.json has zero passes:false entries left OR the last 3 sessions added no new work and the spec has quietly expanded (user asked for something the list does not cover)
The ledger runs dry. Either every `feature_list.json` entry has `passes: true`, or the last few sessions have been shuffling half-features and adding no new work because the spec grew and the list did not.
This skill drafts candidate additions — but to a **separate** file, `feature_list.suggestions.json`. `feature_list.json` is immutable except for the single `passes: false → true` flip that [[feature-list-json]] permits. Silently appending entries would break that contract and let a runaway session invent its own scope.
The suggestions file is a proposal. A human hand-merges chosen entries into `feature_list.json`; the rest are ignored or deleted. No agent, ever, edits `feature_list.json` directly from this skill.
Apply when **either** condition holds:
Do not apply just because the list looks short. 30 unfinished entries is not a trigger; 0 is.
1. `git log --pretty=format:'%h %s' "$(git log --grep='chore: initial scaffold' --format=%H | tail -1)"..HEAD` — every commit since the scaffold. This is what actually shipped, not what was claimed. 2. Read the last 3 "What's done" / "Notes for the next session" entries from `claude-progress.txt`. This is where recent scope creep leaks. 3. Read `feature_list.json` in full. You need to know what is already enumerated so you do not propose duplicates. 4. Compare (1)+(2) against (3). Look for:
5. Draft 5–10 candidate entries in the same shape as `feature_list.json`. Every one starts `passes: false`. Order them roughly by priority. 6. Write the array to `feature_list.suggestions.json` at the project root. Overwrite any prior draft — this file is regenerable, not append-only. 7. Print a one-line summary per suggestion so the operator can scan without opening the file. 8. Stop. Do not touch `feature_list.json`. Do not commit `feature_list.suggestions.json` (it is a proposal, not project state).
`feature_list.suggestions.json` — same schema as `feature_list.json`:
[
{
"category": "ux",
"description": "Empty conversation list shows an onboarding CTA",
"steps": [
"Load app as a user with zero conversations",
"Verify the sidebar shows a 'Start your first chat' CTA",
"Click the CTA and land in a fresh conversation"
],
"passes": false,
"rationale": "Sessions 41/43 both hit the empty-list path and rendered a blank sidebar; no entry covers it."
}
]The `rationale` field is unique to the suggestions file — it justifies the proposal so the human merger can decide fast. Strip `rationale` before merging into `feature_list.json`.
33 battle-tested skills + minimal .claude harness for any coding agent (Claude Code, Cursor, Codex, Gemini CLI).
Catch the accessibility failures that ship in almost every AI-built UI. Use after building any interactive component.
Before compaction Loopkit extracts decisions into claude-decisions.json (machine-readable). Read it alongside claude-progress.txt…
Review a diff against the goal spec assuming the code is BROKEN. The reviewer
Verify that an endpoint checks ownership, not just authentication. Use on any handler that reads or mutates user data.
Find the exact commit that introduced a bug. Use when something worked before and broke, and you don't know which change did it.
Before picking new work, smoke-test the last "completed" feature. If it's broken, revert and re-open it before touching anything…