learn-craft
Generate a deep, book-grounded skill for any subject the user wants to master. Researches the canonical books on the topic, downloads them as PDFs (using the bundled `scripts/libgen.py` downloader), reads them in parallel via subagents, then synthesizes the books across each other into a concept-organized knowledge base — not a shelf of book summaries. Output is a tight `SKILL.md` plus per-concept `frameworks/` files (the working knowledge base, organized by idea) plus per-book `references/` deep-dives (the citation layer). Trigger whenever the user says they want to "learn X", "master X", "build a skill for X", "study X", "get smarter at X", "make me a skill on X", "I want to be good at X", "teach me X", "create a coach for X", or asks for help internalizing the canonical thinking on a craft, discipline, methodology, or domain. Don't trigger for "make a skill that does Y" (workflow automation — use /skill-creator). Trigger for "make a skill that helps me think like Y" (knowledge synthesis — that's this skill).
What this skill does
# learn-craft
Build a working, book-grounded skill on any craft the user wants to master.
The shape of the output mirrors the `ultimate-sales` skill: a tight `SKILL.md` (always loaded), a `frameworks/` folder organized by **concept** (the synthesized knowledge base — this is where the real value lives), and a `references/` folder organized by **book** (citation layer). The user gets a coach that thinks in concepts, not a shelf of book summaries.
## What's bundled
The book-fetching script (`scripts/libgen.py`) is bundled here — no separate install required. It's a stdlib-only Python script that searches libgen.li, picks the best complete English PDF, and saves it locally.
## When to use
Trigger when the user wants the canonical thinking on a topic distilled into something they can act on. Examples:
- "I want to learn investing" → topic = investing
- "make me a skill on negotiation"
- "I want to get really good at writing"
- "create a coach for product strategy"
Don't trigger for:
- Pure workflow automation ("make a skill that scrapes X") → that's `/skill-creator`.
- Single-book summaries ("summarize Atomic Habits") → just read the file.
- Already-existing skills (check `~/.claude/skills/` first; if a skill on this topic exists, ask whether to extend it or replace it).
## The mental model — concepts, not books
The single most important thing to understand about this skill: **the output is organized by concept, not by book.**
The wrong shape:
```
my-skill/
└── references/
├── book-1-summary.md ← "what does Author 1 say?"
├── book-2-summary.md ← "what does Author 2 say?"
└── book-3-summary.md ← "what does Author 3 say?"
```
This is a bookshelf, not a skill. To answer any real question the model has to read all three files and re-synthesize on the fly — every single time.
The right shape:
```
my-skill/
├── SKILL.md ← worldview + diagnose-first loop
├── frameworks/ ← THE KNOWLEDGE BASE — organized by concept
│ ├── diagnose-first.md ← cross-book; cites multiple authors
│ ├── tactical-empathy.md ← named concept; main author + supporting
│ ├── question-arsenal.md ← cross-book question taxonomy
│ └── ...
└── references/ ← citation layer — read-on-demand
├── book-1.md ← deep-dive into Book 1's distinctive contribution
├── book-2.md
└── ...
```
Now `frameworks/diagnose-first.md` *is* the synthesized concept — already cross-referenced, already prioritized, already de-duplicated. The `references/` layer is for when someone wants to drill into one author's original framing or hear their voice. Most queries never need to crack the references — the frameworks are sufficient on their own.
**This distinction is what separates a real skill from a glorified summary.** The synthesis stage (Stage 4) is where this happens. Don't skip it, don't shortcut it.
## The five-stage process
1. **Scope the craft** — confirm the topic and pick 4 canonical books.
2. **Download** — fetch each book as a PDF via the bundled `scripts/libgen.py`.
3. **Read in parallel** — spawn 4 subagents, one per book, each producing a structured per-book learnings document (working notes — not the final product).
4. **Synthesize** — extract concepts that span multiple books, name them, organize them. **This is the stage that's easy to skip and that ruins the skill if skipped.** Most of the orchestrator's thinking happens here.
5. **Author** — write the SKILL.md, frameworks/, and references/ from the synthesis.
Track these as five todos via TaskCreate so progress is visible to the user. Each stage is described below.
---
## Stage 1 — Scope the craft
If the user didn't name the topic, ask: *"What craft do you want to learn?"* Keep it open — they might say "investing", "Stoic philosophy", "negotiation", "Olympic weightlifting".
Once you have the topic, pick 4 canonical books. Use **WebSearch** with queries like:
- `"best books on <topic>" canonical`
- `"<topic>" foundational reading list`
- `"<topic>" recommended books site:reddit.com OR site:hacker news` (community wisdom often beats SEO listicles)
**How to choose 4 books:**
- Prefer **canonical/foundational** texts over recent bestsellers, unless the field is fast-moving (then mix one recent).
- Prefer **practitioner-written** over academic surveys — the user wants to *do* the thing, not write a paper about it.
- Cover **different angles**: theory, practice, contrarian, biography/case-study. A Stoic skill might be Aurelius (primary source), Holiday (modern bridge), Pigliucci (philosophical defense), Robertson (psychological application).
- **Avoid duplication** — three books on the same author's framework is wasteful. But *do* allow some overlap: synthesis only works if the books talk to each other on shared concepts.
Present the 4 books to the user as `Title — Author (year)` with a one-line "why this one" for each. Ask: *"Look right? Swap any?"* Wait for confirmation before downloading. This is the cheapest moment to course-correct.
If the user declines a book, propose a replacement and reconfirm. If they want fewer than 4 (e.g., "just 2 is fine"), proceed with what they want — the rest of the pipeline scales linearly.
---
## Stage 2 — Download
Create the working layout: `~/.claude/skills/<slug>/notes/`. Use a kebab-case slug derived from the topic (e.g., "investing", "stoic-philosophy", "negotiation"). The `notes/` directory will hold both the raw PDFs and the per-book learning files — these are working materials, not the final product, and the name reflects that.
For each book, call the bundled script directly:
```bash
python3 ~/.claude/skills/learn-craft/scripts/libgen.py "<title>" \
--out ~/.claude/skills/<slug>/notes \
--lang english
```
Run them in parallel by sending multiple Bash calls in a single message. Each download takes ~5–15 seconds.
**The script's behavior at a glance** (full docs in the comments at the top of `scripts/libgen.py`):
- Searches libgen.li with the given title (forwarded to libgen's fuzzy server-side match).
- Filters to complete PDFs (rejects `0` or `0/N` page counts that indicate unscanned/partial copies).
- Filters to English by default; non-English results get marked `⚠ off-language` and are not auto-downloaded. Override with `--lang any` or `--lang italian|spanish|french|german|...`.
- Ranks results: complete > derivative-free (workbook/summary penalty) > title-keyword overlap > most pages > most recent year > smallest size.
- Follows the libgen.li → CDN redirect, saves to `--out` with the filename from the server's `Content-Disposition`.
- Useful flags: `--list` (print top 5 candidates without downloading), `--pick N` (choose a non-default candidate by index), `--author NAME` (only add if the title alone is ambiguous — extra words tighten libgen's AND filter), `--year YYYY` (same caveat).
- Exit codes: `0` success / list-only, `1` no acceptable PDF, `2` network or HTTP error.
- On success, the saved file path is the only thing on stdout — everything else goes to stderr.
**Failure modes to handle:**
- **No English PDF found** (exit code 1): try once with the title alone (drop subtitle); if still nothing, ask the user whether to (a) accept an alternate edition with `--lang any`, (b) substitute a different book on the same topic, or (c) skip and proceed with three.
- **HTTP errors** (exit code 2): retry once after a few seconds — libgen.li is intermittently flaky.
- **Wrong book** (a workbook or summary slipped through): rerun with `--list` and `--pick N` after the user reviews.
After Stage 2, confirm with the user: list saved file paths and page counts. *"Got all four — ready to read them?"*
---
## Stage 3 — Read in parallel (working notes)
Spawn one **general-purpose** subagent per book in a single message (parallel execution). The output of this stage is **working notes** — raw structured extraction, not the final knowledge base. Be eRelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.