Daily brief
A short, scannable morning briefing — today's calendar, priority unread, follow-ups going cold, and what needs attention. Activate when the user says "/assistant:brief", "morning briefing", "what's my day look like", or on a morning schedule.From its SKILL.md
npx -y skills add daddia/my-assistant --skill daily-briefAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.6 KB, as published. Nobody here has run it
Daily brief
One screen the user reads with their coffee that tells them exactly what today needs. This is the anchor of the scheduled-task setup — most users run it weekday mornings. Catalog entry: job_id: morning-briefing in scheduled/schedules.yaml.
Read the profile first
Load working hours from {assistantPath}/policies/calendar.policy.md, VIP tiers from {assistantPath}/policies/email.policy.md, and voice from the profile (the brief is written to the user, in their preferred style — tight, scannable, no filler).
Schedule health check (interactive runs only)
Before assembling the brief on an interactive run (/assistant:brief), check for a missed scheduled morning briefing. Do not run this block when the current session is the scheduled run recovering the job.
- Load
{working-folder}/scheduled/morning-briefing.yamlif present. If missing, treat as "never scheduled" — suggest/assistant:schedulesonce, then proceed. If corrupt, note "health ledger unreadable — re-run /assistant:schedules" and proceed. - Read the morning-briefing entry. Skip miss detection when
surfaceismanagedorcloud-code— local miss logic does not apply. - On
surface: local, on a weekday, when local time is past the expected run window (cron fire time + 90 minutes; default 08:00 + 90m = 09:30), detect a miss when either:brief-{today}.mdis absent in the working folder, orlast_run_atis stale (before today's expected window).
- On miss: increment
miss_count_7din the job file, persist it, then append one health block after normal brief output (see below). Do not auto-run a catch-up brief — the user may be intentionally running early or late. - When
miss_count_7d >= 2for this critical job onlocal, add the escalation line to the health block.
Expected run window: cron from catalog (0 8 * * 1-5) + 90 minutes. Use profile working_hours.timezone when set; otherwise the user's stated local timezone.
Schedule health block (append when miss detected)
### Schedule health
- **Missed:** Morning briefing (expected ~08:00 weekdays on *local* surface)
- **Last success:** YYYY-MM-DD — `brief-YYYY-MM-DD.md`
- **Suggestion:** If this happens more than once a week, move this job to the managed-agent cookbook (`managed-agents/morning-briefing/agent.yaml`) or a Claude Code cloud schedule. Run `/assistant:schedules` to walk the decision tree.
When miss_count_7d >= 2, add:
This job has missed twice in the last seven days on a local schedule. Consider moving only this job to managed-agent or cloud-code — not your whole setup.
Max one health block per chat turn.
What it assembles
Pull from whatever is connected; degrade gracefully when something's missing.
- Today's calendar — meetings with times and attendees; flag anything external or VIP; note gaps and any conflict/no-buffer issues. When back-to-back meetings or missing buffers are detected, append one line: "Run
/assistant:calendar protectto draft buffer blocks." When habits are configured incalendar.policy.mdand a pasted agenda is already loaded for the calendar section, optionally footnote:habit: N gaps this week(cheap scan only — no extra connector round-trip). Optionally footnote:calendar: N buffer gaps. Hand scheduling detail tocalendar-schedulingprotect mode when the user confirms — default is offer, not silent inline scan (keeps brief under ~400 words). - Priority unread — prefer today's sweep artefact over a live re-triage (see Sweep handoff below). Fall back to
~~email/~~chattop items or pasted unread when no recent sweep exists. VIP-first; only what matters before noon. - Follow-ups going cold — from
follow-up-tracking: what's silent past threshold. - Due tasks — from
TASKS.md: due or overdue today (viatask-management). - Needs attention before noon — the 1–3 things that will hurt if missed. Merge VIP/needs-reply lines from the sweep artefact when present.
Sweep handoff
Before scanning live mail for priority unread:
- Look for
sweep-YYYY-MM-DD-{slot}.mdfiles in the working folder for today's date (any slot:0800,1200,1600). - Use the most recent sweep file if its timestamp is within the last 12 hours (tolerates the 08:00 sweep/brief race — brief may run before sweep finishes).
- Pull VIP and needs-reply lines from that file into Before noon / Priority unread — do not re-run full inbox triage when a fresh sweep exists.
- If no sweep file within 12h, note one line:
No sweep artefact since {last sweep date or "today"} — using live unread.Then use~~emailor ask for paste.
Sweep files are written by scheduled /assistant:inbox triage (08:00) and /assistant:inbox sweep (12:00/16:00) per skills/inbox-triage/SKILL.md. The 08:00 triage run writes the same sweep-YYYY-MM-DD-0800.md artefact shape the brief consumes.
Ledger out-of-sync fallback
When loading sweep context or checking inbox schedule health:
- If
{working-folder}/scheduled/inbox-triage-am.yamlorinbox-sweep.yamlhaslast_run_at: null(or missing) but a matchingsweep-YYYY-MM-DD-{slot}.mdexists for today, treat the artefact file's modification time as the implied last run. - Flag ledger out of sync in the brief or health output — do not report "no prior sweep on record."
- Suggest re-running the ledger command from
skills/inbox-triage/SKILL.mdor the next scheduled job to repair the heartbeat.
Output shape
Keep it under ~400 words. Lead with the day's shape.
Morning brief — Tue 8 Jul
Today: 3 meetings, first at 10:00.
10:00 Acme quarterly (Sam Lee, external) — deck due, decision on Q3 scope
14:00 1:1 Dana
16:00 Focus block (protected)
Before noon
• Reply to Priya re board deck (VIP) — draft ready
• Send Sam the revised deck ahead of 10:00
Going cold
• Acme contract — silent 4 days, nudge drafted
Due today
• Submit expense report
Quiet otherwise. Have a good one.
Scheduled use
When run as a scheduled task, save output to brief-YYYY-MM-DD.md in the working folder so there's a history. See skills/schedule-setup/SKILL.md for the packaged 8am prompt.
Heartbeat: at end of a scheduled run, update the ledger via bash (required):
python3 scripts/update_ledger.py \
--job-id morning-briefing \
--status {success|partial|failed} \
--artifact brief-{today}.md \
--working-folder {working-folder}
Before ending, confirm last_run_at in scheduled/morning-briefing.yaml matches this run.
Standalone
No connectors? Ask the user to paste their calendar and top unread, or brief from TASKS.md and memory alone. Still useful.
Rules
- Read-only and draft-only: the brief surfaces and drafts, never sends or books.
- Short beats complete. If it doesn't change what the user does today, leave it out.
Approval frame
Follow rules/approval-frame.md when surfacing items needing attention — especially cold threads and draft-ready VIP items.
Use all four sections when the brief includes reviewable work. When a draft-ready item has a queue id, you may footnote the id in brief prose (e.g. "draft ready — rq-2026-07-08-reply-priya-deck").
Do not write queue items for read-only calendar or FYI sections unless a separate reviewable artefact exists.