Skip to content

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-update skill
  • Claude using it on its own when you ask in plain words

You’ll need

  • Claude Code set up as on Day 1
  • A project in git with at least one commit, as on Day 5

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.

0 of 4 steps done0%
  1. 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

    Terminal
    mkdir -p .claude/skills/client-update

    For Windows

    PowerShell
    New-Item -ItemType Directory -Force -Path .claude\skills\client-update

    your-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.md and example.md, and the first line of SKILL.md is exactly ---.

  2. 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.

  3. Step 3 of 4: Run /client-update yourself

    Start Claude Code in the project and type the command, with or without notes.
    In Claude Code

    You 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 $ARGUMENTS sits.

    Created the skills folder mid-session? Run /reload-skills first.

    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.

  4. 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 Code
    What did we get done on this project this week? Write it up so I can send it to the client.

    In order:

    1. You

      You ask in plain words

    2. Claude

      The request matches the description

    3. 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: true so 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 /clear and ask again.

Finish · 4 of 4 steps to go

Your first skill works

Commit .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-update returns 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.

We’ll email you when we add or update a lesson. We use your email only for this. Privacy policy

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.

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.