Building the Briefing
This is a member-only chapter. Log in with your Signal Over Noise membership email to continue.
Log in to readModule 2: Building the Briefing
A Claude Code skill is a markdown file with a YAML header. The header tells Claude when and how to use it. The body tells Claude what to do. Morning-brief follows the same pattern as any other skill — it’s just that its job is to orchestrate several data-gathering steps before producing output.
The Skill Header
---
name: morning-brief
description: Generate a structured daily briefing from calendar, tasks, email, and news. Run each morning before starting work.
use_when: User asks for morning briefing, daily brief, or what's on today.
user-invocable: true
tools: Bash, Read
---
The tools line matters. Morning-brief needs Bash to run AppleScript and CLI commands, and Read to pull in any local files it references. Without Bash, it can’t reach calendar or tasks. Keep the tool list minimal — only what the skill actually needs.
user-invocable: true means you can invoke it directly by name. Type /morning-brief in a Claude Code session and it loads and runs.
The Skill Body: Sequenced Steps
The body of the skill is a numbered sequence. Claude follows it in order. Each step gathers one data source and formats the output. At the end, Claude assembles everything into the briefing.
Here’s the basic structure with two sources — calendar and tasks — which is the right place to start:
## Morning Brief
Run these steps in sequence. Do not skip steps. After completing all steps,
assemble the output in the format specified below.
### Step 1: Calendar
Run this AppleScript to get today's events:
\`\`\`bash
osascript -e '
set today to current date
set time of today to 0
set tomorrow to today + (1 * days)
tell application "Calendar"
set output to ""
repeat with c in calendars
if name of c is "Jim Christian" or name of c is "Family" then
set evts to (every event of c whose start date ≥ today and start date < tomorrow)
repeat with e in evts
set output to output & (time string of start date of e) & " | " & (summary of e) & linefeed
end repeat
end if
end repeat
return output
end tell'
\`\`\`
If no events are returned, note "No events today."
### Step 2: Tasks
Run the task CLI to get open items:
\`\`\`bash
reminders show Tasks --format json | jq '[.[] | select(.isCompleted == false)] | .[:10] | .[] | .title'
\`\`\`
If no tasks are returned, note "No open tasks."
### Output Format
Produce output in this structure:
---
## Morning Brief — {date}
### Calendar
{events or "No events today"}
### Tasks
{open tasks or "No open tasks"}
---
That’s a working morning-brief skill with two sources. It runs. It’s useful. You can stop here if two sources is enough.
Adding Sources
Email and news are the next two sources to add. Each follows the same pattern: a bash command that retrieves data, instructions for how Claude should process it, and a section added to the output format.
Module 3 covers each integration in full — the exact commands, the edge cases, how to adapt them for your setup.
The sequencing in the skill body matters. Calendar goes first because it’s the highest-stakes data: a meeting you missed knowing about is costly. Tasks second: what you planned to do. Email third: what arrived overnight that changes the plan. News last: context, not obligation.
Where the Skill Lives
Claude Code loads skills from ~/.claude/skills/ by default. Create the file there:
~/.claude/skills/morning-brief.md
That’s it. No installation step. The next time you open a Claude Code session, the skill is available. Invoke it with /morning-brief or by describing what you want: “give me my morning brief.”
The First Run
The first time you run morning-brief, it will almost certainly need adjustment. The calendar filter is hardcoded to specific calendar names — you’ll need to change those to match yours. The task CLI command assumes the Reminders app via the reminders CLI — if you use a different task manager, the command changes.
This is expected and intentional. The skill is a starting point, not a finished product. Module 4 covers the customisation process in detail.
What you should see on first run is evidence that the scaffolding works: a dated header, two sections, data in each section. Once that’s working, adding the remaining data sources is straightforward.
The next module covers each data source in detail.
Check Your Understanding
Answer all questions correctly to complete this module.
1. Why does the morning-brief skill need the Bash tool?
2. What is the right data source priority order?
3. What should you expect on your first run of morning-brief?
Pass the quiz above to unlock
Save failed. Please try again.