Install any skill in seconds. Free to start, no credit card required.
Get Started Free →archive228/structured-output
Get JSON out of the model reliably. Prefer tool_use with a schema over prompted-JSON, validate on receive, retry on parse fail.
Passed 21 of 21 test cases with the skill, and 15 of 21 without it.
and 5 more in the full report
6 fixed16 passed either way0 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 5 test cases the skill fixed. Same model, same prompt, with and without the skill.
We have a lightweight classifier that outputs a single boolean JSON field `{"is_spam": true}` reviewed directly by human moderators. Is it necessary to build full tool calling schemas for this task?
| Checked | Without skill | With skill |
|---|---|---|
| Acknowledges that unconstrained JSON or prompted JSON is acceptable for simple, low-stakes single-scalar fields with human review. | Missed | Passed |
The instructions your model reads when the skill 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.
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.
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.
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
"severity": "high|medium|low" not "severity": "...".additionalProperties: true without a reason. If the model can add fields, it will, and they'll be inconsistent.{"answer": "yes"}).Otherwise use tool_use.
test cases passed, vs 15 / 21 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.