MODULE 02

CUSTOM SKILLS

Extend Claude Code with reusable skills that encode domain expertise, workflows, and best practices for journalism.

Learning objectives

  • > Explain the prompt-to-skill progression — how a raw prompt becomes a saved prompt, then a custom slash command, and finally a hook
  • > Create a custom slash command by saving a reusable prompt as a file in .claude/commands/
  • > Understand the difference between notify hooks (flag issues, keep going) and stop hooks (pause before irreversible actions)
  • > Use session commands — /help, /plan, /compact, and /clear — to manage Claude Code sessions
  • > Install and use journalism skills from GitHub using the skills repository

Before you start

In Module 1, you learned to write good prompts and give Claude persistent context. But every time you started a new session, you typed the same instructions from scratch. This week, you learn to save those prompts as permanent, reusable tools. The key insight: write it once, use it forever. The concepts below explain skills, commands, hooks, and the progression from ad-hoc prompt to automated workflow.

Watch: the prompt-to-skill progression

This week's video walks through the full progression using meeting minutes extraction as a running example: ad-hoc prompt, saved prompt, custom slash command, and hook. It also covers the session commands you'll use regularly: /help, /plan, /compact, and /clear.

Video will be embedded here when available.

Key concepts

The prompt-to-skill progression

Most people start by typing the same instructions over and over. The video this week shows how a single task — extracting action items from meeting minutes — moves through four levels:

  • > Ad-hoc prompt — You type instructions each time. Works, but slow and inconsistent.
  • > Saved prompt — You save that prompt in a document so you can copy-paste it. Better, but still manual.
  • > Custom slash command — You save the prompt as a file in .claude/commands/, and Claude Code loads it when you type the slash command. Consistent and shareable.
  • > Hook — An automated check that runs in the background. No invocation needed — it fires on its own when certain conditions are met.

Skills vs. commands

Both are markdown files invoked with a slash, but they work differently. A skill contains domain knowledge Claude consults and applies using judgment — the right tool when the task requires interpretation. A command is a deterministic trigger — the same steps, the same sequence, every time. The journalism analogy: a skill is a style guide (reference material, applied with judgment). A command is a mandatory pre-publication checklist (fixed sequence, no skips).

Both are stored as .md files in .claude/commands/. The filename becomes the slash command — save source-verification.md and Claude Code creates /source-verification automatically.

Where skills live

Skills can be stored in several locations:

  • > Global: ~/.claude/commands/ - Available in all projects
  • > Project: .claude/commands/ - Available only in that project
  • > Remote: GitHub repositories that you clone or reference

Hooks: notify vs. stop

Hooks are skills that run automatically — you don't invoke them. They fire at specific points in your workflow without any input from you. There are two kinds, and the distinction matters:

  • > Notify hooks run in the background and flag issues without stopping your work. Think of them as an automated second reader — problems get marked for your review, but the work continues. A notify hook might flag an unattributed quote or highlight filler language.
  • > Stop hooks pause execution and ask for confirmation before proceeding. These exist for one-way doors — actions that are difficult or impossible to undo. Before Claude Code deletes files, pushes to a repository, or publishes something, a stop hook can pause and require your approval.

The journalism parallel: editorial workflows don't just catch errors, they build in deliberate pause points before irreversible actions. A stop hook is the automated version of "does a human need to see this before it goes out?"

Skill trust and safety

Skills are just text files with instructions — they can't run arbitrary code. However, they can influence Claude's behavior, so review skills before installing them. Prefer skills from trusted sources, check what instructions they contain, and be cautious of skills that ask Claude to access external services or sensitive data.

Session commands

Module 1 introduced the commands you use inside a Claude Code session. Here's a quick reference for the ones you'll use most this week:

  • /help — list available commands and installed skills (use this to confirm your new skill shows up)
  • /plan — ask Claude to think through an approach before acting (useful before writing a skill file)
  • /compact — compress conversation history when a long session slows down
  • /clear — start fresh without leaving the session

When CLI tools are worth the setup cost

Not every task justifies leaving the browser. CLI tools pay off when you have repeatable work — the same kind of document, the same verification steps, the same data format — and the upfront cost of writing a skill or context file is recovered across many uses. If you're doing a one-off task you'll never repeat, the web interface is fine.

The question to ask: "Will I do this same thing next week?" If yes, the time you spend writing a skill now saves time every future run. If no, a browser prompt is faster. Skills, context files, and hooks are investments — they only pay off with repetition.

EXERCISE

GOAL: Build your own custom slash command for a task on your beat, install the journalism skills repository, and use source-verification to check a viral claim. The exercise follows the same progression shown in the video: ad-hoc prompt to saved command to tested tool.

Part 1: Build your own custom slash command

~20 minutes

01 Choose a task

Pick one thing you do repeatedly that involves a consistent process — not a one-off question, but something with steps you follow every time. The video used meeting minutes extraction. Your task should be similarly specific to your work.

Good candidates:

  • > Reviewing a specific type of document (press releases, budget reports, public records)
  • > Drafting a recurring story format (meeting recap, weekly data brief)
  • > Checking a specific category of claim (health statistics, crime data, budget numbers)
  • > Extracting structured information from a specific source format

Not good candidates: "Summarize text" (too generic) or "Be thorough" (not a process, not checkable).

02 Plan the skill before writing it

Open your terminal and launch Claude Code, then use plan mode to think through the structure before writing anything:

terminal
claude
claude code
/plan

I want to create a custom slash command called [your-command-name]. Here's what it should do:
[describe the task and the steps in plain English]

Plan out the structure of this command file — what sections it will have, what steps it will include, what instructions you'd put in each section. Don't write the file yet.

Review the plan. Are the steps in the right order? Is anything missing? Is anything too generic? Redirect here if needed. Once the plan looks right, tell Claude to proceed.

03 Write and test the command

Tell Claude to write the file based on the plan:

claude code
Go ahead and write the command file based on that plan. Save it to .claude/commands/[your-command-name].md

Review what Claude writes. Apply the deletion test: read each instruction and ask whether removing it would change Claude's behavior. Cut anything that wouldn't.

Test on material you already know. Use a press release you already fact-checked, a council vote you already looked up, notes from a meeting you attended. Compare what the command produces against what you found yourself. If it misses something you caught, add that instruction. If it flags something that wasn't a problem, cut or refine it.

04 Commit it

Once you're satisfied with the command, commit it to your beat project repository:

claude code
Commit this command file to my beat project with a message describing what it does

Your first custom slash command is now versioned alongside your project context.

Part 2: Install the journalism skills

~15 minutes

05 Install the skills repository

The journalism skills repository (36 skills, 13 hooks) can be installed as a Claude Code plugin. In your Claude Code session:

claude code
/install-github-plugin https://github.com/jamditis/claude-skills-journalism.git

Verify the installation by typing /source-verification — you should see Claude acknowledge the skill.

Take a minute to look at a skill file and a hook file in the repository. Notice the structure: YAML frontmatter, step-by-step instructions, and whether a hook is notify (flags and continues) or stop (pauses for confirmation).

Part 3: Use source-verification on a viral claim

~20 minutes

06 Verify a viral claim

A post is circulating on social media with this claim:

"A new study from Harvard Medical School found that drinking coffee before 8am increases cortisol levels by 400%, leading to long-term adrenal fatigue. Doctors are now recommending waiting until 10am for your first cup."

Invoke the skill and provide the claim:

claude code
/source-verification

Claim to verify: "A new study from Harvard Medical School found that drinking coffee before 8am increases cortisol levels by 400%, leading to long-term adrenal fatigue. Doctors are now recommending waiting until 10am for your first cup."

Follow the SIFT process Claude walks you through: Stop (note your assumptions), Investigate the source (is there an actual Harvard study?), Find better coverage (what do fact-checkers and medical journalists say?), and Trace claims (where does the "400%" figure come from? Is "adrenal fatigue" a recognized medical condition?).

07 Document your findings

As you work through the verification, Claude will help you document what evidence supports or contradicts the claim, which parts are accurate vs. misleading vs. false, what the original source actually said (if it exists), and a summary suitable for editorial decision-making.

Checkpoint

Self-check: Make sure you can answer these before moving on.

  • ? What are the four levels of the prompt-to-skill progression, and when is each one appropriate?
  • ? What is the difference between a notify hook and a stop hook?
  • ? What does the filename of a command file determine, and where does the file need to be saved?
  • ? What do /plan and /compact do inside a Claude Code session?

Resources

  • [REQUIRED] The complete guide to building skills for Claude (PDF) — Anthropic's official skill specification and best practices
  • [DOCS] Claude Code documentation - Official guide to skills and commands
  • [ORG] International Fact-Checking Network - Standards and resources for verification
  • [GUIDE] First Draft: verifying online information — the essentials
  • [GUIDE] Bellingcat online investigations toolkit — open-source investigation techniques
  • [OPTIONAL] Journalism skills library (36 skills, 13 hooks) — a collection of pre-built Claude Code skills covering source verification, FOIA requests, data journalism, and editorial workflows. Browse it for ideas or install individual skills to supplement the one you build in this module. Not required — the focus this week is on creating your own skill from scratch.
  • [OPTIONAL] NICAR 2026: Skills in Codex and Claude — Aaron Kessler's NICAR session repo with examples of building and using skills across Claude Code and OpenAI Codex CLI for data journalism workflows.

Troubleshooting

Skill doesn't appear in /help

Make sure the file is in the correct directory (~/.claude/commands/) and has the .md extension. The filename becomes the command name.

Skill doesn't seem to affect Claude's responses

Remember to invoke the skill with the slash command (e.g., /source-verification) before asking your question. The skill context is loaded when you invoke it.

"Permission denied" when creating files

Make sure the ~/.claude/commands/ directory exists and you have write permission. Run mkdir -p ~/.claude/commands to create it.

Skill is too generic or not helpful

Skills work best when they're specific. Edit the skill file to add more detailed instructions, examples, or checklists relevant to your work.