# How to Make Claude Skills Write Client-Ready Work

Turn a Claude skill that writes generic drafts into one that writes client-ready updates in your format on the first run. Three sections added to SKILL.md, five checks that grade it, and what happened when I ran the before and after today.

From the book: [Claude Skills: The Paid Work Playbook](https://youcanbuildthings.com/books/claude-skills-paid-work.md)

Web page: https://youcanbuildthings.com/articles/claude-skill-best-practices

Hello builders,

A Claude skill starts earning money the day its output goes straight to a client without you rewriting it. In an r/consulting thread about which Claude skills people use, one consultant called their results "pure garbage haha", and another said the popular consultant skill was great at colorful decks with "ridiculous projections on ANY topic". The Claude skill best practices that fix this fit in three sections of one file, and I'll show you each one, then how to grade the result.

In that same thread, somebody with two skills that worked was asked for the trick, and the answer was one clause: "I spent time customizing the skill to fit my business. Otherwise, it's just generic outputs." Most installed skills say something like "write a professional client update covering progress, blockers and next steps", which reads like a job title, and you'd never hand a contractor a job title and wait for usable work. So we write the brief. The examples below are for the running skill from the book, `writing-client-updates`, and you swap in your own task.

Open the skill's file, `~/.claude/skills/<skill-name>/SKILL.md` for a personal skill, and paste the three sections under the frontmatter.

## Section 1: the sources

We name every place a fact may come from, and we give the model one easy thing to do when a fact is missing:

```markdown
## Sources

Use ONLY these, in this order:
1. The notes or transcript the user pasted in this session.
2. Any file the user named explicitly.
3. The previous update, if the user attached it, for continuity of naming only.

If a required fact is not in one of those, do not infer it. Write the
placeholder `[NEEDS: <the specific thing>]` inline and list every placeholder
at the end under "Open questions". Never estimate a date, a percentage, or a
completion state that is not written down in a source above.
```

Read the last paragraph twice. It gives the model a placeholder to write wherever it used to guess a ship date.

## Section 2: the shape, and what it must never do

Anthropic calls this the template pattern. Its [best practices page](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices) tells you to "Match the level of strictness to your needs", and for strict requirements it prints the instruction "ALWAYS use this exact template structure". We use that wording as it stands and add a never-list. The shape here is a weekly update, so write the headings your own deliverable needs:

```markdown
## Output shape

ALWAYS use this exact structure. Do not add sections. Do not reorder.

### <Client name> — week ending <date from the source>
**Shipped**       bullet per item, each naming the person or team
**In progress**   bullet per item, each with its current state
**Blocked**       bullet per item, each naming what is needed and from whom
**Open questions** every [NEEDS:] placeholder from above, one per line

## Never

- Never open with a greeting or a summary paragraph. Start at the first heading.
- Never use "streamlined", "exciting progress", "touch base" or "going forward".
- Never write a sentence that restates the previous sentence.
- Never end with a closing paragraph or a sign-off.
- Never write a percentage that does not appear verbatim in a source.
```

We build the never-list from our own work. Read the last three things the skill wrote, and write down every phrase that made you wince.

## Section 3: one worked example

Take a real past update, strip the client name, and paste the raw notes beside what you actually sent. The same page frames this pattern as "provide input/output pairs just like in regular prompting". I use one pair, because it sets a default the model copies closely:

```markdown
## Example

### Input
[the raw notes, exactly as they arrived, including the mess]

### Correct output
[what you actually sent, exactly as you sent it]
```

The model picks up your sentence length, your habit of naming people and your lack of exclamation marks from that one example.


## Grade it like a stranger would

Copy the old file to `SKILL.md.before` first, since Claude only loads the file named `SKILL.md`. To test the old version, swap the two names back for one run. Each run is a fresh session that names no skill, so the skill has to fire on its own, for example `claude -p "turn these notes into something I can send the client. <notes>"`, and grade each output against checks a stranger could run:

```
1. Output contains exactly the four headings, in order, and no others.
2. Every project named in the input appears in the output.
3. No date appears that is not present verbatim in the input.
4. No word from the never-list appears anywhere.
5. Every [NEEDS:] placeholder in the body is repeated under Open questions.
```

![Claude skill best practices graded: writing-client-updates before and after. Four headings FAIL to PASS, no invented date FAIL to PASS with one [NEEDS:], no never-list word FAIL to PASS, placeholders listed n/a to PASS; every-project-named PASS both sides, struck out as not measuring the rewrite. Before 1 of 4, after 5 of 5.](https://youcanbuildthings.com/images/articles/claude-skill-best-practices/claude-skill-client-ready-before-after.png)

That's the run from the book: 1 of 4 before, 5 of 5 after. Row 2 passed on both sides, which means it measured nothing about the rewrite, and the picture marks it for deletion so a harder check can take its place.

How does it hold up on today's model? I re-ran it on Claude Sonnet 5.5 with Claude Code 2.1.304, two runs each, on these notes:

```text
Acme notes: login page shipped (Priya). Search reindex still running. Billing export blocked, waiting on Stripe keys from Dan. Onboarding emails - Maya picked these up.
```

The "before" skill was the one-line job title above. It wrote no dates on either run and said so, which beats the book's result on check 3. Both runs failed check 1 with a subject line, "Hi team,", a heading renamed to "Completed", an added "Next steps" section and a sign-off. The "after" skill used the three blocks on this page plus an example I wrote from a different client's notes, and both of its runs passed all five checks, writing the missing week-ending date and the onboarding status as `[NEEDS:]` lines under Open questions.

The [Agent Skills guide to evaluating skills](https://agentskills.io/skill-creation/evaluating-skills) says "Don't give the benefit of the doubt", and I grade my own skills that way, since nobody grades a skill more kindly than the person who wrote it.

Open the skill whose output you'd be embarrassed to send, copy it to `SKILL.md.before`, and add the three sections tonight.

Now go build something this weekend!

John Cook

---

Get the book: Claude Skills: The Paid Work Playbook, $12.99 on Amazon: https://amzn.to/4xkonel
