skills/smaht/propose-skills/SKILL.md
Mine recent Claude Code session transcripts to propose skills that would automate repetitive patterns the user actually does. Read-only MVP — outputs a markdown report only. No interactive UI, no scaffolding handoff in v1 (those are v2/v3 follow-ups). Use when: "find skills I should build", "what should I automate", "propose skills from my sessions", "mine my history for skill ideas", "session-mined skill builder", "skill discovery from past usage".
npx skillsauth add mikeparcewski/wicked-garden propose-skillsInstall 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.
Detect recurring patterns in Claude Code session transcripts and emit a markdown report of skill candidates. The framework grows from what the user actually does, not from speculative authoring (#677).
# Default — current project, last 10 sessions
sh "${CLAUDE_PLUGIN_ROOT}/scripts/_python.sh" \
"${CLAUDE_PLUGIN_ROOT}/scripts/smaht/propose_skills.py"
# Scan a different project (use --project= because the slug starts with '-')
sh "${CLAUDE_PLUGIN_ROOT}/scripts/_python.sh" \
"${CLAUDE_PLUGIN_ROOT}/scripts/smaht/propose_skills.py" \
--project=-Users-me-Projects-other --limit 25
# Print structured JSON alongside the markdown report
sh "${CLAUDE_PLUGIN_ROOT}/scripts/_python.sh" \
"${CLAUDE_PLUGIN_ROOT}/scripts/smaht/propose_skills.py" --json
Output modes:
--json — prints a JSON object on stdout with report_path, scan stats, and
the full candidates array. The markdown report is still written to disk.Do not auto-invoke /wg-scaffold — this is a read-only proposer.
| Kind | Trigger |
|------|---------|
| Repeated tool sequence | Same ordered N-tuple of tool names appears in >= 3 distinct sessions (N in [2, 5]). Homogeneous sequences like Bash → Bash → Bash are filtered. |
| Repeated prompt template | User prompts whose first 5 normalized words match across >= 3 sessions. Generic continuations (yes, continue) and Claude Code system envelopes (<local-command-...>, <command-name>) are filtered. |
| Repeated bash shape | Same first 2 tokens of a bash command across >= 3 sessions (e.g. gh pr ...). Generic file-inspection commands (ls, cat, cd, ...) are filtered. |
${CLAUDE_CONFIG_DIR:-~/.claude}/projects/{project-slug}/*.jsonl.
The analyzer honors CLAUDE_CONFIG_DIR so users with custom config dirs
(e.g. $HOME/alt-configs/.claude) get matched correctly. Default slug
is derived from the current working directory..jsonl line, extracting tool_use items from assistant
messages and the leading text of user messages. Robust against malformed
lines.private or secret (case-insensitive). The check runs on the
FULL untruncated prompt — a trigger token past the 200-char detector limit
still flags the session.MIN_FREQUENCY (total occurrences) AND MIN_SESSION_COUNT (distinct
sessions) — those are independent counters, not the same number./wg-scaffold skill <name> --domain <d>
suggestion. Domain is inferred from tool / bash keywords.tempfile.gettempdir()/wg-propose-skills-{timestamp}.md. On macOS this
resolves to a per-user dir under /var/folders/...; on Linux it follows
$TMPDIR and falls back to /tmp. Print the report path (default mode)
or a JSON envelope including the full candidates array (--json mode).tempfile.gettempdir(). Never modifies
session files.pathlib.Path,
tempfile.gettempdir(), no third-party deps.$HOME are scrubbed to ~/... in the
report. Sessions mentioning private / secret are skipped entirely.These are explicit v2 / v3 follow-ups and out of scope for this MVP:
/wg-scaffold or the scaffolding skill.After running the script, the assistant should reply with something like:
Report: /var/folders/.../wg-propose-skills-20260427T030000Z.md (4 candidates)
Top 3 candidates:
1. run-curl-s — `curl -s …` shell pattern, 24 occurrences across 12 sessions
2. run-pnpm-run — `pnpm run …` shell pattern, 9 occurrences across 6 sessions
3. run-lsof-ti-4321 — `lsof -ti:4321 …` shell pattern, 5 occurrences across 5 sessions
Run `/wg-scaffold skill <name> --domain <d>` for any candidate that's
worth building.
Exit codes:
0 — graceful run (even when no candidates are found).1 — failed to write the report file (I/O error after analysis succeeded)./wg-scaffold skill ... — manual scaffolding (the v2 handoff target).hookify:hookify — different direction (proposes hooks, not skills).claude-code-setup:claude-automation-recommender — codebase-level analysis,
not session-level.scripts/smaht/propose_skills.pytests/smaht/test_propose_skills.py (3 detectors + dedupe + privacy
scrub + end-to-end smoke).scenarios/smaht/propose-skills-shape.md.development
--- name: large-scale-migration description: How to execute a LARGE MECHANICAL change across any codebase with LEVERAGE instead of an agent-grind or hand-edits — a cross-cutting migration, refactor, rename, dialect/framework/DB port, library adoption, or bulk transform. The map→transform→gate pattern: a deterministic transform driven by a source-of-truth map, proven by a differential-equivalence gate. Use when the work is "migrate all X to Y", "rename Z everywhere", "port to a new DB/dialect/fra
testing
v11 LLM-based work-shape classifier. Replaces the regex archetype detector with the model's own reasoning. Reads the user's prompt, picks the right archetype(s) from the catalog, identifies signals (blast_radius, novelty, reversibility, etc.), and persists to SessionState so subsequent turns steer correctly. Use when: the prompt_submit hook emitted a `<wg classify-due />` directive, OR explicitly invoked at session start, OR when re-classifying after the user changes scope mid-session.
tools
v11 work-shape archetype runner. When a prompt has been routed to one of the 9 archetypes (triage, explore, specify, decide, ship, review, incident, build, migrate), this skill is the entry point. It picks the right per-archetype playbook from refs/ and executes the phase shape declared in `.claude-plugin/archetypes.json`. Use when: a `<wg archetype="X">` or `<wg archetypes>` system-reminder tag appears, an explicit "let's run the X archetype" request, or when one of the per-archetype slash commands resolves to this skill.
development
Show or set the session intent variable. Intent gates how loud the framework is — simple-edit (silent), feature/research (synthesis directive), rigor (full crew context). Auto-detected on turn 1; this skill overrides explicitly. Sticky for the session. Use when: "set intent", "intent override", "/wicked-garden:intent", "make the framework quiet", "force rigor", "what's my intent".