Local-first agent memory workspace, starting with meetings.
MirrorNote is a macOS desktop app that starts by recording meetings locally, keeps the raw artifacts you own, and turns work traces into durable notes and agent-usable project context.
It is not a meeting bot. It does not need to join your calls. The product starts with local capture, then grows into a source-backed memory layer across meetings, in-app agent sessions, calendar events, Jira and Linear tickets, Confluence pages, GitHub activity, and project docs.
- Records system audio and microphone audio from the macOS app
- Saves each meeting as a local artifact bundle
- Runs local speech-to-text through bundled native helpers
- Keeps review transcript-first, with quick access to the meeting folder
- Generates structured
note.mdsummaries from built-in templates - Supports custom summary templates for meeting-specific note shapes
- Supports OpenAI-compatible summary providers, including OpenAI, Ollama, and LM Studio
Each completed meeting is stored as files you can inspect, move, or back up:
meeting/
recording.mp3
transcript.jsonl
note.md
metadata.json
note.md is regenerated from the selected summary template. Regeneration replaces the note body instead of appending to the previous note.
MirrorNote's next product wedge is not a prettier meeting summary. It is a source-backed context pipeline:
source records -> evidence records -> memory objects -> relations -> derived agent context
The first implementation should stay file-first and use meetings as the first source adapter. The schema must stay source-neutral because agent sessions and work-system connectors are expected sources, not a separate later product.
A meeting is both:
- a source container for raw traces such as recording, transcript, note, metadata, attached docs, linked agent sessions, calendar events, Jira/Linear issues, Confluence pages, or GitHub PRs
- an event node that can produce decisions, commitments, open questions, risks, and relations
Planned packet outputs:
context/
source-records.jsonl # canonical source records: meeting, agent session, ticket, PR, doc, calendar event
memory-objects.jsonl # canonical typed objects: decisions, commitments, tasks, questions, risks
relations.jsonl # canonical links: implements, blocks, contradicts, produced_by, assigned_to
evidence-map.json # source references back to transcript segments, Slack messages, PR lines, Linear comments
agent-brief.md # derived human/agent-readable brief
project-context.md # derived copy/paste context for Codex, Claude Code, Cursor, or other agents
source-records.jsonl, memory-objects.jsonl, relations.jsonl, and evidence-map.json are the source of truth. Markdown files are derived views, so regenerated agent context cannot drift from the evidence.
MirrorNote's wedge is not "better meeting summaries." The wedge is continuity for agents and humans across project work:
record locally -> keep artifacts -> summarize reliably -> extract evidence -> build agent context -> grow project memory
Current focus:
v1: a local-first recorder you can trustv1.5: source-backed context packets, starting with meetingsv2: agent workspace memory, including in-app agent sessions and work-system connectorsv3: personal ontology and knowledge graph
More product context lives in docs/product-positioning.md. The agent packet contract lives in docs/agent-packets.md.
Install dependencies:
npm installBuild native helpers and the renderer, then launch the desktop app:
npm run desktop:devRun the main local checks:
npm run desktop:checkRun only the renderer checks:
npm run renderer:checkBenchmark STT finalization behavior:
npm run desktop:benchmark:sttSummary generation uses OpenAI-compatible chat completions.
| Provider | Base URL | Notes |
|---|---|---|
| OpenAI | https://api.openai.com/v1 |
Requires an OpenAI API key |
| Ollama | http://localhost:11434/v1 |
Requires a pulled local model |
| LM Studio | http://localhost:1234/v1 |
Requires a loaded local model |
See docs/summary-generation.md for the summary contract and template behavior. See docs/agent-packets.md for the planned agent context packet contract.
Prepare release assets:
npm run release:prepare:macCreate a signed macOS package:
npm run release:pack:macDistribution notes live in docs/distribution.md.
apps/desktop/ Electron main process, preload, renderer app
native/native-host-rust/ macOS capture, bundle, and artifact host
native/stt-server-rust/ local STT runtime and whisper.cpp adapter
scripts/ smoke tests, release scripts, benchmarks
docs/ product, summary, and distribution notes
third_party/whisper.cpp/ vendored whisper.cpp runtime
The Rust helper ownership contract is documented in docs/native-helper-boundaries.md.
MirrorNote is an early local-first macOS app. The current priority is dogfooding real meetings, hardening local capture/transcription, and proving that a meeting source container can become reliable agent context through source-neutral evidence, memory, and relation layers before adding in-app agent sessions and work-system connectors.