Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when designing the keys and value shapes of a JSON object or payload: camelCase keys throughout, plural array names, SCREAMING_SNAKE_CASE enum strings, and omitting absent keys instead of sending null. Do NOT use for the response envelope/wrapper shape (data/errors/type/id), for YAML, query-string, or database column naming, or for parsing an existing JSON blob.
.claude/skills/json-naming-conventions/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flashlowest | 95% | 43 |
| gemini-3.1-pro-preview | 100% | 1 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +43% | +67% | 0% | 23 | 54d ago |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-09 | ✗→✓ | ▲ Improved | — | — |
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-13 | ✗→✓ | ▲ Improved | — | — |
Enforces the Google-JSON-Style-Guide naming grammar on the keys and value forms of any JSON object you design: camelCase keys, plural array names, omit-vs-null, and SCREAMING_SNAKE enum strings. Apply when shaping a payload's keys; not to the transport envelope and not to the meaning of the data.
firstName,postalCode, createdAt, isActive. Never snake_case (first_name), never PascalCase (FirstName), and never a MIX of styles inside one document (firstName beside created_at is the most common error). One casing, applied to every key.
noun: tags, phoneNumbers, lineItems. A property holding one nested object stays singular: address, owner. The key's number matches its cardinality.
null. When a field has no value and absent-vs-null carries nomeaning, drop the key entirely rather than emitting "middleName": null. Send an explicit null ONLY when null is a distinct, meaningful state the client must tell apart from "missing".
underscore-joined string: "ACTIVE", "IN_PROGRESS", "BANK_TRANSFER". Never a magic integer ("status": 2), never a lowercase or camelCase word ("active", "inProgress").
_ or $ on keys. Property names start with a lowercase letter. Reserve nothing with aleading underscore or dollar sign (_id, $type); those collide with framework/reserved conventions.
"2026-01-15T09:00:00Z". Never a Unix epoch integer and never a locale-formatted string ("01/15/2026").
isActive,hasDiscount, canEdit — not a noun like active or discount.
The base's DB-flavored default is on the left; the conforming JSON on the right.
A book record — snake_case keys and an integer status become camelCase and a string enum:
BEFORE { "book_title": "...", "page_count": 320, "status": 1 }
AFTER { "bookTitle": "...", "pageCount": 320, "status": "PUBLISHED" }An invoice with a missing paid date — an explicit null becomes an omitted key:
BEFORE { "invoiceNumber": "A-91", "paidDate": null }
AFTER { "invoiceNumber": "A-91" } // paidDate simply absentA sensor reading — a singular array name and a mixed-casing pair get fixed:
BEFORE { "reading": [ ... ], "captured_at": 1737019800 }
AFTER { "readings": [ ... ], "capturedAt": "2026-01-16T08:10:00Z" }userId, htmlContent, apiKey — notuserID or HTMLContent.
null IS meaningful (a form field the user explicitly cleared vs never filled) → keep the explicitnull; the omit rule only covers "no meaning to the distinction".
are data, not property names.
tags holding one tag, not tag. Cardinality followsthe type, not the current count.
rule covers closed sets only.
item or tag."field": null for a value that is merely missing._ or $.camelCase and snake_case keys in the same object.user: [...]) where a plural belongs (users)."status": 0 / "type": 3 integer enums instead of named string constants.null littered across every optional field.1737019800) instead of ISO-8601 strings.null._ or $.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +43 percentage points is the difference between those two pass rates over the 23 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 7/10/2026 | +82% |
Other measured skills in the registry, with their headline benchmark lift.