plugins/claude-code-dev-hermit/skills/domain-brainstorm/SKILL.md
On-demand dev-voice brainstorm — reads codebase friction signals (git churn, test signal, manifest drift, README coverage) and emits at most 2 improvement ideas, each gated by proposal-triage before becoming a PROP. Invoke when the operator asks "what should I be fixing?", "anything wrong with X?", or "brainstorm improvements". Never runs autonomously.
npx skillsauth add gtapps/claude-code-hermit domain-brainstormInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
After ≥8 invocations, check the capability-brainstorm segment of core's proposal metrics report — run .claude-code-hermit/bin/hermit-run proposal metrics .claude-code-hermit --source=capability-brainstorm (the project-resident bin/hermit-run resolves core's plugin root, which a path relative to this plugin can't reach), or read the capability-brainstorm row of the table /claude-code-hermit:hermit-evolution prints. If triage-survival < 25% or PROP-acceptance < 30%, treat it as a class-level signal that brainstorm output is noisy and raise it with the operator — the segment is shared with core's capability-brainstorm and the other domain brainstorm skills, so it cannot by itself say which skill to cut.
Read these in parallel — all are cheap working-tree reads. Do not run the test suite or install tools.
Git activity
git log --oneline -50
git log --format= --name-only -50 | sort | uniq -c | sort -rn | head -20
Note the 5 most-churned files and any subsystem clusters.
Test signal
Read .claude-code-hermit/state/last-test.json (written by /dev-test). Extract status, exit_code, and duration_ms. If absent or last-modified >24h ago, note "no recent test run" — do not run the suite.
Manifest drift
ls for package.json, Cargo.toml, pyproject.toml, go.mod. For each found, check its lockfile (package-lock.json/yarn.lock/pnpm-lock.yaml, Cargo.lock, poetry.lock, go.sum) exists alongside it. Flag any mismatch.
README coverage
Read README.md and a one-level ls of the repo root. Note features or modules claimed in the README with no corresponding directory or file visible.
Think across all four inputs. For each candidate, both constraints must pass before including it:
git:cli/index.js, state:last-test.json duration=38s, file:package-lock.json missing, readme:§Feature X). These support the friction; friction is the bar.Map each passing idea to the closest dev prefix: [missing-tests], [tech-debt], [dependency], [tooling], or [architecture].
Cap at 2 ideas. Emit-zero if none pass. Record discarded candidates (one line each) for Gate 4.
For each idea, invoke /claude-code-hermit:proposal-create once:
Title: [<prefix>] <short idea title>
Evidence Source: capability-brainstorm
Evidence: <one paragraph: friction sentence + named grounding items>
Set frontmatter: source: auto-detected, category: improvement, tags: [capability-brainstorm].
Evidence Source: capability-brainstormis reused intentionally: it is the only sourceproposal-triagerecognizes for the single-pass recurrence bypass, and adding a dedicateddomain-brainstormsource is a core edit this skill deliberately avoids. Provenance is carried by thetagsabove, whichproposal-createwrites onto both thetriage-verdictrow and the proposal frontmatter. The cost: these proposals share corecapability-brainstorm's kill-criteria segment, so the numbers are combined rather than per-skill.
Parse the verdict:
CREATE — note PROP-NNN.SUPPRESS — <code> — record suppression code; don't retry.DUPLICATE:<PROP-ID> — record existing ID; don't create.Do NOT invoke proposal-triage directly — /proposal-create handles it.
Send one message per the Operator Notification protocol in CLAUDE.md.
Zero-emit:
🔧 Domain brainstorm — 0 ideas emitted (<reason: thin context | all suppressed | all duplicates>)
Non-zero:
🔧 Domain brainstorm (<N> idea(s))
1. **[prefix] <title>** — <one-line description>
_Grounding: <item 1>, <item 2>_
_Friction: <one-sentence pain>_
PROP-NNN created · (or: suppressed — <code> · or: duplicate of PROP-NNN)
If ≥1 PROP was created (not suppressed or duplicate), write:
.claude-code-hermit/compiled/domain-brainstorm-YYYY-MM-DD-HHMM.md
---
title: Domain brainstorm — <ISO timestamp>
type: domain-brainstorm
created: <ISO timestamp with timezone>
tags: [domain-brainstorm, ideation]
source: interactive
proposals_created: [PROP-NNN, ...]
---
Body (150-line cap): ideas that passed (one paragraph each), discarded candidates (one line each), triage verdicts, inputs scanned (paths only, no content).
Do not tag foundational — this is a time-bounded ideation snapshot.
Zero-emit runs: skip the artifact entirely. Log one line to SHELL.md Findings:
domain-brainstorm: 0 ideas emitted (<reason>)
tools
Composes and delivers the daily fitness brief — a forward-looking morning read (readiness + today's plan) or a backward-looking evening read (today's training, or an earned-rest note, + tomorrow's setup) — in the operator's configured voice. Invoke with /claude-code-fitness-hermit:fitness-brief --morning|--evening|--slot <name>. Becomes the plugin's two daily beats — the morning Strava connectivity check and the evening activity sync, RPE binding, and Run deep-dive.
development
Renew the hermit's long-lived Claude login token over the channel, before it expires. Relays a one-time sign-in link to the operator, takes the code back, installs the new token, and restarts. Activates on messages like 'relogin', 'renew my login', 'reauth', 'the login is expiring', or when doctor's credential-expiry check flags setup-token.
development
Synthesizes the past 7 days of archived briefs into a weekly digest — top stories, emerging vs faded themes, category activity, and per-source performance built from archive frontmatter. Delivers to the operator's configured channel and archives a weekly note. Designed as a weekly routine. Invoke with /feed-hermit:weekly-digest.
development
Manage developing story arcs tracked across briefs — add, resolve, and list active arcs in compiled/story-arcs-*.md. Arc Watch keywords drive the feed-brief arc-tagging enrichment. Invoke with /feed-hermit:story-arcs add|resolve|list.