Chief of Staff
A lean daily briefing scannable in 30 seconds. Focuses on what matters: schedule, week priorities, and yesterday's agent work.
Morning briefing workflow
Step 1: Load context
Gather information from these sources:
| Source | Location | What to extract |
|---|---|---|
| Week plan | /Users/ph/Documents/Projects/plans-and-reviews/work/week-plans/2026-WXX-plan.md | Key results, day-by-day |
| Calendar | Both calendars (see Fetching calendar events) | Today's events |
| Day tracker | /Users/ph/Documents/day-tracker/data/daily/YYYY-MM-DD.json | Yesterday's activity |
| Claude Code summaries | data/claude-code-summaries/YYYY-MM-DD.json | Yesterday's Claude Code + Codex work |
No Slack mentions or email. Peter checks those at lunchtime. Urgent items reach him via Signal/push.
Week number calculation: Use ISO week format (2026-WXX).
Day tracker summary generation:
Before reading day-tracker data, ensure yesterday's summary exists:
- Check if yesterday's JSON has a
summaryobject:cat /Users/ph/Documents/day-tracker/data/daily/YYYY-MM-DD.json | python3 -c "import json,sys; print('Has summary:', 'summary' in json.load(sys.stdin))" - If missing, generate it:
cd /Users/ph/.claude/skills/day-tracker && python3 cli.py summary YYYY-MM-DD - Then read the summary from the JSON file
Claude Code + Codex digest generation:
- Run the script to collect sessions and create/update the digest file:
python3 /Users/ph/.agents/skills/chief-of-staff/generate_digest.py - Read the digest from
data/claude-code-summaries/YYYY-MM-DD.json
Step 2: Present briefing
Display the briefing in chat, save it to data/briefings/YYYY-MM-DD.md, and update Day.md with today's schedule via update-day-schedule.py (see Fetching calendar events).
Structure the briefing as follows:
# Good morning
**[Day] [Date] [Month] [Year] · W[XX]**
## Today's schedule
| Time | Event | Notes |
|------|-------|-------|
| HH:MM | Event name | Contextual insight from week plan / project knowledge |
[If no events before afternoon: "No morning commitments—deep work day."]
## Week priorities
| Priority | Status | Notes |
|----------|--------|-------|
| [Key result from week plan] | [Done / X/Y done / In progress / Not started] | [Concrete progress indicator, what's next] |
## Yesterday
| Project | Sessions | What happened |
|---------|----------|---------------|
| [project-name] | N | One-line summary of work done |
[Day tracker: Xh tracked—breakdown by category]
[Or: "No day tracker data for yesterday."]
## What can I help with?
1. **[Action]** — grounded in today's situation (calendar, week plan, yesterday's unfinished work)
2. **[Action]**
3. **[Action]**
4. **[Action]**
5. **[Action]**
Key rules for content:
- Schedule notes must be contextual and insightful, drawing on week plan and project knowledge—not just restating calendar entries.
- Week priorities are extracted from the current week plan's key results, with concrete progress indicators (e.g. "2/5 done", "Drafted, needs review").
- Yesterday comes from the Claude Code + Codex digest. Concise: project, session count (noting source if mixed), one-line summary.
- "What can I help with?" must be grounded in today's actual situation. Each option should be something Claude can actually do right now. Not generic.
Day note update (standalone)
Triggered by /cos schedule, /gm schedule, or "update day note".
Use case: Refresh today's schedule in Day.md mid-day.
Steps:
- Fetch events from both calendars (see Fetching calendar events)
- Update Day.md via
update-day-schedule.py - Print today's schedule in the chat in
HHMM Event nameformat - Confirm:
"Day.md updated — N events written"
No briefing file saved, no digest generated, no week priorities or yesterday section.
Data paths reference
/Users/ph/Documents/Projects/
├── plans-and-reviews/
│ ├── MEMORY.md
│ └── work/
│ └── week-plans/2026-WXX-plan.md
└── [project folders]/MEMORY.md
/Users/ph/Documents/day-tracker/data/
└── daily/YYYY-MM-DD.json
/Users/ph/.agents/skills/chief-of-staff/
└── data/
├── briefings/YYYY-MM-DD.md
├── claude-code-summaries/YYYY-MM-DD.json
└── overnight-results/
Integration with existing skills
| Skill | When to use |
|---|---|
week-plan | Trigger weekly planning |
week-review | Trigger weekly review |
call-prep | Prep for upcoming calls |
schedule-task | Schedule overnight automation |
Weekly rhythm
| Day | Prompt |
|---|---|
| Friday–Sunday | "It's time for your weekly review. Run /week-review?" |
| Sunday–Monday | "Ready to plan next week? Run /week-plan?" |
Fetching calendar events
Fetch from both calendars:
gog cal events primary --from today --to today --account pete.hartree@gmail.com
gog cal events jno364pp9c545r5s1n99k3q39s@group.calendar.google.com --from today --to today --account pete.hartree@gmail.com
The Meetings calendar returns times in UTC—add 1h for CET (or 2h for CEST). Merge both calendars, sort by time, format each event as HHMM Event name.
Update Day.md by passing each event as an argument:
python3 /Users/ph/.agents/skills/chief-of-staff/scripts/update-day-schedule.py "0800 Standup" "1400 Call with Alice"
No arguments → inserts "No events scheduled."