a11y-check
Accessibility audit, scoped to the surfaces a product actually has. Detects web / rendered_markdown / terminal / native_app / video_audio / document /…
Pull snapshots from all configured metric sources, compute deltas against prior snapshots, flag unexplained signals, and draft evidence entries for canvas files. One entry point for all external product/market metrics.
$ npx -y skills add haabe/mycelium --skill metrics-pull --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/metrics-pullContext preview
The summary Claude sees to decide when to auto-load this skill.
Pull snapshots from all configured metric sources, compute deltas against prior snapshots, flag unexplained signals, and draft evidence entries for canvas files. One entry point for all external product/market metrics.
name: metrics-pull description: "Pull snapshots from all configured metric sources, compute deltas against prior snapshots, flag unexplained signals, and draft evidence entries for canvas files. One entry point for all external product/market metrics." metadata: instruction_budget: "47" 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."
Unified pull across all metric sources configured in `.claude/jit-tooling/active-metrics.yml`. Dispatches to per-source adapters (starting with `github`), normalizes to a shared schema, computes deltas, and drafts canvas evidence entries.
This skill is the L0/L1/L2/L5 evidence-gathering loop. Replaces manual "I checked the dashboard" reports with timestamped, sourced, diffable data.
If `.claude/jit-tooling/active-metrics.yml` does NOT exist:
1. Tell the user: "No metric sources are configured. Running `/mycelium:metrics-detect` first." 2. Invoke `/mycelium:metrics-detect` (or follow `${CLAUDE_PLUGIN_ROOT}/jit-tooling/metrics-detector.md`). 3. After detection completes, return to this skill.
Read `.claude/jit-tooling/active-metrics.yml`. Filter to sources with `status: active`. For each, verify the adapter file exists at `${CLAUDE_PLUGIN_ROOT}/jit-tooling/metrics-adapters/<source>.md`. If missing, follow `${CLAUDE_PLUGIN_ROOT}/jit-tooling/metrics-adapters/GENERATING.md` to generate it.
If `confirmed_by_user: false`, ask the user to confirm the source list before proceeding.
For each active source, follow its adapter's "Pull" and "Normalize" sections. Adapters are independent — run them in parallel (bash jobs, multiple tool calls in one message).
Per-source handling:
For each source, write the normalized snapshot to:
.claude/evals/metrics/<source>/YYYY-MM-DD.json
Use today's date. If today's snapshot already exists, OVERWRITE (the skill is idempotent within a day). Create directories as needed.
For each source, find the most recent snapshot in `.claude/evals/metrics/<source>/` that is NOT today's. If none exists, skip delta computation for that source and note "first snapshot" in the report.
Apply the adapter's "Delta rules" section. Common patterns:
Each adapter defines what "unexplained" means for its source. Typically this is:
For unexplained signals, attempt the investigation hooks defined in each adapter (e.g., GitHub's HN search) before presenting to the user.
Write a markdown report to `.claude/evals/metrics/YYYY-MM-DD.md` (project-level, not per-source) with this structure:
# Metrics Pull: YYYY-MM-DD Sources pulled: N active, M skipped (credential issue) ## <source 1 name> Target: <target> Prior snapshot: YYYY-MM-DD (N days ago) ### Summary [primary_counts with deltas] ### [class-specific sections] - traffic class: Traffic (windowed), Top Referrers, Top Paths - events class: Event counts, ratios - reviews class: Rating summary, new reviews, [repurposed fields under their declared interpretation] - support class: Ticket volume, top tags ### Unexplained signals [list or "none"] ### Notable patterns [ratio drift, Goodhart flags, cross-source correlations] ## <source 2 name> ... ## Cross-source observations [if applicable — e.g., "GitHub traffic up + Stripe new customers up on the same day"] ## Proposed Evidence Entries [yaml blocks from Step 8]
Display the report to the user.
For each source, consult the adapter's "Canvas routing" section. Draft a candidate evidence entry for each applicable canvas file. Never auto-write — always present for user confirmation.
Example entry (GitHub → purpose.yml):
- type: "market_signal"
summary: "GitHub owner/repo on 2026-04-16: 342 stars (+12), 47 forks (+2), 943 views / 286 unique, 693 clones / 240 unique over 14 days. Top referrers: reddit.com, news.ycombinator.com, linkedin.com. Clone-to-star ratio 2.03 — healthy private evaluation. No unexplained referrers."
date: "2026-04-16"
source_class: external_data
provenance:
snapshot: ".claude/evals/metrics/github/2026-04-16.json"
adapter_version: 1**
A Claude Code harness that asks who this is for before the agent writes code. Outcome over output. You know how this goes. The idea turns up on a Thursday and it is a good one.
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.