plugins/claude-code-hermit/skills/capability-brainstorm/SKILL.md
On-demand hermit-voice brainstorm — synthesizes memory, capabilities, recent artifacts, and codebase shape into at most 2 capability ideas, each gated by proposal-triage before becoming a PROP. Invoke when the operator explicitly asks to brainstorm capabilities or ideate, e.g. "brainstorm capabilities", "what could you be doing for me?", "any capability ideas?". Never runs autonomously.
npx skillsauth add gtapps/claude-code-hermit capability-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, run:
bun ${CLAUDE_PLUGIN_ROOT}/scripts/proposal.ts metrics .claude-code-hermit --source=capability-brainstorm
Triage-survival < 25% or acceptance < 30% → cut this skill rather than tune it — the signal-to-noise ratio isn't there. INSUFFICIENT output means the ≥8-verdict sample hasn't been reached yet; wait and re-check.
These three sources require the main session's harness context and cannot be delegated:
ListMcpResourcesTool to enumerate currently online MCP tools.config.json → channels keys.Pass the capability signals from Step 1 in the dispatch prompt. Dispatch claude-code-hermit:skill-eval-runner pointed at ${CLAUDE_PLUGIN_ROOT}/skills/capability-brainstorm/reference.md. Include in the dispatch prompt:
plugin_root: ${CLAUDE_PLUGIN_ROOT} (resolved absolute path — the runner needs it for the sibling-scan, since ${CLAUDE_PLUGIN_ROOT} is not substituted in reference.md content)skills_list: the harness available-skills list (one skill per line)mcp_tools: the ListMcpResourcesTool outputchannels_keys: the channels key list from config.jsonThe runner reads memory topic files, compiled artifacts, and codebase shape in an isolated context, generates ≤2 ideas (applying the friction + grounding constraints), and returns the structured result.
Eval runner return schema — the runner's return value is a JSON object conforming to this block. The schema is byte-identical in reference.md (producer) and here (consumer); a contract test asserts this.
{
"ideas": [
{
"title": "<short idea title>",
"description": "<one-line description>",
"friction": "<one-sentence operator pain>",
"grounding": ["<item 1>", "<item 2>"],
"effort": "hours|days",
"evidence_summary": "<one-paragraph friction + grounding for proposal-create>"
}
],
"discarded": ["<one-line discarded idea>"],
"inputs_scanned": ["<title or path of each source scanned>"]
}
<!-- brainstorm-eval-schema:end -->
Failure policy: if the runner returns null or malformed JSON, treat as a zero-ideas result — proceed to Steps 3–5 with ideas: [], discarded: [], inputs_scanned: [], and note the failure in the batch message as 0 ideas emitted (analysis-runner failed).
/claude-code-hermit:proposal-create)For each generated idea, invoke /claude-code-hermit:proposal-create once with:
Title: <short idea title>
Evidence Source: capability-brainstorm
Evidence: <one-paragraph summary: friction + grounding items>
Set the PROP frontmatter:
source: auto-detectedcategory: capabilitytags: [capability-brainstorm, ideation]/claude-code-hermit:proposal-create invokes proposal-triage internally. Parse its outcome:
CREATE: <title> — PROP file written, note the assigned PROP-NNN.SUPPRESS: <title> — <code> — record the suppression code. Don't retry.DUPLICATE: <title> — <PROP-ID> — record the existing PROP-ID. Don't create.Do NOT invoke proposal-triage directly in this skill — /claude-code-hermit:proposal-create already does it.
Send one message following the Operator Notification protocol in CLAUDE.md (empty channels → optional PushNotification + conversation; configured channel → resolve + reply, with PushNotification last-resort and channel-send-unavailable dedup on miss):
🧠 Capability brainstorm (<N> idea(s))
1. **<short title>** — <one-line description>
_Grounding: <item 1>, <item 2>_
_Friction: <one-sentence pain>_
_Estimated effort: <hours|days>_
PROP-NNN created · (or: suppressed — <code> · or: duplicate of PROP-NNN)
2. **<short title>** — ...
If zero ideas were generated or all were suppressed/duplicated, the message is:
🧠 Capability brainstorm — 0 ideas emitted (<reason: thin context | all suppressed | all duplicates>)
If ≥1 PROP was created (not suppressed/duplicate), write:
.claude-code-hermit/compiled/capability-brainstorm-YYYY-MM-DD-HHMM.md
Frontmatter:
---
title: Capability brainstorm — <ISO timestamp>
type: capability-brainstorm
created: <ISO timestamp with timezone>
tags: [capability-brainstorm, ideation]
source: interactive
proposals_created: [PROP-NNN, ...]
---
Body (150-line cap):
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:
capability-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.