# commands/ Slash-command entry points for the doc-hygiene plugin. Thin dispatchers — they parse `$ARGUMENTS`, route to a skill or run a read-only state read, and surface the result. They own no analysis logic of their own (invariant #6 lives in the scripts/skills they call). ## Contents | File | Purpose | |------|---------| | `hygiene.md` | `/hygiene` — the single user entry point. Parses the first token of `$ARGUMENTS` as the subcommand and passes the rest through. Subcommands: **`check [--scope ] [--category ]`** invokes the `hygiene-check` skill verbatim (the skill owns the full scan → classify → finalize → validate → write → stamp `last_check` workflow; the command does NOT scan or classify); **`status`** is read-only (no skill, no model, no scan) — calls `state_store.py` via `python3 -c` and prints the three lifecycle timestamps (`last_check`/`last_clean`/`last_reminded`) plus report presence; **`clean`** / **`sweep`** are reserved and respond "not yet implemented (Phase 4)". No args or an unrecognized subcommand prints usage then runs the `status` read. Scripts resolve under `${CLAUDE_PLUGIN_ROOT}/scripts/` (mirrors `hooks/hooks.json`). | ## Arg semantics (pass-through to `hygiene-check`) - `--scope ` — narrows the scan. A glob (contains `*`) maps to the scanner's `--globs`; a bare path is handled by the skill as a post-scan prefix filter (the scanner's glob matcher is unreliable for mid-pattern `**`). - `--category ` — filters which **entries** are produced, applied by the skill *after* classification (the scanner is category-agnostic). `class` ∈ { `stale`, `bloat` }; `subtype` is one of the closed enum values.