freshcrate
Skin:/
Home > MCP Servers > minutes

minutes

Every meeting, every idea, every voice note โ€” searchable by your AI. Open-source, privacy-first conversation memory layer.

Why this rank:Strong adoptionRecent releaseHealthy release cadence

Description

Every meeting, every idea, every voice note โ€” searchable by your AI. Open-source, privacy-first conversation memory layer.

README

minutes

GitHub starsLicense: MIT

Open-source conversation memory. ย  useminutes.app

Agents have run logs. Humans have conversations. minutes captures the human side โ€” the decisions, the intent, the context that agents need but can't observe โ€” and makes it queryable.

Record a meeting. Capture a voice memo on a walk. Ask Claude "what did I promise Sarah?" โ€” and get an answer. Your AI remembers every conversation you've had.

Own every conversation you've ever had. Cloud meeting tools rent your own conversations back to you. Minutes writes every meeting to ~/meetings/ as plain markdown, which every AI you use (Claude Code, Codex, Gemini CLI, Cursor, OpenCode) reads directly. No SDK. No API key. No vendor to outlive. Ten years from now, grep still works on your corpus. ย For agents โ†’ ย ยทย  Frontmatter schema โ†’

minutes demo โ€” record, dictate, phone sync, AI recall

Works with

Claude Code โ€ข Codex โ€ข OpenCode โ€ข Gemini CLI โ€ข Claude Desktop โ€ข Mistral Vibe โ€ข Obsidian โ€ข Logseq โ€ข Phone Voice Memos โ€ข Any MCP client

Quick start

# macOS โ€” Desktop app (menu bar, recording UI, AI assistant)
brew install --cask silverstein/tap/minutes

# macOS โ€” CLI only
brew tap silverstein/tap && brew install minutes

# Any platform โ€” from source (requires Rust + cmake; Windows also needs LLVM)
cargo install minutes-cli                          # macOS/Linux
cargo install minutes-cli --no-default-features    # Windows (see install notes below)

# MCP server only โ€” no Rust needed (Claude Code, Codex, OpenCode, Gemini CLI, Claude Desktop, etc.)
npx minutes-mcp
minutes setup --model small   # Download whisper model (466MB, recommended)
minutes record                # Start recording
minutes stop                  # Stop and transcribe

Docs and agent surfaces

The README is now the product overview and install guide, not the only home for agent-facing reference.

Choose your surface

  • Desktop app โ€” brew install --cask silverstein/tap/minutes Best for first recording, live capture, Recall, and post-meeting artifact work.
  • MCP server โ€” npx minutes-mcp Best for agent-first search, recall, and meeting-memory workflows in Claude Desktop, Codex, OpenCode, Gemini CLI, and other MCP clients.
  • CLI โ€” brew tap silverstein/tap && brew install minutes Best for terminal-first local operator workflows, import, search, and vault sync.
  • Claude Code plugin โ€” claude plugin marketplace add silverstein/minutes Best for workflow guidance, prep, debrief, and meeting coaching with the lifecycle skills and hooks.
  • OpenCode project integration โ€” built-in .opencode/skills/ + .opencode/commands/ Best for OpenCode users who want native /minutes-* commands plus the portable Minutes skill pack in the repo.

How it works

Audio โ†’ Transcribe โ†’ Diarize โ†’ Summarize โ†’ Structured Markdown โ†’ Relationship Graph
         (local)     (local)     (LLM)       (decisions,            (people, commitments,
        whisper.cpp  pyannote-rs Claude/       action items,          topics, scores)
        /parakeet    (native)    Ollama/       people, entities)      SQLite index
                                Mistral/OpenAI

Everything runs locally. Your audio never leaves your machine (unless you opt into cloud LLM summarization). Speakers are identified via native diarization. The relationship graph indexes people, commitments, and topics across all meetings for instant queries.

Features

Record meetings

minutes record                                    # Record from mic
minutes record --title "Standup" --context "Sprint 4 blockers"  # With context
minutes record --language ur                      # Force Urdu (ISO 639-1 code)
minutes record --device "AirPods Pro"             # Use specific audio device
minutes stop                                      # Stop from another terminal

Take notes during meetings

minutes note "Alex wants monthly billing not annual billing"          # Timestamped, feeds into summary
minutes note "Logan agreed"                       # LLM weights your notes heavily

Process voice memos

minutes process ~/Downloads/voice-memo.m4a        # Any audio format
minutes watch                                     # Auto-process new files in inbox

Search everything

minutes search "pricing"                          # Full-text search
minutes search "onboarding" -t memo               # Filter by type
minutes actions                                   # Open action items across all meetings
minutes actions --assignee sarah                   # Filter by person
minutes list                                      # Recent recordings

Relationship intelligence

"What did I promise Sarah?" โ€” the query nobody else can answer.

minutes people                                     # Who you talk to, how often, about what
minutes people --rebuild                           # Rebuild the relationship index
minutes commitments                                # All open + overdue commitments
minutes commitments --person alex                   # What did I promise Alex?

Tracks people, commitments, topics, and relationship health across every meeting. Detects when you're losing touch with someone. Suggests duplicate contacts ("Sarah Chen" โ†” "Sarah"). Powered by a SQLite index rebuilt from your markdown in <50ms.

Cross-meeting intelligence

minutes research "pricing strategy"               # Search across all meetings
minutes person "Alex"                              # Build a profile from meeting history
minutes consistency                                # Flag contradicting decisions + stale commitments

Live transcript (real-time coaching)

minutes live                                     # Start real-time transcription
minutes stop                                     # Stop live session

Streams whisper transcription to a JSONL file in real time โ€” any AI agent can read it mid-meeting for live coaching. The MCP read_live_transcript tool provides delta reads (by line cursor or wall-clock duration). Works with Claude Code, Codex, OpenCode, Gemini CLI, or any agent that reads files. The Tauri desktop app has a Live Mode toggle that starts this with one click.

Dictation mode

minutes dictate                                  # Speak โ†’ text appears as you talk
minutes dictate --stdout                         # Output to stdout instead of clipboard

Text streams progressively as you speak (partial results every 2 seconds). By default it accumulates across pauses and writes the combined text to clipboard + daily note when dictation ends. Set [dictation] accumulate = false to keep the older per-pause behavior. Local whisper, no cloud.

Command palette (desktop app)

Press โŒ˜โ‡งK from anywhere on macOS to open a keyboard-first palette of every Minutes command. Start a recording, drop a note into the active session, jump to the latest meeting, search transcripts, or rename the meeting open in your assistant โ€” all without leaving the keyboard. Backed by a single typed command registry in minutes-core, so visibility follows real backend state: stop-recording only appears while you're recording, mid-recording dictation rows are hidden, and the list re-fetches automatically when state changes.

Recents float to the top with their original payload intact (re-running a Search transcripts: pricing from history skips the retype). The shortcut defaults on for both fresh installs and upgrades, with a one-time macOS notification on first launch announcing the binding. Disable it from the Settings overlay (Command Palette section) or by setting [palette] shortcut_enabled = false in your config file ($XDG_CONFIG_HOME/minutes/config.toml when XDG_CONFIG_HOME is set, otherwise ~/.config/minutes/config.toml). The Settings dropdown also offers โŒ˜โ‡งO and โŒ˜โ‡งU if โŒ˜โ‡งK collides with your IDE.

Try it without a mic

minutes demo --full                              # Seed 5 sample meetings (Snow Crash theme)
minutes demo --query                             # Cross-meeting intelligence demo
minutes demo --clean                             # Remove sample meetings

The interactive demo seeds interconnected meetings, then lets you pick a thread to explore. Two storylines, five meetings, zero setup.

System diagnostics

minutes health                                   # Check model, mic, calendar, disk
minutes demo                                     # Run a pipeline test (bundled audio, no mic)

Switching from Granola?

Import your meeting history into Minutes' conversation memory. Once imported, your meetings become searchable context for AI agents, feed the relationship graph for meeting prep, and surface action items and decision patterns across months of conversations.

minutes import granola --dry-run    # Preview what will be imported
minutes import granola              # Import all meetings to ~/meetings/

Reads from ~/.granola-archivist/output/. Meetings are converted to Minutes' markdown format with YAML frontmatter. Duplicates are skipped automatically. All your data stays local โ€” no cloud, no $18/mo.

Want transcripts and AI summaries?

granola-to-minutes exports richer data using granola-cli, a community-built CLI tool (not affiliated with Granola Labs) that accesses Granola's internal API:

minutes import granola granola-to-minutes
Data source Local export (~/.granola-archivist/output/) Granola internal API via granola-cli
Notes & transcript โœ“ โœ“
AI-enhanced summaries โ€” โœ“
Action items & decisions โ€” โœ“ (extracted via Claude)
Speaker attribution โ€” โœ“ (speaker_map in frontmatter)
Setup Export from Granola desktop app npm install -g granola-to-minutes
Works on free tier โœ“ โœ“
API stability N/A (local files) Internal API โ€” may change without notice
npx granola-to-minutes export    # Export to ~/meetings/

Output format

Meetings save as markdown with structured YAML frontmatter:

---
title: Q2 Pricing Discussion with Alex
type: meeting
date: 2026-03-17T14:00:00
duration: 42m
context: "Discuss Q2 pricing, follow up on annual billing decision"
action_items:
  - assignee: mat
    task: Send pricing doc
    due: Friday
    status: open
  - assignee: sarah
    task: Review competitor grid
    due: March 21
    status: open
decisions:
  - text: Run pricing experiment at monthly billing with 10 advisors
    topic: pricing experiment
---

## Summary
- Alex proposed lowering API launch timeline from annual billing to monthly billing/mo
- Compromise: run experiment with 10 advisors at monthly billing

## Transcript
[SPEAKER_0 0:00] So let's talk about the pricing...
[SPEAKER_1 4:20] I think monthly billing makes more sense...

Works with Obsidian, grep, or any markdown tool. Action items and decisions are queryable via the CLI and MCP tools.

Phone โ†’ desktop voice memo pipeline

No phone app needed. Record a thought on your phone, and it becomes searchable memory on your desktop. Claude even surfaces recent memos proactively โ€” "you had a voice memo about pricing yesterday."

The watcher is folder-agnostic โ€” it processes any audio file that lands in a watched folder. Pick the sync method that matches your setup:

Phone Desktop Sync method
iPhone Mac iCloud Drive (built-in, ~5-30s)
iPhone Windows/Linux iCloud for Windows, or Dropbox/Google Drive
Android Any Dropbox, Google Drive, Syncthing, or any folder sync
Any Any AirDrop, USB, email โ€” drop the file in the watched folder

Setup (one-time)

Step 1: Create a sync folder โ€” pick one that syncs between your phone and desktop:

# macOS + iPhone (iCloud Drive)
mkdir -p ~/Library/Mobile\ Documents/com~apple~CloudDocs/minutes-inbox

# Any platform (Dropbox)
mkdir -p ~/Dropbox/minutes-inbox

# Any platform (Google Drive)
mkdir -p ~/Google\ Drive/minutes-inbox

# Or just use the default inbox (manually drop files into it)
# ~/.minutes/inbox/  โ† already exists

Step 2: Add the sync folder to your watch config in your config file ($XDG_CONFIG_HOME/minutes/config.toml when XDG_CONFIG_HOME is set, otherwise ~/.config/minutes/config.toml):

[watch]
paths = [
  "~/.minutes/inbox",
  # Add your sync folder here โ€” uncomment one:
  # "~/Library/Mobile Documents/com~apple~CloudDocs/minutes-inbox",  # iCloud
  # "~/Dropbox/minutes-inbox",                                       # Dropbox
  # "~/Google Drive/minutes-inbox",                                  # Google Drive
]

Step 3: Set up your phone

iPhone (Apple Shortcuts)
  1. Open the Shortcuts app on your iPhone
  2. Tap + โ†’ Add Action โ†’ search "Save File"
  3. Set destination to iCloud Drive/minutes-inbox/ (or your Dropbox/Google Drive folder)
  4. Turn OFF "Ask Where to Save"
  5. Tap the (i) info button โ†’ enable Share Sheet โ†’ set to accept Audio
  6. Name it "Save to Minutes"

Now: Voice Memos โ†’ Share โ†’ Save to Minutes โ†’ done.

Android

Use any voice recorder app + your cloud sync of choice:

  • Dropbox: Record with any app โ†’ Share โ†’ Save to Dropbox โ†’ minutes-inbox/
  • Google Drive: Record โ†’ Share โ†’ Save to Drive โ†’ minutes-inbox/
  • Syncthing (no cloud): Set up a Syncthing share between phone and desktop pointing at your watched folder. Fully local, no cloud.
  • Tasker/Automate (power users): Auto-move new recordings from your recorder app to the sync folder.
Manual (any phone)

No sync setup needed โ€” just get the audio file to your desktop's watched folder:

  • AirDrop (Apple): Share โ†’ AirDrop to Mac โ†’ move to ~/.minutes/inbox/
  • Email: Email the recording to yourself โ†’ save attachment to watched folder
  • USB: Transfer directly

Step 4: Start the watcher (or install as a background service):

minutes watch                  # Run in foreground
minutes service install        # Install all background services (macOS launchd / Linux systemd)
minutes service status         # Check what's running
minutes service restart        # Restart all services (e.g. after upgrading the binary)

minutes service install sets up three agents:

Agent Schedule What it does
watcher Always on Processes voice memos from ~/.minutes/inbox/
weekly-summary Sundays 7pm Generates a weekly digest to ~/.minutes/automations/
proactive-context Daily 8am Builds a context bundle (recent meetings, stale commitments, losing-touch alerts)

Upgrading? minutes service install is idempotent. Re-running it after a binary upgrade rewrites all plists/units and reloads with the new binary path.

How it works

Phone (any)                   Desktop (any)
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Record voice memo        โ†’    Cloud sync / manual transfer
Share to sync folder               โ”‚
                                   โ–ผ
                            minutes watch detects file
                                   โ”‚
                            probe duration (<2 min?)
                              โ”œโ”€โ”€ yes โ†’ memo pipeline (fast, no diarization)
                              โ””โ”€โ”€ no  โ†’ meeting pipeline (full)
                                   โ”‚
                            transcribe โ†’ save markdown
                                   โ”‚
                            โ”œโ”€โ”€ event: VoiceMemoProcessed
                            โ”œโ”€โ”€ daily note backlink
                            โ””โ”€โ”€ surfaces in next Claude session

Short voice memos (<2 minutes) automatically route through the fast memo pipeline โ€” no diarization, no heavy summarization. Long recordings get the full meeting treatment. The threshold is configurable: dictation_threshold_secs = 120 in [watch].

Optional: sidecar metadata

If your phone workflow also saves a .json file alongside the audio (same name, .json extension), Minutes reads it for enriched metadata:

{"device": "iPhone", "source": "voice-memos", "captured_at": "2026-03-24T08:41:00-07:00"}

This adds device and captured_at to the meeting's frontmatter. Works with any automation tool (Apple Shortcuts, Tasker, etc.).

Supports .m4a, .mp3, .wav, .ogg, .webm. Format conversion is automatic โ€” uses ffmpeg when available (recommended for non-English audio), falls back to symphonia.

Vault sync (Obsidian / Logseq)

minutes vault setup              # Auto-detect vaults, configure sync
minutes vault status             # Check health
minutes vault sync               # Copy existing meetings to vault

Three strategies: symlink (zero-copy), copy (works with iCloud/Obsidian Sync), direct (write to vault). minutes vault setup detects your vault and recommends the right strategy automatically.

Claude integration

minutes is a native extension for the Claude ecosystem. No API keys needed โ€” Claude summarizes your meetings when you ask, using your existing Claude subscription.

You: "Summarize my last meeting"
Claude: [calls get_meeting] โ†’ reads transcript โ†’ summarizes in conversation

You: "What did Alex say about pricing?"
Claude: [calls search_meetings] โ†’ finds matches โ†’ synthesizes answer

You: "Any open action items for me?"
Claude: [calls list_meetings] โ†’ scans frontmatter โ†’ reports open items

Any MCP client (Claude Code, Codex, OpenCode, Gemini CLI, Claude Desktop, or your own agent)

Minutes exposes a standard MCP server. Point any MCP-compatible client at it:

{
  "mcpServers": {
    "minutes": {
      "command": "npx",
      "args": ["minutes-mcp"]
    }
  }
}

Canonical MCP reference now lives at:

The MCP surface currently includes recording control, meeting search/retrieval, relationship memory, structured insights, live transcript reading, dictation, QMD integration, and an interactive dashboard resource. Tool names, resource URIs, and prompt templates are generated from the live product surface instead of hand-maintained in this README.

Interactive dashboard (Claude Desktop): tools render an inline interactive UI via MCP Apps โ€” meeting list with filter/search, detail view with fullscreen + "Send to Claude" context injection, People tab with relationship cards and click-through profiles, and consistency reports. Text-only clients see the same data as plain text.

OpenCode CLI

Minutes now ships a project-local OpenCode integration layer:

  • .opencode/skills/minutes-* for OpenCode's one-level skill discovery
  • .opencode/commands/minutes-*.md so you can run native slash commands like /minutes-brief
  • the same portable runtime helpers used by the Codex/Gemini skill pack

OpenCode also reads this repo's AGENTS.md, so the project rules carry over automatically.

For MCP tools in OpenCode, the official CLI flow is:

opencode mcp add

Choose a local stdio server and point it at:

npx minutes-mcp

If you're wiring OpenCode against this repo before the next npm release is cut, point it at the repo-local entrypoint instead:

npm --prefix /absolute/path/to/minutes/crates/mcp exec tsx src/index.ts

For the native skill/command workflow, just launch OpenCode in this repo:

opencode

Then use commands like:

/minutes-brief
/minutes-prep Alex
/minutes-debrief
/minutes-weekly

Mistral Vibe

Add Minutes to your ~/.vibe/config.toml:

[[mcp_servers]]
name = "minutes"
transport = "stdio"
command = "npx"
args = ["minutes-mcp"]

All 26 tools are available in Vibe as minutes_* (e.g. minutes_start_recording, minutes_search_meetings).

Claude Code (Plugin)

Install the plugin from the marketplace:

# First-time install
claude plugin marketplace add silverstein/minutes
claude plugin install minutes
# Restart Claude Code to load skills, hooks, and the meeting-analyst agent

Upgrading? claude plugin marketplace add is a no-op when the marketplace is already on disk โ€” it won't fetch new versions. To pick up new skills and hooks after a release, refresh the marketplace mirror first, then update the plugin:

claude plugin marketplace update minutes    # git pulls the local marketplace mirror
claude plugin update minutes@minutes        # installs the new version into the cache
# Restart Claude Code to apply

18 skills, 1 agent, 2 hooks:

โ”œโ”€โ”€ Capture:      /minutes-record, note, list, recap, cleanup, verify, setup
โ”œโ”€โ”€ Search:       /minutes-search
โ”œโ”€โ”€ Lifecycle:    /minutes-brief, prep, debrief, weekly
โ”œโ”€โ”€ Coaching:     /minutes-tag, mirror
โ”œโ”€โ”€ Knowledge:    /minutes-ideas, lint, ingest
โ”œโ”€โ”€ Intelligence: /minutes-graph
โ”œโ”€โ”€ Agent:        meeting-analyst (cross-meeting intelligence)
โ””โ”€โ”€ Hooks:        SessionStart meeting briefings + PostToolUse recording alerts

Meeting lifecycle skills โ€” inspired by gstack's interactive skill pattern:

/minutes-brief                      โ†’ fast one-pager (or fired automatically by hook 15 min before calls)
  โ†“
/minutes-prep "call with Alex"      โ†’ deeper relationship brief + talking points + goal-setting
  โ†“
minutes record โ†’ minutes stop       โ†’ hook alerts if decisions conflict with prior meetings
  โ†“
/minutes-tag won|lost|stalled       โ†’ 5-second outcome label (unlocks mirror correlation)
  โ†“
/minutes-debrief                    โ†’ "You wanted to resolve pricing. Did you?"
  โ†“
/minutes-mirror                     โ†’ talk-time, hedging, what your winning meetings have in common
  โ†“
/minutes-weekly                     โ†’ themes, decision arcs, stale items, Monday brief
  โ†“
/minutes-graph "everyone who mentioned Stripe"  โ†’ cross-meeting entity queries

For the stable public agent-facing docs surface, use:

Minutes Desktop Assistant

The Tauri menu bar app includes a built-in AI Assistant window backed by the same local meeting artifacts. It runs as a singleton assistant session:

  • AI Assistant opens or focuses the persistent assistant window
  • Discuss with AI reuses that same assistant and switches its active meeting focus
  • Auto-updates from GitHub Releases with signed artifacts, never interrupting a recording

Cowork / Dispatch

The currently verified path for Cowork is plugin-oriented, not โ€œraw MCP automatically appears everywhere.โ€ Minutes ships a Cowork extension scaffold under integrations/claude-cowork-extension/ and a local bundle build script at scripts/build_cowork_extension.sh. On this machine, the bundle build is verified; actual in-Cowork install/use remains a proof-of-life workflow, not a guaranteed default path. Treat Dispatch-triggered recording and other mobile workflows as experimental until the plugin-native path is installed and checked end to end.

Optional: automated summarization

# Use your existing Claude Code, Codex, or OpenCode subscription (recommended)
[summarization]
engine = "agent"
agent_command = "claude"  # or "codex" / "opencode"

# Or use Mistral API (requires MISTRAL_API_KEY)
[summarization]
engine = "mistral"
mistral_model = "mistral-large-latest"

# Or use a free local LLM
[summarization]
engine = "ollama"
ollama_model = "llama3.2"

File-backed automation primitives

Minutes can emit small automation artifacts that are easy to schedule with launchd, cron, or any external runner.

minutes automate weekly-summary --json
minutes automate proactive-context --json

Each run writes:

  • a markdown artifact under ~/.minutes/automation-runs/
  • a matching JSON run record beside it

This is intentionally simple: explicit files, explicit output paths, and no hidden scheduler subsystem.

Codex epic runner

When you want Codex to keep draining a bd epic instead of stopping after one child bead, use the repo-local epic runner:

node scripts/codex_epic_runner.mjs <epic-id> -- --full-auto

What it does:

  • uses bd as the source of truth for epic ancestry and ready work
  • picks the next ready non-epic descendant bead under the target epic
  • claims that bead, runs codex exec against it, then checks whether the bead was actually closed
  • continues only after a real close; pauses on blocked/needs-human outcomes instead of guessing

Dry-run the order first:

node scripts/codex_epic_runner.mjs <epic-id> --dry-run

If you install a Taskmaster-style Codex wrapper later, use it as the per-bead engine without changing the epic logic:

node scripts/codex_epic_runner.mjs <epic-id> --taskmaster -- --sandbox danger-full-access -a never

This is intentionally separate from the Claude plugin hooks. The Minutes plugin hooks are Claude-specific today; the Codex epic runner is a repo-local workflow layer on top of bd and codex exec.

Optional: knowledge base integration

Maintain a living knowledge base from your conversations โ€” person profiles, decision history, and a chronological log that compounds over time. Inspired by Karpathy's LLM Wiki pattern.

[knowledge]
enabled = true
path = "~/wiki"        # or your Obsidian vault, PARA system, etc.
adapter = "wiki"       # "wiki" (flat markdown), "para" (atomic facts), "obsidian" (wiki + [[links]])
engine = "none"        # "none" = structured YAML only (safest), "agent" = LLM extraction
min_confidence = "strong"

After each meeting, structured facts (decisions, action items, commitments) flow into person profiles automatically. Every fact carries provenance back to its source meeting.

minutes ingest --dry-run --all   # Preview what would be extracted
minutes ingest --all              # Backfill existing meetings
minutes ingest ~/meetings/call.md # Process a single meeting

Three output formats:

  • Wiki โ€” people/{slug}.md with facts grouped by category
  • PARA โ€” areas/people/{slug}/items.json with atomic facts (id, status, supersededBy)
  • Obsidian โ€” Wiki format with [[wikilinks]] for cross-references

Safety: default engine = "none" extracts only from parsed YAML frontmatter. No LLM call, zero hallucination risk. Confidence thresholds filter speculative facts. Corrupt data is backed up, never silently destroyed.

Install

macOS

# Desktop app (menu bar, recording UI, AI assistant)
brew install --cask silverstein/tap/minutes

# CLI only (terminal recording, search, vault sync)
brew tap silverstein/tap
brew install minutes

# Or from source (requires Rust + cmake)
export CXXFLAGS="-I$(xcrun --show-sdk-path)/usr/include/c++/v1"
cargo install --path crates/cli

Windows

# Download pre-built binary from GitHub releases, or build from source:
# Requires: Rust, cmake, MSVC build tools, LLVM (for libclang)

# Install LLVM (needed by whisper-rs bindgen):
winget install LLVM.LLVM
[Environment]::SetEnvironmentVariable("LIBCLANG_PATH", "C:\Program Files\LLVM\bin", "User")
# Restart your terminal after setting LIBCLANG_PATH

# Full build (includes speaker diarization):
cargo install --path crates/cli

# Without speaker diarization:
cargo install --path crates/cli --no-default-features

Note: If diarization fails to compile on Windows, use --no-default-features. This is a known upstream issue with pyannote-rs's ONNX Runtime dependency. Everything except speaker labels works without it.

Linux

# Debian/Ubuntu โ€” full dep list:
sudo apt-get install -y \
  build-essential cmake pkg-config \
  clang libclang-dev \
  libasound2-dev libpipewire-0.3-dev libspa-0.2-dev \
  ffmpeg

cargo install minutes-cli
# or, from a checkout:
cargo install --path crates/cli

Why each dep is needed:

  • build-essential, cmake โ€” whisper.cpp build
  • clang, libclang-dev โ€” bindgen (used by whisper-rs and pipewire-sys)
  • libasound2-dev โ€” cpal's ALSA backend
  • libpipewire-0.3-dev, libspa-0.2-dev โ€” cpal's PipeWire backend (compiled unconditionally on Linux)
  • ffmpeg โ€” preferred audio decoder for .m4a/.mp3/.ogg (falls back to pure-Rust symphonia if absent)

Other distros (best-effort โ€” Debian/Ubuntu is the validated path; please open an issue if any package name is wrong on your distro):

  • Fedora/RHEL: sudo dnf install -y gcc-c++ cmake pkgconf-pkg-config clang clang-devel alsa-lib-devel pipewire-devel ffmpeg-free
  • Arch: sudo pacman -S --needed base-devel cmake clang alsa-lib pipewire ffmpeg

Chromebook (Crostini)

Yes, Minutes runs on a Chromebook via the Linux development environment (Crostini). The CLI is the supported path โ€” there's no native ChromeOS build and the Tauri desktop app isn't exercised there, but the core engine, folder watcher, and MCP server all work.

One-time ChromeOS setup:

  1. Turn on Linux. Settings โ†’ About ChromeOS โ†’ Developers โ†’ Linux development environment โ†’ Turn on. Pick a disk size of 10 GB or more (whisper models plus build artifacts).
  2. Grant microphone access to the Linux container. Settings โ†’ Developers โ†’ Linux development environment โ†’ toggle Allow Linux to access your microphone. This is off by default and is the single most common reason minutes record produces silence on a Chromebook.
  3. Open the Linux terminal and follow the Debian/Ubuntu install above (apt-get install โ€ฆ + cargo install minutes-cli).

Verify the environment before your first real recording:

minutes health          # confirms model, mic, disk, watcher
minutes record          # speak for 5 seconds
minutes stop

If minutes health flags the mic as missing, the ChromeOS mic toggle is off โ€” not a cpal bug. Flip it on in Settings and re-run.

What works well on a Chromebook:

  • minutes watch is the killer flow. Drop voice memos from your phone into a synced Google Drive / Dropbox folder that also mounts inside Crostini, and Minutes auto-transcribes them. No mic permission dance, no hotkey fight.
  • CLI recording and transcription with the tiny / base / small models. Expect CPU-only performance โ€” Crostini doesn't expose GPU acceleration to Linux apps, so skip --features metal/cuda/vulkan and pick a smaller model than you would on a Mac.
  • The MCP server (npx minutes-mcp) for Claude Desktop or other MCP clients running inside the container.

What to expect less of:

  • No global hotkeys or tray app. ChromeOS doesn't surface system-level shortcuts to Crostini. minutes record / minutes stop from the terminal is the intended flow.
  • No Tauri desktop app support. It may build, but it isn't tested and the live-coaching / AI Assistant surface assumes a macOS-style window server.
  • Slower transcription. A Chromebook CPU on the small model is usually 2โ€“4x realtime for English. Budget accordingly, or lean on the folder watcher where latency doesn't matter.

If Crostini support breaks for you, please open an issue โ€” Chromebook isn't a first-class test target yet, so real bug reports are the fastest way to harden it.

GPU acceleration

macOS release binaries (DMG + cargo install minutes-cli from published CI artifacts) ship with Metal enabled โ€” large-v3 runs ~2ร— faster than the CPU-only build and offloads nearly all work to the GPU. Other backends remain opt-in at build time.

Backend Platform Feature flag Prerequisites Default in release
Metal macOS metal Xcode Command Line Tools Yes
CoreML macOS coreml Xcode Command Line Tools + .mlmodelc bundle No
CUDA Windows/Linux cuda CUDA Toolkit No
ROCm/HIP Linux hipblas ROCm 6.1+ (hipcc, hipblas, rocblas) No
Vulkan Windows/Linux vulkan Vulkan SDK (+ vulkan-headers on Arch) No

Metal is the only backend that is exercised daily by the maintainer. CUDA, ROCm/HIP, and Vulkan should be considered experimental: they wire through to whisper.cpp via whisper-rs and are expected to work, but have not been validated in CI.

# Apple Metal (macOS) โ€” already enabled in the release DMG; use this for source builds
cargo install --path crates/cli --features metal

# Apple CoreML (macOS Neural Engine) โ€” encoder-only; see note below
cargo install --path crates/cli --features metal,coreml

# NVIDIA GPU (Windows/Linux)
cargo install --path crates/cli --features cuda

# AMD GPU via ROCm (Linux โ€” experimental)
cargo install --path crates/cli --features hipblas

# Vulkan (Windows/Linux โ€” experimental)
cargo install --path crates/cli --features vulkan

CoreML note: --features coreml only accelerates the Whisper encoder on the Apple Neural Engine. It requires the companion ggml-<model>-encoder.mlmodelc bundle next to the .bin weights (e.g. for large-v3, download ggml-large-v3-encoder.mlmodelc.zip and unzip into ~/.minutes/models/). Without it, whisper.cpp silently falls back to the CPU/Metal encoder. Stack it with metal for the best of both worlds โ€” a subsequent PR will fetch the bundle automatically from minutes setup --model large-v3 --coreml.

Windows CUDA users: You may need to set environment variables before building:

$env:CUDA_PATH = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4"
$env:CMAKE_CUDA_COMPILER = "$env:CUDA_PATH\bin\nvcc.exe"
$env:LIBCLANG_PATH = "C:\Program Files\LLVM\bin"
$env:CMAKE_GENERATOR = "NMake Makefiles"

The first CUDA build takes longer than usual (compiling GPU kernels) โ€” this is a one-time cost.

ROCm/HIP users: The build expects ROCm installed at /opt/rocm. If your installation is elsewhere, set HIP_PATH before building:

export HIP_PATH=/path/to/rocm

Vulkan users: On Windows and macOS, set VULKAN_SDK to your SDK install root before building. On Linux, whisper-rs-sys links against the system libvulkan.

Setup (all platforms)

# Download whisper model (also downloads Silero VAD model for non-English audio)
minutes setup --model small   # Recommended (466MB, good accuracy)
minutes setup --model tiny    # Fastest (75MB, but misses quiet audio)
minutes setup --model base    # Middle ground (141MB)

# Install ffmpeg for best transcription quality (strongly recommended for non-English audio)
brew install ffmpeg           # macOS
# apt install ffmpeg          # Linux
# Without ffmpeg, symphonia handles m4a/mp3 decoding โ€” works for English but may
# produce loops on non-English audio. ffmpeg is optional but recommended.

# Enable speaker diarization (optional, ~34MB ONNX models)
minutes setup --diarization

# Alternative: use Parakeet engine (opt-in, local GPU via parakeet.cpp)
# Requires parakeet.cpp installed: https://github.com/Frikallo/parakeet.cpp
minutes setup --parakeet                          # Multilingual v3 (tdt-600m, ~1.2GB)
minutes setup --parakeet --parakeet-model tdt-ctc-110m  # English-only compact model (~220MB)
# Also installs native Silero VAD weights for the parakeet.cpp --vad path

# Enroll your voice for automatic speaker identification
minutes enroll              # Records 10s of your voice
minutes voices              # View enrolled profiles

Speaker identification

Minutes maps anonymous speaker labels (SPEAKER_1, SPEAKER_2) to real names using four levels of confidence-aware attribution:

Level How Confidence Requires
0 Calendar attendees + identity.name โ†’ deterministic mapping for 1-on-1 meetings Medium Calendar access, [identity] name in config
1 LLM analyzes transcript context clues and maps speakers to attendees Medium (capped) Attendees known + summarization engine or agent CLI
2 Your enrolled voice is matched against speaker segments High minutes enroll (one-time 10s recording)
3 You confirm "SPEAKER_1 is Sarah" after a meeting High minutes confirm --meeting <path>

Only High-confidence attributions rewrite transcript labels. Medium/Low are stored in frontmatter (speaker_map) for Claude to surface when asked โ€” "SPEAKER_1 is likely Sarah."

# Set your name (required for Levels 0-2)
# In your config file (`$XDG_CONFIG_HOME/minutes/config.toml` when set,
# otherwise `~/.config/minutes/config.toml`):
[identity]
name = "Your Name"

# Enroll your voice (Level 2)
minutes enroll                    # Record 10s sample
minutes enroll --file sample.wav  # Or from existing audio

# Confirm attributions after a meeting (Level 3)
minutes confirm --meeting ~/meetings/2026-03-25-standup.md
minutes confirm --meeting path.md --speaker SPEAKER_1 --name "Sarah" --save-voice

# Manage voice profiles
minutes voices              # List profiles
minutes voices --json       # JSON output
minutes voices --delete     # Remove all profiles

Privacy: Voice enrollment is self-only (no enrolling others). Level 3 confirmed profiles require explicit opt-in per person. Voice embeddings are stored locally in ~/.minutes/voices.db with 0600 permissions. Nothing leaves your machine.

Platform notes: Calendar integration (auto-detecting meeting attendees) requires macOS. Screen context capture works on macOS and Linux. The voice memo pipeline works on all platforms โ€” any folder sync (iCloud, Dropbox, Google Drive, Syncthing) can feed the watcher. The minutes service install auto-start command requires macOS (launchd); on Linux, use systemd or cron. Speaker diarization (pyannote-rs) works on all platforms (CLI, Tauri app, and via MCP). All other features โ€” recording, transcription, search, action items, person profiles โ€” work on all platforms.

Desktop app

# macOS โ€” Homebrew cask (recommended)
brew install --cask silverstein/tap/minutes

# macOS โ€” build from source
export CXXFLAGS="-I$(xcrun --show-sdk-path)/usr/include/c++/v1"
export MACOSX_DEPLOYMENT_TARGET=11.0
cargo tauri build --bundles app

# macOS โ€” local desktop development with stable permissions
./scripts/install-dev-app.sh

The notarized Homebrew cask/update feed currently tracks the Apple Silicon desktop build. Intel Macs on macOS 15+ can still use the desktop app by building from source with the commands above.

# Windows โ€” build desktop installer from source
cargo install tauri-cli --version 2.10.1 --locked
cd tauri/src-tauri
cargo tauri build --ci --bundles nsis --no-sign

Tagged GitHub releases can include both a Windows NSIS installer as minutes-desktop-windows-x64-setup.exe and a raw desktop binary as minutes-desktop-windows-x64.exe. The installer is currently unsigned, so treat it as an advanced-user / preview distribution surface until Windows signing is added.

The desktop app adds a system tray icon, recording controls, audio visualizer, Recall, and a meeting list window. The current Windows desktop build covers recording, transcription, search, settings, and Recall. Calendar suggestions, call detection, tray copy/paste automation, and the native dictation hotkey remain macOS-only for now.

Release workflow details live in:

For macOS development, use a dedicated signed dev app identity:

  • Production app: /Applications/Minutes.app (com.useminutes.desktop)
  • Development app: ~/Applications/Minutes Dev.app (com.useminutes.desktop.dev)

If you are testing hotkeys, Screen Recording, Input Monitoring, or repeated macOS permission prompts, launch only Minutes Dev.app via ./scripts/install-dev-app.sh. Avoid the repo symlink ./Minutes.app, raw target/ binaries, or ad-hoc local bundles for TCC-sensitive testing.

This repository is open source, so local development does not require the maintainer's Apple signing credentials:

  • ./scripts/install-dev-app.sh works with ad-hoc signing by default
  • for more stable macOS permission behavior across rebuilds, set MINUTES_DEV_SIGNING_IDENTITY to a consistent local codesigning identity
  • release signing and notarization remain maintainer/release workflows

For dictation, the recommended path is the standard shortcut in the desktop app (Cmd/Ctrl + Shift + D by default). The raw-key path for keys like Caps Lock is available as an advanced option but remains more fragile and permission-heavy.

Privacy: All Minutes windows are hidden from screen sharing by default โ€” other participants on Zoom/Meet/Teams won't see the app. Toggle via the tray menu: "Hide from Screen Share โœ“".

Troubleshooting

No speech detected / blank audio: The most common cause is microphone permissions. Check System Settings โ†’ Privacy & Security โ†’ Microphone and ensure your terminal app (or Minutes.app) has access.

tmux users: tmux server runs as a separate process that doesn't inherit your terminal's mic permission. Either run minutes record from a direct terminal window (not inside tmux), or use the Minutes.app desktop bundle which gets its own mic permission.

Build fails with C++ errors on macOS 26+: whisper.cpp needs the SDK include path. Set CXXFLAGS as shown above before building.

Dictation hotkey still fails after you enabled it in System Settings: The native hotkey uses macOS Input Monitoring, which is separate from Screen Recording. The fastest way to test the exact installed desktop identity is:

./scripts/diagnose-desktop-hotkey.sh "$HOME/Applications/Minutes Dev.app"

Use ./scripts/install-dev-app.sh first so you are testing the stable development app identity rather than a raw target/ build. The helper intentionally launches the app through LaunchServices; direct shell execution of Contents/MacOS/minutes-app --diagnose-hotkey can misreport TCC status.

Updating

# macOS desktop app (Homebrew cask)
brew upgrade --cask silverstein/tap/minutes

# macOS CLI (Homebrew)
brew upgrade silverstein/tap/minutes

# From source (CLI)
git pull && cargo install --path crates/cli

# From source (desktop app)
git pull
export CXXFLAGS="-I$(xcrun --show-sdk-path)/usr/include/c++/v1"
cargo tauri build --bundles app
# Then replace /Applications/Minutes.app with the new build from
# target/release/bundle/macos/Minutes.app

# GitHub release (desktop app)
# Download the latest .dmg from https://github.com/silverstein/minutes/releases
# and drag Minutes.app to /Applications, replacing the old version

Check your current version with minutes --version (CLI) or the Settings gear in the desktop app.

Configuration

Optional โ€” minutes works out of the box.

# By default: ~/.config/minutes/config.toml
# Or: $XDG_CONFIG_HOME/minutes/config.toml when XDG_CONFIG_HOME is set

[transcription]
engine = "whisper"        # "whisper" (default) or "parakeet" (opt-in, lower WER)
model = "small"           # whisper: tiny (75MB), base, small (466MB), medium, large-v3 (3.1GB)
# language = "ur"          # Force transcription language (ISO 639-1 code, e.g. "en", "ur", "es", "zh")
                          # Default: auto-detect. Set this for similar-sounding languages (Urdu/Hindi, etc.)
# parakeet_model = "tdt-600m"                    # parakeet: tdt-ctc-110m (English), tdt-600m (multilingual v3)
# parakeet_binary = "parakeet"                   # Path to parakeet.cpp binary (or name in PATH)
# parakeet_boost_limit = 25                      # Experimental: boost top graph-derived phrases (0 disables)
# parakeet_boost_score = 2.0                     # Experimental tuning for parakeet.cpp --boost-score
# parakeet_fp16 = true                           # Default on macOS Apple Silicon: ~35% faster transcription with lower GPU memory (see docs/designs/parakeet-perf-2026-04-14.md)
# parakeet_vocab = "tdt-600m.tokenizer.vocab"      # Safer when multiple Parakeet models are installed
# vad_model = "silero-v6.2.0"     # Silero VAD model (auto-downloaded by setup). Empty = disable.
                                   # Prevents whisper hallucination loops on non-English/noisy audio.

[summarization]
engine = "none"           # Default: Claude summarizes conversationally via MCP
                          # "agent" = uses your Claude Code, Codex, or OpenCode subscription (no API key)
                          # "ollama" = local, free
                          # "claude" / "openai" = direct API key (legacy)
agent_command = "claude"  # Which CLI to use when engine = "agent" (claude, codex, opencode, etc.)
ollama_url = "http://localhost:11434"
ollama_model = "llama3.2"

[diarization]
engine = "auto"           # "auto" (default โ€” uses pyannote-rs if models downloaded, otherwise skips),
                          # "pyannote-rs" (always on โ€” native Rust, no Python),
                          # "pyannote" (legacy โ€” requires pip install pyannote.audio),
                          # "none" (explicitly disabled)
# embedding_model = "cam++"  # "cam++" (default) or "cam++-lm" (~12% lower EER on benchmarks).
                          # Note: cam++-lm produces lower cosine similarities, so if you switch
                          # to it you should also lower voice.match_threshold to ~0.1โ€“0.2.
# threshold = 0.5         # Speaker similarity threshold (0.0โ€“1.0). Lower = fewer speakers.

[voice]
# enabled = true          # Voice profile matching during diarization (default: true if enrolled)
# match_threshold = 0.65  # Cosine similarity threshold for voice matching (higher = stricter).
                          # If using embedding_model = "cam++-lm", lower this to ~0.1โ€“0.2.

[search]
engine = "builtin"        # builtin (regex) or qmd (semantic)

[watch]
paths = ["~/.minutes/inbox"]
settle_delay_ms = 2000              # Cloud sync safety delay (wait for file to finish syncing)
dictation_threshold_secs = 120      # Files shorter than this โ†’ memo (skip diarize). 0 = disable.
# Add cloud sync folders to watch for phone voice memos:
# paths = ["~/.minutes/inbox", "~/Dropbox/minutes-inbox"]

[screen_context]
enabled = false           # Opt-in: capture screenshots during recording for LLM context
interval_secs = 30        # How often to capture (seconds)
keep_after_summary = false # Delete screenshots after summarization (default: clean up)

[call_detection]
enabled = true            # macOS-only today
poll_interval_secs = 1
cooldown_minutes = 5
# Default apps stay conservative:
# apps = ["zoom.us", "Microsoft Teams", "Webex"]
#
# Browser-based integrations such as Google Meet are opt-in on purpose.
# If you want to dogfood browser detection, add the sentinel explicitly:
# apps = ["zoom.us", "Microsoft Teams", "Webex", "google-meet"]

[assistant]
agent = "claude"          # CLI launched by the Tauri AI Assistant
agent_args = []           # Optional extra args, e.g. ["--dangerously-skip-permissions"]

Architecture

minutes/
โ”œโ”€โ”€ crates/core/          34 Rust modules โ€” the engine (shared by all interfaces)
โ”œโ”€โ”€ crates/cli/           CLI binary โ€” 45 commands (recording, search, health, workflows)
โ”œโ”€โ”€ crates/whisper-guard/ Anti-hallucination toolkit (VAD gating, dedup, noise trimming)
โ”œโ”€โ”€ crates/reader/        Lightweight read-only meeting parser (no audio deps)
โ”œโ”€โ”€ crates/assets/        Bundled assets (demo.wav)
โ”œโ”€โ”€ crates/sdk/           TypeScript SDK โ€” `npm install minutes-sdk` (query meetings programmatically)
โ”œโ”€โ”€ crates/mcp/           MCP server โ€” 26 tools + 6 resources + interactive dashboard
โ”‚   โ””โ”€โ”€ ui/               MCP App dashboard (vanilla TS โ†’ single-file HTML)
โ”œโ”€โ”€ tauri/                Menu bar app โ€” system tray, recording UI, singleton AI Assistant
โ””โ”€โ”€ .claude/plugins/minutes/   Claude Code plugin โ€” 18 skills + 1 agent + 2 hooks

Single minutes-core library shared by CLI, MCP server, and Tauri app. Zero code duplication.

Building your own agent on Minutes

Minutes is designed as infrastructure for AI agents. The MCP server is the primary integration surface:

  • Read meetings: list_meetings, search_meetings, get_meeting return structured JSON
  • Track people: get_person_profile builds cross-meeting profiles with topics, open commitments
  • Monitor consistency: consistency_report flags conflicting decisions and stale commitments
  • Record + process: start_recording, stop_recording, process_audio for pipeline control
  • Live coaching: start_live_transcript, read_live_transcript for real-time mid-meeting access
  • Voice profiles: list_voices, confirm_speaker for speaker identification workflows
  • Resources: Stable URIs (minutes://meetings/recent, minutes://actions/open) for agent context injection

Any agent framework that speaks MCP can use Minutes as its conversation memory layer โ€” the agent handles the intelligence, Minutes handles the recall.

TypeScript SDK โ€” for direct programmatic access without MCP:

npm install minutes-sdk
import { listMeetings, searchMeetings, parseFrontmatter } from "minutes-sdk";

const meetings = await listMeetings("~/meetings", 20);
const results = await searchMeetings("~/meetings", "pricing");

Built with: Rust, whisper.cpp (transcription), pyannote-rs (speaker diarization), Silero VAD (voice activity detection), symphonia (audio decoding), cpal (audio capture), Tauri v2 (desktop app), ureq (HTTP). Optional: ffmpeg (recommended for non-English audio decoding).

Star History

Star History Chart

Contributing

See CONTRIBUTING.md.

License

MIT โ€” Built by Mat Silverstein, founder of X1 Wealth

Release History

VersionChangesUrgencyDate
v0.18.5## What's new **macOS: an idle Minutes no longer slows down your whole Mac.** When Minutes sat idle, usually hidden in the menu bar, its status refresh repainted the translucent main window every couple of seconds even when nothing had changed. On macOS that makes the window server re-blend the entire frosted-glass surface each time, so over a few hours it pegged a CPU core and made scrolling and switching apps stutter across the whole system. Idle refreshes now skip redundant redraws, so a hidHigh6/2/2026
v0.18.3## What changed v0.18.3 is a reliability batch. The headline is a Windows fix for live transcript (#258), reported by Quinn (@mquinn614) with a precise root-cause diagnosis. On Windows, `fs2` file locks are mandatory rather than advisory, so reading a live-transcript PID file held under the session's own lock failed with a lock violation. Minutes was treating that failure as "no session," which froze the in-app Live timer and line count at 0:00 during a perfectly healthy session, and could letHigh5/27/2026
v0.18.2## What changed v0.18.2 fixes the manual markdown ingest path reported in #252. Hand-authored meeting files can now use normal YAML frontmatter dates, including date-only values like `date: 2024-05-14` and local timestamps without an explicit offset. Minutes still accepts the RFC3339 timestamps it already generated itself. Manual files that omit `duration` now default to `0s` during ingest, which is enough for knowledge-base extraction and avoids a second confusing validation failure. This isHigh5/20/2026
v0.18.0# v0.18.0: Transcript honesty on tricky audio Five changes since v0.17.3, all aimed at the failure modes where Minutes produces output that looks plausible but is actually wrong. The pattern across this release: Whisper, fed odd-shaped input (silent audio, long idle tails, dual-track macOS captures), reliably emits believable-looking text that is not actually a transcript. v0.17.x quietly wrote that to disk; v0.18.0 either fixes the upstream cause or refuses to produce a fake transcript. ## WhHigh5/14/2026
v0.17.0# v0.17.0 โ€” Streaming Silero VAD, cpal bump, menu-bar fixes A minor release. Three substantive arcs (Option B streaming VAD, cpal upstream bump, full tray Stop fix) plus a handful of correctness wins. No breaking changes for stock-install users. ## What changed ### Streaming Silero VAD (opt-in, `vad-ort` feature) The recording sidecar's VAD path now has a streaming ONNX-runtime-backed Silero engine alongside the existing whisper-rs Silero. Per-chunk cost drops from O(buffer_len) to O(new_audHigh5/11/2026
v0.16.1# Minutes 0.16.1: vocabulary, dictation engine, and macOS reliability Minutes 0.16.1 ships a batch of dictation improvements, proper-noun vocabulary context for transcription, a rebuilt macOS permission center, main-window chrome integration, and a set of fixes (including a Windows agent-spawn regression, os error 193, reported in #205). ## What changed ### Local vocabulary (`minutes vocabulary`) Add your own proper nouns (people's names, product names, project code names, uncommon acronyms)High5/4/2026
v0.16.0# Minutes 0.16.0: live events, fast search, and a calmer desktop Minutes 0.16.0 is a substantial release. It makes the desktop app more resilient during real calls, gives agents a local event stream they can follow without joining your meeting, adds a SQLite FTS5 search index for larger archives, and finishes a visual pass across the dock icon, tray icon, DMG, website, and MCP UI. This release is about trust in the everyday loop: start the right kind of recording, keep the app responsive whileHigh4/29/2026
v0.14.1# Minutes 0.14.1: Regression fixes for call auto-stop and 1:1 diarization ## What changed - Fixed a v0.14.0 regression where call-detection recordings could emit `call_ended` and then `cleared` before the 30s countdown finished, leaving recordings running. - Hardened call-end countdown terminal states so timer, cancel, and already-stopped paths own `countdown_active` and cannot be re-armed by a polling race. - Fixed hybrid source-aware diarization for 1:1 open-speaker calls: system-stem diarizHigh4/23/2026
v0.13.3# v0.13.3: Meeting-reliability fixes from the field 0.13.3 is a patch release focused on two bugs that showed up in real calls, plus a handful of platform and tooling fixes that make the rest of the stack easier to trust. If you're on 0.13.0 or later you can upgrade in place. If you somehow held at 0.12.x, read [v0.13.0](https://github.com/silverstein/minutes/releases/tag/v0.13.0) and [v0.13.2](https://github.com/silverstein/minutes/releases/tag/v0.13.2) first; those shipped the settings, idenHigh4/21/2026
v0.13.20.13.2 adds the mic-mute toggle for passive attendance and rolls up everything that shipped in the 0.13 series this week. If you installed Minutes before 0.13.0 landed two days ago, this is the single version to move to. If you updated to 0.13.0 or 0.13.1 already, you only get the mic-mute change on top of what you have. ## What's new in 0.13.2: mic-mute You're on a webinar, an all-hands, or a panel where you're not going to speak. You want the meeting transcript, but you don't want your breatHigh4/18/2026
v0.13.1# v0.13.1: Fix Claude Desktop extension install on 1.3109.0 ## What changed This is a patch release that fixes a broken install surface in the Claude Desktop extension, reported in [#149](https://github.com/silverstein/minutes/issues/149). The v0.13.0 `minutes.mcpb` bundle contained two Next.js chunks whose filenames literally include `..`: ``` .vercel/output/static/_next/static/chunks/0c1n75d4d01s..js .vercel/output/static/_next/static/chunks/0yhyx4ni~s7z..js ``` Claude Desktop 1.3109.0 shHigh4/18/2026
v0.13.0# v0.13.0: Settings you can trust, smarter call capture, and better operator tooling ## What changed Minutes 0.13.0 is a โ€œcome back and try it againโ€ release. The biggest theme is trust: - Settings behavior is much tighter now. Important toggle rows no longer drift out of sync with what you clicked, and the command palette shortcut finally has a real UI row instead of a half-wired path. - Identity setup is stronger. You can add your name, emails, and name variants so Minutes recognizes you mHigh4/17/2026
v0.12.2# v0.12.2: Live transcription that actually works on quiet audio ## Why this release exists A meeting today produced 11 fragments over 40 minutes of live transcript โ€” mostly whisper placeholder tokens like `[typing]` and `[BLANK_AUDIO]`. Meanwhile the post-recording batch transcript cleanly recovered 2,259 words from the same WAV. Same audio, two different code paths, 200x quality gap. Three problems were working against live mode: 1. The recording sidecar used a simple energy-threshold VAD.High4/15/2026
v0.12.1# v0.12.1: Frontmatter polish, Parakeet hardening, and LLM titles ## What changed This release is a focused polish pass over the work that landed in v0.12.0. The transcription pipeline was doing a lot โ€” transcribe, diarize, summarize, extract entities, match calendar events, write markdown โ€” and the seams between those steps were leaking. Speaker labels from diarization were ending up in attendee lists, email addresses from calendars were spawning duplicate people, and "Untitled Recording" wasHigh4/15/2026
v0.12.0# v0.12.0: Parakeet is multilingual by default ## What changed This release makes the Parakeet path feel like a first-class part of Minutes instead of an advanced toggle you had to babysit. The biggest change is the default model. If you choose Parakeet and do not pin a model explicitly, Minutes now defaults to `tdt-600m`, the multilingual v3 model, instead of the older English-only `tdt-ctc-110m`. That means better support for bilingual meetings, better WER, and a much more honest default foHigh4/14/2026
v0.11.3# v0.11.3: Long meetings work the way they should ## What changed This release fixes a nasty class of failures in the Parakeet transcription path. Long recordings could fail in a few different ways. Some chunks came back with zero tokens. Some long runs could blow up in the GPU path. The app often surfaced all of that as a vague parsing error. That is fixed now. Long Parakeet runs are chunked before decode, empty chunks are skipped instead of taking down the whole meeting, and the exact real-High4/13/2026
v0.11.2Your AI used to forget what happened after `minutes stop`. Now it doesn't. ## The lifecycle is connected Before v0.11.2, the meeting lifecycle had a gap right in the middle. You'd record a meeting, run `minutes stop`, and... nothing. The tool that knows everything about your conversation history went quiet at the exact moment you needed it most -- right after the meeting, when decisions are fresh and follow-ups haven't slipped yet. Now `minutes stop` nudges you toward the next valuable step. High4/10/2026
v0.11.1Artifacts, a design system, and GPU backends. ## What's new **Artifacts** -- Create, edit, preview, and revert documents directly from Recall conversations. The artifact picker lets you choose what to create (relationship brief, deal memo, meeting summary), then opens it in a split view beside the AI assistant. Source editing with inline save, snapshot-based revert, and a review panel showing before/after diffs. **Unified design system** -- Light cream (#F8F4ED) default with warm-dark mode. IMedium4/9/2026
plugin-v0.8.0# Minutes Plugin v0.8.0: Four new skills, a proactive brief hook, and bug fixes two review passes deep ## The lifecycle is done. Brief runs before your call, mirror tells you what you did, tag marks the outcome, graph lets you query everyone and everything across your history. All four ship with Python helper scripts that do the counting deterministically so an LLM doesn't have to guess. Before v0.8.0 the plugin covered prep, record, debrief, weekly. After v0.8.0 it covers the full arc: `briefHigh4/9/2026
v0.11.0# Minutes v0.11.0: Command palette, faster whisper, better call capture ## The keyboard-first launcher ships. Whisper uses your GPU now (it wasn't before). Two contributors fixed bugs you'll actually notice. v0.11.0 ships the command palette as the headline feature, plus a round of fixes that change what Minutes feels like in daily use. The capture cues sound like real objects instead of compiler beeps. Native Meet calls stop labeling you as SPEAKER_00. The screen share privacy toggle, which hMedium4/8/2026
v0.10.4## Minutes was telling you the wrong thing v0.10.4 fixes four bugs where Minutes confidently reported something that wasn't true. Nothing crashed; you just couldn't trust the answers. ### Your knowledge base was enabled. Except when it wasn't. The MCP `knowledge_status` tool was doing a naive string match for `enabled = true` anywhere in `config.toml`. So if you had `[recording] enabled = true` and `[knowledge] enabled = false`, the tool would tell Claude (or Cursor, or Codex) that your knowlMedium4/7/2026
v0.10.3## What changed Three platform fixes that unblock real users on Linux, macOS, and Windows. None of these were nice-to-haves. All three were silently breaking the core capture-and-summarize loop on a specific OS. ### Linux: PipeWire system audio capture (#85) Linux users running `minutes sources` were seeing their speakers and headphones bucketed under "Microphones" with no clue they could record system audio from them. The bug was in our device categorization, not in cpal. cpal's PipeWire bacMedium4/7/2026
v0.10.2Your AI assistant remembers every conversation you've had. Here's what's new. ## Try it without a microphone `minutes demo --full` seeds 5 interconnected sample meetings (Snow Crash themed), then `minutes demo --query` shows cross-meeting intelligence in action. Da5id promised to fix the rendering pipeline 14 days ago. He didn't. Minutes caught it across three separate conversations. No setup, no mic, no model download. Just `cargo install minutes-cli && minutes demo --full`. ## Knowledge baMedium4/7/2026
v0.10.1Patch release: fixes agent summarization, calendar timeouts, and ships the first building block of conversation-to-knowledge-base integration. ## Bug fixes **Agent summarization was broken on v0.10.0.** The `--no-input` flag was passed to the Claude CLI, which doesn't accept it. Every `[summarization] engine = "agent"` call failed silently โ€” meetings were transcribed but never summarized. Fixed. **Calendar overlap detection timed out with many calendars.** AppleScript couldn't enumerate 29 caMedium4/6/2026
v0.10.0Minutes now auto-updates from GitHub Releases and ships a major diarization overhaul from three community contributors. ## Auto-update The desktop app checks for updates on launch and every 6 hours. When a new version is available, a non-modal banner appears: "Restart Now" or "Later." Updates are never installed during a recording, live transcript, or dictation session. Signed with Ed25519. The release workflow produces signed artifacts and a `latest.json` manifest. Zero infrastructure beyondMedium4/6/2026
v0.9.4## What's new ### Fix: MCP recordings no longer capture silence Recordings started via Claude Desktop's `start_recording` tool were producing silent WAV files on recent macOS versions. The CLI worked fine from Terminal -- same binary, same mic permissions, same machine. **Root cause:** The MCP server spawned `minutes record` with `detached: true`, which calls `setsid()` and creates a new macOS audit session. This severed the child process from Claude Desktop's TCC microphone grant. CoreAudio Medium4/2/2026
v0.9.3## What's new ### Multi-source capture Record system audio and microphone simultaneously as separate stems. Each source gets its own WAV file, and speaker attribution uses per-source energy levels instead of relying solely on diarization. The shared resampler (32-tap Hann windowed-sinc) is now factored out of the capture path so both live streaming and file processing use identical downsampling. This is the foundation for call recording where you want to distinguish "what they said" from "whaMedium4/1/2026
v0.9.2## What's new ### Brand-derived design system The entire desktop app has a new color palette pulled from the brand mark's sky-blue and amber identity. Every surface -- main window, dictation overlay, note popup, meeting prompt, terminal, and the MCP dashboard inside Claude Desktop -- now uses the same cohesive palette instead of scattered defaults. - Sky blue accent (`#4da8d9`) derived from the icon's upper glow - Warm amber section headers and warning states from the icon's lower glow - DoMedium4/1/2026
v0.9.1Back-to-back meetings just got smoother in the desktop app. **What's new:** - The record button now stays visible while background processing runs โ€” you can start your next meeting without switching to the terminal (#38) - Filter diagnostics for blank transcript debugging - Default quickstart model changed from `tiny` to `small` for better out-of-box accuracy **Fixes:** - v0.9.0 release builds were broken by a missing struct field in CI โ€” this release restores DMG, Windows EXE, and Linux binarMedium3/31/2026
v0.9.0Minutes now handles Bluetooth headsets, USB mics, and audio device switching mid-recording โ€” no more silent recordings when you grab your AirPods and walk away from the desk. ## What's new **Audio device selection** โ€” pick which mic to record from ```bash minutes record --device "AirPods Pro" # Use a specific device minutes devices # List available devices with sample rates ``` Or set it permanently in `~/.config/minutes/config.toml`: ```toml [recording] device Medium3/31/2026
v0.8.5Meetings now emit structured insight events that agents and external systems can subscribe to. Every decision, commitment, and open question extracted from a meeting becomes a typed event in the event log with a confidence level โ€” so downstream systems know when to act and when to wait. Only strong and explicit insights are considered actionable, preventing noise from tentative language like "we should consider" from triggering false workflows. ## What's new **Meeting Insights** โ€” structured Medium3/31/2026
v0.8.4# Release Notes for 24dfbcf9be5f3807cd3ef4664aada81fee25ac12 - Channel: stable - Range: v0.8.3..24dfbcf9be5f3807cd3ef4664aada81fee25ac12 - Stable release intended for broad usage. ## What changed ### Shared engine - fix: add version to whisper-guard dep for crates.io publish (`6c21803`) - fix: graceful Ctrl+C shutdown for live, dictate, and record (#29) (#30) (`9453b19`) - Accumulate dictation output across pauses (`cbd2b76`) ### Desktop - Accumulate dictation output across pauses (`cbd2b76`Medium3/29/2026
v0.8.3# Release Notes for 611d6a9df8c97736722d494380ef075fdaea3ce5 - Channel: stable - Range: v0.8.2..611d6a9df8c97736722d494380ef075fdaea3ce5 - Stable release intended for broad usage. ## What changed ### Shared engine - security: harden pipeline against injection, traversal, and data exposure (`6dc42e0`) ### CLI - fix: pin ort to rc.10 for Windows diarization build + document LLVM prereqs (`1e37dee`) ### Distribution and release policy - fix: pin ort to rc.10 for Windows diarization build + docMedium3/29/2026
v0.8.2# Release Notes for d06d9e721f2afdd4fd073f3df9565e2187565846 - Channel: stable - Range: v0.8.0..d06d9e721f2afdd4fd073f3df9565e2187565846 - Stable release intended for broad usage. ## What changed ### Shared engine - feat: add Parakeet ASR as opt-in transcription engine (`6322ee4`) - style: apply cargo fmt to all workspace files (`2f39a4a`) - Extract whisper-guard crate + add nnnoiseless noise reduction (`d64d53d`) - whisper-guard: clean API for publish โ€” borrow instead of own (`12eae36`) - fiMedium3/28/2026
v0.8.1-live-coach## Live Meeting Coach Real-time meeting transcription with AI coaching. Your AI assistant reads the transcript mid-meeting and coaches you on what to say. ### How it works 1. Click **Live** in the Minutes menu bar (or press **Cmd+Shift+L**) 2. Green pulsing indicator shows it's listening 3. Open Claude Desktop / Claude Code / Codex / Gemini 4. Ask: "What should I say about the pricing objection they just raised?" 5. Your AI reads the last 5 minutes of transcript and coaches you 6. Click **StoMedium3/28/2026
v0.8.0## Relationship Intelligence Minutes now tracks **who you talk to**, **what you promised**, and **how your relationships evolve** across every meeting. Ask your AI *"What did I promise Sarah?"* โ€” and get an answer. ### New features **Conversation Graph** โ€” SQLite index derived from your meeting markdown. Tracks people, commitments, topics, and relationship health. Rebuilds in <50ms. ```bash minutes people # Relationship overview with scores minutes commitments --persoMedium3/27/2026
v0.7.3## Dictation UX Overhaul The dictation overlay gets a complete UX upgrade โ€” from a status-only indicator to a trust-building interface. ### What's new - **Instant feedback** โ€” Overlay appears immediately on shortcut press with "Loading model..." state. No more 5-15s dead gap wondering if it worked. - **Model preloading** โ€” Whisper model loads in a background thread at app startup, so the first dictation press goes straight to "Listening..." with zero delay. - **Text confirmation on success** Medium3/25/2026
v0.7.2## Windows support + dictation polish Minutes now builds and runs on Windows. Plus: dictation hotkeys that survive app restarts. ### What shipped **Windows desktop app** โ€” First-class Windows support via NSIS installer. Tray icon, recording, dictation, and the full pipeline work on Windows. Sentinel-based stop path handles the platform's file-locking quirks. **Dictation hotkey persistence** โ€” Your custom dictation shortcut now survives app restarts. Previously it reverted to the default on eMedium3/24/2026
v0.7.1Patch release with streaming dictation, plugin marketplace, SDK improvements, and docs. ### Streaming Whisper (new) - **Text appears as you speak** โ€” partial transcription every 2 seconds during dictation - Full re-transcription from t=0 each pass for consistent output - Whisper init noise suppressed after first partial - `minutes dictate` CLI shows progressive text with live line updates ### Distribution (new) - **Claude Code plugin marketplace**: `claude plugin marketplace add silverstein/miMedium3/24/2026
v0.7.0## Cross-Device Ghost Context Layer Record a thought on your phone โ†’ it becomes searchable AI memory on your desktop. Claude surfaces recent memos proactively. ### What's new - **Duration-based routing**: Short voice memos (<2 min) route through the fast memo pipeline. Long recordings get full meeting treatment. Threshold configurable. - **Phone โ†’ desktop pipeline**: Works with any folder sync โ€” iCloud Drive, Dropbox, Google Drive, Syncthing, or manual file drop. - **Ghost context**: SessionSMedium3/24/2026
v0.6.0Your AI remembers every conversation you've had. Now it remembers every thought you speak. **v0.6.0 adds dictation** โ€” hold a key, speak, and your words land in your clipboard AND your AI's memory. Every dictation tool forgets what you said. Minutes remembers it. "What did I dictate into Slack about the pricing page?" just works. ## What's new ### Dictation mode Speak naturally. Text goes to your clipboard after each pause. Every utterance is also logged to your daily note and saved as a seaMedium3/24/2026
v0.5.0## Try minutes right now โ€” no install needed ```json { "mcpServers": { "minutes": { "command": "npx", "args": ["minutes-mcp"] } } } ``` Drop that into your Claude Desktop config. Claude can now search your meeting history, find action items, build people profiles, and track decisions โ€” all from your local `~/meetings/` folder. No Rust toolchain. No API key. No build step. --- ### What's new in v0.5.0 **`npx minutes-mcp` โ€” zero-install MCP server** The MCP server noMedium3/23/2026
v0.4.0## What's New **Cross-Platform Support** โ€” minutes now builds and tests on macOS, Windows, and Linux: - CI runs on all 3 platforms (core + CLI tests pass everywhere) - Windows: WASAPI audio capture support, HANDLE-based PID management - Linux: ALSA audio capture support - `cargo install --path crates/cli` works on any platform **Vault Sync for Obsidian / Logseq** โ€” connect your knowledge vault: - `minutes vault setup` โ€” auto-detect vaults, recommend symlink/copy/direct strategy - `minutes vaulLow3/22/2026
v0.3.0## What's New **Interactive MCP App Dashboard** โ€” 5 tools now render an interactive UI inline in Claude Desktop via [MCP Apps](https://modelcontextprotocol.io/specification/2025-03-26/server/utilities/apps): - Meeting list with stats bar, type filters, and instant search - Detail view with fullscreen mode and "Send to Claude" context injection - Clickable attendee chips โ†’ person profile navigation - Live recording indicator with stop button - Person profiles and consistency reports **Smart AttLow3/21/2026
v0.2.0> **A newer version is available: [v0.3.0](https://github.com/silverstein/minutes/releases/tag/v0.3.0)** โ€” Interactive dashboard, smart attendee detection, semantic search. ## What's New **Interactive Meeting Lifecycle** โ€” 3 new skills that chain together: - `/minutes prep` โ€” relationship brief + talking points before a call - `/minutes debrief` โ€” post-meeting analysis, compares outcomes to prep intentions - `/minutes weekly` โ€” weekly synthesis with decision arcs and forward brief **Settings Low3/20/2026

Dependencies & License Audit

Loading dependencies...

Similar Packages

PlexMCP-OSS๐ŸŒ Build a robust MCP gateway platform to enhance your Plex experience with seamless integration and reliable performance.main@2026-06-07
ananke๐ŸŒŸ Simplify MCP server and AI Skills management with Ananke, a local-first desktop app that offers a visual interface for efficient configurations and monitoring.main@2026-06-07
automagik-genieSelf-evolving AI agent orchestration framework with Model Context Protocol supportv4.260606.2
discord.py-self-mcpcomprehensive Discord selfbot MCP server using discord.py-selfv1.3.0
tekmetric-mcp๐Ÿ” Ask questions about your shop data in natural language and get instant answers about appointments, customers, and repair orders with Tekmetric MCP.main@2026-06-05

More in MCP Servers

PlanExeCreate a plan from a description in minutes
automagik-genieSelf-evolving AI agent orchestration framework with Model Context Protocol support
agentroveYour own Claude Code UI, sandbox, in-browser VS Code, terminal, multi-provider support (Anthropic, OpenAI, GitHub Copilot, OpenRouter), custom skills, and MCP servers.
ProxmoxMCP-PlusEnhanced Proxmox MCP server with advanced virtualization management and full OpenAPI integration.