Minutes
Every meeting, every idea, every voice note — searchable by your AI. Open-source, privacy-first conversation memory layer.
Install / Use
/learn @silverstein/MinutesQuality Score
Category
Development & EngineeringSupported Platforms
README
minutes
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.
<p align="center"> <img src="docs/assets/demo.gif" alt="minutes demo — record, dictate, phone sync, AI recall" width="750"> </p>Works with
<p align="center"> <a href="#claude-code-plugin">Claude Code</a> • <a href="#any-mcp-client-claude-code-codex-gemini-cli-claude-desktop-or-your-own-agent">Codex</a> • <a href="#any-mcp-client-claude-code-codex-gemini-cli-claude-desktop-or-your-own-agent">Gemini CLI</a> • <a href="#any-mcp-client-claude-code-codex-gemini-cli-claude-desktop-or-your-own-agent">Claude Desktop</a> • <a href="#mistral-vibe">Mistral Vibe</a> • <a href="#vault-sync-obsidian--logseq">Obsidian</a> • <a href="#vault-sync-obsidian--logseq">Logseq</a> • <a href="#phone--desktop-voice-memo-pipeline">Phone Voice Memos</a> • Any MCP client </p>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, 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
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, 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.
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) | | **iPho
