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)
- Welcome & framing (10')
- Anatomy of a skill + a live "hello world" (20')
- Four case studies of increasing complexity (35')
- Build sprint: your own skill, in parallel (40')
- 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
- Name it:
mkdir ~/.claude/skills/<name>
- Description + triggers: one sentence with 2–3 verbatim phrases (5')
- Body: the actual instructions, driver code or one-liner (10')
- Test the trigger: start a new session, say the phrase, confirm the skill fires (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
Today's handout + community
Thanks for building.
Use your new skill on Monday. Then write the next one.