@silverstein/minutes-recap
AGenerate a daily digest of today's policy-authorized meetings and voice memos — key decisions, action items, and themes across available recordings. Use when the user asks "recap my day", "what happened in my meetings today", "daily summary", "what did I discuss today", "any action items from today", or wants a consolidated view of the day's conversations.
Install
agr install @silverstein/minutes-recap --target claudeWrites 1 file into .claude/skills/, pinned to git-2854706b.
- .claude/skills/minutes-recap/SKILL.md
Document
name: minutes-recap description: Generate a daily digest of today's policy-authorized meetings and voice memos — key decisions, action items, and themes across available recordings. Use when the user asks "recap my day", "what happened in my meetings today", "daily summary", "what did I discuss today", "any action items from today", or wants a consolidated view of the day's conversations.
Skill Path
Before running helper scripts or opening bundled references, set:
export MINUTES_SKILLS_ROOT="$(git rev-parse --show-toplevel)/.agents/skills/minutes"
export MINUTES_SKILL_ROOT="$MINUTES_SKILLS_ROOT/minutes-recap"
/minutes-recap
Synthesize today's policy-authorized normal meetings and voice memos into a single daily brief. Restricted history is excluded from this agent workflow by default and must never be treated as absent evidence.
How to generate the recap
-
Find today's recordings from the bounded live list:
minutes list --limit 50Require exit status 0, parse the JSON written to stdout, and select entries whose
dateis today. A date string is not a search query. -
Read each selected recording with
minutes get "<exact path>" --json. Require exit status 0 and use only the returned content. Never reopen list paths through the host filesystem. -
Synthesize into a daily brief — use the template in
templates/daily-recap.mdas a starting point, adapting sections based on what actually exists in the day's recordings. -
Present the recap directly in the conversation — don't save it to a file unless asked.
What makes a good recap
- Cross-reference across meetings: if pricing came up in two different calls, note that
- Surface conflicts: if Meeting A decided X but Meeting B discussed doing Y, flag it
- Prioritize action items: these are the things the user needs to act on
- Include voice memos: ideas captured on the go are easy to forget — surface them
- If there are no meetings or memos today, say so clearly rather than making something up
Interactive conflict detection
When you find conflicts between meetings (e.g., different decisions on the same topic, contradictory action items, or shifted priorities), don't just note them — ask the user about them.
Use AskUserQuestion: "I found a conflict between your meetings today: [Meeting A] decided [X], but [Meeting B] discussed doing [Y]. Which one is current?"
Options should include:
- The decision from Meeting A
- The decision from Meeting B
- "Neither — it's still unresolved"
- "Both are valid in different contexts"
This turns the recap from a passive report into an active reconciliation tool. Surface at most 2-3 conflicts per recap to avoid fatigue.
Gotchas
- No recordings today ≠ an error — If there are no meetings or memos for today, say "No recordings found for today" and offer to search a different date range. Don't hallucinate a recap.
- Voice memos are easy to miss — They live in
~/meetings/memos/, not the main~/meetings/directory. The search command includes both, but double-check if the user says "I recorded a voice memo today" and you don't see it. - Meetings without LLM summarization have less structure — If a meeting file only has a raw transcript (no Summary, Decisions, or Action Items sections), you'll need to extract insights yourself from the transcript text. Check the YAML frontmatter for
action_items:anddecisions:fields. - Cross-day meetings — A meeting that started at 11 PM and ended at 1 AM will be dated by its start time. If the user asks "what happened today" and is missing a late-night meeting, check yesterday's date too.
Trustgrade A
- passBody integrity
Whether the stored document is plausibly the kind of file the artifact declares, rather than something fetched by mistake.
- passType matchnot applicable to this artifact type
Whether the artifact is really the kind of thing its metadata claims it is.
- passFreshness
How long since the source repository was last pushed to.
- passPrompt injection
Scans the artifact's own text for instructions aimed at your agent rather than at you.
- passLicense
Whether the source repository declares an SPDX license permissive enough to redistribute.
How the grade is calculated
Each check contributes 0 points when it passes, 1 when it warns, and 2 when it fails. The total maps to a letter:
- Aevery check passed
- Bone warning
- Ctwo warnings
- Dprompt injection or body integrity failed, or three warnings
- Fone of those failed, and something else is wrong
These are automated hygiene checks, not a security audit, and not a dependency or vulnerability scan. A grade of A means nothing was flagged — not that the artifact is safe.
Versions
git-2854706b8c3e2026-07-31