coreyhaines31/skillify
When you want to create, adapt, or update a Claude Code skill in one of your sibling repos (list your own repos in ~/.config/makerskills/skillify/repos.yaml; defaults to makerskills). Routes to the right mode automatically. Modes — CREATE (from-chat / from-video / from-dump / from-scratch) turns a workflow, brief, recording, or fresh idea into a new skill. ADAPT ports an external skill (GitHub URL, agentskills.io, local disk) into your namespace with three-bucket classification (keep/adapt/add) + license check + attribution. UPDATE improves existing skills from learnings with cross-skill propagation, memory-vs-skill triage, and semver discipline. Defers to Anthropic's guidance (compound-engineering:create-agent-skill, compound-engineering:skill-creator, compound-engineering:heal-skill) for schema and best-practice depth. Triggers on "/skillify," "create a skill," "make this a skill," "skill from this chat," "extract a skill from what we've been doing," "adapt this skill," "port this skill," "fork this skill," "borrow this skill," "update X skill," "apply this to the relevant skills," "propagate this learning," "improve [skill]," "fix [skill]," "iterate on [skill]." Part of the -ify trifecta (skillify / toolify / loopify) for extending Claude Code.
npx skills add https://github.com/coreyhaines31/makerskills --skill skillify
One skill, three modes. Routes automatically to the right one based on input signal.
Consolidates and replaces the prior create-skill, adapt-skill, and update-skill (all merged as of v0.2.0 for vocabulary-moat consistency with the -ify trifecta).
Route by signal:
| Signal | Mode |
|---|---|
| Invoked mid-conversation with substantive recent workflow discussion | CREATE / from-chat (default) |
| /skillify from-video <url> OR /skillify + a video URL | CREATE / from-video |
| /skillify from-dump + pasted brief/transcript/notes | CREATE / from-dump |
| /skillify from-scratch <name> OR "make a new skill called X" with no context | CREATE / from-scratch |
| /skillify <github-url> OR "adapt this skill" / "port this skill" / "fork this skill" + external source | ADAPT |
| /skillify <existing-skill> <change> OR "update X skill" / "propagate this learning" | UPDATE / targeted |
| /skillify update (mid-conversation) | UPDATE / from-chat — scan recent chat for learnings |
| /skillify usage <skill> | UPDATE / usage — review recent runs, suggest improvements |
If ambiguous, ask before proceeding. Never guess between CREATE and ADAPT if there's an external URL involved.
Build a new skill from chat / video / dump / scratch.
| Sub-mode | What |
|---|---|
| from-chat (default) | Extract the skill from the workflow discussed in this conversation. Most common case. |
| from-video | User recorded a Loom / Zoom / screen-share. Calls watch-video in visual mode → transcript + key visual moments → SKILL.md. Best for visual/UI-heavy workflows. |
| from-dump | User pastes a brief, prior conversation transcript, exported chat, or notes. |
| from-scratch | Fresh idea with no source material — interactive Q&A. |
Don't reinvent SKILL.md format rules. For frontmatter, description-writing, references/ structure, and skill best practices:
compound-engineering:create-agent-skill (agent) — expert guidance for creating + editing Claude Code skillscompound-engineering:skill-creator (skill) — deeper guide for effective skillscompound-engineering:heal-skill (skill) — for fixing existing skillsCall those directly when in doubt about format. skillify orchestrates *your* workflow — which repo, which conventions, which cross-references. Format expertise lives upstream.
Load the user's sibling repo list from ${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/skillify/repos.yaml if present. Otherwise default to makerskills (this repo). Example format:
# ~/.config/makerskills/skillify/repos.yaml
repos:
- name: makerskills
domain: Personal cross-cutting operator work
path: ~/code/makerskills
- name: marketingskills
domain: Generic marketing tactics
path: ~/code/marketingskills
Infer target if obvious from the skill's domain; ask if ambiguous.
from-chat:
from-dump:
from-video:
watch-video <url> visual — get transcript + key visual moments + summary.<workdir>/transcript.txt, <workdir>/moments.md, <workdir>/summary.md.second-brain as call-<slug>.md or note-<slug>.md.Heuristic: recording >10 minutes = process probably too big for one skill. Suggest splitting before drafting.
from-scratch:
Interactive Q&A:
watch-video, read-book, paste)---
name: <kebab-case>
description: <rich, trigger-rich, ~2–4 sentences. Lead with "When you want to..." Include 4–8 trigger phrases in quotes. Differentiate from adjacent skills.>
metadata:
version: 0.1.0
---
Description rules (load-bearing — Claude routes by description match):
For deeper description-writing guidance, consult compound-engineering:skill-creator.
<target-repo>/skills/<name>/
├── SKILL.md
└── references/
└── ...
Body follows existing skills' pattern (pm, decide, second-brain):
# /<name> — <one-line purpose>## Step N — <phase> sectionsAppend to target repo's README skill table:
| [`<name>`](./skills/<name>/SKILL.md) | <one-line purpose> |
Commit + push. Report new skill path, commit hash, and reminder that /plugin install or symlink may need a refresh.
compound-engineering:heal-skill for a quality pass?"*Port an external skill (GitHub URL, agentskills.io, local disk, or pasted SKILL.md) into your namespace.
Accept:
https://github.com/<owner>/<repo> or full path to SKILL.md)~/.claude/plugins/)# GitHub repo: clone shallow
git clone --depth 1 <url> /tmp/skillify-adapt-<short-id>/
# OR fetch a single file
gh api -H "Accept: application/vnd.github.raw" repos/<owner>/<repo>/contents/SKILL.md > /tmp/adapt-source.md
Capture the commit SHA so attribution can point at a stable revision.
Read source SKILL.md + any references/ it ships. Classify into three buckets per references/adapt-buckets.md:
| Bucket | What | Example |
|---|---|---|
| Keep verbatim | Format, schema, mechanic, scripts, frameworks | Question banks, ffmpeg flags, regex patterns, JSON schemas |
| Adapt | Tool defaults, paths, voice, naming, opinions | Their video tool → your watch-video, their kanban → your pm, their voice → your voice |
| Add | Cross-references to your existing skills, composition notes, your conventions | "Composes with decide," "Saves to second-brain raw/," "Uses MLX-Whisper local" |
Output classification as a table for approval before writing anything. Don't silently rewrite — surface the changes.
Read the source's LICENSE. Per references/adapt-license-check.md:
| License | Action |
|---|---|
| MIT / Apache-2.0 / BSD / ISC / CC0 | ✅ Green — proceed |
| MPL-2.0 / LGPL | 🟡 Yellow — adapt OK; warn about file-level reciprocity |
| GPL-2.0 / GPL-3.0 / AGPL | ❌ Red — contagion risk. Surface before proceeding. |
| Proprietary / no license | ❌ Red — stop. No legal basis to copy. |
| Unclear | 🟡 Yellow — ask, default to skip if uncertain |
For permissive licenses, attribution is the only requirement — handled in Step 6.
Same table as CREATE Step 3.
Keep verbatim: copy as-is; add <!-- from <source> --> marker if helpful.
Adapt:
watch-video, read-book, paste)pm, their video tool → watch-video, their note system → second-brain, their decision framework → decide~/outputs/ → your ~/Documents/<skill>-<...>/ convention; their config → your references/ patternAdd:
Write references/attribution.md:
# Attribution
- **Source**: <original SKILL.md URL>
- **Repository**: <repo URL>
- **Author**: <name + handle>
- **Commit SHA**: <SHA at time of adapt>
- **License**: <license name + URL>
- **Adapted**: <YYYY-MM-DD>
## What was kept verbatim
- ...
## What was adapted
- <old> → <new>
## What was added
- ...
## License compliance
<upstream LICENSE text if MIT/BSD/Apache requires it, OR reference where in this repo it lives>
## Upgrade path
Run `git ls-remote <repo-url> HEAD`. If SHA differs from above, re-run `/skillify <same-url>` for a 3-way merge.
For MIT / Apache / BSD, LICENSE text either gets copied into this file or the source LICENSE file gets copied to the skill dir.
Same as CREATE Steps 6–7. Commit message: "Adapt <name> skill from <source-name>".
compound-engineering:heal-skill for a QA pass?"*loopify?"*Improve existing skill(s) from learnings.
| Sub-mode | When |
|---|---|
| from-chat (default) | Scan recent conversation for learnings, identify affected skill(s) |
| from-dump | User provides a brief, feedback, transcript, postmortem |
| targeted | User names the skill + change directly. Skip discovery. |
| usage | Review recent runs of the named skill, identify gaps |
Default when invoked mid-conversation with substantive recent activity: from-chat.
For from-chat / from-dump / usage: look for change-worthy signals (full taxonomy in references/update-change-types.md):
Output: a clear list of *N learnings*, each phrased as a single change.
For targeted: skip extraction — user already named the change.
For each learning, search across all SKILL.md + references/ in the current repo (and optionally all sibling repos from your repos.yaml with --cross-repo):
grep -rln "<key terms>" ~/code/makerskills/skills/ --include="*.md"
# Across all sibling repos (list yours in $MAKERSKILLS_CONFIG/skillify/repos.yaml):
config="${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/skillify/repos.yaml"
for raw in $(yq -r '.repos[].path' "$config"); do
repo="${raw/#\~/$HOME}" # expand leading ~ to $HOME so grep resolves the real path
grep -rln "<terms>" "$repo/skills/" --include="*.md" 2>/dev/null
done
Classify by confidence:
| Confidence | What | Action |
|---|---|---|
| High | Direct keyword match + clearly same topic | Propose change |
| Medium | Adjacent topic — rule *might* apply | Surface for explicit approval |
| Low | Tangential — rule could be stretched | Mention but don't propose |
See references/update-propagation.md for the cross-skill propagation playbook.
For each learning: is this skill-specific or a broader principle?
| Type | Where it goes |
|---|---|
| Skill-specific rule | Edit the SKILL.md / references file directly |
| Cross-cutting principle | ~/.claude/memory/feedback_<topic>.md |
| Both | Write the memory file AND update the skill(s) that immediately apply |
Example: *"links go in first comments, not body"* → applies to jab-hook AND is a broader social principle → both update jab-hook AND save feedback_social_link_placement.md.
Offer the memory write explicitly: *"This looks like a principle, not just a skill rule. Save to memory as feedback_<slug>.md?"*
For each affected file, show change as before/after or unified diff:
### `skills/<skill>/SKILL.md` — proposed change
**Before** (lines NN–NN):
> <existing text>
**After**:
> <new text>
**Why**: <one-line rationale>
**Version bump**: 0.2.0 → 0.2.1 (PATCH — clarification)
**Approve / edit / skip?**
Per-file approval. Don't batch — small changes are easy to OK; bundling forces all-or-nothing.
See references/update-versioning.md for semver rules.
Edit to apply the exact changemetadata.version per the suggested levelBatch multiple file changes within one skill into a single commit.
Group by skill. Examples:
"slide-deck: emphasize spoken-aloud voice (write for the ear, not the page)""jab-hook, marketingskills:social: link placement (no inline URLs)"Show:
compound-engineering:heal-skill would be a useful QA passDon't add ceremony to surgical edits. If the user says "add this one bullet to X.md," just Edit. UPDATE mode earns its keep when:
For one-line updates with no cross-skill implications: just Edit.
watch-video — load-bearing for CREATE / from-video. Visual-mode output (transcript + key visual moments + summary) is the input for skill synthesis. Always call in visual mode for process recordings — UI state matters as much as words.second-brain — optionally capture source video/dump as raw/call-<slug>.md or raw/note-<slug>.md so the source artifact lives alongside the skill it produced.toolify — sibling in the -ify trifecta. Use toolify when the goal is adding an integration/MCP/API, not authoring a skill.loopify — sibling in the -ify trifecta. Use loopify for agent-loop setup rather than a skill.compound-engineering:create-agent-skill (agent) — call for format and best-practices expertisecompound-engineering:skill-creator (skill) — deeper best-practices referencecompound-engineering:heal-skill (skill) — QA pass after any modewatch-video, read-book, paste). Single-word noun names are fine for distinctive concepts (decide, pm, paste, skillify).references/attribution.md.Take coreyhaines31/skillify from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.