From normalpowers
Use when creating new skills, editing existing skills, or checking whether a skill actually changes model behavior before you rely on it
How this skill is triggered — by the user, by Claude, or both
Slash command
/normalpowers:writing-skillsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**A skill is not a memo. It is a behavior-shaping document.** You are writing instructions that another model — a ChatGPT, Gemini, or Claude session somewhere in the future — will load and follow. The question is never "does this read well?" It is "does this actually change what the model does?"
A skill is not a memo. It is a behavior-shaping document. You are writing instructions that another model — a ChatGPT, Gemini, or Claude session somewhere in the future — will load and follow. The question is never "does this read well?" It is "does this actually change what the model does?"
Core principle: If you haven't watched a model behave without your skill, you don't know what your skill needs to teach. Write the skill after you see what goes wrong without it, not before.
Official guidance: For Anthropic's published best practices on skill authoring, see anthropic-best-practices.md. We agree with a lot of it and deliberately differ on some things; it's there so you can see what normalpowers intentionally does differently.
A skill is a reference guide for a proven technique, pattern, or workflow. Skills help a future model find and apply the right approach to a recurring kind of work.
Skills are: reusable techniques, patterns, checklists, reference guides, behavior-shaping documents.
Skills are NOT: narratives about how you personally solved one problem once, essays, or aspirational vision documents.
Create when:
Don't create a skill for:
Concrete method with steps to follow. Example: running a sales-discovery call, writing a one-pager, preparing for a 1:1.
A way of thinking about a class of problem. Example: decomposing a sprawling initiative into smaller milestones, pressure-testing assumptions.
Dense lookup material. Example: a glossary, a frameworks cheat-sheet, a set of templates.
Not all skills need the same grip on the model.
Pick the stance deliberately. Rigid language on a flexible skill makes the model robotic. Flexible language on a discipline skill lets the model slip past the rule under pressure.
skills/
skill-name/
SKILL.md # Main reference (required)
supporting-file.* # Only if needed
Flat namespace — all skills live in one searchable namespace, no deep folder trees.
Separate files for:
Keep inline:
Frontmatter (YAML):
name and description.name: letters, numbers, and hyphens only.description: third-person, describes ONLY when to use the skill (NOT what it does).
---
name: skill-name-with-hyphens
description: Use when [specific triggering conditions and symptoms]
---
# Skill Name
## Overview
What is this? Core principle in 1–2 sentences.
## When to Use
Bullet list with SYMPTOMS and use cases.
When NOT to use.
## Core Pattern (for techniques/patterns)
Before/after example if useful.
## Quick Reference
Table or bullets for scanning common operations.
## Implementation
Inline steps for simple patterns.
Link to a separate file for heavy reference or reusable assets.
## Common Mistakes
What goes wrong + fixes.
## Real-World Impact (optional)
Concrete results from using the skill.
Critical: a future model needs to FIND your skill and decide whether to load it.
Purpose: the model reads the description to decide which skills to load for a given task. Make it answer: "Should I read this skill right now?"
Format: start with "Use when..." to focus on triggering conditions.
CRITICAL: Description = When to Use, NOT What the Skill Does.
The description should ONLY describe triggering conditions. Do NOT summarize the skill's process or workflow in the description.
Why this matters: when a description summarizes the skill's workflow, the model often follows the description instead of reading the full skill. A description saying "review a doc for voice, structure, and evidence" caused a model to do one pass only, even though the skill itself laid out three separate passes. When the description was changed to just "Use when reviewing someone's draft document before it goes to a stakeholder," the model actually read the skill and did all three passes.
The trap: descriptions that summarize workflow create a shortcut the model will happily take. The skill body becomes documentation the model skips.
# BAD: summarizes workflow — model may follow this instead of reading the skill
description: Use when prepping for a 1:1 — review notes, pick three topics, draft talking points
# BAD: too much process detail
description: Use for discovery calls — open with rapport, ask pain questions, identify budget, summarize
# GOOD: just triggering conditions, no workflow summary
description: Use when prepping for an upcoming 1:1 with a direct report or your manager
# GOOD: triggering conditions only
description: Use when you're about to run a sales discovery call with a new prospect
Content:
Use words a future model would search for:
Use active voice, verb-first, gerunds where natural:
running-discovery-calls, preparing-for-one-on-ones, writing-exec-updatescalls, meetings, docsName by what you DO or the core insight:
decomposing-sprawling-initiatives > initiative-managementwriting-exec-updates > communication-tipsProblem: frequently-loaded skills load into every conversation. Every token matters.
Target lengths:
Techniques:
When you reference another skill, use its name and mark how required it is:
**REQUIRED BACKGROUND:** you MUST understand the brainstorming skill before using this one.See also: writing-plans, for turning an approved design into an executable plan.See somewhere around skills/... maybe. (unclear)Don't force-load other skills. Mention them; let the reader decide whether to open them.
Use ASCII flowcharts inside SKILL.md when a decision is genuinely non-obvious. Example:
Is the request one coherent project?
|
+-- no ---> help user decompose, pick one sub-project, restart
|
+-- yes --> continue
Use flowcharts ONLY for:
Never use flowcharts for:
See graphviz-conventions.dot for richer diagram conventions if you ever want to render a flowchart elsewhere. For the skill itself, ASCII is fine and actually renders in every chat UI.
One excellent example beats five mediocre ones. Pick the most representative case:
A good example is:
Don't:
preparing-for-one-on-ones/
SKILL.md # Everything inline
When: all the content fits comfortably in one file.
running-discovery-calls/
SKILL.md # Overview + steps
question-bank.md # Library of discovery questions
When: you have a reusable asset that's too long to live inline.
writing-exec-updates/
SKILL.md # Overview + workflow
templates.md # Full template library
examples.md # Annotated real examples
When: reference material is too large for inline.
NO SKILL SHIPS UNTIL YOU'VE SEEN IT CHANGE BEHAVIOR.
This applies to NEW skills AND EDITS to existing skills.
Wrote a skill without checking whether it moves behavior? It's a draft, not a skill. Edited one without re-checking? Same.
No exceptions:
Since there's no subagent dispatch available to you, the test is manual: open a fresh session and see if it follows.
Here's the loop.
Open a fresh ChatGPT, Gemini, or Claude session with no memory of your skill. Give it a realistic scenario that your skill is supposed to handle. Example: "I'm about to run a discovery call with a new prospect. Draft my opening."
Watch what it does. Write down, verbatim:
This is your baseline. If the model already does the right thing without your skill, you don't need the skill.
Write the skill to address the specific failures you observed. Don't add sections for hypothetical problems. Don't pad for completeness. Cover what went wrong in the baseline, nothing more.
Open another fresh session (no prior context, no memory). Paste the skill as a system prompt or as the first user message ("Here's a skill I want you to follow: ..."). Then give it the same scenario.
Does the model now behave correctly?
For skills meant to hold up under pressure, invent scenarios that stack multiple pressures:
If the model caves under pressure, the skill has a loophole. Find the rationalization it used, add an explicit counter, and test again.
This is the RED → GREEN → REFACTOR loop, adapted for prose:
You can treat this as optional discipline for flexible skills and mandatory for rigid ones.
Different skill types need different test scenarios.
Examples: verification-before-completion, brainstorming-before-producing, don't-start-drafting-until-approved.
Test with:
Success: model follows the rule under maximum reasonable pressure.
Examples: running-discovery-calls, writing-exec-updates.
Test with:
Success: model produces a usable output on a new scenario.
Examples: decomposing-sprawling-initiatives, pressure-testing-assumptions.
Test with:
Success: model recognizes and correctly applies the pattern.
Examples: frameworks cheat-sheets, template libraries, glossaries.
Test with:
Success: model finds and correctly applies the right reference.
| Excuse | Reality |
|---|---|
| "The skill reads clearly." | Clear to you != behavior-changing for a model. Test it. |
| "It's just a reference." | References have gaps. Test retrieval. |
| "Testing is overkill." | 15 minutes of testing saves hours of the skill silently not working. |
| "I'll fix it if problems come up." | Problems = the model quietly ignores your skill. You won't notice unless you check. |
| "I'm confident it's good." | Overconfidence is exactly how skills ship broken. Check anyway. |
| "Reading it is enough." | Reading != using. Test a real scenario. |
| "No time to test." | Shipping a skill that doesn't work wastes more time than testing does. |
All of these mean: run one baseline, run one with-skill test, compare. Minimum bar.
Discipline skills need to resist rationalization. Models are fluent and will find loopholes under pressure, just like humans.
Psychology note: understanding why persuasion techniques work lets you apply them deliberately. See persuasion-principles.md for the research foundation (Cialdini, 2021; Meincke et al., 2025) on authority, commitment, scarcity, social proof, and unity.
Don't just state the rule — forbid the specific workaround.
Weak:
Don't start producing before the design is approved.
Strong:
Don't start producing before the design is approved.
No exceptions:
- Not because "the user seemed eager".
- Not because "this one is obviously simple".
- Not because "I'll just draft something to get us started".
- Not "they can always edit it later".
- Wait for explicit approval. Then produce.
Add a foundational principle early:
Violating the letter of the rules is violating the spirit of the rules.
This shuts down an entire class of "well, I was following the spirit" rationalizations.
Capture the exact excuses your baseline testing surfaced:
| Excuse | Reality |
|--------|---------|
| "The design is obvious, skip to drafting." | Obvious designs don't need skipping — they take two sentences. Write them. |
| "I'll brainstorm while drafting." | Brainstorming while drafting = committing to the first option. Brainstorm first. |
| "This is too small for a design." | "Too small" is where unchecked assumptions hide. Two-sentence design still counts. |
Make it easy for the model to self-check:
## Red Flags — STOP and Start Over
- You're drafting before presenting a design.
- You're telling yourself "this one is simple enough".
- You're asking multiple questions in one message.
- You're producing artifacts the user hasn't approved.
All of these mean: stop. Go back to the design step.
Add to the description: the symptoms that signal the model is about to violate the rule.
description: Use before any creative work — drafting, planning, designing — especially when the request feels "too simple to need a design"
"Back in 2024, we had this one client where we..." Why bad: too specific, not reusable, reads like a war story.
Five versions of the same example for different audiences. Why bad: mediocre quality across the board, maintenance burden.
Adding sections because it "feels incomplete". Why bad: every extra token is context budget burned on nothing.
"Step 1", "Helper A", "Section 2".
Why bad: labels should carry meaning. Check the scope > Step 1.
After writing ANY skill, you MUST stop and verify it works.
Do NOT:
A skill you haven't tested isn't a skill. It's a draft. Publishing untested skills is publishing prose that looks authoritative and quietly fails.
Baseline:
Write the minimal skill:
name and description.Retest:
Refactor (for rigid skills):
Quality:
How a future model finds your skill:
Optimize for this flow — put searchable terms early and often.
Writing a skill is engineering a behavior change in a future model session.
Same loop every time: baseline (watch the model fail) → write the minimal skill → retest (watch the model comply) → refactor (close loopholes).
Skills are not prose. They are code that shapes behavior. Treat them that way.
npx claudepluginhub fastxyz/normalpowersCreates, edits, and verifies skills using test-driven development. Runs baseline scenarios to identify gaps, writes skill documentation, then validates agent compliance.
Creates, edits, and verifies skills using test-driven development. Runs baseline scenarios to identify gaps, writes skill documentation, then validates agent compliance.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.