Skip to content

qyinm/MirrorNote

Repository files navigation

MirrorNote

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.

What It Does

  • 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.md summaries from built-in templates
  • Supports custom summary templates for meeting-specific note shapes
  • Supports OpenAI-compatible summary providers, including OpenAI, Ollama, and LM Studio

Artifact Bundle

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.

Agent Context Direction

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.

Product Direction

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 trust
  • v1.5: source-backed context packets, starting with meetings
  • v2: agent workspace memory, including in-app agent sessions and work-system connectors
  • v3: personal ontology and knowledge graph

More product context lives in docs/product-positioning.md. The agent packet contract lives in docs/agent-packets.md.

Development

Install dependencies:

npm install

Build native helpers and the renderer, then launch the desktop app:

npm run desktop:dev

Run the main local checks:

npm run desktop:check

Run only the renderer checks:

npm run renderer:check

Benchmark STT finalization behavior:

npm run desktop:benchmark:stt

Summary Providers

Summary 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.

Release Build

Prepare release assets:

npm run release:prepare:mac

Create a signed macOS package:

npm run release:pack:mac

Distribution notes live in docs/distribution.md.

Repository Map

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.

Status

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.