From claude-rudder
Synthesize a new SKILL.md from the procedure that was just followed in this session, so the next session can replay it without being briefed from scratch. Use when the user says "extract this as a skill", "save this process", "make a skill from what we just did", "this should be a skill", "let's not have to explain this again next time", or after a long worked example whose procedure has clear reuse value.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin claude-rudderThis skill uses the workspace's default tool permissions.
Backwards-compile a reusable SKILL.md from a worked example. Distinct from `new-skill` (which creates a skill forward from a description) — this one **synthesizes from observed conversation**: what we actually did, why we made the calls we made, what edge cases we hit, what the hard rules turned out to be.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Backwards-compile a reusable SKILL.md from a worked example. Distinct from new-skill (which creates a skill forward from a description) — this one synthesizes from observed conversation: what we actually did, why we made the calls we made, what edge cases we hit, what the hard rules turned out to be.
The product is a SKILL.md following Daniel's conventions (frontmatter with name + description-with-trigger-phrases, then a body with When-to-use, Steps, Gotchas, Hard rules, Counterparts).
log-session is being run and the procedural meat is worth promoting from a one-off log entry to a reusable skillIf the procedure is fully captured by an existing skill (e.g., the user is just walking through migrate-loose-skill and there's nothing new), don't extract — point at the existing skill instead.
Scan the conversation. Look for:
If the conversation has multiple distinct procedures interleaved, ask:
I see [N] candidate procedures: [A], [B], [C]. Which one to extract? (or all, as separate skills)
Use this skeleton. Fill from observed conversation, not from imagination:
---
name: <kebab-case-name>
description: <one paragraph: what the skill does, when to invoke it, with the ACTUAL trigger phrases the user uses or would naturally use — drawn from the conversation, not invented>
---
# <Title Case Name>
<One-paragraph framing: what the skill does and why it exists. Distinguish from any neighboring skills.>
## When to use
- <bullet — concrete trigger condition from the conversation>
- <bullet — another>
- <skip / negation rule if relevant: "don't use this when X — use Y instead">
## Steps
### 1. <action verb + object>
<concrete what-to-do, with code blocks where applicable>
### 2. <next>
…
(As many steps as the procedure had. Don't pad — but don't compress past the point where the next session could re-derive what to do.)
## Gotchas
<bugs / surprises / dead-ends from the actual session — each as a numbered item with the symptom and the fix or workaround>
1. **<symptom>** — <what causes it, what to do instead>
## Hard rules
<crystallized "always do X" / "never do Y" — drawn from user corrections or explicit statements during the session>
- **<rule>**
- **<rule>**
## Counterparts
<related skills / files / tools the procedure leans on. Both within this plugin and across plugins.>
- `<plugin>:<skill>` — <how it relates>
Ask the user:
Which plugin should this skill live in?
claude-rudder@danielrosehill— if the procedure is about session UX, planning, or Claude Code itself- — if the procedure is domain-specific (e.g., transcription work →
claude-transcription, op-vault work →op-vault, etc.)- In the project repo at
<repo>/.claude/skills/<name>/SKILL.md— if the procedure is specific to one repo and shouldn't be globally available
Suggest a default based on the procedure's domain, but don't auto-pick. The user often has a preference about scope.
Print the full draft SKILL.md to chat. Don't write it yet — let the user review.
Draft of
<name>SKILL.md (target:<plugin>or<repo path>):[full draft]Ready to write? (yes / edit / wrong target / cancel)
If approved:
For a plugin target:
<plugin-source-repo>/skills/<name>/SKILL.mdAdd <name> skill (extracted from session)For a repo-local target:
<repo>/.claude/skills/<name>/SKILL.md✓ Skill written: <path>
Target: <plugin name>@<marketplace> or <repo>
Version bumped: <old> → <new> (only for plugin targets)
Commit: <sha>
jq and gh, name them. If it involved a specific MCP server or another skill, reference it.jq '.version=\"X\"' file > tmp && mv tmp file to update the version" is useful. Specific examples > abstract guidance.This skill can be applied to itself: if you find yourself walking through how to extract a skill (e.g., handling a corner case the SKILL.md above doesn't cover), invoke extract-skill on that conversation to update this file. The loop terminates because eventually the procedure stabilises.
new-skill — forward-design from a description (different input)log-session — captures the whole session as a journal entry; this skill captures one procedure from it as a reusable thingclaude-rudder:plugin-data-storage — convention reference for any extracted skill that needs to persist user datareferences/handover-template.md — same general "single source of truth" pattern at the schema level