Official website: https://openscribe.org OpenScribe Open-source AI medical scribe for recording encounters and generating structured clinical notes. Project Overview OpenScribe is a free, MIT-licensed, open-source AI medical scribe that helps clinicians record patient encounters, transcribe audio, and generate structured draft clinical notes using LLMs. The default web deployment path is mixed mode: local Whisper…
OpenScribe is an open-source AI scribe that records patient encounters and generates structured clinical notes automatically. You keep full control over data, workflows, and patient privacy with no vendor lock-in.
Open-source AI medical scribe for recording encounters and generating structured clinical notes.
Project Overview
OpenScribe is a free, MIT-licensed, open-source AI medical scribe that helps clinicians record patient encounters, transcribe audio, and generate structured draft clinical notes using LLMs. The default web deployment path is mixed mode: local Whisper transcription + Anthropic Claude note generation. A fully local desktop path is also available, forked from StenoAI.
node --version # Check you have Node.js 18+
# If not installed (macOS): brew install node
# If installed but <18 (macOS): brew upgrade node
npm install -g pnpm
2. Clone and Install
git clone https://github.com/sammargolis/OpenScribe.git
cd OpenScribe
pnpm install
3. Configure Environment (Mixed Web Default)
Create env defaults:
pnpm run setup # Auto-generates .env.local with secure storage key
Edit apps/web/.env.local and add:
TRANSCRIPTION_PROVIDER=whisper_local
WHISPER_LOCAL_MODEL=tiny.en
ANTHROPIC_API_KEY=sk-ant-YOUR_KEY_HERE
# NEXT_PUBLIC_SECURE_STORAGE_KEY is auto-generated, don't modify
OPENAI_API_KEY is optional unless you switch to TRANSCRIPTION_PROVIDER=whisper_openai.
4. Start the App
pnpm dev:local # One command: Whisper local server + web app
Optional desktop app path:
pnpm electron:dev
Desktop production builds:
pnpm build:desktop:mac
pnpm build:desktop:win
pnpm build:desktop:linux
# or
pnpm build:desktop:all
GA support target for packaged desktop releases:
macOS (mainstream current) x64, arm64
Windows (mainstream current) x64
Linux (mainstream current desktop distros) x64, arm64
Default model tiny.en as well as all .en-models transcribes English only
Multilingual transcription works for both local and API-based models
Multilingual transcription is supported by setting WHISPER_LANGUAGE (see .env.local.example for details) and (for local use) switching to a non-.en Whisper model (e.g. tiny, base, small)
Users can also pick the language in the app: Settings -> Transcription Language. An explicit choice overrides WHISPER_LANGUAGE; leaving it on Auto (default) keeps the existing env/auto-detect behavior unchanged. Precedence rules and details
Local-only Desktop (optional)
Transcription: local Whisper backend in local-only/openscribe-backend
Notes: local Ollama models (llama3.2:*, gemma3:4b)
The note editor now includes Send to OpenClaw (desktop app path).
Trigger flow: record encounter -> note appears -> click Send to OpenClaw.
OpenScribe sends patient/note context to OpenClaw and requests an OpenEMR note action.
Optional environment variables for demos:
# OpenClaw CLI (default: openclaw on PATH)
OPENCLAW_BIN=openclaw
# Target OpenClaw agent/session (default: main)
OPENCLAW_AGENT=main
# If set to 1, OpenClaw can deliver responses to a configured channel
OPENCLAW_DELIVER=0
# Optional webhook transport instead of CLI
# OPENCLAW_DEMO_WEBHOOK_URL=http://127.0.0.1:8787/openscribe/handoff
# OPENCLAW_DEMO_WEBHOOK_TOKEN=your-token
Both services offer $5 free credits for new accounts
Staying Updated
git pull origin main # Pull latest changes
pnpm install # Update dependencies
# If you encounter issues after updating:
rm -rf node_modules pnpm-lock.yaml && pnpm install
Note Templates
A note template is the markdown skeleton the model fills in. Pick one in
Settings → Note Template; the choice is stored locally and applies to every
new encounter.
Option
What you get
Default
History and Physical: Chief Complaint, HPI, Review of Systems, Past Medical History, Medications
Your own markdown, edited in the Settings text area
Presets live in packages/llm/src/prompts/clinical-note/templates/index.ts. The
custom template stays on your device, in the same local preferences store as
note length and processing mode.
Writing a custom template
Use markdown ATX headings to define the structure:
# — the note title (one per template, e.g. # Cardiology Follow-Up)
## — a section; each one is parsed as a separate note section
### — a subsection, kept inside its parent section
# Cardiology Follow-Up
## Reason for Visit
## Interval History
## Medications
### Cardiac
### Other
## Assessment and Plan
Section names are free text, so add specialty sections and drop the ones you do
not use. Content under a heading is optional — the model fills sections from the
transcript and omits what the transcript does not support.
A custom template must be non-empty and contain at least one markdown heading.
If it is blank or heading-less, note generation logs a warning and falls back to
the Default template instead of failing.
Selecting Default keeps the existing behavior where a visit type of
“problem visit” maps to the SOAP structure. Choosing SOAP or Custom
overrides the visit type for every encounter.
Purpose and Philosophy
OpenScribe exists to provide a simple, open-source alternative to cloud dependent clinical documentation tools. The project is built on core principles:
Local-first storage: Encounter data is stored locally in the browser by default
Privacy-conscious: No analytics or telemetry in the web app; external model calls are explicit and configurable
Modular: Components can be swapped or extended (e.g., different LLM providers, transcription services)
Local MedGemma (Text-Only) Scribe
This repo now includes a fully local, text-only MedGemma scribe workflow in
packages/pipeline/medgemma-scribe. It requires pre-transcribed text and
does not perform speech-to-text. See
packages/pipeline/medgemma-scribe/README.md for setup and usage.
Storage: AES-GCM encrypted localStorage. Audio processed in-memory, not persisted. Transmission: In the default mixed mode, audio stays local for transcription and transcript text is sent to Anthropic Claude over HTTPS/TLS for note generation. If TRANSCRIPTION_PROVIDER=whisper_openai, audio is sent to OpenAI Whisper over HTTPS/TLS. The application enforces HTTPS-only connections and displays a security warning if accessed over HTTP in production builds. No Tracking: Zero analytics, telemetry, or cloud sync
Use Responsibility
All AI notes are drafts requiring review
Ensure regulatory compliance for your use case
For production deployments serving PHI, ensure the application is accessed via HTTPS or served from localhost only
Limitations & Disclaimers
HIPAA Compliance: OpenScribe includes foundational privacy/security features, but this alone does not make the application HIPAA-compliant. Below is what is already built, followed by a checklist a health system must complete to operate compliantly.
Built (foundational rails)
AES-GCM encrypted localStorage for PHI at rest in the browser
Audio processed in-memory and not persisted
TLS/HTTPS for external API calls (Whisper, Claude)
No analytics/telemetry or cloud sync by default (local-first)
HTTPS-only enforcement in production with HTTP warning
Health System Checklist (required to run compliantly)
Execute BAAs with all PHI-touching vendors (e.g., OpenAI, Anthropic, hosting providers)
Perform and document HIPAA Security Rule risk analysis and remediation plan
All third-party code remains subject to its original license terms.
License
MIT
MIT License
Copyright (c) 2026 Sam Margolis
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Citation
OpenScribe
GitHub: https://github.com/sammargolis/OpenScribe
Maintainer: Sam Margolis (@sammargolis)
Sam is a physician-in-training and computer scientist conducting research at Stanford and an MD candidate at UCLA.
His academic publications appear under Samuel Margolis and Samuel J. Margolis.
评论