From loopkit
Creates and maintains a strict JSON feature ledger where each entry tracks E2E verification status. Agents read it to pick work and flip exactly one `passes` field per session.
How this skill is triggered — by the user, by Claude, or both
Slash command
/loopkit:feature-list-jsonWhen to use
initializer agent building the master feature list at scaffold time, coding agent flipping a single passes field after E2E verification, auditing that description/steps/tests fields were not silently edited
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
The ledger of every feature the product will eventually have. Fresh-context sessions read it to pick work; they flip exactly one boolean when done. JSON, not Markdown — the syntactic strictness is load-bearing. Prose gets edited freely; data gets edited carefully.
The ledger of every feature the product will eventually have. Fresh-context sessions read it to pick work; they flip exactly one boolean when done. JSON, not Markdown — the syntactic strictness is load-bearing. Prose gets edited freely; data gets edited carefully.
Format per entry:
{
"category": "functional",
"description": "New chat button creates a fresh conversation",
"steps": [
"Navigate to main interface",
"Click the 'New Chat' button",
"Verify a new conversation is created",
"Check that chat area shows welcome state",
"Verify conversation appears in sidebar"
],
"passes": false
}
Categories: functional, ux, data, infra. Order the array in implementation order — the top is the next thing to build.
passes: false. Aim for breadth — 200 well-scoped entries beats 30 vague ones.passes from false to true.jq '[.[] | select(.passes==false)] | length' to see remaining work; pick the topmost unblocked entry.description is one sentence, steps is a user's actual action sequence (not implementation notes).passes starts false. No exceptions, not even for the smoke test.jq '. | length' returns your count; jq '[.[] | select(.passes==true)] | length' returns 0.passes: false and satisfied prerequisites. If the top is blocked, drop to the deepest unblocked entry.passes to true.false → true. Nothing else.description, steps, or category — it is unacceptable to remove or edit these fields because it lets missing functionality slip past future sessions. The ledger is append-only in every field except passes.passes: true on unit-test evidence — unit tests pass while routes are misrouted, CORS is broken, or the button is unwired. Only end-to-end evidence flips the bit. See [[verification-before-completion]].passes: true with a note, or negotiate removal explicitly. Silent deletion breaks priority counting.At session end, before committing:
git diff feature_list.json | grep -E '^[-+]' | grep -v 'passes'
If this prints anything other than the file header, you edited a forbidden field. Revert those hunks. Only "passes": false ↔ "passes": true lines are allowed to change.
npx claudepluginhub archive228/loopkit --plugin loopkitManages a project's feature state trio (feature_list.json, progress.md, session-handoff.md) for tracking feature lifecycle from start to completion.
Orchestrates multi-session projects by implementing one feature per cycle from feature-list.json through TDD pipeline with quality gates and code review.
Track feature implementation against requirements with hierarchical FR codes and TODO.md sync. Use when linking features to PRDs or recalculating completion stats.