Local-first meeting assistant. Audio + transcripts stay on your device; bring your own LLM (Ollama, OpenAI, Anthropic, …).
Project description
MeetMind
MeetMind is a local-first meeting assistant for capturing, transcribing, summarizing, and searching meetings from your own machine. It records system audio and microphone input without adding a bot to the call, stores meeting data locally, and supports local or bring-your-own LLM providers for analysis.
Key capabilities
- Capture microphone and system audio without a meeting bot
- Transcribe meetings and organize speaker segments
- Generate summaries, decisions, and action items
- Search across meeting transcripts with an optional local index
- Export meeting notes to Obsidian, GitHub Issues, Slack, or a signed transcript bundle
- Keep audio, transcripts, voiceprints, and indexes on the local device by default
- Use a local LLM through Ollama by default, or configure a hosted provider explicitly
Requirements
- Python 3.12 or 3.13
- macOS for native system-audio capture
- Optional: Ollama for fully local summarization
- Optional: SQLCipher support for encrypted local storage
- Optional: LanceDB support for hybrid transcript search
Installation
Install from the latest GitHub release (MeetMind is not on PyPI yet):
pip install meetmind-ai
Or install from source:
git clone https://github.com/openintelligence-labs/meetmind.git
cd meetmind
pip install .
For the recommended local setup, install the API, dashboard, encrypted storage, search, and audio extras:
pip install 'meetmind-ai[api,encrypted,storage,audio]'
Available extras:
| Extra | Purpose |
|---|---|
api |
Local HTTP API, dashboard, and live event stream |
encrypted |
SQLCipher-backed encrypted local database |
storage |
LanceDB-backed transcript index and search |
audio |
Voice activity detection and voiceprint dependencies |
dev |
Test, lint, and contributor tooling |
Verify the installation:
meetmind selftest
If the encrypted extra is not installed, MeetMind uses plain SQLite and reports that mode in meetmind status.
Native capture sidecars (macOS)
Live capture and on-device transcription use small Swift sidecar binaries (capture, Parakeet STT, diarization). Get them one of two ways:
- Download
meetmind-sidecars-macos-arm64.tar.gzfrom the GitHub release, unpack it, and place the binaries on yourPATH(or pointMEETMIND_CAPTURE_SIDECAR/MEETMIND_STT_SIDECARat them). - Build from source (requires Xcode command line tools, macOS 14.4+):
cd sidecars/macos
swift build -c release
A source checkout is auto-discovered at sidecars/macos/.build/release/. meetmind selftest reports whether the sidecars are found. Without them, meetmind record --mock still exercises the full pipeline with synthetic audio. The STT sidecar downloads the Parakeet model (~690 MB, one time) on first use.
LLM configuration
MeetMind uses a local Ollama provider by default. To use Ollama:
brew install ollama
ollama serve &
ollama pull gemma3:4b
To use a hosted provider, configure it explicitly:
export MEETMIND_LLM_PROVIDER=openai
export MEETMIND_LLM_MODEL=gpt-4o-mini
export MEETMIND_LLM_API_KEY=sk-...
Supported provider configuration is controlled through environment variables. Run the following command to inspect the active provider, model, storage mode, and resolved paths:
meetmind status
Quick start
Open the dashboard
meetmind ui
The dashboard runs locally at http://127.0.0.1:7857. It provides meeting capture, transcript browsing, summaries, action items, decisions, search, and export controls.
Record a meeting
From the dashboard, choose a meeting title and capture mode, then start recording.
From the terminal:
meetmind record --duration 0 --emit-sse --persist-audio --title "Weekly sync"
Use Ctrl+C to stop an open-ended recording. The command prints the meeting ID on the last line.
For development or CI environments without native audio capture:
meetmind record --duration 60 --mock
Summarize a meeting
meetmind summarize "$MID"
This generates a meeting summary, action items, and decisions from the transcript.
Build the search index
meetmind index
meetmind search "snowflake migration"
Search can also be run from the dashboard. Results link back to matching transcript segments.
Export meeting output
meetmind export-obsidian "$MID" --vault ~/MyVault
meetmind export-github "$MID" --repo owner/name
meetmind export-slack "$MID"
Slack export requires a webhook URL:
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
To create a signed transcript bundle:
meetmind export-bundle "$MID" --out ./bundle.tar.gz
meetmind verify ./bundle.tar.gz
Common workflows
Record, summarize, index, and export
meetmind ui
meetmind record --emit-sse --persist-audio --title "Weekly sync"
MID=<meeting-id>
meetmind summarize "$MID"
meetmind index
meetmind export-slack "$MID"
Manage previous meetings
meetmind meetings
The dashboard also supports viewing transcripts, summaries, action items, decisions, and recorded audio when audio persistence is enabled.
Search one meeting
meetmind search "decided to ship in june" --meeting-id "$MID"
Speaker enrollment
Voiceprint identity is optional and should only be used with appropriate consent.
meetmind enroll "Alice" --audio ~/clips/alice.wav
meetmind speakers
meetmind diarize "$MID"
To remove an enrolled speaker:
meetmind forget "$SPEAKER_ID"
Privacy and security
MeetMind is designed for local-first meeting workflows.
- Audio, transcripts, voiceprints, local archives, and search indexes are stored on the device by default.
- The default LLM provider is local Ollama.
- Hosted LLM providers are opt-in and require explicit environment configuration.
- Local database encryption is available through the
encryptedextra. - Voiceprint enrollment is optional and should be consent-based.
- Retention controls are available for meetings and voiceprints.
- Redaction profiles are available before sharing transcripts externally.
Useful commands:
meetmind compliance dpia > dpia.md
meetmind compliance retention-sweep --dry-run
meetmind compliance retention-sweep
echo "Email Sam at sam@example.com" | meetmind redact --profile public_share
Redaction profiles:
| Profile | Behavior |
|---|---|
raw |
No redaction |
team_internal |
Light redaction for internal sharing |
public_share |
Aggressive redaction for external sharing |
Configuration
MeetMind is configured through environment variables.
| Variable | Default | Description |
|---|---|---|
MEETMIND_HOME |
~/.meetmind |
Root directory for local data, audio, indexes, and tokens |
MEETMIND_LLM_PROVIDER |
ollama |
LLM provider used for summaries and extraction |
MEETMIND_LLM_MODEL |
Auto-detected | Model name for the configured provider |
MEETMIND_LLM_BASE_URL |
Provider default | Custom provider endpoint |
MEETMIND_LLM_API_KEY |
Unset | API key for hosted providers |
MEETMIND_COACH_MODEL |
Falls back to MEETMIND_LLM_MODEL |
Model used by the live coaching workflow |
MEETMIND_PERSIST_AUDIO |
0 |
Set to 1 to persist recorded audio by default |
MEETMIND_RETENTION_MEETINGS_DAYS |
1095 |
Meeting retention period |
MEETMIND_RETENTION_VOICEPRINT_DAYS |
365 |
Voiceprint retention period |
MEETMIND_DISABLE_ENCRYPTION |
Unset | Set to 1 to disable encrypted storage lookup |
MEETMIND_DB_PASSPHRASE |
Unset | Explicit database passphrase override |
SLACK_WEBHOOK_URL |
Unset | Default Slack webhook for Slack export |
Run meetmind status to see the resolved configuration.
Architecture
macOS audio sidecar / mock capture
|
v
Python recording pipeline
|
+--> voice activity detection
+--> speech-to-text
+--> speaker segmentation and diarization
+--> local storage
+--> dashboard event stream
+--> optional search index
|
v
Analysis layer
|
+--> summary generation
+--> action item extraction
+--> decision extraction
+--> export integrations
The project separates capture, transcription, storage, analysis, and export layers so each part can be developed or replaced independently.
Integrations
| Integration | Status | Notes |
|---|---|---|
| Obsidian | Available | Filesystem export |
| GitHub Issues | Available | Uses authenticated gh CLI |
| Slack | Available | Uses Incoming Webhook |
| Signed transcript bundles | Available | Verifiable archive export |
| Notion | Planned | Requires OAuth setup |
| Linear | Planned | Requires OAuth setup |
Platform support
| Platform | Status |
|---|---|
| macOS | Primary supported platform for native capture |
| Linux | Native capture sidecar planned |
| Windows | Native capture sidecar planned |
Mock recording is available for testing and development on unsupported environments.
Troubleshooting
| Issue | Resolution |
|---|---|
capture-sidecar or stt-sidecar warning in selftest |
Build the native sidecars or use --mock for development capture |
| Database opens unencrypted | Install meetmind[encrypted] or check encryption configuration |
| Dashboard opens with no meetings | Record a test meeting and refresh the dashboard |
| Search returns no results | Run meetmind index to build or refresh the transcript index |
| Slack export reports no webhook | Set SLACK_WEBHOOK_URL or pass a webhook URL explicitly |
GitHub export fails because gh is missing |
Install the GitHub CLI and run gh auth login |
| LLM calls do not complete | Run meetmind status and verify provider, model, API key, and base URL |
For a diagnostic report:
meetmind selftest --json
Development
Install development dependencies:
pip install -e '.[dev]'
Run checks:
pytest
ruff check .
Security-sensitive changes should preserve the local-first defaults and avoid silent network egress.
Contributing
Issues and pull requests are welcome. Before proposing a feature, check whether it changes the local-first privacy model or introduces external data transfer. Any external service integration should be explicit, configurable, and documented.
Security disclosures should be sent to security@openintelligence-labs.dev rather than filed as public issues.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file meetmind_ai-1.0.1.tar.gz.
File metadata
- Download URL: meetmind_ai-1.0.1.tar.gz
- Upload date:
- Size: 137.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
108341ad2d08d05ea5b5b386800f45107bb0a1caac727265730ec3a53f0fa152
|
|
| MD5 |
67868660bb2420242d0240df8c001de8
|
|
| BLAKE2b-256 |
7108c11a1802b1b072d08de37f7f6fd1849c7a8f2e0645f74ac6b9d224a207f3
|
Provenance
The following attestation bundles were made for meetmind_ai-1.0.1.tar.gz:
Publisher:
release.yml on openintelligence-labs/meetmind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
meetmind_ai-1.0.1.tar.gz -
Subject digest:
108341ad2d08d05ea5b5b386800f45107bb0a1caac727265730ec3a53f0fa152 - Sigstore transparency entry: 2285161875
- Sigstore integration time:
-
Permalink:
openintelligence-labs/meetmind@ae7ed538d8bbeddd857131536ca10876c54753f2 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/openintelligence-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ae7ed538d8bbeddd857131536ca10876c54753f2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file meetmind_ai-1.0.1-py3-none-any.whl.
File metadata
- Download URL: meetmind_ai-1.0.1-py3-none-any.whl
- Upload date:
- Size: 156.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73700a3733c8dae5a5f9445cae9c098a90cf3c4d67ba02ff64ffbf0db1e381f6
|
|
| MD5 |
d0916d96f455703cb2be5ffacd4b16f1
|
|
| BLAKE2b-256 |
2921320dcca5547caca67acf48f0b62f31e88b6245d4a192707fddd794d5ca79
|
Provenance
The following attestation bundles were made for meetmind_ai-1.0.1-py3-none-any.whl:
Publisher:
release.yml on openintelligence-labs/meetmind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
meetmind_ai-1.0.1-py3-none-any.whl -
Subject digest:
73700a3733c8dae5a5f9445cae9c098a90cf3c4d67ba02ff64ffbf0db1e381f6 - Sigstore transparency entry: 2285161918
- Sigstore integration time:
-
Permalink:
openintelligence-labs/meetmind@ae7ed538d8bbeddd857131536ca10876c54753f2 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/openintelligence-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ae7ed538d8bbeddd857131536ca10876c54753f2 -
Trigger Event:
push
-
Statement type: