Claude Community Meetup · Session 2

Building Skills for Claude Code

Hands-on: write one you'll actually use Monday.

Friday, May 29, 2026 · Dentsu Office, Aarhus

Recap

What we covered in Session 1

  • CLAUDE.md: your project's memory. Use /init to bootstrap it
  • Plan Mode: press Shift+Tab to think before coding
  • MCP servers: connect Claude to GitHub, Figma, Playwright…
  • Sub-agents + worktrees: parallel branches with isolated context

Today you write a skill
you'll actually use Monday.

One skill. One action. Yours by the end of the workshop.

Pulse check

Quick show of hands

Who has written a Claude Code skill?

Who has written a hook?

Who has touched neither?

Today's agenda

What we'll do (2h)

  1. Welcome & framing (10')
  2. Anatomy of a skill + a live "hello world" (20')
  3. Four case studies of increasing complexity (35')
  4. Build sprint: your own skill, in parallel (40')
  5. Show & tell + Q&A (15')
Part 1

Anatomy of a Skill

It's just a markdown file

Definition

What a skill is

  • A markdown file with frontmatter at ~/.claude/skills/<name>/SKILL.md
  • Activated by its description: field, so the trigger phrases matter
  • The body can be plain instructions OR ship code and scripts alongside
  • Progressive disclosure: a short SKILL.md plus deeper bundled files
~/.claude/skills/outlook/ ├── SKILL.md ├── send.applescript └── examples/ └── draft.txt
Anatomy

Reading a SKILL.md

--- name: outlook description: Use when the user wants to send an email or compose a draft in Outlook on this Mac. --- # Outlook skill Drives Outlook.app via AppleScript. Send-only. ## How to use Run: osascript send.applescript "to@x" "subj" "body"
name: the skill's identifier (folder + slug)
description: what triggers it (read carefully)
body: instructions + commands Claude can run
headings: orient Claude inside the file
Triggers

Trigger words decide if your skill ever fires

✗ Vague: rarely triggers

description: Helps with email.

Claude has no idea when to fire this.

✓ Specific: fires reliably

description: Use when the user wants to send an email, compose a draft, reply, or open a message in Outlook on this Mac.

The description contains phrases users actually say.

Rule of thumb: include 2–3 verbatim phrases your future self would type.

Live

Hello, world, in 5 minutes

$ mkdir -p ~/.claude/skills/coffee && $EDITOR ~/.claude/skills/coffee/SKILL.md

Part 2

Four Real Skills

From AppleScript to Playwright

Case study · 1

outlook: AppleScript, send-only

  • Trigger: "send an email", "compose a draft", "reply"
  • Driver: AppleScript talking to Outlook.app
  • No Graph API, no tenant approval, no MCP server
  • ~15 lines of code; send-only by design
on send_email(to_addr, subj, body) tell application "Microsoft Outlook" set m to make new outgoing message set subject of m to subj set plain text content of m to body make new recipient at m with properties {email address:to_addr} send m end tell end send_email

Use what the OS gives you before you reach for an API.

Case study · 2

teams: URL scheme + System Events

msteams://...URL handler opens Teams
→
4s nav delaywait for the chat to load
→
System Eventstype the message + send keystroke
→
✓ sentno draft gate, no confirmation

Two timing constants matter: 4s after navigation, 1.8s after @mentions.

Case study · 3

text-someone: Playwright with a persistent profile

  • For when there's no OS handler and no MCP server
  • Headed Chromium with a real profile directory on disk
  • storageState keeps login, SSO and MFA across runs
  • Attaches files automatically via the page's file input

~/.cache/text-someone/

profile dir on disk

storageState.json

cookies + auth tokens

playwright headed

real browser, not headless

page.set_input_files

attach files

Case study · 4

caveman: a skill that changes how Claude talks

  • A different genre: knowledge + hooks, no app driver
  • A SessionStart hook injects the style rule on startup
  • Cuts token usage by ~75% without losing technical accuracy

Before

"Sure! I'd be happy to help. Let me first read the file to understand the structure before making any changes."

After

"Read file. Edit fn. Test."

Pattern

The skill design space

Drives Claude itself
Drives an external app
Knowledge
• caveman
knowledge + SessionStart hook
Next time…
Driver code
Next time…
• outlook: AppleScript
• teams: URL scheme + System Events
• text-someone: Playwright + storageState

Most of today's case studies sit in the bottom right. We'll write skills for the empty quadrants next time.

Part 3

Build Sprint

40 minutes · one skill · your machine

Step 0

Pick your target

CLI

  • List branches I touched this week
  • Open the latest build log
  • Diff staged vs last release tag

Desktop

  • Open a Linear ticket by ID
  • Draft a Slack DM to standup
  • Create a calendar event

Browser

  • Open the dashboard I check first
  • Screenshot staging at a URL
  • Fill a recurring form

Constraint: one skill, one action. 5 minutes to decide. Hard stop.

Recipe

Five steps, 30 minutes

  1. Name it: mkdir ~/.claude/skills/<name>
  2. Description + triggers: one sentence with 2–3 verbatim phrases (5')
  3. Body: the actual instructions, driver code or one-liner (10')
  4. Test the trigger: start a new session, say the phrase, confirm the skill fires (5')
  5. Iterate: tighten the description and body until it's reliable (8')
Watch out

Four traps

Vague description

Add 3 verbatim phrases users would say.

No error path

One if around the bash/AppleScript.

Leaked creds

Never echo env vars. Point at ~/.config/<thing> instead.

Over-engineered v1

Ship the 10-line version. Iterate.

Checkpoint

If yours is here and it triggers, you're done

$ ls ~/.claude/skills/ coffee/ outlook/ teams/ text-someone/ your-skill/ $ claude you: [your trigger phrase] Skill(your-skill) invoked. ✓ done.
Part 4

Show & tell

Three volunteers, 90 seconds each: what you built and what triggered it.

Next steps

Where to go from here

write-a-skill

The official skill for writing skills. Use it to scaffold your next one.

Anthropic skills repo

Read other people's skills. Steal patterns.

Ambassador program

API credits, early access, Anthropic Slack.

~30 min

from idea to a skill you'll keep using

Resources

Links & further reading

Official

Today's handout + community

Thanks for building.

Use your new skill on Monday. Then write the next one.