a11y-check
Accessibility audit, scoped to the surfaces a product actually has. Detects web / rendered_markdown / terminal / native_app / video_audio / document /…
Use to evaluate a service or feature against Downe's 15 principles of good services.
$ npx -y skills add haabe/mycelium --skill service-check --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/service-checkContext preview
The summary Claude sees to decide when to auto-load this skill.
Use to evaluate a service or feature against Downe's 15 principles of good services.
name: service-check description: "Use to evaluate a service or feature against Downe's 15 principles of good services." metadata: instruction_budget: "52" framework_dependency: "mycelium" framework_dependency_note: "This skill is designed to run within the Mycelium framework (https://github.com/haabe/mycelium). Standalone use will skip the canvas state, theory gates, and harness behavior the skill assumes. Install: /plugin install mycelium@haabe-mycelium."
Evaluate against Lou Downe's 15 principles.
For each principle, assess: Pass / Partial / Fail / N/A
1. **Easy to find**: Can users find this service without knowing its name?
2. **Clearly explains its purpose**: Is it immediately clear what this does?
3. **Sets expectations**: Do users know what will happen?
4. **Enables completion**: Can users finish what they came to do?
5. **Familiar**: Does it work the way users expect?
6. **No prior knowledge needed**: Can a new user succeed?
7. **Agnostic of org structures**: Are internal boundaries invisible?
8. **Minimum steps**: Is every step necessary?
9. **Consistent**: Is language/design uniform throughout?
10. **No dead ends**: Is there always a next step?
11. **Usable by everyone**: Is it accessible and inclusive?
12. **Encourages right behaviors**: Does design nudge good outcomes?
13. **Responds to change**: Can it adapt?
14. **Explains decisions**: Are automated decisions transparent?
15. **Easy to get human help**: Can users reach a person?
Running at L3 catches service design issues BEFORE delivery, not after. A solution that can't meet "enable completion" (P4) or "no dead ends" (P10) has a design problem, not just a quality problem.
## Service Check: [Service Name] | # | Principle | Status | Notes | |---|-----------|--------|-------| | 1 | Easy to find | Pass/Partial/Fail | ... | ... | 15 | Human help | Pass/Partial/Fail | ... | Score: [X/15 Pass, Y/15 Partial, Z/15 Fail] Priority fixes: [top 3 items to address]
`.claude/canvas/services.yml` is the canonical record. The decision log is provenance; the canvas is what the framework READS. Write the canvas before the decision log — if only one of the two lands, it must be this one.
**WHY THIS SECTION EXISTS (v0.170.0).** It did not, and the cost was measured. A full 15-principle assessment ran on the dogfood project on 2026-05-23 (7 Pass / 8 Partial / 0 Fail), landed in the decision log, and `services.yml` held every principle at `assessment: not-assessed` with `overall_score: null` for **103 days**. The scores existed the whole time and no reader of the canvas could see them. The `Service Quality` theory gate reads this file, so a Required gate at L4 had no data to read while the data sat in a log nothing gates on.
**UPDATE, per principle, in `principles[]`:**
- id: <1-15>
assessment: pass|partial|fail|not-assessed # not-assessed ONLY if genuinely not evaluated
evidence: "<what was observed, and where — a claim a later reader can check>"
issues: ["<specific, actionable>"] # [] when none
last_checked: "YYYY-MM-DD"**Then set the file-level fields:** `overall_score` (the X pass / Y partial / Z fail tally) and `last_assessed` (today).
**`not-assessed` IS A REAL VERDICT AND MUST NOT BE USED AS A DEFAULT.** Leaving a principle at `not-assessed` after running this skill records "we looked and could not judge" — which is different from "nobody looked", and only one of those is true after a run. If a principle cannot be judged, say why in `evidence`. A principle whose own fail criterion is "not tested" (P11 accessibility) is a **fail**, not a `not-assessed`: the criterion is about the testing, not about the product.
**Hard rule** (per CLAUDE.md Communication Rules, anti-patter
A harness that asks who this is for before the agent writes code. Built on Claude Code, where the gates are structural. The files and skills port to opencode, Codex and Cursor. Outcome over output. You know how this goes.
Accessibility audit, scoped to the surfaces a product actually has. Detects web / rendered_markdown / terminal / native_app / video_audio / document /…
Bring Mycelium into a project that already has code. Detects that the repo predates the framework, asks before touching anything, then reads the codebase to…
Design the smallest viable test to validate or invalidate a critical assumption. Based on Torres's assumption testing framework, organized by Gilad's AFTER…
Use before any research activity or significant decision. Reviews cognitive biases relevant to the current stage.
Use to evaluate whether current work aligns with Better Value Sooner Safer Happier. Run at diamond completion and periodically.
Lint canvas files for staleness, missing fields, inconsistent evidence types, and orphaned references. Run periodically or before major transitions.