Day 12 of 52 · about 15 min · Skills
Turn a prompt you keep repeating into a skill
If you paste the same instructions every week, save them once as a skill. You run it by name, and Claude picks it up on its own when a request fits.
You’ll finish with
- A working
/client-updateskill - Claude using it on its own when you ask in plain words
Before you start
Tell us about your setup and the steps change to fit it. Your answers stay in this browser, and you can change them at any time.
Which system are you on?
Commands differ between systems. Pick the one you’ll run Claude Code on.
The steps
One step at a time. When a step’s check matches, tick it and the next one opens.
Step 1 of 4: Save the skill
Make a client-update folder under .claude/skills and save two files in it.For macOS, Linux and WSL
Terminalmkdir -p .claude/skills/client-updateFor Windows
PowerShellNew-Item -ItemType Directory -Force -Path .claude\skills\client-updateyour-project/
- folder .claude
- folder skills
- folder client-updatethe folder name is the command
- SKILL.mdNew
- example.mdNewtone and length to aim for
In the project, your team gets it through git. In ~/.claude/skills/, it’s yours in every project..claude/skills/client-update/SKILL.mdMarkdown--- description: Writes a short plain-English progress update for a non-technical client from recent git commits, always under the headings Shipped, In progress and Needs your input. Use when the user asks for a client update, a status update, a weekly summary or what changed this week. argument-hint: "[optional notes, such as since Monday or waiting on logo files]" --- Write a progress update for a client who doesn't read code. ## Gather the facts 1. Run this command in the project folder: `git log --since="7 days ago" --no-merges --date=short --format="%h %ad %s"` If the notes at the end name a different period, such as "since Monday" or "last two weeks", change `--since` to match. 2. If git reports that this isn't a git repository, or that there are no commits yet, tell the user that and stop. Don't write an update from guesses. 3. If the log is empty, say nothing was committed in that period and offer to look further back. 4. If a commit message is unclear, run `git show --stat <hash>` to see what it touched. Use it to understand the change, not to quote it. ## Write the update Use these three headings, in this order, every time. Keep a heading even when its section is empty. ``` ## Shipped ## In progress ## Needs your input ``` - **Shipped**: finished work, described by what the client can now do or see. Write "Quotes now show VAT on its own line", not "refactored buildQuote". - **In progress**: work that is started but not finished, such as commits marked WIP, plus anything the notes say is under way. - **Needs your input**: decisions or material only the client can give. If there are none, write "Nothing right now." Rules: - One bullet per change, one sentence each. Merge related commits into one bullet. - No commit hashes, file names, branch names or developer terms such as refactor, merge, PR, endpoint or deploy. - Only report what the commits and notes show. Never add results, numbers or dates that aren't there. - Under 150 words in total. Friendly and plain. No greeting or sign-off unless the user asks for one. For the tone and length to aim for, see [example.md](example.md). ## Notes from the user These may be empty. Use them for the period, for work in progress and for questions to put to the client. $ARGUMENTS.claude/skills/client-update/example.mdMarkdown# Example client update A made-up update for Acme Quotes. Match its tone, length and headings, not its content: every update must come from the real git log and the user's notes. ## Shipped - Quotes now list the discount and the amount after discount on separate lines, so it's clear what the client saves. - Typing a role that isn't on the rate card now gives a clear error instead of a confusing total. ## In progress - A printable version of the quote. The layout is done and the totals are being checked. ## Needs your input - Should repeat clients get a standing discount? If so, what percent?Check it worked
The folder holds
SKILL.mdandexample.md, and the first line ofSKILL.mdis exactly---.Step 2 of 4: Know the parts
The header tells Claude when to use the skill; the body is the prompt it follows..claude/skills/client-update/SKILL.md- description: Writes a short plain-English progress update…
- How Claude decides when to use it. Lead with the main use.
- argument-hint: "[optional notes…]"
- Shown as you type the command.
- $ARGUMENTS: in the body
- Replaced by whatever you type after the name.
Claude Code ignores misspelled field names without telling you. Check it worked
You can say in one sentence what the description tells Claude.
Step 3 of 4: Run /client-update yourself
Start Claude Code in the project and type the command, with or without notes.In Claude CodeYou type: /client-update
What happens: Claude reads the git log, then writes the update.
You type: /client-update since Monday, waiting on the logo files
What happens: Your notes land where
$ARGUMENTSsits.Created the skills folder mid-session? Run /reload-skillsfirst.Check it worked
The reply has three headings, Shipped, In progress and Needs your input, with no commit hashes or file names. The logo files appear under Needs your input.
If it didn’t work
/client-update isn’t recognised
Start Claude Code in the folder that holds
.claude, check the names (client-update/SKILL.md), then run/reload-skills.Step 4 of 4: Let Claude pick it up
Ask in plain words in a fresh conversation, and Claude loads the skill itself.Type
/clear, then ask the way you’d ask a colleague:Paste into Claude CodeWhat did we get done on this project this week? Write it up so I can send it to the client.In order:
You
You ask in plain words
Claude
The request matches the description
File
Claude loads SKILL.md
A skill’s body loads only when it runs, unlike CLAUDE.md. For skills with side effects, such as deploying, add
disable-model-invocation: trueso only you can start them.Check it worked
The reply uses the same three headings, though you never typed
/client-update.If it didn’t work
Claude answered without the three headings
Use words from the description, such as “client update”, or make the description lead with your words. Then
/clearand ask again.
Finish · 4 of 4 steps to go
Your first skill works
.claude/skills/ so your team gets the skill too. The next prompt you catch yourself pasting is your next skill.What you’ll have checked
/client-updatereturns the three headings- A plain request gets the same format
Lesson updates by email
Get lesson updates by email
Leave your email and we’ll tell you when we add or update a lesson.
Claude Code for your team
Want Claude Code set up across your team?
HorizonLux sets up and repairs Claude Code for teams: CLAUDE.md rules, hooks that enforce them and reviewed MCP servers. Book a free call to talk it through.
Related
Questions
Questions about Day 12
Should this go in a skill or in CLAUDE.md?
CLAUDE.md loads every session, so keep it for facts that always apply. A skill’s body loads only when it’s used, so a long procedure costs almost nothing until you need it.
Sources
Checked against the official Claude Code docs on .
Independent resource, not affiliated with Anthropic. HorizonLux wrote this lesson; Claude Code is made by Anthropic.