| name | veda-morning |
| model | claude-sonnet-4-6 |
| description | VEDA morning briefing. Pulls calendar, Gmail, and Slack, surfaces overdue and due-today action items, and writes a structured briefing to today's journal. Use when the user says /morning, "good morning", "morning briefing", or "what's my day look like". |
Morning Briefing
Run the VEDA morning briefing. Pull live data, read system state, produce a fixed-format briefing in chat, and write it to today's journal.
Filesystem-First Principle
Use grep and find to locate and extract data. Only use Read on files that have already been identified as relevant. Never browse a directory by reading files one-by-one.
Step 1: Load System State
These three files are always read in full — they are small and always relevant:
MEMORY.md
focus/CURRENT.md
actions/OPEN.md
Note today's date (TODAY=YYYY-MM-DD) and day of week.
Step 2: Create or Open Today's Journal
ls journal/YYYY/MM/YYYY-MM-DD.md 2>/dev/null
- If it does not exist: create it from the journal template (frontmatter:
type: journal, created, updated, tags: [journal]).
- If it already has a
## Morning Briefing section from a prior session:
grep -c "## Morning Briefing" journal/YYYY/MM/YYYY-MM-DD.md
If count > 0, append as ## Morning Briefing (Session N) rather than overwriting.
Step 3: Pull Live Data
Use the hodor tool protocol (search → describe → execute) to pull:
Calendar: Today's events from Google Calendar. Filter out declined events, all-day events, and Reclaim/focus blocks.
For each attendee name returned by the calendar, check whether a VEDA profile exists:
find people/ -iname "firstname-lastname.md" -type f
If a profile exists, find the most recent meeting involving them to get the last interaction date:
grep -rl "\[\[firstname-lastname\]\]" meetings/ --include="*.md" | sort -r | head -1
Then read only that one file to extract the date.
Gmail: Unread and important threads since yesterday 17:00 local. Skip automated notifications (build alerts, bots, calendar invites). Surface only threads requiring action.
Slack: Messages since yesterday 17:00 local across tracked channels in slack/channel-summaries/_registry.md. Cap at 10 lines total.
If a data source is unavailable, note "unavailable" in that section — never block on a failed pull.
Step 4: Identify Action Items
Extract overdue and due-today items from actions/OPEN.md using awk to read only the relevant sections:
awk '/## ⚠️ Overdue/,/^---/' actions/OPEN.md
awk '/## 🔵 Due Soon/,/^---/' actions/OPEN.md
Filter the Due Soon section for items whose due date matches today (YYYY-MM-DD):
grep "$(date +%Y-%m-%d)" actions/OPEN.md
Step 5: Produce Briefing
Write the briefing in chat and to the journal using exactly this format — same sections, same order, every time:
## Morning Briefing — YYYY-MM-DD (Day)
*Generated HH:MM PT*
### Calendar
| Time | Meeting | Who | Note |
|------|---------|-----|------|
| HH:MM–HH:MM | Meeting name | Attendee names | [last met YYYY-MM-DD / open item / prep flag] |
### Action Items
**Overdue**
- ACT-ID — Description *(X days)*
**Due Today**
- ACT-ID — Description
*(None)* if empty.
### Slack
- **#channel-name**: one-line summary
*(10-line cap total)*
### Email
- **From / Subject**: one-line summary
*(Skip section entirely if nothing requires attention.)*
### Hot Items
From MEMORY.md "Immediate Hot Items" — only items relevant to today or this week.
- [item]
*(Skip section if no hot items.)*
Rules:
- Calendar table always comes first, even if empty.
- If a meeting attendee has a VEDA profile, the Note column must include last interaction date.
- Slack cap is 10 lines — curate ruthlessly.
Step 6: Friday Addition
If today is Friday, also produce a ## Week Ahead section after the standard briefing:
## Week Ahead (Mon YYYY-MM-DD – Fri YYYY-MM-DD)
### Key Meetings
| Day | Meeting | Prep needed |
|-----|---------|-------------|
### Action Items Due Next Week
| ID | Item | Due |
|----|------|-----|
### Project Watch Items
- **Project**: status + any risk
Pull next week's calendar from Google Calendar for this section.
Step 7: Write to Journal
Append the complete briefing to today's journal under ## Morning Briefing. Update the updated frontmatter field.
Step 8: Confirm
Written to journal/YYYY/MM/YYYY-MM-DD.md.