Skip to content
amicalhqPublic

About

โœ๏ธ Open-source AI note taker - ๐ŸŽ™๏ธ Transcribe meetings, lectures, and voice notes โ€” with local AI and without invasive bots. AI keeps everything structured, organized, and actionable. Free forever.

Topics

Resources

Contributing

Stars

98 stars

Watchers

0 watching

Forks

Repository files navigation

Prismical

PRs Welcome license
discord

Website - Docs - Community - Bug reports

Table of Contents

โฌ‡๏ธ Download

Download for macOS Download for Windows

Download on the App Store Get it on Google Play

Desktop installers are attached to each release: macOS (Apple silicon), macOS (Intel) and Windows (x64). Packaged builds update themselves.

๐Ÿ”ฎ Overview

Open-source AI note taker.

Prismical is a free, open-source AI note taker that transcribes meetings, lectures and voice notes โ€” without a bot joining your call. It captures system audio in the background, transcribes it with local or cloud AI, and turns it into structured notes with key decisions and action items.

Prismical app Home screen

Works with Zoom, Google Meet, Microsoft Teams, Slack, WebEx โ€” anything that plays audio. Not in a meeting? Just talk or type. Prismical captures and enhances your voice notes too.

This repository is the Prismical desktop app for macOS (Apple silicon and Intel) and Windows (x64).

โœจ Features

๐ŸŽ™๏ธ Real-time meeting transcription โ€” system audio capture, no bot joins your call

๐Ÿง  AI summaries & action items โ€” structured notes with key decisions and follow-ups

๐Ÿ—ฃ๏ธ Voice notes โ€” talk or type, AI structures and organizes your thoughts

๐Ÿช„ AI skills โ€” Enhance, Cleanup and Ask across your notes, or write your own custom skills

๐Ÿ” Local-first AI โ€” on-device transcription with whisper.cpp

๐Ÿ”‘ Bring your own model โ€” OpenAI, Anthropic, OpenRouter, any OpenAI-compatible endpoint, or local models with Ollama

๐Ÿ“… Meeting detection โ€” Prismical notices when a meeting app starts using the microphone

๐ŸชŸ Floating widget โ€” always-on-top compact window for live transcripts and quick notes

๐Ÿ” Full-text search across all meetings, notes and transcripts

โ˜๏ธ Prismical cloud (optional) โ€” sync across devices, sharing, organizations, calendar and speaker diarization

๐Ÿ”Œ MCP server โ€” connect your notes to Claude, ChatGPT, Gemini and more (with a Prismical account)

๐Ÿ“ฑ iOS & Android apps โ€” on the App Store and Google Play

๐Ÿ”ฐ Tech Stack

๐Ÿ›  Development

Repository layout

apps/desktop                      the Electron app (@prismical/desktop)
packages/desktop-contracts        IPC + window contracts shared by main, preload and renderer
packages/native-helpers/*         audio-capture (Swift / C#), mic-detector, eventkit helpers
packages/whisper-wrapper          the whisper.cpp N-API addon (+ whisper.cpp submodule and patches)
packages/webrtc-aec3-builder      reproducible build of the prebuilt WebRTC AEC3 bundle
packages/config-eslint, config-typescript   shared lint / tsconfig presets
packages/{app-ui,app-client,app-i18n,api-contracts,app-contracts,silence,
          editor-markdown,editor-schema,id,note-derive,ai-prompts}
                                  the screens, data layer, i18n catalogues and contracts

Local development

Prerequisites

  • Node.js 24 and pnpm 10.27.0 (corepack enable picks the pinned version)
  • Portless 0.5 or later (npm install -g portless), with its HTTPS proxy on port 443 and local CA trusted (portless proxy start --https and portless trust)
  • CMake 3.20 or later (the whisper addon builds with cmake-js)
  • macOS: Xcode or the Command Line Tools (Swift 5.10+). At runtime, local transcription needs macOS 14 or later (the whisper addon's deployment target) and capturing other participants' system audio needs macOS 14.2 or later.
  • Windows: Visual Studio 2022 Build Tools with the Desktop development with C++ workload, and the .NET 8 SDK for the recording helpers.

Set up

Clone with the whisper.cpp submodule so the local-transcription addon can build:

git clone --recurse-submodules https://github.com/amicalhq/prismical.git
cd prismical
corepack enable
pnpm install            # applies the whisper.cpp patches and compiles the addon (a few minutes)
pnpm build              # builds the workspace packages the app imports from dist/

If you cloned without --recurse-submodules, pnpm install still succeeds but skips the addon; run pnpm --filter @prismical/whisper-wrapper dev:prepare (initializes the submodule and applies the patches) and then pnpm install again. Seeing the submodule marked as modified in git status afterwards is expected โ€” that is the applied patch.

Run the app

cd apps/desktop
pnpm dev

Pick Local in the first-run chooser and nothing else is needed. The first recording downloads a whisper model and the Silero VAD weights into the app's model directory (verified against pinned checksums). Quit any installed copy of Prismical first: the dev app is a separate Electron instance and shows up as "Electron" in the Dock.

Cloud mode against a Prismical backend needs PRISMICAL_CLIENT_ID (the public PKCE OAuth client id registered on that backend) and, for a self-hosted or dev backend, the endpoint overrides โ€” copy apps/desktop/.env.example to apps/desktop/.env. Dev builds default to a local *.localhost stack; packaged builds default to the public Prismical cloud. pnpm dev starts a persistent Forge runner through portless, which assigns the internal OAuth listener port. In-app restarts recreate Forge and Vite while retaining that route; a normal quit stops the runner. Register https://prismical-desktop.localhost/oauth/callback on the backend's OAuth client; the internal port does not appear in the redirect URI. The launcher also adds a trusted dev-proxy CA (~/.portless/ca.pem) to Node only when that file exists; set NODE_EXTRA_CA_CERTS yourself for any other self-signed dev stack. At startup, the app also adds OS-trusted certificates to Node's defaults, excluding expired or invalid certificates.

Environment variables

Variable Where Purpose
PRISMICAL_CLIENT_ID build + runtime Public OAuth client id for cloud-mode sign-in. Absent โ‡’ sign-in reports "not configured".
PRISMICAL_ANALYTICS_KEY build + runtime Telemetry (PostHog) ingestion key. Absent โ‡’ telemetry disabled. Local mode never identifies a user.
PRISMICAL_CORE_API_URL, PRISMICAL_NOTE_WS_URL, PRISMICAL_WEB_APP_ORIGIN, PRISMICAL_ANALYTICS_HOST runtime Cloud endpoints and the telemetry host (dev overrides). The core URL is also the auto-update feed.
PRISMICAL_*_DEFAULT build Packaged-build endpoint defaults (core.prismical.ai etc.).
SKIP_CODESIGNING, CODESIGNING_IDENTITY, APPLE_ID, APPLE_APP_PASSWORD, APPLE_TEAM_ID packaging macOS signing + notarization; signing runs only when SKIP_CODESIGNING=false.
WINDOWS_SIGNTOOL_PATH, WINDOWS_SIGN_WITH_PARAMS packaging (CI) Squirrel in-releasify signing with Azure Trusted Signing.
GGML_NATIVE, WHISPER_TARGETS, GGML_CUDA, GGML_VULKAN whisper build Addon variants; see packages/whisper-wrapper/README.md.
PRISMICAL_E2E*, PRISMICAL_E2E_TARGET, PRISMICAL_E2E_PACKAGE tests Playwright harness switches; scrubbed from production packages.
PRISMICAL_MODEL_CACHE scripts Where pnpm --filter @prismical/desktop fetch-eval-model caches verified weights (default ~/.cache/prismical/models).

Checks

pnpm lint
pnpm type:check
pnpm test                                        # every workspace package, incl. the desktop unit suite
pnpm --filter @prismical/desktop test:e2e:fresh  # packages an E2E-gated app and runs the Playwright suite
pnpm --filter @prismical/desktop exec vitest run tests/native   # helper golden fixtures + handshakes
pnpm --filter @prismical/desktop test:local-asr  # whisper end to end; first: pnpm --filter @prismical/desktop fetch-eval-model --model whisper-base-en (and --model silero-vad-v5)

Packaging

cd apps/desktop
pnpm package        # out/Prismical-<platform>-<arch>/ (unsigned unless SKIP_CODESIGNING=false)
pnpm make           # DMG + ZIP (macOS) or a Squirrel .exe installer (Windows)

build:deps runs before every dev/package/make and rebuilds the native helpers only when their sources changed; forge's prePackage hook builds the whisper addon if the submodule is present and downloads the Node sidecar the transcription worker runs under. The prebuilt WebRTC AEC3 bundle is committed; rebuilding it is optional (packages/webrtc-aec3-builder/README.md).

Releasing

Maintainers release with the bumpp flow: pnpm --filter @prismical/desktop exec bumpp <version> bumps apps/desktop/package.json, commits chore: release v<version> and pushes the v<version> tag. That tag runs .github/workflows/release.yml: signed + notarized macOS builds (arm64, x64) and a Trusted-Signed Windows x64 build, then attaches the installers and auto-update payloads to a draft GitHub Release with a generated changelog. A push to a preview/** branch produces an unsigned rolling pre-release instead. The workflow header lists the repository secrets a signed release needs.

๐Ÿค— Contributing

Contributions are welcome! See CONTRIBUTING.md for how the repository is put together and what a pull request needs, or reach out to the team in our Discord server.

๐ŸŽ— License

Released under MIT. Third-party components and model weights are listed in NOTICE.md.

About

โœ๏ธ Open-source AI note taker - ๐ŸŽ™๏ธ Transcribe meetings, lectures, and voice notes โ€” with local AI and without invasive bots. AI keeps everything structured, organized, and actionable. Free forever.

Topics

Resources

Contributing

Stars

98 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages