Find balance outliers, broken progressions, degenerate strategies, economy imbalances in formulas and data. 'Check game balance'.
66
83%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys automation
Every AskUserQuestion call follows .claude/docs/automation-modes.md
(collaborative asks always · guided major-only · autonomous logs and proceeds;
automation_always_ask categories always prompt).
If the inputs this skill needs do not exist, the answer is "could not run" — not a filled-in report. Check first, and stop if the check fails.
FOUND or ABSENT — not "assumed present".NOT ASSESSED — NO DATA. Do not estimate it, do not infer it from an
adjacent artifact, and do not leave a mandated cell to be filled by whoever
reads the template next.NOT ASSESSED — NO DATA as the whole verdict, naming what was missing and
which skill produces it.A verdict of NOT ASSESSED is a success. It is the correct, useful answer to
"what does the data say?" when there is no data. The failure mode this prevents is
specific and has been observed in practice: report templates whose verdict
enum had no "could not run" state produced false clean passes — an asset audit
returning COMPLIANT on a project with no assets and no standards, and a
performance profile reporting ">99% headroom against a 16.67ms budget" with zero
profiler data and no budget ever set.
Absence of evidence is never evidence of absence. A scan that finds no matches because there are no files to scan has not verified anything. Say which of the two happened — a reader cannot tell from a green result.
Determine the balance domain from $ARGUMENTS — the whole string, since a data-file path may contain spaces:
If no argument, ask the user which system to check.
Read relevant files from assets/data/ and design/balance/ for the identified domain.
Note every file read — they will appear in the Data Sources section of the report.
Registry first. If design/registry/entities.yaml exists, read it before the
GDD. Its constants and formulas sections hold the cross-GDD named values and
output ranges — the balance targets — already distilled, each with a source:
GDD and any revised: date:
Grep pattern="^ - name:" path="design/registry/entities.yaml" output_mode="content" -A 6Take the intended values from the registry for any constant or formula it lists
(the constants: and formulas: blocks); these are the authoritative cross-doc
figures a GDD must not contradict. If design/registry/entities.yaml does not
exist or has no entries (it ships as an empty stub until /design-system
populates it), skip this and use the GDD alone.
Then read the GDD for the system from design/gdd/ to understand intended design
targets, tuning knobs, and expected value ranges — for anything the registry did
not already supply. This is the baseline for "correct" behaviour.
If the data files are FOUND but neither source gives targets for this domain,
the sections that judge against targets (Outliers Detected, and Progression
Analysis where the domain has a curve) are NOT ASSESSED — NO DATA. Each one names what was missing — the
GDD it looked for in design/gdd/, and whether the registry was absent or empty
— and names /design-system, which writes both.
Every domain: compare each value with its target. For each named value in the
data files, take its target from Phase 3 — a registry constant's value, a
registry formula's output_range, or the range the GDD states — and compare. A
value outside its target is a row in Outliers Detected (player_damage_base 140
against 90–110). A value with no target anywhere is neither in range nor an
outlier: list it under Values That Need Attention as no stated range — not judged.
Then run domain-specific checks:
Combat balance:
Economy balance:
Progression balance:
Loot balance:
## Balance Check: [System Name]
### Data Sources Analyzed
- [List of files read]
### Health Summary: [NOT ASSESSED / HEALTHY / CONCERNS / CRITICAL ISSUES]
### Outliers Detected
| Item/Value | Expected Range | Actual | Issue |
|-----------|---------------|--------|-------|
### Degenerate Strategies Found
- [Strategy description and why it is problematic]
### Progression Analysis
[Graph description or table showing progression curve health]
### Recommendations
| Priority | Issue | Suggested Fix | Impact |
|----------|-------|--------------|--------|
### Values That Need Attention
[Specific values with suggested adjustments and rationale]Choose the Health Summary by the worst finding, first match wins:
NOT ASSESSED — NO DATA, or a value had no stated range to
judge it against; name which. It ranks below the two finding verdicts, because
a measured problem is more actionable than a gap, and above HEALTHYAfter presenting the report, use AskUserQuestion:
[A] Fix highest-priority issue now — walk me through it[B] Save report to design/balance/balance-check-[system]-[date].md[C] Stop here — I'll review the findings manuallyIf [A]:
assets/data/ or formula in design/balance/"This value is defined in a design document. Run
/propagate-design-change [path]on the affected GDD to find downstream impacts before committing."
If [B]:
design/balance/balance-check-[system]-[date].md (create the directory if needed). Use the current date for [date] in YYYY-MM-DD format./balance-check after fixes to verify."If [C]:
/balance-check after fixes to verify."b21fa0f
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.