{{command_prefix}}health
Role: Report the health of the .design/ directory. Print a score and list the checks that failed.
Checks
- Artifact inventory -
ls -la .design/*.mdwith size and mtime. Print a table. - Missing expected artifacts - by
stagefield from themcp__gdd_state__getsnapshot:briefexpects BRIEF.mdexploreexpects DESIGN.md, DESIGN-DEBT.md, DESIGN-CONTEXT.mdplanexpects DESIGN-PLAN.mddesignexpects DESIGN-SUMMARY.mdverifyexpects DESIGN-VERIFICATION.md FAIL per missing.
- Token drift -
wc -c .design/DESIGN.md .design/DESIGN-CONTEXT.md; approx tokens = bytes/4. WARN if combined >40000. - Aged DESIGN-DEBT - items in
.design/DESIGN-DEBT.mdnot touched in >14 days (file mtime). WARN. - Broken state transitions -
stagefield from the snapshot inconsistent with artifacts present (e.g. stage=verifybut DESIGN-SUMMARY.md missing). FAIL. - Pending sketch/spike wrap-ups - any
.design/sketches/*or.design/spikes/*directory lacking a SUMMARY.md. WARN. - Seed germination - scan
.design/SEEDS.md(if present) for seeds whose trigger keywords match the snapshot or CYCLES.md content. List as "Seed ready: ".
State snapshot
Call mcp__gdd_state__get once at the start to pull the snapshot used by checks 2, 5, and 7. Aggregate health math stays prose-level:
- Count available connections from
<connections>. - Count open blockers from
<blockers>whereresolvedis absent. - Count pending must-haves from
<must_haves>wherestatus: "pending".
Output
━━━ Design health ━━━ Artifacts: BRIEF.md 2.1 KB 2026-04-14 DESIGN.md 18.4 KB 2026-04-17 DESIGN-CONTEXT.md 7.2 KB 2026-04-17 Checks: [PASS] Missing artifacts [WARN] Token drift (42,100) [PASS] Aged DESIGN-DEBT [PASS] State transitions [PASS] Sketch/spike wrap-ups [PASS] Seed germination Health: 5 / 6 checks passing. ━━━━━━━━━━━━━━━━━━━━━
Figma-extract readiness (figma_extract)
After the health table, the gdd_health MCP surface (scripts/lib/health-mirror/index.cjs) reports a figma_extract check so a user knows whether figma-extract is usable. The detail is one of three exact strings:
figma extract: ready (token set)-FIGMA_TOKEN(orFIGMA_PERSONAL_ACCESS_TOKEN) is present (statusok).figma extract: token missing- no token env is set (statuswarn).figma extract: plugin sync needed for variables (Free tier detected)- token present but a prior pull recorded a 403/skip on the Variables REST path, so run the plugin-sync step (statuswarn).
Token PRESENCE only is detected (D-10) - the token value is never read, logged, or shown. The Free-tier signal is read from the local raw-pull cache only; no network call is made.
Skill-discipline bootstrap (skill_discipline)
The gdd_health MCP surface also reports a skill_discipline check (Phase 32) confirming the using-gdd SessionStart bootstrap is live - detail is one of three exact strings:
skill-discipline: ready-skills/using-gdd/SKILL.mdexists ANDhooks/hooks.jsonSessionStart wiresinject-using-gdd.sh(statusok).skill-discipline: missing using-gdd(skill absent) orskill-discipline: hook not wired(skill present, no SessionStart inject) - bothwarn. The MCP surface also reports aharness_freshnesscheck (Phase 44): per-harnesslast_verifiedage, status-aware (onlytestedharnesses warn at 60d / fail at 180d; othersn/a). Full taxonomy inHARNESSES.md; refresh withnpm run verify:harness <id>.
Check MCP registration (gdd-mcp)
After the health table, inspect whether gdd-mcp (Phase 27.7+) is registered with any installed harness and render a one-line status row. Dismissable via .design/config.json#mcp_nudge=false. Non-blocking: failure paths render MCP server: unknown rather than crash. Full detection procedure (dismissal check, detection via scripts/lib/install/mcp-register.cjs, row rendering for claude/codex/both/neither, fallback) lives in ./health-mcp-detection.md.
Update notice (safe-window surface)
After the health table, emit the plugin-update banner if one is present:
bash[ -f .design/update-available.md ] && cat .design/update-available.md
Written by hooks/update-check.sh; suppressed mid-pipeline and when the latest release is dismissed.
Skill-length report
After the health table, surface the Phase 28.5 skill-authoring contract drift signal by running node scripts/validate-skill-length.cjs --quiet --json and reading summary from stdout. Print two prose lines:
Skill-length: <total> total | <clean> clean | <warnings> warn (>=100) | <blockers> block (>=250)- If blockers > 0: list each blocker as a row
- <name> (<lines> lines). Else: printAll skills within contract.
Thresholds: warn >=100, block >=250 (D-01). Strict description-format off by default (D-02). Then add two compact Phase 50 lines from scripts/lib/manifest/skills.json: Skills: <n>/<total> in v3 description form (descriptions matching /Activates for requests involving/i) and Composition: <edges> edges | <cycles> cycles (composes_with/next_skills fan-out; cycles via scripts/validate-composition-graph.cjs when present, else 0). See ./health-skill-length-report.md for the JSON shape and threshold rationale.
Do Not
- Do not mutate STATE.md - this skill is read-only. Only
mcp__gdd_state__getis permitted.


