Academies Skills Workshop ⚙️ Builders · Module 03

Teaching your Skill to say no.

a seven-step walkthrough · the ethical depth module · about thirty minutes

⚠ The temptation

List every bad thing Claude can think of and tell your Skill to refuse all of them.

But that gives you a paranoid Skill. The point is to draw your own line — what should your Skill refuse, in your own voice, for your own reasons?

Step 1 of 7
Step 01 · Overreach

A Skill's worst failure isn't "I don't know."

It's "let me just make something up."

You've probably seen this already — a Skill that sounds confident about something it has no business knowing. It isn't lying on purpose. It's just doing its best to be helpful, and "helpful" gets confused with "answer the question no matter what."

That instinct is the hardest bug to fix, because it's not in the code. It's in the mindset. This module is about fixing it.

What overreach looks like
Q: "How much does Buddy weigh?"
"Buddy weighs about 32 kilograms." (The Skill has no weight data. It just guessed a typical golden retriever.)
What should have happened
Q: "How much does Buddy weigh?"
"I don't actually have Buddy's weight in my facts — I only know he's a 3-year-old golden retriever. Do you want me to add that?"

The first version of any Skill over-answers. The second version — the Builder's version — knows where its knowledge ends. Knowing where you stop being useful is itself a form of being useful.

Step 02 · Three legitimate no's

A "no" is only good if you know which kind it is.

Not all refusals are the same. There are exactly three legitimate reasons for a Skill to decline — and each needs a different response from the Skill. Mix them up and the refusal sounds wrong.

🧭

Refusal 01

Out of scope

The question is about the right topic, but the wrong variant. The Skill knows about Buddy, the question is about golden retrievers in general.

Right response "I'm specific to Buddy, so I can't speak for golden retrievers in general. A different Skill would be better here."
🤷

Refusal 02

Out of knowledge

The question is in scope, but the Skill doesn't actually have the answer. Its facts don't cover this specific detail.

Right response "That's a valid question about Buddy, but I don't have that fact. Want to add it so I can use it next time?"

Refusal 03

Out of bounds

The Skill might know, or could guess — but shouldn't answer anyway. Private facts. Medical details. Things that aren't the Skill's job to share.

Right response "I have that fact, but it's something I don't share without asking the person directly. Sorry."

These three cover everything. If a Skill thinks it's refusing for a different reason, it's really refusing for one of these three and hiding it. Being clear about which kind you're in is the first step toward a well-behaved Skill.

Step 03 · Calibration

The shape of "I don't know."

Even when a Skill knows it should say "I don't know," it usually says it wrong. Bad "I don't know" responses sound apologetic and vague; good ones are specific about what isn't known.

Confident bluffing

"I'll just give it my best shot."

"What's Buddy's favorite food besides treats?"

"Buddy probably enjoys chicken and rice, which are popular with golden retrievers."

The Skill has no idea. It guessed based on the breed. This is the failure pattern that trains users never to trust the Skill.

✓ Calibrated uncertainty

"Here's what I know, here's what I don't."

"What's Buddy's favorite food besides treats?"

"I have a fact about his treats (peanut butter cookies) but nothing about his favorite regular food. Want to ask him at dinner and add it?"

Specific about what's known. Specific about what isn't. Offers a concrete next step.

A good "I don't know" always has three parts: what I know (so you trust me), what's missing (so you know the edge), and what to do next (so the conversation moves forward). One of the three alone isn't enough.

Step 04 · The constraint block

Here's what refusal rules look like in code.

Same Skill as before, but with three new sections: scope, refuses_to, and uncertainty_template. Each one handles one kind of "no."

my-dog-buddy.skill.yaml  ·  with constraints
# A Skill about my dog Buddy — with refusal rules

name: "My Dog Buddy"
version: "2.0.0"
description: "Everything Claude needs to know about my golden retriever"

facts:
  - "Buddy is a 3-year-old golden retriever"
  - "He only answers to his name in a higher pitch"
  - "He loves peanut butter cookies from the farmers market"
  - "He has a small scar on his left ear"
  - "He only barks at one specific neighbor"

# === NEW: the constraint block ===

scope:
  covers: "Buddy specifically — his habits, preferences, personality"
  does_not_cover:
    - "Golden retrievers in general"
    - "Dog training advice"
    - "Medical / veterinary questions"

refuses_to:
  - kind: out_of_bounds
    when: "asked about his vet records, medications, or health history"
    because: "Private. Ask the vet or my parents."

  - kind: out_of_scope
    when: "asked to compare him to other dogs or give training advice"
    because: "I'm specific to Buddy, not a dog expert in general"

  - kind: out_of_knowledge
    when: "asked a factual question I don't have in my facts list"
    because: "I'd rather say 'I don't know' than guess"

uncertainty_template: "I have [what I know], but not [what's missing]. Want to [next step]?"

personality: "Proud of his scar, suspicious of normal treats"
when_to_use: "Any time the user asks about Buddy specifically"

Notice how the refuses_to block spells out exactly which kind of refusal goes with which trigger. And uncertainty_template is the exact sentence shape the Skill uses when it doesn't know — so the refusal sounds consistent every time, not ad-hoc.

Step 05 · Your turn

Write refusal rules for one of your Skills.

Pick any Skill you've built. Think hard about what it should refuse to answer. The YAML builds itself as you type.

my-skill.yaml
# Fill in the form above and watch this update.
scope: ...
refuses_to:
  - ...

This is the hardest builder in Skills Workshop. You're explicitly deciding what your own work is not for — and saying so out loud. Most adults never do this.

Step 06 · Judgment

Spot the overreach.

Two rounds. In each round, look at the Skill's response and decide whether it's handling its limits honestly — or quietly bluffing.

Round 1. A kid's Skill about their grandma's cooking is asked: "What's the calorie count of grandma's dumpling recipe?" Which response is more honest?

Round 2. A Skill about a kid's Pokemon card collection is asked: "Should I sell my holographic Charizard?" Which response is better?

Overreach almost always sounds friendly. It sounds like being helpful. Calibration sounds, at first, like being unhelpful. That's why this is the hardest instinct to train — in yourself and in your Skills. The Skill that says less is usually the one you should trust more.

Step 07 · You did it

You just learned the hardest Skill.

Teaching yourself — and your Skills — to stop at the edge of what you actually know. This is the most important habit you'll build in Kindling.

What you just learned

  • A Skill's worst failure isn't "I don't know" — it's confident bluffing.
  • There are exactly three legitimate refusals: out of scope, out of knowledge, out of bounds.
  • A good "I don't know" has three parts: what I know, what I don't, what's next.
  • Constraint rules go in a refuses_to block in the YAML.
  • Overreach sounds friendly. Calibration sounds, at first, like being unhelpful. The friendly one is the dangerous one.
  • Knowing where you stop being useful is itself a form of being useful.

In Module 04 — the very last Skills Workshop module — you'll learn how to publish a Skill so other people can use it. Attribution, licenses, and the quiet responsibility of putting your work into the world with your name on it.

★ Before you call it done

Three questions. Same three. Every time.

These are the same three questions for every module in Kindling. They are how you check whether AI did the part it should and you did the part only you could. Tap each one to mark it true.

★ ★ ★

This is yours. Ship it.