Stop retyping the same instructions to Claude. Turn your own docs into a reusable Claude Code Skill with NotebookLM — one reliable skill for every recurring task in minutes.
This guide is reviewed for clarity, service accuracy, and AI-search readability. The next quarterly content review is tracked internally before unsupported metrics or client proof are added.
Turn Your Docs Into a Claude Code Skills Factory
You retype the same instructions to Claude every time you start a task. Write the cold email "like this." Format the landing page copy "like that." Same explanation, every session.
There's a better move. You hand Claude one file that tells it exactly how to do a job, and it does that job the same way on the first try. No re-explaining. No babysitting the output.
That file is a Claude Code Skill. And the fastest way to write a good one is to let NotebookLM build it from your own reference docs — so the skill only knows what you actually taught it, with nothing made up.
This guide walks you through the full loop end to end. Do it once and you have a working skill in a few minutes. Then rerun the loop for every recurring task you own.
What you're building
A Skill is a single file named SKILL.md that lives in a folder Claude Code reads automatically. It holds your instructions for one job. When your request matches what the skill is for, Claude loads it and follows it — same formula, every time.
NotebookLM is a research tool that stays grounded in the sources you give it. It reads your uploads and answers only from them, with citations back to the exact lines. That grounding is the whole trick here: because it can't pull in outside facts, it can't pad your skill file with invented steps.
Put them together and you get a factory:
promptYour docs → NotebookLM writes SKILL.md → Drop into Claude Code → Claude runs it on repeat
The 6-step workflow (do this now)
Step 1 — Launch NotebookLM
Go to NotebookLM and create a new notebook. Name it after the job you want to automate, like "Cold Email Skill." One notebook per skill keeps the sources clean.
Step 2 — Upload your references
Add the documents that represent how this job should be done. NotebookLM accepts PDFs, Google Docs, Google Slides, websites, and pasted text. These uploads are the raw material — the skill can only be as good as what you feed it. (See the references checklist below for what to upload per skill type.)
Step 3 — Generate the SKILL.md
Paste the master prompt (below) into the chat. It tells NotebookLM to write a complete SKILL.md strictly from your sources, with valid frontmatter and zero fabrication. Copy the output exactly.
Step 4 — Drop it into Claude Code
Create a folder for the skill and save the file as SKILL.md (uppercase) inside it. Personal skills go in ~/.claude/skills/, project skills go in .claude/skills/. One file, no other setup.
Step 5 — Claude reads it and executes
Open Claude Code. When you ask for the task the skill covers, Claude auto-discovers the skill, reads it, and runs your formula the same way every time. Claude Code picks up new and edited skills without a restart.
Step 6 — Repeat for each task type
Rerun the loop for the next job: cold email, landing page copy, FAQ answers, support replies, anything you do more than once. Each task becomes its own reliable skill. At Hypd we keep one skill per recurring deliverable so output stays consistent no matter who runs it.
The copy-paste NotebookLM prompt
After your sources are uploaded, paste this into the notebook. It forces source-only output and the correct file structure:
promptYou are writing a single file called SKILL.md for Claude Code. Use ONLY the sources I uploaded to this notebook. Do not add steps, rules, examples, or facts that are not in the sources. If something is not covered by the sources, leave it out — never invent it. Output the complete file and nothing else, in this exact structure: 1) YAML frontmatter at the very top, fenced by --- lines on their own rows, containing exactly two fields: - name: a short slug, lowercase letters/numbers/hyphens only, max 64 characters, no spaces (example: cold-email-writer) - description: one to three sentences, max 1024 characters, that say WHAT the skill does and WHEN Claude should use it. Start with the trigger phrase, e.g. "Use when the user asks to write or rewrite a cold outreach email..." 2) The body in Markdown, drawn strictly from the sources, with these sections: ## When to use ## Inputs to ask for ## Step-by-step ## Rules and constraints ## Output format ## Example Write the body as direct, do-this instructions to Claude. Keep it tight. Every rule must trace back to the uploaded sources. Return the file as plain text — no commentary before or after.
If NotebookLM adds anything that isn't in your docs, reply "Remove any step not supported by my sources and show citations" and it will tighten the file.
The SKILL.md file spec (get this exactly right)
Claude Code is strict about the format. Match it or the skill won't load.
- File name:
SKILL.md— uppercase, exactly that name. - Frontmatter: YAML at the very top, fenced by
---lines on their own rows. Two required fields:name— max 64 characters, lowercase letters, numbers, and hyphens only. Must not start or end with a hyphen. No spaces.description— max 1024 characters, non-empty. Says what the skill does and when to use it.
- Body: Markdown below the frontmatter — your instructions and workflow.
- Optional fields you can add later if you need them:
license,compatibility,metadata,allowed-tools. You don't need any of these to start.
Here's the minimal shape:
prompt--- name: your-skill-name description: Use when the user asks to [task]. [What it produces and the rules it follows.] --- # Your Skill Name ## When to use ... ## Step-by-step 1. ... 2. ... ## Rules and constraints - ... ## Output format ...
Where the file goes (exact install locations)
Each skill lives in its own folder, and the file inside is always SKILL.md.
- Personal skills (available in every project on your machine):
prompt
~/.claude/skills/<skill-name>/SKILL.md - Project skills (live in a repo, shared with anyone who clones it):
prompt
.claude/skills/<skill-name>/SKILL.md
Create the folder and you're done. For a personal cold-email skill:
promptmkdir -p ~/.claude/skills/cold-email-writer # save the NotebookLM output as: # ~/.claude/skills/cold-email-writer/SKILL.md
For a project-scoped version, run the same thing from your repo root:
promptmkdir -p .claude/skills/cold-email-writer # save as: .claude/skills/cold-email-writer/SKILL.md
Use personal for things you do across all your work. Use project for skills tied to one codebase or one client that you want teammates to inherit.
What makes a good description (so Claude auto-triggers it)
The description field is the single most important line in the file. It's what Claude reads to decide whether to load the skill for a given request. A vague description means the skill sits there and never fires.
Rules for a description that triggers reliably:
- Start with the trigger. Lead with "Use when the user…" and name the exact task. Claude matches your request against this.
- Name the task in the user's words. If you'd say "write me a cold email," the description should contain "write a cold email," not "craft bespoke outreach correspondence."
- State what it produces. "Produces a short, personalized B2B cold email" tells Claude the output shape.
- Be specific, not poetic. Concrete nouns and verbs beat adjectives.
Naming and structure rules:
nameis lowercase-hyphen only:cold-email-writer,landing-page-copy,faq-answers. No spaces, no caps, no leading/trailing hyphen.- Keep one skill to one job. A skill that tries to do five things triggers unpredictably and follows none of them well.
- Put the most important constraints near the top of the body so they're impossible to miss.
Weak description (won't fire reliably):
promptdescription: Helps with marketing content and various writing tasks.
Strong description (fires on the right request):
promptdescription: Use when the user asks to write or rewrite a cold outreach email to a prospect. Produces a short, personalized B2B cold email that follows our offer, ICP, and brand-voice rules.
Worked example: a cold-email skill, end to end
Here's the full loop with real material.
Sources uploaded to NotebookLM: your 5 best-performing sent cold emails, your one-page offer/value-prop doc, your ICP definition, and a short brand-voice note.
Prompt: the master prompt above.
Output saved to ~/.claude/skills/cold-email-writer/SKILL.md:
prompt--- name: cold-email-writer description: Use when the user asks to write or rewrite a cold outreach email to a prospect. Produces a short, personalized B2B cold email that follows our offer, ICP, and brand-voice rules. --- # Cold Email Writer ## When to use Use whenever the user wants a first-touch cold email to a specific prospect, or wants an existing cold email rewritten to match our voice. ## Inputs to ask for Before writing, confirm: - Prospect name, role, and company - One specific, recent trigger about them (a launch, hire, post, change) - Which offer to lead with If the trigger is missing, ask for it. Do not invent details about the prospect. ## Step-by-step 1. Open with the specific trigger in one plain sentence. No flattery. 2. In one sentence, connect that trigger to a problem our ICP feels. 3. State the offer as an outcome, not a feature. 4. Add one line of proof (a number or a comparable client type). 5. Close with a single low-friction ask (a yes/no question). ## Rules and constraints - Keep the whole email under 120 words. - One call to action only. - No "I hope this email finds you well" and no "just circling back." - No more than one question. - Plain language. Short sentences. No buzzwords. ## Output format Return, in order: - Subject line (under 6 words, lowercase, no clickbait) - Body (plain text, no markdown) - One-line PS that adds a second proof point or a soft deadline ## Example Subject: idea for {company} onboarding Saw {company} just shipped self-serve signup — congrats on the launch. Most teams that flip on self-serve see support tickets jump in week two. We cut first-week tickets ~30% for similar B2B tools by rewriting the in-app onboarding copy. Worth a 15-minute look at yours? PS — happy to send a before/after from a team your size first.
Saved in its folder, this fires the moment you ask Claude "write a cold email to the new VP of Eng at Acme." No re-prompting.
References checklist: what to upload per skill
The skill inherits whatever you feed NotebookLM. Upload the documents that demonstrate the standard, not generic advice. Per skill type:
- Cold email: your best sent emails, offer/value-prop doc, ICP definition, objection-handling notes, brand-voice guide.
- Landing page copy: your highest-converting page copy, positioning doc, product feature list, customer testimonials, voice guide.
- FAQ answers: support transcripts, existing help-center articles, product docs, a log of the questions people actually ask.
- Support replies: past ticket responses you're proud of, your tone/policy guide, refund and troubleshooting docs.
Rule of thumb: 3–6 strong sources beat 20 weak ones. Remove anything off-brand — NotebookLM will faithfully copy bad examples too.
Verify it loaded, and troubleshoot
Confirm it's live:
- In Claude Code, ask:
what skills do you have available?Your skill should be listed by name. - Or trigger it directly with a request that matches the description and watch Claude load it.
- Claude Code uses live change detection, so edits to
SKILL.mdtake effect without restarting.
Skill not firing:
- The description is too vague. Rewrite it to start with "Use when…" and name the exact task in plain words.
- Wrong file name or location. It must be
SKILL.md(uppercase), inside its own folder, under~/.claude/skills/or.claude/skills/.
Claude added steps that aren't in your docs (hallucinated):
- The file wasn't pinned to sources. Regenerate in NotebookLM with the strict prompt and ask it to show citations.
- Drop weak or off-topic sources. The skill should contain only what your docs support.
Frontmatter errors / skill ignored:
namemust be lowercase letters, numbers, and hyphens only — no spaces, no leading/trailing hyphen, max 64 chars.- Both
nameanddescriptionare required. - The
---fences must each sit on their own line, with the frontmatter at the very top of the file. descriptionmust be non-empty and under 1024 characters.
One skill per task: your starter set
Spin up these four first. For each, upload the references listed above, then paste the matching one-line generation prompt into NotebookLM after the master prompt:
promptCOLD EMAIL Generate a SKILL.md named cold-email-writer that writes a short, personalized B2B cold email using only my uploaded emails, offer, and ICP. Description should trigger on "write a cold email."
promptLANDING PAGE COPY Generate a SKILL.md named landing-page-copy that writes hero, subhead, benefit bullets, and CTA using only my uploaded page copy, positioning, and voice guide. Description should trigger on "write landing page copy."
promptFAQ ANSWERS Generate a SKILL.md named faq-answers that drafts customer-facing FAQ answers using only my uploaded help docs and support transcripts. Description should trigger on "answer this FAQ" or "write an FAQ."
promptSUPPORT REPLIES Generate a SKILL.md named support-replies that writes a calm, on-policy support reply using only my uploaded past tickets and tone/policy docs. Description should trigger on "reply to this support ticket."
Four skills, a few minutes each, and every recurring task you own now runs the same way every time. That's the factory: upload your references → generate the SKILL.md → drop it into Claude Code → run it on repeat.
FAQ
Do I need a paid NotebookLM plan? No. The free version handles uploading your sources and generating grounded output, which is all this workflow needs. Paid plans mainly add more notebooks and higher source limits — useful once you're running many skills, but not required to start.
Personal skill or project skill — which folder do I use?
Use ~/.claude/skills/ for skills you want on every project on your machine (cold email, support replies). Use .claude/skills/ inside a repo for skills tied to that project or client, so anyone who clones the repo inherits them. The file is named SKILL.md and sits in its own folder either way.
How is this different from pasting my instructions each time? A skill is saved once and loads itself. Claude auto-triggers it whenever your request matches the description, so you get the same formula without re-explaining, you can version and improve it over time, and anyone on your team gets identical output. Pasting instructions is per-session and drifts; a skill is permanent and consistent.