Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when writing or editing a .chous file-structure linter config: emit chous's keyword DSL (use <case> for files <glob>, must have [...], in <dir>:, allow [...], strict, move <glob> to <dest>, if-parent-matches) instead of the generic YAML/JSON linter config cheaper models produce by default.
.claude/skills/chous-config/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 5 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +64% | +68% | 0% | 22 | 52d ago |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | — | — |
| case-14 | ✗→✓ | ▲ Improved | — | — |
| case-17 | ✗→✓ | ▲ Improved | — | — |
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-06 | ✗→✓ | ▲ Improved | — | — |
A .chous file is written in chous's own keyword DSL, not YAML and not JSON. Apply this whenever you author, generate, or edit a .chous file (including a chous init baseline). Every rule is a line of DSL keywords; there are no key: value maps, no quoted-glob objects, and no braces.
#. Blank lines are ignored.must have [name1, name2, ...] One must have keyword, then a single square-bracketed, comma-separated list. Never required:, mustExist:, files:, or a YAML sequence.
use <case> for files <glob> The keyword use, then the case, then the literal words for files, then the glob. The glob comes after for files. The four case keywords are spelled EXACTLY: kebab-case PascalCase camelCase snake_case Never a mapping like naming: kebab-case or "**/*.ts": kebab-case.
in <dir>: then the rules indented beneath it. Blocks nest (in app: then, indented, in components:). Never a JSON/YAML object like "app": { ... } or a bare app: key.
allow [name1, name2, ...] — keyword allow then a bracketed list. Never allowed:, whitelist:, only:, or include:.
the bare keyword strict on its own line. Never strict: true, forbidUnknown: true, or additionalProperties: false.
move <glob> to <dest> — keyword move, the glob, the keyword to, the destination. Never a move: { from, to } object or a relocate: key.
append if-parent-matches <case> to a naming rule, e.g. use kebab-case for files **/*.vue if-parent-matches PascalCase. Never when, if parent, parent:, or a nested condition object.
Globs are standard: **/*.ts, *.{css,scss}, utils/**/*.ts. Indentation (2 spaces) marks block membership.
Existence
# BEFORE (wrong — YAML)
required:
- package.json
- tsconfig.json
# AFTER (chous)
must have [package.json, tsconfig.json]Global naming
# BEFORE (wrong — quoted-glob map)
"**/*.ts": kebab-case
# AFTER (chous)
use kebab-case for files **/*.tsDirectory scope + whitelist + strict
# BEFORE (wrong — JSON object)
"app": { "allowed": ["pages","components"], "strict": true }
# AFTER (chous)
in app:
allow [pages, components]
strictMove
# BEFORE (wrong — object)
move: { from: "*.css", to: "styles" }
# AFTER (chous)
move *.css to stylesConditional naming
# BEFORE (wrong — condition object)
- glob: "**/*.vue"
case: kebab-case
when: { parent: PascalCase }
# AFTER (chous)
use kebab-case for files **/*.vue if-parent-matches PascalCasein <dir>: header is indented under its outer block; its rules indent one levelfurther. strict applies only to the block it sits in, not to parent or sibling blocks.
use <case> for files <glob> line per glob; they stack.chous init seeds a baseline from a preset (basic, js, ts, nextjs, nuxt4,go, python). Extend it by adding DSL lines — never rewrite it as JSON.
{a,b}, e.g. move *.{png,jpg,svg} to images.must have vs allow: must have asserts entries EXIST; allow + strict asserts NOTHING ELSEexists. They are different rules; use both when a directory is fixed.
use PascalCase for files **/*.vue — Don't "**/*.vue": PascalCasemust have [package.json] — Don't required: [package.json]strict — Don't strict: trueallow [pages, components] — Don't allowed: [pages, components]move *.css to styles — Don't move: {from: "*.css", to: "styles"}in src: (with a colon) — Don't src: {} or "src": {}... if-parent-matches PascalCase — Don't ... when parent is PascalCaserules:, patterns:, conventions:, naming:) — none exist in chous.strict: true instead of the bare keyword strict.use **/*.ts kebab-case) — the glob follows for files.kebab, Pascal, snake-case) — they are exactly kebab-case,PascalCase, camelCase, snake_case.
when/if for the parent condition instead of if-parent-matches.must have [ ... ]use <case> for files <glob>, glob after for fileskebab-case / PascalCase / camelCase / snake_casein <dir>: blocks, rules indentedallow [ ... ]; forbid-others via bare strictmove <glob> to <dest>if-parent-matches <case>| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
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. 22 cases were attempted. The headline lift of +64 percentage points is the difference between those two pass rates over the 22 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/9/2026 | +92% |
Other measured skills in the registry, with their headline benchmark lift.