a11y-pass
Catch the accessibility failures that ship in almost every AI-built UI. Use after building any interactive component.
Get JSON out of the model reliably. Prefer tool_use with a schema over prompted-JSON, validate on receive, retry on parse fail. Use when downstream code will parse the response.
$ npx -y skills add Archive228/loopkit --skill structured-output --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/structured-outputContext preview
The summary Claude sees to decide when to auto-load this skill.
Get JSON out of the model reliably. Prefer tool_use with a schema over prompted-JSON, validate on receive, retry on parse fail. Use when downstream code will parse the response.
name: structured-output description: Get JSON out of the model reliably. Prefer tool_use with a schema over prompted-JSON, validate on receive, retry on parse fail. Use when downstream code will parse the response. when_to_use: extracting structured data, agent-to-agent handoff, verifier verdicts, anything a script has to json.loads
Prompted JSON — "reply as JSON" in the system prompt — fails on ~2-8% of calls in the wild: stray prose before the object, trailing commas, unescaped quotes, code fences. That failure rate is fine for a demo and fatal for a loop that runs a thousand times.
1. **Tool use with schema** (best) — declare a tool with a JSON Schema for its input. Force the model to call that tool. The API validates the arguments against the schema before you see them. Malformed JSON never leaves the model. Use this whenever the downstream is a real parser.
2. **JSON mode / `response_format`** (good) — where supported. Guarantees a valid JSON object at the top level; does not guarantee schema conformance. Cheap upgrade over prompted-JSON.
3. **Prompted JSON with strict rules** (fallback) — for models/tiers without tool use. Say "output ONLY the JSON object, no code fences, no prose", give an example, and validate on receive. Assume ~5% failure and handle it.
call → parse → if fail: retry once with the parse error appended → parse → if fail: hard fail
Otherwise use tool_use.
Loopkit's `adversarial-verify` output is `{"passes": bool, "failures": [...]}` — that is exactly the shape this skill formalizes. When you compose skills, keep every machine-consumed hop tool_use'd.
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…