Meeting Minutes
github/awesome-copilot
Generate concise, actionable meeting minutes for internal meetings.
Fast non-interactive briefing before any meeting — auto-detects your next calendar event, pulls relationship history, surfaces open commitments, and produces a one-page brief in under 30 seconds.
$ npx skills add silverstein/minutes --skill minutes-brief -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install silverstein/minutes minutes-brief --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/silverstein/minutes.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.opencode/skills/minutes-brief .claude/skills/minutes-brief && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "minutes-brief" agent skill from https://github.com/silverstein/minutes/tree/main/.opencode/skills/minutes-brief into .claude/skills/minutes-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minutes-brief", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/silverstein/minutes/tree/main/.opencode/skills/minutes-briefType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add silverstein/minutes --skill minutes-brief -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install silverstein/minutes minutes-brief --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/silverstein/minutes.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.opencode/skills/minutes-brief .agents/skills/minutes-brief && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "minutes-brief" agent skill from https://github.com/silverstein/minutes/tree/main/.opencode/skills/minutes-brief into .agents/skills/minutes-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minutes-brief", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add silverstein/minutes --skill minutes-brief -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install silverstein/minutes minutes-brief --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/silverstein/minutes.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.opencode/skills/minutes-brief .cursor/skills/minutes-brief && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "minutes-brief" agent skill from https://github.com/silverstein/minutes/tree/main/.opencode/skills/minutes-brief into .cursor/skills/minutes-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minutes-brief", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/silverstein/minutes.git --path .opencode/skills/minutes-brief--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add silverstein/minutes --skill minutes-brief -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install silverstein/minutes minutes-brief --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/silverstein/minutes.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.opencode/skills/minutes-brief .gemini/skills/minutes-brief && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "minutes-brief" agent skill from https://github.com/silverstein/minutes/tree/main/.opencode/skills/minutes-brief into .gemini/skills/minutes-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minutes-brief", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install silverstein/minutes minutes-briefInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add silverstein/minutes --skill minutes-brief -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/silverstein/minutes.git skills-src && mkdir -p .github/skills && cp -r skills-src/.opencode/skills/minutes-brief .github/skills/minutes-brief && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "minutes-brief" agent skill from https://github.com/silverstein/minutes/tree/main/.opencode/skills/minutes-brief into .github/skills/minutes-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minutes-brief", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add silverstein/minutes --skill minutes-brief -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install silverstein/minutes minutes-brief --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/silverstein/minutes.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.opencode/skills/minutes-brief .opencode/skills/minutes-brief && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "minutes-brief" agent skill from https://github.com/silverstein/minutes/tree/main/.opencode/skills/minutes-brief into .opencode/skills/minutes-brief/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "minutes-brief", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
minutes-briefFast non-interactive briefing before any meeting — auto-detects your next calendar event, pulls relationship history, surfaces open commitments, and produces a one-page brief in under 30 seconds.
Minutes Brief is an agent skill from silverstein/minutes. Fast non-interactive briefing before any meeting — auto-detects your next calendar event, pulls relationship history, surfaces open commitments, and produces a one-page brief in under 30 seconds. Use this whenever the user says "brief me", "give me a quick brief", "what's coming up", "background on my next call", "who am I meeting next", "brief me on Sarah", "I have a call in 10 min", "quick rundown", or right before walking into a meeting. Different from /minutes-prep — brief is the fast hook-fireable version…
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: opencode
The repository describes itself as: Open-source, local-first Granola/Otter alternative that Claude Code, Codex, Cursor, and any MCP client can query. Meetings, calls, and voice memos transcribed on-device into… The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit d3285c7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodegitosascriptFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
opencode
From compatibility in the SKILL.md frontmatter.
Minutes Brief loads about 3.1k tokens when it runs. Until then it costs about 168 tokens; SKILL.md has 1,345 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from silverstein/minutes at commit d3285c7, republished under its MIT licence (© silverstein). 1,345 words, ~3,098 tokens.
.claude/skills/minutes-brief/SKILL.md (or your agent's skills folder).Before running helper scripts or opening bundled references, set:
export MINUTES_SKILLS_ROOT="$(git rev-parse --show-toplevel)/.opencode/skills"
export MINUTES_SKILL_ROOT="$MINUTES_SKILLS_ROOT/minutes-brief"Fast, non-interactive briefing that synthesizes your relationship history with someone into a one-page brief — designed so you can read it in 60 seconds before walking into a call.
This is the proactive layer. It's built to be invoked silently by a hook (e.g., 15 min before a calendar event) and to also work as a manual /minutes-brief command. Unlike /minutes-prep, brief asks no questions and sets no goals — it just hands you the facts.
Three ways the user can invoke this:
1. With a name (/minutes-brief sarah, "brief me on Alex")
→ Use that name directly. Before searching, check for learned aliases:
node "$MINUTES_SKILLS_ROOT/_runtime/hooks/lib/minutes-learn-cli.mjs" aliases "<name>" 2>/dev/nullIf aliases exist, search across all returned variants and treat them as the same person for the rest of the flow. If the user explicitly says two names are the same person, persist it:
node "$MINUTES_SKILLS_ROOT/_runtime/hooks/lib/minutes-learn-cli.mjs" set-alias "Sarah Chen" "Sarah" "User confirmed these refer to the same person"Then skip to Phase 1.
2. With "auto" or no argument (/minutes-brief, "brief me on my next call")
→ Auto-detect the next upcoming calendar event. Try sources in order — use the first that works:
Google Calendar MCP (best — Claude users):
gcal_list_events(timeMin: "<now ISO>", timeMax: "<+2hr ISO>", condenseEventDetails: false)Filter to events with 2+ attendees, skip all-day events, pick the soonest. Pull attendee names from the event.
gog CLI (if installed):
gog calendar list --today --json 2>/dev/nullApple Calendar via osascript (every Mac, zero install):
osascript -e 'tell application "Calendar" to get {summary, start date} of (every event of every calendar whose start date >= (current date) and start date < ((current date) + 2 * hours))'If none return anything, ask once: "I can't find an upcoming meeting. Who do you want a brief on?" Then take whatever they say and move on.
3. Hook-fireable mode (/minutes-brief --auto, or invoked silently from a hook)
→ Same as auto, but never ask questions. If no upcoming meeting and no name, exit silently with no output. Hooks should never spam the user.
The Minutes CLI already does the hard work. Person profiles, search, relationship rankings, and commitments are bounded policy-safe projections. Run the commands below in parallel and require exit status 0 before interpreting their output.
# 1. Bounded live-source person profile.
minutes person "<name>"
# 2. Recent decisions involving them, last 30 days.
# Clean JSON on stdout by default (insights does NOT accept --json — output is already JSON).
minutes insights --participant "<name>" --kind decision --since <30-days-ago>
# 3. Recent meetings with them, last 60 days. Newline-delimited JSON (one object per line).
minutes search "<name>" --limit 10 --since <60-days-ago> --format jsonCLI stream-handling notes — the Minutes CLI is actively developed and its stream contract is not fully settled. Today (0.8.0):
minutes person, minutes insights, and minutes search --format json are bounded live-source surfaces.minutes people, minutes commitments, and minutes person fail closed on authorization, resource-budget, or correction races. Never suppress a nonzero exit or translate it into an empty fact.minutes insights --json is not a real flag, minutes export --since is not a real flag. The CLI will reject unknown flags with a usage error.If a future CLI release changes any of these contracts, update this skill in the same PR that ships the CLI change.
Before declaring "first meeting on record", verify it with live-source search:
minutes search "<name>" --limit 1 --format jsonFor multi-attendee meetings, focus on the requested person. Mention the others briefly at the end. Don't try to brief five people at once.
Extract the file paths of the most recent 1–2 meetings from a successful minutes search response. Reauthorize and retrieve each meeting through the native bounded surface:
minutes get "<exact path>" --jsonRequire exit status 0 and use only the returned content. Never pass the path to the host Read tool: search results are hints, not retained authorization capabilities.
Don't read more than two — past three meetings is enough context for a brief, and the brief is supposed to fit on one screen.
Produce a brief in this exact shape — every section is one tight chunk, total fits on one screen:
# Brief: <Person Name> · <today's date>
**Last conversation** (<date of most recent meeting>): <2–3 sentences in prose, including the emotional tone if discernible from the transcript>
**They've been thinking about**: <comma-separated list of 3–5 hot topics from the last 30 days, ordered by recency × frequency>
**Commitments**: Use `minutes commitments --person "<name>" --json`; require exit status 0.
**Where things stand**: <one-line read of the relationship vibe — warming, cooling, stable, urgent, drifting>
**Open with**: "<a concrete first sentence the user could literally say at the top of the call — references something specific from the last conversation>"Concrete example of a good "Open with" line:
Bad: "Hey Sarah, how's everything going with Q2?" — generic, could be said to anyone. Bad: "Hi Sarah, hope you're doing well!" — pure filler. Good: "Hey Sarah — last time you mentioned the Q2 hiring freeze was making your roadmap impossible. Did legal come back on the contractor question?"
The good version is specific (cites Q2 freeze, the contractor angle), references something only THIS conversation history would surface, and gives Sarah an immediate hook to pick up the thread.
Rules for the brief:
minutes search returns nothing, say that no matching meeting history was found. Never infer relationship facts from the unavailable graph.Save the brief to ~/.minutes/briefs/ so /minutes-debrief can compare against it later:
mkdir -p ~/.minutes/briefs
chmod 700 ~/.minutes/briefsWrite to ~/.minutes/briefs/YYYY-MM-DD-{person-first-name-lowercase}.brief.md with frontmatter:
---
person: <Full Name>
date: <today ISO>
brief_type: auto | manual
meeting_count: <count from minutes search results used>
trigger: "calendar:<event title>" | "manual"
---…followed by the brief body. Then chmod 600 the file — briefs contain relationship intelligence and should be private.
Display the brief inline in the response. Don't paraphrase it or summarize it after — let the brief speak for itself.
End with exactly one line — this skill is about speed:
"Want to think harder about goals? Run
/minutes-prep <name>. After the call, run/minutes-debrief."
That's it. No follow-up questions, no "anything else I can help with?". Brief is fast on purpose.
node "$MINUTES_SKILLS_ROOT/_runtime/hooks/lib/minutes-learn-cli.mjs" set-explicit workflow_preference meeting_prep_mode prep "User explicitly prefers prep"
node "$MINUTES_SKILLS_ROOT/_runtime/hooks/lib/minutes-learn-cli.mjs" set-explicit workflow_preference meeting_prep_mode brief "User explicitly prefers brief"
node "$MINUTES_SKILLS_ROOT/_runtime/hooks/lib/minutes-learn-cli.mjs" set-explicit nudge_feedback meeting_prep_nudge suppress "User explicitly asked to suppress meeting prep nudges"node "$MINUTES_SKILLS_ROOT/_runtime/hooks/lib/minutes-learn-cli.mjs" set-alias "Sarah Chen" "Sarah" "User confirmed alias"--auto and nothing matches, exit cleanly with zero output. Hooks should never spam the user. Errors only matter when the user is actively asking.sarah.brief.md, not sarah-chen.brief.md. Slug rules: lowercase, ASCII-only (strip diacritics via Unicode NFKD), replace spaces and punctuation with hyphens, take only the first name token. "María José Pérez" → maria. "Jean-Claude" → jean-claude. Single-name people (Madonna) → madonna. This matches /minutes-prep and /minutes-debrief so they can find each other./minutes-prep. Two skills, two jobs — keep the line clean.minutes search returns empty, say that no matching meeting history was found and use only the calendar event. Never invent history.--participant flag does fuzzy matching for you.chmod 600. They contain relationship intelligence the user wouldn't want leaked.© silverstein, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .opencode/skills/minutes-brief of silverstein/minutes.
Open the folder on GitHubat commit d3285c7
Minutes Brief next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Minutes Brief this skillsilverstein/minutes | 1.5k | — | ~3.1k | Automated safety check: Pass | MIT | |
| Meeting Minutesgithub/awesome-copilot | 40k | 2 repos | ~2k | Automated safety check: Pass | MIT | |
| Meeting Minutesaipoch/medical-research-skills | 1.9k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Meetingsalirezarezvani/claude-skills | 28k | — | ~1.5k | Automated safety check: Pass | MIT | |
| Meeting Minutes Takerdaymade/claude-code-skills | 1.4k | — | ~9.8k | Automated safety check: Pass | MIT | |
| Briefalirezarezvani/claude-skills | 28k | — | ~967 | Automated safety check: Pass | MIT |
github/awesome-copilot
Generate concise, actionable meeting minutes for internal meetings.
aipoch/medical-research-skills
Use meeting minutes for other workflows that need structured execution, explicit assumptions, and clear output boundaries.
alirezarezvani/claude-skills
A skill your agent uses when someone wants to decide whether a meeting is worth calling, price a meeting in dollars, build a timeboxed agenda with desired outcomes, or turn messy meeting notes into…
daymade/claude-code-skills
Transforms raw meeting transcripts into structured, evidence-based meeting minutes — merges multiple versions without losing content, reviews existing minutes against the transcript for missing…
alirezarezvani/claude-skills
/cs:brief <topic — Generate a one-page strategy brief from an office-hours intake.
aipoch/medical-research-skills
Generates structured meeting minutes from text transcripts. An agent skill from aipoch/medical-research-skills.
silverstein/minutes
Analyze a product walkthrough, bug report video, Loom, or ScreenPal using Minutes transcription plus visual review.
silverstein/minutes
Self-coaching analysis of your own behavior across meetings — talk-time ratio, filler words, hedging language, monologue length, energy patterns, and (when meetings are tagged via /minutes-tag) what…
silverstein/minutes
Lightweight outcome tagging for meetings — won, lost, stalled, great, or noise.
silverstein/minutes
Verify that Minutes is properly set up and working — model downloaded, mic accessible, directories exist, no stale state.
silverstein/minutes
Start or stop recording a meeting, call, or voice memo. An agent skill from silverstein/minutes.
silverstein/minutes
Manage old recordings — find large files, archive old meetings, delete processed originals.
Fast non-interactive briefing before any meeting — auto-detects your next calendar event, pulls relationship history, surfaces open commitments, and produces a one-page brief in under 30 seconds. Minutes Brief is an agent skill from silverstein/minutes. Fast non-interactive briefing before any meeting — auto-detects your next calendar event, pulls relationship history, surfaces open commitments, and produces a one-page brief in under 30 seconds.
Minutes Brief fits situations like: give me a quick brief; whats coming up; background on my next call; who am I meeting next.
Run `npx skills add silverstein/minutes --skill minutes-brief -a claude-code`. Or copy the skill folder (.opencode/skills/minutes-brief in silverstein/minutes) into .claude/skills/minutes-brief in your project. Claude Code loads it when a task matches its description.
Run `npx skills add silverstein/minutes --skill minutes-brief -a codex`. Or copy the skill folder (.opencode/skills/minutes-brief in silverstein/minutes) into .agents/skills/minutes-brief in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add silverstein/minutes --skill minutes-brief -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/minutes-brief, .gemini/skills/minutes-brief, .github/skills/minutes-brief and .opencode/skills/minutes-brief in your project.
Going by SKILL.md and its folder, Minutes Brief needs the command-line tools its instructions call (node, git and osascript). Compatibility (from SKILL.md): opencode.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Minutes Brief is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Minutes Brief: Meeting Minutes (github/awesome-copilot, 40k stars), Meeting Minutes (aipoch/medical-research-skills, 1.9k stars), Meetings (alirezarezvani/claude-skills, 28k stars) and Meeting Minutes Taker (daymade/claude-code-skills, 1.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
silverstein (a GitHub user) maintains it in silverstein/minutes, which has 1,542 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 8, 2026.
Source: silverstein/minutes on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.