CLAUDE.md · silverstein/minutes
CLAUDE.md from silverstein/minutes: 376 lines covering Project Overview, Quick Start, Full Build (CLI + Tauri App), Desktop Identity Rules and more.
Template by silverstein
Install
Works with Claude Code. Read the repository before you give any tool access to your data.
curl -fsSL https://raw.githubusercontent.com/silverstein/minutes/main/CLAUDE.md -o CLAUDE.md
Read it and adapt it to your project before use.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: code-generation, ci-cd
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
What's in it
A CLAUDE.md file: project memory Claude Code loads at the start of every session.
- For
- Claude Code
- Length
- 376 lines
- File
CLAUDE.md
Sections
- Project Overview
- Quick Start
- Full Build (CLI + Tauri App)
- Desktop Identity Rules
- Pre-Commit Checklist
- Release Checklist
- Design System
- GitHub Discussions
- Contributor PRs
- Project Structure
- Documentation Structure
- Development Commands
- Key Architecture Decisions
- Already Built — check here before proposing to build it
- Key Patterns
- Test Coverage
- Claude Ecosystem Integration
- Proven Decisions (do not re-litigate)
First lines (shown under the repo's MIT license)
# CLAUDE.md — Minutes > Your AI remembers the conversations you authorize. ## Project Overview **Minutes** — open-source, privacy-first conversation memory layer for AI assistants. Captures meetings, voice memos, and brain dumps, transcribes locally with whisper.cpp, diarizes speakers, and outputs searchable markdown with structured action items and decisions. Built with Rust + Tauri v2 + Node.js (MCP). **Four input modes, one pipeline:** - **Live recording**: `minutes record` / `minutes stop` — for meetings, calls, conversations - **Live transcript**: `minutes live` / `minutes stop` — real-time transcription with delta reads for AI coaching mid-meeting - **Notetaking**: `minutes note "important point"` — timestamped annotations during recording - **Folder watcher**: `minutes watch` — auto-processes voice memos from iPhone/iCloud ## Quick Start ```bash cd ~/Sites/minutes cargo build # Build Rust workspace cargo test -p minutes-core --no-default-features # Fast tests (no whisper model) cargo run --bin minutes -- setup --model tiny # Download whisper model cargo run --bin minutes -- setup --diarization # Download speaker diarization models (~34MB) cargo run --bin minutes -- record # Start recording cargo run --bin minutes -- stop # Stop and process ``` ## Full Build (CLI + Tauri App) ```bash ./scripts/build.sh # Builds everything and installs CLI ./scripts/build.sh --install # Same + copies .app to /Applications ./scripts/install-dev-app.sh # Canonical signed dev app install to ~/Applications/Minutes Dev.app # Or manually: export CXXFLAGS="-I$(xcrun --show-sdk-path)/usr/include/c++/v1" cargo build --release -p minutes-cli # CLI binary cargo tauri build --bundles app # Tauri .app bundle rm -f ~/.local/bin/minutes && cp target/release/minutes ~/.local/bin/minutes # Install CLI (rm first: in-place cp over a running binary invalidates its signature -> SIGKILL on every launch) open target/release/bundle/macos/Minutes.app # Launch app ``` **Hard rule for macOS desktop packaging and dogfooding:** - If the work touches TCC-sensitive features, do **not** keep replacing `/Applications/Minutes.app` with local rebuilds. - Use `./scripts/install-dev-app.sh` and test `~/Applications/Minutes Dev.app`. - If a stable local codesigning identity exists, export `MINUTES_DEV_SIGNING_IDENTITY` before running the script. This is machine-local — set it in your shell profile or a local (untracked) env file to your **own** signing identity; do not hardcode a specific identity here, since exporting an identity whose cert isn't in the local keychain makes the signing step abort. Without it, the script falls back to ad-hoc signing. - Example (substitute your own identity): ```bash export MINUTES_DEV_SIGNING_IDENTITY="Developer ID Application: Your Name (TEAMID)" ./scripts/install-dev-app.sh ``` **IMPORTANT**: After any code change, you must rebuild ALL affected targets: - CLI changes: `cargo build --release -p minutes-cli && rm -f ~/.local/bin/minutes && cp target/release/minutes ~/.local/bin/minutes` (always rm first; never cp over the live binary) - Tauri changes: `cargo tauri build --bundles app` then relaunch the appropriate app bundle - TCC-sensitive desktop work (hotkeys, Screen Recording, Input Monitoring, Accessibility): `./scripts/install-dev-app.sh` - MCP server changes: `cd crates/mcp && npm run build` (compiles TS server + builds UI, then restart MCP client sessions) - MCP App UI only: `cd crates/mcp && npm run build:ui` (rebuild just the dashboard HTML) - All Rust + app: `./scripts/build.sh` (add `--install` to copy .app to /Applications) - **Don't forget the MCP server** — it's TypeScript, not Rust. `./scripts/build.sh` does NOT rebuild it. Always run `cd crates/mcp && npm run build` after touching `crates/mcp/src/index.ts` or `crates/mcp/ui/`. ## Desktop Identity Rules For macOS permission-sensitive development, there are now two distinct desktop app identities: - Production app: - name: `Minutes.app` - bundle id: `com.useminutes.desktop` - canonical install path: `/Applications/Minutes.app` - Development app: - name: `Minutes Dev.app` - bundle id: `com.useminutes.desktop.dev` - canonical install path: `~/Applications/Minutes Dev.app` Use the dev app for any work involving: - dictation hotkeys / Input Monitoring - Screen Recording prompts - AppleScript / Accessibility automation - any repeated TCC permission prompt investigation Do not trust results from: - `./Minutes.app` - raw `target/debug/minutes-app` - raw `target/release/minutes-app` - repo-local bundle outputs launched directly from `target/` Those identities are not stable enough for TCC debugging. Native hotkey sanity check: ```bash ./scripts/diagnose-desktop-hotkey.sh "$HOME/Applications/Minutes Dev.app" ``` See [docs/development/desktop-development.md](/docs/development/desktop-development.md) for the full workflow. For dictation shortcut work: - prioritize the `Standard shortcut (recommended)` path first - treat the raw-key `Caps Lock` / `fn` path as advanced and permission-heavy - do not call the raw-key path “done” just because the monitor is active; require visible feedback or logged event delivery ### Open-source contributor note This repo is public, so local scripts must not assume the maintainer's Apple certificate or local notarization credentials. - `./scripts/install-dev-app.sh` works without Apple credentials by falling back to ad-hoc signing - for more stable TCC-sensitive testing, contributors can export `MINUTES_DEV_SIGNING_IDENTITY` to any consistent local codesigning identity - release signing / notarization is maintainer-only and should be configured explicitly via environment variables, not by hardcoded defaults in scripts ## Pre-Commit Checklist **Full table lives in [docs/checklists/pre-commit.md](docs/checklists/pre-commit.md).** Read it before any commit that touches Rust, the MCP server, the frontend, or release surfaces — it covers manifest sync, MCPB bundle guards, fmt/clippy/test, Unix-only-API gating, feature-stub parity, site release constants, skill compiler outputs, the toolchain pin, and UI render verification. Two traps that bite hardest (the rest are in the doc): - **Toolchain pin.** `command -v cargo` must match `rustup which cargo`. If Homebrew rust shadows the rustup proxy, `rust-toolchain.toml` is silently ignored and your local clippy/rustfmt drift from CI's. Fix once: prepend rustup's bin dir to PATH or `brew uninstall rust`. - **UI render verification.** Type checks and Rust unit tests don't catch UI render bugs. Any change to `tauri/src/index.html`, any new Tauri `cmd_*`, or any modal/overlay shift requires building the dev app and click-testing in `~/Applications/Minutes Dev.app`. ## Release Checklist **Full procedure lives in [docs/release/procedure.md](docs/release/procedure.md).** Walk through every step in order when shipping. Highlights: - All 6 version sources must match (`Cargo.toml`, `crates/cli/Cargo.toml`, `tauri/src-tauri/tauri.conf.json`, `crates/mcp/package.json`, `crates/sdk/package.json`, `manifest.json`) plus the version string in `crates/mcp/src/index.ts`. - `crates/whisper-guard/` ships on its own cadence — bump + publish independently if it changed since last whisper-guard publish. - Push to `main` and wait for CI green **before** tagging. Create the GitHub release as a `--draft`, wait for release workflows, then `--draft=false`. Never `git tag` locally. - After tagging: upload `.mcpb`, publish npm packages (sdk first, then mcp — and `crates/mcp/package.json` must depend on the npm version of `minutes-sdk`, not `file:../sdk`), verify the Cloudflare Pages site deploy after the validated `site/` changes reach `main`, and update the Homebrew tap if CLI changed. ## Design System Always read `DESIGN.md` before making any visual or UI decisions. All font choices, colors, spacing, border radius, and aesthetic direction are defined there. Do not deviate without explicit user approval. Key rules: - Landing site defaults to **light cream** (#F8F4ED). Dark mode is opt-in via system preference. - Accent: **coral** (#C96B4E) in light, **green** (#30D158) in dark. Used sparingly — 5 specific spots only. - Headings: **Instrument Serif**. Body: **Instrument Sans**. UI/labels/transcript: **Geist Mono**. - No gradients, no decorative elements, no illustrations. Information density is the aesthetic. - The transcript output card (diarized speaker labels + action items in Geist Mono) is the primary product demo. - In QA or design review: flag any code that introduces fonts, colors, or radius values not defined in DESIGN.md. ## GitHub Discussions Discussions are enabled at `silverstein/minutes` as the community Q&A surface. Issues are for bugs and feature requests; Discussions are for usage questions, setup help, and show-and-tell. **When to check Discussions:** - Before closing an issue that's really a question — convert it to a Discussion instead (`gh issue transfer` or manually) - When a bug report smells like a usage question (wrong device, config confusion, platform quirk) — answer and suggest reposting as a Discussion - After shipping a release — scan Q&A for questions the release may have answered, and reply with the fix/upgrade path **When to point users to Discussions:** - README and error messages that suggest "ask for help" should link to Discussions, not Issues - Issue templates should nudge Q&A to Discussions **Quick commands:**
Signals
- Stars
- 1,568
- Forks
- 178
- Open issues
- 65
- Contributors
- 39
- Last commit (this folder)
- Aug 4, 2026 (2 months ago)
- Last release
- Oct 22, 2026 (7 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/silverstein/minutes
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from silverstein
- 0.816score
Minutes
silverstein
The private, owned conversation-memory layer for AI.
ConnectorAFreshness: ALocal★ 1.6KClaude Code +5 - 0.605score
AGENTS.md · silverstein/minutes
silverstein
AGENTS.md from silverstein/minutes: 272 lines covering Quick Reference, GitHub Discussions, Portable Agent Skills (.agents/skills/minutes/…
TemplateAFreshness: A★ 1.6KCodex +5
Cite this page
CLAUDE.md · silverstein/minutes. Agent Mart. https://agentmart.dev/templates/silverstein-minutes-claude-md (last updated 2026-10-24)