Installation
macOS (Current Release)
Download the .dmg file from the download page. Open the disk image and drag ClinicalFlow into your Applications folder. On first launch, macOS may ask you to confirm you want to open an app from an identified developer — click Open.
Supported on macOS 11.0 (Big Sur) or later. Optimized for Apple Silicon (M1, M2, M3, M4).
File sizes: The installer is approximately 50 MB. The bundled Whisper speech recognition model (large-v3-turbo, 574 MB) is included for offline mode and uses Metal GPU acceleration on Apple Silicon.
Windows
Download the .exe installer from the download page. Run the installer and follow the setup wizard. ClinicalFlow installs to your user profile (no admin required) and creates a Start Menu shortcut.
Supported on Windows 10 (version 1903+) and Windows 11, x86_64.
First launch: Windows SmartScreen may show a warning for new applications. Click More info → Run anyway to proceed. This warning will be resolved once we obtain a code signing certificate.
Microphone permissions: If recording doesn’t work, check Windows Settings → Privacy → Microphone and ensure microphone access is enabled for ClinicalFlow.
Offline mode: The bundled Whisper model works on CPU. For AI note generation in offline mode, install
Ollama for Windows and pull the
llama3.1:8b model.
Linux
Linux builds are in development. Sign up for notifications on the download page to be notified when Linux support becomes available.
First Launch & PIN Setup
When you open ClinicalFlow for the first time, you’ll be asked to create a numeric PIN (4–8 digits). This PIN encrypts all clinical data stored on your device using AES-256 encryption.
You’ll enter this PIN every time you open the app. ClinicalFlow never stores your PIN in plaintext — only an Argon2id cryptographic hash is saved for verification.
Important: If you forget your PIN, your data cannot be recovered. The encryption is designed so that only you can access patient information. Write your PIN down and store it securely. The only recovery option is a full PIN reset, which permanently deletes all data.
After creating your PIN, the Welcome Wizard guides you through initial setup.
Welcome Wizard
The Welcome Wizard runs once after PIN creation and walks you through a 5-screen setup flow:
| Screen | Title | What You Do |
| Welcome | “Welcome to ClinicalFlow” | Introduction screen. Click Get Started to begin. |
| Step 1 of 4 | “Choose Your Language” | Select from 37 supported languages. This sets your transcription, note generation, and UI language. |
| Step 2 of 4 | “Choose Your Mode” | Select Online (Deepgram + Claude, recommended) or Offline (Whisper + Ollama, privacy-first). You can switch anytime in Settings. |
| Step 3 of 4 | “Online Setup” or “Offline Setup” | Online: Enter and test your Deepgram and Claude API keys. Offline: Verify Whisper model is ready and test Ollama connection. |
| Step 4 of 4 | “You’re All Set!” | Quick-start tips showing essential keyboard shortcuts. Click Start Using ClinicalFlow. |
After completing the wizard, it never appears again. The welcomeCompleted flag is saved in your configuration. To re-run the setup, delete your auth.json file (see Log Files for file locations).
Demo Mode
ClinicalFlow includes four built-in demo encounters to help you explore the app without a real patient visit. Each demo covers a different specialty to showcase the full range of templates and features.
Accessing Demo Mode
Triple-click the Help button (3 clicks within 400ms). A picker modal appears with four demo scenarios.
General Medical Visit (Animated)
A multi-problem internal medicine encounter with James Robinson (patient), Dr. Patel (physician), and Maria (medical assistant). Covers Type 2 diabetes, hypertension, peripheral neuropathy, and left knee osteoarthritis. The transcript plays back word-by-word with waveform animation (~24 entries).
Dental Examination (Instant)
A comprehensive dental encounter with Ms. Ramirez (patient) and Dr. Chen (dentist). Covers MOD caries, endodontic failure, impacted wisdom tooth, and a 4-phase treatment plan. The transcript loads instantly (15 entries), the dental chart auto-populates with findings, and the dental_general template is auto-selected.
Radiology Report (Instant)
A CT abdomen/pelvis with contrast demonstrating appendicitis findings. The transcript loads instantly and the radiology_diagnostic template is auto-selected, generating a structured radiology report with technique, findings, and impression sections.
Behavioral Health Session (Instant)
A psychiatry follow-up encounter covering panic disorder, medication adjustment, and CBT therapy progress. The transcript loads instantly and the DAP (Data, Assessment, Plan) template is auto-selected, showcasing behavioral health documentation with mental status exam and treatment planning.
Demo mode is a great way to test different note templates, dental charting, medical coding, and the verification system before using ClinicalFlow in a real encounter.
System Requirements
Online Mode (Minimum)
| Operating System | macOS 11.0+ (Apple Silicon recommended) |
| RAM | 4 GB |
| Disk Space | ~700 MB (app + bundled Whisper model) |
| Internet | Required (for Deepgram and Claude API calls) |
| Microphone | Any USB or built-in microphone |
| API Keys | Deepgram (free tier: $200 credit) + Anthropic |
Offline Mode (Recommended)
| Processor | Apple Silicon (M1 or later) |
| RAM | 8 GB recommended (Whisper + Ollama) |
| Disk Space | ~8 GB (app + Whisper model + Ollama models) |
| Internet | Not required (one-time internet needed for initial Ollama model download) |
| Dependencies | Ollama (free, separate install from ollama.com) |
Recording Basics
The record button is the large circular button at the bottom center of the app. Press it or hit Space to start recording. The button pulses red and a timer counts up in the header.
Controls
| Action | Button | Shortcut |
| Start / Stop recording | Record button (red circle) | Space or Cmd+R |
| Pause / Resume | Pause button (appears during recording) | P |
During Recording
- The timer in the header counts up (MM:SS format)
- The waveform visualizer animates at 60 FPS to show audio input level
- Transcript entries appear in real time in the left panel
- Each entry shows the speaker name, timestamp, and transcribed text
- The transcript auto-scrolls to the latest entry (can be toggled off in Settings)
Maximum Session Duration
Sessions are limited to 4 hours of continuous recording. When this limit is reached, recording stops automatically.
Crash Recovery
ClinicalFlow writes audio data to disk continuously during recording (flushing every ~10 seconds). If the app crashes mid-recording, your audio is preserved up to the last flush. On restart, ClinicalFlow recovers the session automatically.
Online Transcription (Deepgram)
Online mode uses Deepgram Nova-3 Medical, a cloud-based speech recognition model optimized for clinical encounters. It provides the highest accuracy and real-time speaker diarization.
Setup
- Sign up at deepgram.com (free tier includes $200 of credit)
- Create an API key in your Deepgram dashboard
- Open ClinicalFlow Settings → Transcription → paste your API key → click Save
The connection indicator in the header will show Online — connected when the key is valid.
How It Works
Audio is captured from your microphone, encoded as 16-bit PCM at 16 kHz mono, and streamed to Deepgram over an encrypted WebSocket connection (WSS). Deepgram returns transcription results with word-level timestamps and speaker labels. A keepalive signal is sent every 8 seconds, and utterance boundaries are detected after 1,500ms of silence.
Keyterm Boosting
ClinicalFlow sends up to 100 medical terms to Deepgram as keyterm parameters, drawn from the corrections dictionary and medical dictionary. This improves recognition accuracy for clinical terminology.
Speaker Diarization
Deepgram automatically identifies different speakers in the audio stream. ClinicalFlow maps these speaker IDs to the speakers you’ve defined in the sidebar.
Offline Transcription (Whisper)
Offline mode uses a local Whisper large-v3-turbo model (574 MB, multilingual, quantized) running via a Metal GPU-accelerated whisper-server HTTP sidecar. No audio ever leaves your machine.
How It Works
Audio is captured in 2-second chunks with 0.3-second overlap. Each chunk is sent as a 16 kHz mono WAV to the local whisper-server via HTTP POST. The server stays alive between recordings (no cold start) and uses adaptive chunk sizing based on inference performance. Chunks below a 200 RMS silence threshold are skipped to avoid processing silence.
Model Details
| Model file | ggml-large-v3-turbo-q5_0.bin (multilingual, quantized) |
| Size | 574 MB |
| Startup timeout | 30 seconds for model loading |
| Request timeout | 10 seconds per chunk |
| Temperature | 0.0 (deterministic) |
| Threads | Auto-detected (minimum 4) |
| Network binding | 127.0.0.1 only (no external access) |
No speaker diarization: Whisper does not provide speaker diarization. In offline mode, you can manually switch speakers in the sidebar, or use the 1.5-second silence detection heuristic to auto-switch.
Microphone Setup
ClinicalFlow uses your system’s default audio input device. Audio is captured at 16 kHz, 16-bit signed mono via the native audio stack (cpal on Rust).
For best results, use an external USB microphone positioned between you and the patient. Built-in laptop microphones work but capture more ambient noise.
On macOS, you’ll need to grant microphone permission on first launch: System Settings → Privacy & Security → Microphone → enable ClinicalFlow.
Languages (37)
ClinicalFlow supports 37 languages across the full pipeline: transcription, medical term corrections, note generation, and date formatting.
| Region | Languages |
| English (4) | en-US, en-GB, en-AU, en-IN |
| Romance (8) | Spanish, Latin American Spanish, French, Italian, Portuguese, Brazilian Portuguese, Dutch, Romanian |
| Germanic (4) | German, Swedish, Danish, Norwegian |
| Asian (10) | Japanese, Korean, Chinese (Simplified), Chinese (Traditional), Hindi, Tamil, Telugu, Thai, Vietnamese, Indonesian, Malay |
| Slavic (8) | Russian, Ukrainian, Polish, Czech, Slovak, Bulgarian, Croatian, Slovenian |
| Other (3) | Arabic, Hebrew, Turkish, Finnish, Hungarian, Greek |
Correction Dictionaries
Medical term corrections are available for 6 languages, totaling 325+ patterns:
| Language | Patterns |
| English | 82 |
| Spanish | 30 |
| French | 29 |
| German | 21 |
| Portuguese | 21 |
| Italian | 21 |
Languages without dedicated correction dictionaries use the base transcription engine output without post-processing.
Medical Term Corrections
Speech-to-text engines frequently garble medical terminology. ClinicalFlow applies a post-processing step after transcription that fixes common errors using 325+ regex patterns across 6 languages.
What Gets Corrected
| Category | Examples |
| Drug names | “metforming” → metformin, “lipator” → Lipitor, “hydroclorothiazide” → hydrochlorothiazide |
| Conditions | “hypertention” → hypertension, “dye-a-beet-eez” → diabetes, “arithemia” → arrhythmia |
| Abbreviations | “bee pee” → BP, “ee kay gee” → EKG |
| Vital signs | Catches unrealistic values like “BP 1420 over 88” and flags for review |
Custom Dictionary
Corrections are loaded from language-specific JSON files in the app’s data directory (corrections.json for English, corrections-es.json for Spanish, etc.). You can edit these files to add corrections specific to your specialty:
[
{ "pattern": "\\bmetforming\\b", "flags": "gi", "replacement": "metformin" },
{ "pattern": "\\byour-custom-term\\b", "flags": "gi", "replacement": "CorrectTerm" }
]
ClinicalFlow reloads the corrections file on each app launch. Changes take effect on the next recording.
Hallucination Filtering
Whisper occasionally produces false positive text output from silence or background noise. ClinicalFlow filters these automatically before they reach the transcript.
What Gets Filtered
- Whisper meta-tags:
[blank_audio], (silence), (blank audio), (no audio)
- Background sounds:
(music), (laughter), (coughing), (breathing), (footsteps), and similar
- YouTube/social media artifacts: “subscribe”, “like and subscribe”, “thank you for watching” (training data leakage from Whisper)
- Generic filler: “thank you.”, “goodbye.”, “the end.”, single-word outputs
- Structural patterns: Fully parenthesized strings, repeated words/phrases, empty output
Not configurable. The hallucination filter is hardcoded in the Rust backend (audio.rs). It cannot be modified without recompiling the application.
Medical Vocabulary Conditioning
ClinicalFlow conditions the Whisper model with a prompt containing 55+ medical terms to improve recognition of clinical terminology. This prompt is passed to whisper-server via the --prompt flag.
Term Categories
| Category | Count | Examples |
| Medications | 62 | metformin, lisinopril, atorvastatin, gabapentin, warfarin |
| Conditions | 80+ | hypertension, atrial fibrillation, COPD, osteoarthritis |
| Anatomy | 21 | cervical, thoracic, lumbar, bilateral, anterior, posterior |
| Vitals | 9 | systolic, diastolic, blood pressure, heart rate, SpO2 |
| Labs | 12 | A1c, CBC, BMP, CMP, TSH, lipid panel, creatinine |
| Dental | 35+ | caries, periodontitis, mesial, occlusal, buccal, pulpitis |
Not user-configurable. The medical vocabulary prompt is compiled into the Rust binary. Changing it requires editing audio.rs and recompiling.
Speaker Management
The sidebar’s Speakers section lets you define who is in the encounter. Each speaker gets a name, a role, and a unique color that appears in the transcript.
Adding a Speaker
Click the + button in the Speakers section. Enter a name (e.g., “Dr. Martinez”) and select a role. ClinicalFlow automatically assigns a color.
Switching the Active Speaker
Click a speaker’s name in the sidebar to make them the active speaker. All subsequent transcript entries will be attributed to this speaker until you switch again or auto-detection switches for you.
Removing a Speaker
Click the × button next to a speaker’s name. Existing transcript entries from that speaker are preserved.
Roles & Colors
Each speaker can be assigned one of three roles. The role determines how the speaker’s words are categorized in the generated clinical note:
| Role | Abbreviation | Note Categorization |
| Physician | Dr | Statements go to Objective, Assessment, and Plan sections |
| Patient | Pt | Statements go to Subjective (chief complaint, symptoms, history) |
| Other | Ot | Context-dependent; can represent a nurse, family member, translator, or other participant |
Each speaker has a unique color in the transcript, displayed as a left border on each entry for easy visual scanning.
Auto-Detection
When Auto-detect speakers is enabled (Settings → Recording), ClinicalFlow uses two methods to automatically switch speakers:
- Diarization data (online mode) — Deepgram provides speaker IDs with each transcript segment, and ClinicalFlow maps these to your defined speakers.
- Silence detection (both modes) — After 1.5 seconds of silence, ClinicalFlow may switch the active speaker. This works best in clear turn-taking conversations.
Auto-detection is not perfect. You can always manually click a speaker in the sidebar to correct it.
Cloud AI (Claude Haiku 4.5)
Cloud AI uses Anthropic’s Claude Haiku 4.5 (claude-haiku-4-5-20251001) to generate clinical notes. It provides the highest quality output with the most natural clinical language.
Setup
- Sign up at console.anthropic.com
- Create an API key (starts with
sk-ant-)
- Open ClinicalFlow Settings → AI Note Generation → select Cloud AI
- Paste your API key and click Save
- Click Test to verify the connection
Technical Details
| Model | claude-haiku-4-5-20251001 |
| Temperature | 0.3 (generation), 0.1 (verification pass) |
| Max tokens | 2,048 per request |
| Timeout | 120 seconds |
| Typical input | ~1,500 tokens (transcript + system prompt) |
| Typical output | ~800 tokens per note |
Cost
A full online encounter (Deepgram transcription + Claude note generation with verification) costs approximately $0.10–$0.15 per encounter for a 15-minute visit. This is separate from your ClinicalFlow subscription — you pay Deepgram and Anthropic directly through your own API keys.
How It Works
When you click Generate Note (or press G), ClinicalFlow sends the full transcript to Claude along with a detailed clinical prompt that specifies the note template, evidence-extraction rules, safety constraints, and output structure. Claude’s response streams back in real time — you see the note being written section by section.
Ollama (Local AI)
Ollama runs AI models entirely on your local machine. No data leaves your computer. It’s free, open-source, and supports dozens of models.
Ollama is not bundled with ClinicalFlow. You must install it separately (free, one-time setup). Without Ollama, offline AI note generation is not available — you can still use the rule-based fallback or switch to Cloud AI mode.
Installation — macOS
- Go to ollama.com/download/mac and download the installer.
- Open the downloaded
.dmg file and drag Ollama to your Applications folder.
- Launch Ollama from Applications. You’ll see a small llama icon appear in your menu bar — this means Ollama is running in the background.
- Open Terminal (search “Terminal” in Spotlight) and run:
ollama pull llama3.1:8b
This downloads the recommended model (~4.7 GB). Wait for it to complete.
- Verify it worked by running:
ollama list — you should see llama3.1:8b in the list.
- Open ClinicalFlow → Settings → AI Note Generation → select Ollama.
- Click Test to verify the connection, then Refresh to load your models.
Installation — Windows
- Go to ollama.com/download/windows and download the installer.
- Run
OllamaSetup.exe and follow the prompts. Ollama will start automatically and appear in your system tray.
- Open Command Prompt or PowerShell (search “cmd” in Start) and run:
ollama pull llama3.1:8b
This downloads the recommended model (~4.7 GB). Wait for it to complete.
- Verify it worked by running:
ollama list — you should see llama3.1:8b in the list.
- Open ClinicalFlow → Settings → AI Note Generation → select Ollama.
- Click Test to verify the connection, then Refresh to load your models.
Recommended Models
| Model | Command | Size | Quality | Speed |
llama3.1:8b | ollama pull llama3.1:8b | 4.7 GB | Good | Fast |
mistral:7b | ollama pull mistral:7b | 4.1 GB | Good | Fast |
gemma2:9b | ollama pull gemma2:9b | 5.4 GB | Very Good | Medium |
llama3.1:70b | ollama pull llama3.1:70b | 39 GB | Excellent | Slow (needs 64GB+ RAM) |
For most clinical use, llama3.1:8b provides the best balance of quality and speed. It runs well on machines with 8 GB of RAM.
Making Ollama Start Automatically
macOS: Ollama starts automatically on login by default. If it doesn’t, open Ollama from Applications and check “Start at login” in the menu bar icon preferences.
Windows: Ollama runs as a background service and starts automatically after installation. If it’s not running, search for “Ollama” in the Start menu and launch it.
Configuration
Default server URL: http://localhost:11434. ClinicalFlow includes 3 automatic retries for transient failures. You can change the URL in Settings if you run Ollama on a different machine or port.
Rule-Based Fallback
If both Cloud AI and Ollama are unavailable, ClinicalFlow falls back to a rule-based note generator. This deterministic system extracts information using pattern matching: vital sign patterns, medication mentions, symptom descriptions, and exam findings.
Rule-based notes are less polished than AI-generated ones but provide a reliable baseline that captures key data points. Select it explicitly in Settings → AI Note Generation → Rule-Based.
Two-Pass Verification
ClinicalFlow’s verification system runs a second AI pass after generating a note. This auditor checks every claim against the original transcript.
| Check | Description | Example |
| Hallucination | Findings not supported by the transcript | Note says “lungs clear” but no lung exam was discussed |
| Contradiction | Same finding appears as both positive and negative | “denies chest pain” but Assessment says “chest pain” |
| Omission | Something discussed but missing from the note | Labs ordered but not in the Plan |
| Categorization | Items in the wrong section | A new medication listed as “continued” |
The verification pass runs at temperature 0.1 for maximum precision. Toggle in Settings → AI Note Generation → Verification pass.
Verification requires AI. The verification pass uses the same AI engine as note generation (Cloud AI or Ollama). It is not available with the rule-based engine.
Clinical Prompt System
ClinicalFlow uses a carefully engineered prompt to guide AI note generation. The prompt includes:
- Template specification — Exact section headers and structure for the selected template (from all 22 built-in templates)
- Evidence-extraction rules — Every line must trace back to something explicitly stated in the transcript
- Omission logic — If a system or exam component was not discussed, it is omitted (not listed as “not assessed”)
- Pertinent negatives — Only negatives the patient explicitly denied are included
- Medication categorization — Separates new prescriptions, continued medications, and dosage changes
- Multilingual output — For non-English languages, an OUTPUT LANGUAGE directive generates clinical content in the target language while keeping section headers in English for the note parser
- Dental chart integration — When a dental template is selected, dental chart findings are serialized into the prompt
- Medical/dental coding — When auto-coding is enabled, a separate coding prompt generates ICD-10, CPT, E&M, or CDT codes from the note content
Template Overview
ClinicalFlow includes 22 built-in note templates across 6 categories, plus the ability to create custom templates. Select a template from the dropdown (#formatSelector) in the sidebar, or change your default in Settings.
General Templates (3)
| Template | Key | Sections |
| SOAP Notes | soap | Subjective, Objective, Assessment, Plan |
| HPI-Focused | hpi | Patient Demographics, Chief Complaint, History of Present Illness, Review of Systems, Physical Examination, Assessment & Plan |
| Problem-Oriented | problem | Visit Overview, Problem 1 (SOAP per problem), Medications Summary, Follow-Up |
Behavioral Health Templates (2)
| Template | Key | Sections |
| DAP Note (Psychiatry) | dap | Data, Assessment, Plan |
| BIRP Note (Behavioral) | birp | Behavior, Intervention, Response, Plan |
Specialty Templates (10)
| Template | Key | Sections |
| Cardiology | cardiology | Cardiac History, Cardiovascular Examination, Diagnostics, Assessment, Plan |
| Orthopedics | orthopedics | History, Musculoskeletal Examination, Imaging, Assessment, Plan |
| Pediatrics | pediatrics | Growth & Development, History, Physical Examination, Assessment, Plan |
| OB/GYN | obgyn | OB/GYN History, Physical Examination, Labs & Studies, Assessment, Plan |
| Emergency / Urgent Care | emergency | Triage, History of Present Illness, Physical Examination, Medical Decision Making, Disposition |
| Dermatology | dermatology | History, Lesion Description, Assessment, Plan |
| Neurology | neurology | Neurological History, Neurological Examination, Diagnostic Studies, Assessment, Plan |
| Ophthalmology | ophthalmology | Ophthalmic History, Examination, Assessment, Plan |
| Preventive / Wellness | wellness | Preventive Health, Health Screening, Physical Examination, Counseling & Education, Plan |
| Procedure Note | procedure | Pre-Procedure, Procedure, Findings, Post-Procedure |
Radiology Templates (2)
| Template | Key | Sections |
| Diagnostic Radiology | radiology_diagnostic | Clinical History, Technique, Comparison, Findings, Impression, Classification (BI-RADS/LI-RADS/PI-RADS), Recommendations |
| Interventional Radiology | radiology_interventional | Clinical History, Pre-Procedure Assessment, Procedure Details, Technique, Fluoroscopy/Dose Report, Findings, Post-Procedure Care, Impression |
Dental Templates (5)
Dental templates automatically enable the interactive dental chart in the sidebar.
| Template | Key | Sections |
| General Dental Exam | dental_general | Chief Complaint, Dental History, Extraoral Examination, Intraoral Examination, Radiographic Findings, Dental Chart Findings, Assessment, Treatment Plan |
| Periodontal Exam | dental_periodontal | Chief Complaint, Periodontal History, Periodontal Examination, Radiographic Findings, Dental Chart Findings, Assessment, Treatment Plan |
| Endodontic Evaluation | dental_endodontic | Chief Complaint, Endodontic History, Diagnostic Testing, Radiographic Findings, Dental Chart Findings, Assessment, Treatment Plan |
| Oral Surgery Consult | dental_oral_surgery | Chief Complaint, Surgical History, Clinical Examination, Radiographic Findings, Dental Chart Findings, Assessment, Surgical Plan |
| Prosthodontic Evaluation | dental_prosthodontic | Chief Complaint, Prosthodontic History, Clinical Examination, Radiographic Findings, Dental Chart Findings, Assessment, Treatment Plan |
Custom Templates
Click + Custom Template in the template dropdown to create your own. Provide a name, define section names, and optionally write a custom AI prompt. Custom templates are stored in the ms-custom-templates config key as a JSON array.
Interactive Dental Chart
When any dental template is selected, a Dental Chart section appears in the sidebar with an “Edit Chart” button. Clicking opens a full-screen SVG dental chart modal.
The chart supports both 32-tooth adult (permanent) and 20-tooth primary (deciduous) dentition with a toggle switch. Teeth use ADA Universal numbering: adult teeth 1–32, primary teeth A–T.
Tooth States (8)
Click any tooth to open a two-tier popup. Select from 8 color-coded clinical states:
| State | Color | Hex |
| Healthy | Green | #34D399 |
| Decay / Caries | Red | #F87171 |
| Missing | Gray (40% opacity) | #64748B |
| Restored | Blue | #60A5FA |
| Implant | Purple | #A78BFA |
| Root Canal | Amber | #FBBF24 |
| Fracture | Orange | #FB923C |
| Impacted | Magenta | #E879F9 |
Surface Marking
For states that affect specific surfaces (decay, restored, fracture), a second tier of surface buttons appears after selecting the state:
| Tooth Type | Surfaces |
| Posterior (molars/premolars) | M (Mesial), O (Occlusal), D (Distal), B (Buccal), L (Lingual) |
| Anterior (canines/incisors) | M (Mesial), I (Incisal), D (Distal), F (Facial), L (Lingual) |
Anatomical validation prevents impossible surface combinations. Click outside the popup to save your selection.
AI Integration
Dental chart findings are automatically serialized into the AI prompt during note generation. The format includes dentition type, tooth number, state, and affected surfaces.
Response Parsing
When the AI generates a note mentioning dental findings, ClinicalFlow can parse findings back to the chart. Acronym protection prevents false surface detection for 18 common dental abbreviations: FPD, RPD, ZOE, FGC, PFM, MTA, SDF, BOP, CAL, TMD, TMJ, GBI, OHI, DI, CI, CEJ, PDL, and IPR.
Export
The dental chart SVG and findings table are included in PDF and text exports when enabled in Settings (ms-settings-dentalChartInExport and ms-settings-dentalFindingsInExport).
Periodontal Charting Overview
ClinicalFlow includes a full periodontal charting mode that overlays on the dental chart. When a dental template is active, a “Perio Mode” toggle appears in the dental chart modal. Enabling perio mode transforms the chart into a 6-point probing depth entry system.
Accessing Perio Mode
- Select any dental template (General Dental, Periodontal Exam, etc.)
- Open the dental chart modal via Edit Chart
- Toggle the Perio Mode switch at the top of the chart
What Perio Mode Adds
- 6-point probing depths per tooth (MB, B, DB, ML, L, DL)
- Bleeding on probing (BOP) markers per site
- Recession measurements per site
- Mobility grades (I, II, III) per tooth
- Furcation involvement grades (I, II, III) for multi-rooted teeth
- Clinical attachment level (CAL) auto-calculated from probing depth + recession
All perio data is serialized into the AI prompt during note generation and included in PDF/text exports.
Voice-Driven Entry
Probing depths and perio findings can be entered by voice during a live recording. The perio voice parser recognizes natural dictation patterns and maps them to specific teeth and sites.
Supported Voice Commands
| Voice Input | Parsed As |
| “Tooth 3, probing 3-2-4-3-2-3” | 6-point depths for tooth #3: MB=3, B=2, DB=4, ML=3, L=2, DL=3 |
| “Tooth 14, bleeding mesial and distal” | BOP marked on MB, ML, DB, DL sites of tooth #14 |
| “Tooth 19, recession 2 millimeters buccal” | 2mm recession on B site of tooth #19 |
| “Tooth 30, mobility grade 2” | Mobility II for tooth #30 |
| “Tooth 3, furcation grade 1” | Furcation I for tooth #3 |
Voice-entered data populates the perio chart in real time. You can also click individual sites on the chart to enter or correct values manually.
Tip: For fastest entry, dictate all 6 probing depths for a tooth as a sequence of numbers (e.g., “3-2-4-3-2-3”). The parser maps them left to right: MB, B, DB, ML, L, DL.
Measurements & Data Points
Each tooth in perio mode tracks the following data points:
| Measurement | Sites | Range | Description |
| Probing Depth (PD) | 6 per tooth | 1–15 mm | Distance from gingival margin to base of sulcus/pocket |
| Recession (REC) | 6 per tooth | 0–15 mm | Distance from CEJ to gingival margin |
| Bleeding on Probing (BOP) | 6 per tooth | Yes / No | Bleeding observed upon gentle probing |
| Clinical Attachment Level (CAL) | 6 per tooth | Calculated | PD + REC (auto-calculated, not manually entered) |
| Mobility | 1 per tooth | Grade I–III | Lateral and vertical tooth movement |
| Furcation | 1 per tooth | Grade I–III | Bone loss at furcation of multi-rooted teeth only |
Color Coding
Probing depths are color-coded for quick visual assessment:
| Depth | Color | Clinical Significance |
| 1–3 mm | Green | Normal / healthy sulcus |
| 4–5 mm | Yellow / Amber | Moderate pocketing — monitor or treat |
| 6+ mm | Red | Deep pocket — active periodontal disease likely |
Documentation Completeness Scoring
ClinicalFlow automatically calculates a documentation completeness score for each perio charting session. This helps ensure thorough documentation before generating notes or exporting.
How Scoring Works
The score is a percentage (0–100%) based on the ratio of documented data points to expected data points for the teeth present in the chart. Missing teeth are excluded from the calculation.
| Component | Weight | Criteria |
| Probing depths | Primary | All 6 sites recorded for each present tooth |
| BOP | Secondary | BOP status recorded for probed sites |
| Recession | Secondary | Recession values recorded where applicable |
| Mobility | Supplemental | Mobility recorded for teeth with deep pockets |
| Furcation | Supplemental | Furcation recorded for multi-rooted teeth with bone loss |
Score Display
The completeness score appears as a badge in the perio chart header. Scores below 80% display a warning suggesting the provider complete additional measurements before generating the note.
Note: The completeness score is informational — it does not prevent note generation. You can generate a note at any completeness level.
Automatic Billing Codes
ClinicalFlow automatically generates billing codes from the generated note content when auto-coding is enabled (ms-settings-autoCoding). Codes appear in a read-only panel (#codingPanel) below the note sections with colored confidence badges.
Confidence Levels
| Level | Meaning |
| High | Strong, specific documentation supports this code |
| Medium | Documentation supports but lacks some specificity |
| Low | Code is inferred from context; documentation is indirect |
Codes are read-only with a copy-to-clipboard option. No direct editing of suggested codes in the UI.
Medical Coding (ICD-10 + CPT)
For medical (non-dental) templates, ClinicalFlow generates:
- Up to 8 ICD-10-CM diagnosis codes with confidence levels
- Up to 4 CPT procedure codes with confidence levels
- E&M level assessment (Level 1–5) based on number of problems addressed, data complexity, and risk of morbidity/mortality
The system uses only real, valid ICD-10-CM and CPT codes.
Dental Coding (CDT + Dental ICD-10)
For dental templates, ClinicalFlow generates CDT D-codes and dental-specific ICD-10 codes. The dental coding engine enforces 4 strict guardrails:
1. Strict Domain Gate
Only CDT D-codes and dental ICD-10 codes are allowed. CPT codes (00100–99499), E&M levels, and non-dental codes are strictly forbidden. Every procedure code must begin with “D”.
2. Depth & Severity Escalator
Never defaults to the shallowest/generic code. If “approaching pulp” or “deep caries” is documented, codes escalate to K04.0/K04.1 rather than K02.51. If “bone loss” or “deep pockets >5mm” is documented, periodontal codes escalate from K05.10 to K05.311+.
3. Structural vs. Positional Trauma
Every injury is classified into exactly one track:
- Track A (structural failure): cracked/fractured → K03.81, S02.5XXA, D2740, D7140
- Track B (positional displacement): loosened/luxated → S03.2XXA, M26.30, D7270, D4921
Codes from both tracks are never assigned to the same tooth.
4. Etiology of Absence
For every missing tooth, the reason is determined. Default is acquired (K08.111–K08.409) unless the transcript explicitly states “congenitally absent”, “agenesis”, or “hypodontia” → then congenital (K00.0).
Audit Flags
After billing codes are generated, ClinicalFlow runs an audit pass that checks for common documentation and coding issues. Audit flags appear as collapsible alerts below the coding panel.
What the Audit Checks
| Flag Type | Description | Example |
| Unsupported code | A suggested code lacks sufficient documentation in the note | ICD-10 code assigned but the condition is only mentioned in the transcript, not the note |
| Specificity gap | A more specific code could be used based on the documentation | Unspecified laterality when the note clearly states “left knee” |
| Missing linkage | A procedure code is present without a supporting diagnosis code | CPT procedure assigned without a corresponding ICD-10 diagnosis |
| E&M mismatch | The E&M level does not align with documentation complexity | Level 5 suggested but only 2 problems documented |
| Duplicate domain | Overlapping codes that may trigger payer rejections | Two ICD-10 codes covering the same condition at different specificity levels |
Interacting with Flags
Each flag is collapsible — click to expand for details and the specific code(s) involved. Flags are informational only and do not modify the suggested codes. They help providers review and correct coding before submission.
Clinical Warnings
Separate from audit flags, ClinicalFlow generates clinical warnings when the note content suggests potential safety or quality concerns. Warnings appear as highlighted alerts in the coding panel.
Warning Categories
| Warning | Trigger |
| Drug interaction | Two or more medications mentioned that have known major interactions |
| Allergy conflict | A prescribed medication matches a documented allergy |
| Missing follow-up | A significant finding is documented but no follow-up plan is specified |
| Incomplete assessment | A problem is mentioned in the transcript but absent from the Assessment section |
Important: Clinical warnings are AI-generated suggestions, not clinical decisions. Always apply independent clinical judgment. ClinicalFlow is a documentation tool, not a clinical decision support system.
Inline Editing
After note generation, each section is editable directly in the note panel. Every line has inline controls that appear on hover:
- Move up/down — reorder lines within a section
- Add line — insert a new blank line below
- Delete line — remove the line with a smooth animation
- Drag handle — drag and drop lines within or across sections (e.g., move a line from Subjective to Objective)
- Line dictation mic — dictate directly into any line (see Line Dictation)
- Edit button — toggle full-section editing mode for bulk changes
Click on any line’s text to edit it directly. All edits are saved to the active session automatically.
Note Line Editing Toggle
All inline editing controls — move up/down, add line, delete line, drag reorder, and line dictation mic — are bundled under a single Note Line Editing toggle in Settings → Advanced → Notes. This toggle is on by default. Turning it off hides all line-level controls for a cleaner read-only view of your notes.
Line Dictation
Dictate directly into any line of the generated note using Deepgram’s real-time streaming. This is enabled by default and can be toggled in Settings → Note Output → Line Dictation.
How to use
- Click the microphone icon on any line to start dictating
- Click anywhere in a line to position where text will be inserted
- While dictating, click a different position or line to move the insertion point on the fly
- Highlight a word or phrase, then speak to replace the selection
- Click the microphone icon again to stop
Spoken punctuation
Say punctuation names out loud and they’ll be converted to symbols:
- “period” →
. “comma” → , “question mark” → ?
- “colon” →
: “semicolon” → ; “hyphen” → -
- “open parenthesis” / “close parenthesis” →
( )
Text is lowercase by default and auto-capitalized at the start of sentences. The same medical dictionary used during transcription is applied for accurate clinical terminology.
Note: Line dictation requires an active recording to be stopped first — it cannot run simultaneously with a patient recording session.
Dictionary-Powered Features
ClinicalFlow includes a suite of dictionary-driven tools that enrich your generated notes with contextual information. All dictionary features are individually toggleable in Settings → Advanced → Notes.
Abbreviation Expansion Tooltips
Hover over abbreviated medical terms in a generated note to see their full expansion in a tooltip. Common abbreviations like “BID,” “PRN,” “HTN,” and “BMP” are recognized and explained on hover.
Medication Cross-Reference Tooltips
Hover over a medication name to see a tooltip with generic/brand name mapping, drug class, and related information. Works for both brand and generic names.
Scoring System Quick-Reference Tooltips
When clinical scoring systems appear in notes (e.g., PHQ-9, GAD-7, NIHSS, GCS), hover over the reference to see a quick-reference tooltip with score ranges and interpretation.
Dental Tooth Number Labels
In dental notes, tooth number references like “#14” or “#30” display blue badge tooltips showing the tooth name and location (e.g., “#14 — Upper Left First Premolar”).
Quick-Insert Phrase Palette (Ctrl+J)
Press Ctrl+J while editing a note to open a template-aware phrase palette. The palette presents commonly used phrases appropriate for the current note template — for example, SOAP-specific phrases when editing a SOAP note, or dental-specific phrases when working with a dental template. Click a phrase to insert it at the cursor position.
Note Autocomplete
While editing a note line, type 3 or more characters to trigger medical term suggestions. An autocomplete dropdown appears with matching terms from the medical dictionary. Select a suggestion to insert the complete term.
Enhanced ASR Corrections
The automatic speech recognition post-processor now includes 325+ correction patterns (up from 204), providing broader coverage of misrecognized drug names, conditions, procedures, and medical terminology across 6 languages.
PDF Export
Press E or click the Export PDF button. ClinicalFlow uses the headless_chrome Rust crate (Chromium DevTools Protocol) to generate a professional PDF with header, formatted sections, disclaimer footer, and optional dental chart.
PDFs are saved to the app’s exports directory with the filename ClinicalFlow_Note_YYYY-MM-DD_HH-MM.pdf.
Text Export
Press T to download the transcript as a plain text file. A native save dialog lets you choose the location. The default filename is ClinicalFlow_Transcript_YYYY-MM-DD.txt.
Copy to Clipboard
Click the Copy button in the note panel header to copy the entire note as plain text. Paste it directly into your EHR (Epic, Cerner, Athena, or any system that accepts text input).
Export Actions
ClinicalFlow provides configurable export actions that appear in the note panel toolbar after note generation. You can enable or disable individual actions to streamline your workflow.
Available Actions
| Action | Description | Default |
| Export PDF | Generate a formatted PDF with header, note sections, dental chart, and disclaimer | Always visible |
| Copy to Clipboard | Copy the entire note as plain text for pasting into an EHR | Always visible |
| Download Transcript | Save the raw transcript as a .txt file | Always visible |
| Copy for EHR | Copy the note formatted for EHR paste (keyboard shortcut H) | Off |
| Export HL7 | Export an HL7 v2 message for EHR integration (keyboard shortcut L) | Off |
| Insurance Narrative | Create an insurance-ready narrative from the note and coding data (dental only) | Off |
| Sync to PMS | Push findings and codes to a connected Practice Management System | Off |
PDF, Copy, and Download Transcript are always visible. The remaining actions (Copy for EHR, Export HL7, Insurance Narrative, Sync to PMS) are toggleable in Settings → Advanced → Export Actions, and hidden from the toolbar when disabled.
Session Archiving
When you click New Session (or press N), ClinicalFlow archives the current encounter. The archive includes the full transcript, generated note, audio recording, dental chart data, coding results, and all session metadata.
Archives are named YYYY-MM-DD_HH-MM_PatientName, encrypted with AES-256-GCM, and sorted newest-first in the archive browser. Audio is stored as a separate unencrypted WAV file.
The Past Sessions archive browser is accessible from the sidebar. It displays all archived encounters with date, patient name, and template used. Click any session to restore its transcript, note, dental chart, and coding data.
EHR Integration
ClinicalFlow can export clinical notes to Electronic Health Record systems using the HL7 v2 messaging standard. This allows direct transmission of generated notes into your EHR without manual copy-paste.
Setup
Configure EHR integration in Settings → Advanced → EHR Integration:
| Field | Description |
| Facility Name | Your practice or facility name (included in HL7 MSH segment) |
| Facility ID | Your facility’s OID or identifier for HL7 routing |
| Default Patient MRN | Default Medical Record Number for outgoing messages (can be overridden per session) |
How It Works
- After note generation, click Send to EHR in the export toolbar
- ClinicalFlow packages the note into an HL7 v2 ORU^R01 message
- The message includes patient identifiers, note sections, coding data, and dental findings
- The HL7 message is sent to the configured endpoint
Compatibility: HL7 v2 is supported by most EHR systems including Epic, Cerner, Athena, eClinicalWorks, and NextGen. Contact your EHR vendor for interface setup requirements.
PMS Bridge
The Practice Management System (PMS) Bridge connects ClinicalFlow to your dental or medical practice management software for bidirectional data exchange.
Supported Systems
| System | Protocol | Data Exchanged |
| Dentrix | Database bridge | Patient demographics, treatment plans, billing codes |
| Eaglesoft | Database bridge | Patient demographics, treatment plans, billing codes |
| Open Dental | Database bridge | Patient demographics, treatment plans, billing codes |
| Custom / Other | Configurable | Depends on system capabilities |
Configuration
Configure PMS Bridge in Settings → Advanced → PMS Bridge:
| Field | Description |
| PMS System | Select your practice management software from the dropdown |
| Host | Database server hostname or IP (e.g., localhost) |
| Port | Database port number |
| Database | Database name |
| Username / Password | Database credentials (encrypted at rest) |
Use the Test Connection button to verify connectivity before saving. A successful test confirms ClinicalFlow can reach the PMS database.
Network: The PMS Bridge connects over your local network. Ensure the PMS database is accessible from the machine running ClinicalFlow. No data is sent to external servers.
Insurance Narrative Generation
ClinicalFlow can generate insurance-ready narratives from the clinical note and billing codes. These narratives are formatted for insurance claim submissions and pre-authorization requests.
What the Narrative Includes
- Clinical justification — summarizes the patient’s condition and why the treatment is medically/dentally necessary
- Supporting documentation — references specific findings from the examination
- Procedure rationale — links each procedure code to the clinical indication
- Diagnosis correlation — maps ICD-10 or dental ICD-10 codes to the documented findings
Generating a Narrative
After note generation with coding enabled, click Generate Narrative in the export toolbar. The AI processes the note content, billing codes, and dental chart data to produce a cohesive narrative. The narrative can be copied to clipboard or exported as part of the PDF.
Tip: Insurance narratives work best when the clinical note is thorough. Enable the verification pass to ensure completeness before generating the narrative.
General & Advanced Tabs
The Settings drawer is organized into two tabs accessible via a segmented control at the top:
| Tab | Contains | Purpose |
| General | Account, Appearance, AI & Transcription | Essentials you may adjust frequently |
| Advanced | Notes, Recording, Export Actions, Dental, EHR Integration, PMS Bridge, Language, Security | Detailed note editing controls, dictionary-powered features, recording behavior, integrations, and system settings |
Click a tab to switch views. Your selected tab is remembered for the duration of the session.
Appearance
| Setting | Options | Description |
| Theme | Dark / Light | Switches the entire app between dark and light color schemes. Dark is the default. |
Transcription Settings
| Setting | Options | Description |
| Mode | Online / Offline | Online: Deepgram cloud streaming with speaker diarization. Offline: local Whisper, no internet. |
| Deepgram API Key | Text input (masked) | Your Deepgram API key. Encrypted at rest. Shown when Online mode selected. |
| Recognition Language | 37 languages | Primary language for speech recognition. Applies to both modes. |
AI Engine Settings
| Setting | Options | Description |
| Engine | Cloud AI / Ollama / Rule-Based | Which system generates clinical notes. |
| Anthropic API Key | Text input (masked) | Required for Cloud AI. Encrypted at rest. |
| Ollama Server URL | Text input | Default: http://localhost:11434 |
| Ollama Model | Dropdown + Refresh | Default: llama3.1:8b. Click Refresh to load available models. |
| Verification Pass | On / Off | Runs a second AI pass to audit the note. Doubles generation time. |
| Auto Coding | On / Off | Automatically generate billing codes after note generation. |
Notes Settings
Found in Settings → Advanced tab → Notes card.
| Setting | Default | Description |
| Auto-suggest codes | On | Automatically suggest ICD-10, CPT, and CDT billing codes after note generation. |
| Note line editing | On | Enables all inline note controls: move up/down, add line, delete line, drag reorder, and line dictation mic. Turn off for a cleaner read-only view. |
| Dictionary features | Off | Abbreviation tooltips, medication info, phrase palette, and autocomplete. |
Recording Settings
Found in Settings → Advanced tab → Recording card.
| Setting | Default | Description |
| Auto-scroll transcript | On | Automatically scrolls to the latest transcript entry. |
| Show timestamps | On | Displays MM:SS markers on each transcript entry. |
| Auto-detect speakers | On | Automatically switches speakers based on diarization or silence. |
| Highlight medical terms | Off | Color-codes 1,300+ recognized conditions, medications, procedures, and anatomy terms. |
Quick-access toggles: Auto-scroll, Timestamps, Auto-detect speakers, and Highlight terms are also available as quick-access toggles in the sidebar for fast adjustment during a session.
Dental Settings
Found in Settings → Advanced tab → Dental card.
| Setting | Default | Description |
| Dental chart in export | On | Include the dental chart SVG in PDF and text exports. |
| Dental findings in export | On | Include the dental findings table in PDF and text exports. |
| Documentation completeness | Off | Show scoring checklist after note generation (showDocScore). |
EHR Integration Settings
Found in Settings → Advanced tab → EHR Integration card.
| Setting | Type | Description |
| Facility Name | Text input | Your practice or facility name for HL7 message headers. |
| Facility ID | Text input | OID or identifier used for HL7 routing. |
| Default Patient MRN | Text input | Default Medical Record Number. Can be overridden per session. |
PMS Bridge Settings
Found in Settings → Advanced tab → PMS Bridge card.
| Setting | Type | Description |
| PMS System | Dropdown | Select: Dentrix, Eaglesoft, Open Dental, or Custom. |
| Host | Text input | Database server hostname or IP address. |
| Port | Number input | Database port number. |
| Database | Text input | Database name on the server. |
| Username | Text input | Database login username. |
| Password | Text input (masked) | Database login password. Encrypted at rest. |
| Test Connection | Button | Verifies connectivity to the PMS database. |
Language Settings
Found in Settings → Advanced tab → Language card.
| Setting | Options | Description |
| Recognition Language | 37 languages | Sets the primary language for speech recognition, medical term corrections, note generation, and UI labels. Applies to both online and offline transcription modes. |
Security Settings
| Setting | Options | Description |
| Auto-lock | 2 / 5 / 10 / 15 / 30 min / Never | Locks after inactivity. Default: 5 minutes. When page is hidden: 60 seconds. Deferred during active recording. |
PIN Reset: There is no PIN change feature. To change your PIN, you must use “Reset PIN” which permanently destroys all data (config, sessions, archives, auth) and starts fresh.
Keyboard Shortcuts
| Shortcut | Action | Context |
| Space | Start / Stop recording | Not in input/textarea |
| P | Pause / Resume recording | While recording |
| G | Generate clinical note | When idle, entries exist |
| E | Export note as PDF | When note generated |
| N | New session | Always (confirm if data exists) |
| T | Download transcript | When entries exist |
| H | Copy note for EHR | When note generated |
| L | Export HL7 message | When note generated |
| Cmd/Ctrl+R | Toggle recording | Always |
| Cmd/Ctrl+F | Search transcript | Always |
| Cmd/Ctrl+, | Open Settings | Always |
| Escape | Close all modals | Always |
Encryption at Rest
ClinicalFlow encrypts all files containing protected health information using AES-256-GCM with keys derived from your PIN via PBKDF2-HMAC-SHA256 (100,000 iterations).
What Is Encrypted
| File | Contains | Encrypted? |
config.json | API keys, settings, preferences | ✓ Yes |
sessions/active.json | Current transcript, note, dental chart, coding | ✓ Yes |
sessions/archive/*.json | Past encounter data | ✓ Yes |
auth.json | PIN hash (Argon2id), welcome flag | ✗ No (needed before decryption) |
sessions/archive/*.wav | Audio recordings | ✗ No (binary audio) |
exports/* | PDFs and text files | ✗ No (user-exported) |
logs/*.log | Operational logs | ✗ No (sanitized, no PHI) |
Each encrypted file has a unique random salt (16 bytes) and nonce (12 bytes) prepended to the ciphertext. Total overhead: 28 bytes per file. Writes are atomic (write to .tmp, then rename) to prevent corruption.
PIN & Lock Screen
The PIN serves two purposes: authentication (proving you’re authorized) and key derivation (your PIN is the cryptographic key that unlocks encrypted files).
- PIN is verified using Argon2id hashing (memory-hard, resistant to brute force)
- Only the hash is stored (in
auth.json), never the PIN itself
- PIN length: 4–8 numeric digits
- No lockout after failed attempts — the encryption itself is the protection
- Auto-lock default: 5 minutes of inactivity (60 seconds when page is hidden)
- Auto-lock is deferred during active recording to prevent data loss
Network Requests
| Destination | Data Sent | When | Encryption |
wss://api.deepgram.com | Audio stream (16-bit PCM, 16 kHz) | During online recording | WSS (TLS 1.2+) |
https://api.anthropic.com | Transcript text + clinical prompt | During Cloud AI note generation | HTTPS (TLS 1.2+) |
http://localhost:11434 | Transcript text + prompt | During Ollama note generation | None (localhost only) |
https://*.supabase.co | Auth tokens, license checks | Subscription verification | HTTPS (TLS 1.2+) |
Full offline mode: When both transcription (Whisper) and note generation (Ollama or Rule-Based) are set to local, ClinicalFlow makes zero outbound network connections (except periodic subscription verification if applicable).
HIPAA Considerations
ClinicalFlow implements HIPAA technical safeguards: encryption at rest (AES-256-GCM), unique user authentication (PIN), automatic logoff (auto-lock), audit logging (sanitized, no PHI), transmission security (TLS for all network requests), Content Security Policy headers, and localhost-only Whisper binding.
For full HIPAA compliance, your organization also needs Business Associate Agreements (BAAs) with Deepgram and Anthropic if using online features, plus organizational policies covering training, incident response, and access management.
ClinicalFlow is not a covered entity. It is a tool. HIPAA compliance is a shared responsibility between the software (technical safeguards), the API providers (BAAs), and your organization (policies and procedures).
Data Handling Summary
| Question | Answer |
| Where is data stored? | Locally at ~/Library/Application Support/com.clinicalflow.ai/ |
| Is data encrypted? | Yes. AES-256-GCM with PIN-derived keys (config, sessions, archives). |
| What data leaves my device? | Only when using online features: audio to Deepgram, transcript to Anthropic, auth tokens to Supabase. |
| Can ClinicalFlow see my data? | No. There are no ClinicalFlow analytics or telemetry servers. |
| How do I delete my data? | New Session clears active data. Delete individual archives. Or uninstall to remove everything. |
| What if I lose my PIN? | Encrypted data is unrecoverable. Reset PIN destroys all data. |
Plans & Billing
ClinicalFlow uses Supabase for authentication and Stripe for payment processing.
| Detail | Value |
| Free trial | 14 days with full access |
| Pro Monthly | $25/month |
| Pro Annual | $250/year (saves $50) |
| Default seats | 3 per checkout |
| Offline grace period | 30 days — if network verification fails but was verified within 30 days, cached status is trusted |
| Verification interval | Every 7 days maximum |
Subscription States
| State | App Access |
trial | Full access, shows days remaining |
active | Full access |
past_due | Full access with payment warning |
expired | Locked — shows upgrade options |
Manage your subscription through the in-app billing portal, which opens Stripe’s management interface.
Note: Subscription costs are separate from API costs. You pay Deepgram and Anthropic directly through your own API keys for transcription and AI note generation.
Microphone Issues
“No microphone found”
Ensure a microphone is connected. Check System Settings → Sound to confirm it’s recognized. Try unplugging and replugging USB microphones.
“Microphone access denied”
macOS: System Settings → Privacy & Security → Microphone → enable ClinicalFlow.
Transcription Issues
Poor transcription accuracy
- Use an external USB microphone instead of built-in laptop mic
- Reduce ambient noise (fans, HVAC, other conversations)
- Speak clearly and at a normal pace
- Check that the correct language is selected in Settings
Deepgram connection failed
- Verify your API key in Settings
- Check your internet connection
- Check status.deepgram.com for outages
- Switch to offline mode as a workaround
Ollama Issues
“Ollama not connected”
- Make sure Ollama is running:
ollama list in Terminal
- If not installed, download from ollama.com
- Check the server URL in Settings (default:
http://localhost:11434)
Out of memory
Switch to a smaller model (e.g., llama3.1:8b instead of llama3.1:70b) or use Cloud AI.
Note Generation Issues
Note seems incomplete or inaccurate
- Ensure the transcript is complete before generating
- Enable the verification pass to catch omissions
- Check that speakers are correctly labeled
- Try a different template that better matches the encounter type
Cancel a stuck generation
The Generate button becomes a Cancel button during generation. Click it to abort. ClinicalFlow uses an AbortController to cleanly cancel API calls. Timeout is 120 seconds.
Export Issues
PDF export shows blank page
Try exporting again. If the issue persists, use Copy to Clipboard as an alternative.
Save dialog doesn’t appear
Check that ClinicalFlow has file access permissions in System Settings → Privacy & Security → Files and Folders.
Crashes & Recovery
App crashed during recording
Your audio is safe. ClinicalFlow writes to disk every ~10 seconds. On restart, the session is recovered automatically.
App crashed during note generation
The transcript is preserved. Regenerate the note from the saved transcript after restart.
Low memory warning
ClinicalFlow monitors available system memory. Warnings appear at <2 GB free. Close other applications or switch to a smaller model.
Log Files
ClinicalFlow writes structured logs for debugging. Logs never contain patient data.
File Locations
| Content | Path |
| Logs | ~/Library/Application Support/com.clinicalflow.ai/logs/ |
| All data | ~/Library/Application Support/com.clinicalflow.ai/ |
Log files are named clinicalflow-YYYY-MM-DD.log, rotated daily, and auto-cleaned after 30 days.
System Architecture
ClinicalFlow is a desktop application built with Tauri v2. The frontend is vanilla HTML/CSS/JavaScript (21 modules) running in a native webview. The backend is Rust (9 modules), handling audio capture, file encryption, PDF export, PMS integration, and system integration. No JavaScript frameworks are used.
Component Overview
┌─────────────────────────────────────────────────────┐
│ Tauri Webview │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────┐ │
│ │ Transcript │ │ Note Panel │ │ Sidebar │ │
│ │ Panel │ │ (editable) │ │ │ │
│ │ │ │ │ │ Speakers │ │
│ │ Real-time │ │ 22 templates │ │ Templates │ │
│ │ entries │ │ Dental chart │ │ Settings │ │
│ │ 1,300+ terms │ │ Coding panel │ │ Archive │ │
│ └──────────────┘ └──────────────┘ └───────────┘ │
│ │
│ 21 JS modules — UI, prompts, templates, dental, │
│ notes, coding, subscription, audio, settings │
└─────────────────────┬───────────────────────────────┘
│ invoke() / listen()
│ (26 Tauri IPC commands)
┌─────────────────────┴───────────────────────────────┐
│ Rust Backend │
│ │
│ audio.rs — cpal capture, whisper-server, │
│ hallucination filter, vocab prompt │
│ storage.rs — Encrypted sessions, config, │
│ archives, logging │
│ pdf.rs — PDF export (headless_chrome) │
│ pms.rs — PMS Bridge (Dentrix/Eaglesoft/OD) │
│ crypto.rs — AES-256-GCM, PBKDF2 key derivation │
│ auth.rs — Argon2id PIN, auto-lock, AppState │
│ license.rs — License validation, subscription │
│ logging.rs — Tracing, daily rotation │
│ lib.rs — App setup, command registration │
└─────────────────────┬───────────────────────────────┘
│
┌───────────┼───────────┐
▼ ▼ ▼
┌──────────────┐ ┌───────────────┐ ┌──────────────────┐
│whisper-server│ │headless_chrome│ │ Local Storage │
│ (3.44 GB) │ │ Rust crate │ │ │
│ │ │ Chromium │ │ auth.json │
│ ggml-small │ │ DevTools │ │ config.json 🔒 │
│ 574 MB model │ │ Protocol │ │ active.json 🔒 │
│ HTTP sidecar │ │ PDF gen │ │ archive/*.json🔒 │
│ 127.0.0.1 │ │ │ │ archive/*.wav │
└──────────────┘ └───────────────┘ │ logs/*.log │
└──────────────────┘
External Services (online mode only):
┌───────────────┐ ┌───────────────┐ ┌──────────────┐
│ Deepgram API │ │ Anthropic API │ │ Supabase │
│ WSS streaming │ │ HTTPS (Claude)│ │ Auth + Stripe│
└───────────────┘ └───────────────┘ └──────────────┘
┌───────────────┐
│ Ollama │
│ localhost │
│ :11434 │
└───────────────┘
🔒 = AES-256-GCM encrypted with PIN-derived key
Data Formats
File Storage Structure
~/Library/Application Support/com.clinicalflow.ai/
├── auth.json PIN hash + welcome flag
├── config.json [ENCRYPTED] Settings & API keys
├── sessions/
│ ├── active.json [ENCRYPTED] Current session
│ └── archive/
│ ├── 2026-02-23_18-45_PatientName.json [ENCRYPTED]
│ └── 2026-02-23_18-45_PatientName.wav Audio recording
├── exports/
│ ├── ClinicalFlow_Note_2026-02-23.pdf
│ └── ClinicalFlow_Transcript_2026-02-23.txt
└── logs/
└── clinicalflow-2026-02-23.log
All session data is stored as JSON files (no database). Sessions include entries, speakers, note sections, dental chart state, and coding results.
How ClinicalFlow Compares
An honest comparison of where ClinicalFlow fits relative to other AI clinical documentation tools.
ClinicalFlow’s Strengths
- Offline mode. Most AI scribes are cloud-only. ClinicalFlow runs with zero internet.
- 22 specialty templates + dental & perio charting. Covers general, behavioral health, 10 specialties, 2 radiology templates, 5 dental templates, full periodontal charting, and custom templates.
- Automatic billing codes with audit flags. ICD-10, CPT, E&M, and CDT coding with audit flags and clinical warnings.
- EHR & PMS integrations. HL7 v2 export to EHR systems, PMS Bridge for Dentrix/Eaglesoft/Open Dental, and insurance narrative generation.
- Transparent pricing. $25/month with 14-day free trial. Cloud API costs separate and pay-as-you-go.
- Data stays local. In offline mode, nothing leaves your machine. No ClinicalFlow servers.
- Open architecture. Bring your own API keys, choose your AI models.
- Encryption at rest. PIN-based AES-256 encryption is not standard in most scribe tools.
Where Others May Have an Advantage
- Deep EHR integration. Products like Nuance DAX, Abridge, and Suki offer embedded EHR integration. ClinicalFlow supports HL7 v2 export but does not embed directly inside EHR interfaces.
- Ambient listening. Some products run continuously without pressing a button. ClinicalFlow requires explicit start/stop.
- Multi-user and team features. Enterprise products offer multi-provider support, shared templates, and admin dashboards. ClinicalFlow is single-user.
- Mobile apps. Some competitors have iOS/Android apps. ClinicalFlow is a desktop application (macOS and Windows).
- Cross-platform. ClinicalFlow runs on macOS (Apple Silicon) and Windows. Linux is planned.
Summary Table
| Feature | ClinicalFlow | Typical Cloud Scribe |
| Offline mode | ✓ Full offline available | ✗ Cloud-only |
| Note templates | 22 built-in + custom | Varies |
| Dental charting | ✓ Interactive 32+20 teeth | ✗ Rarely available |
| Periodontal charting | ✓ 6-point probing, voice entry | ✗ Not available |
| Billing codes | ✓ ICD-10, CPT, E&M, CDT | Varies |
| Audit flags | ✓ Coding audit + clinical warnings | Varies |
| Monthly cost | $25/mo + API usage | $100–$400/month |
| Data residency | Local device | Vendor’s cloud |
| Encryption at rest | ✓ AES-256-GCM | Varies |
| EHR integration | ✓ HL7 v2 export, copy/paste, PDF | Direct Epic/Cerner |
| PMS Bridge | ✓ Dentrix, Eaglesoft, Open Dental | Varies |
| Insurance narrative | ✓ AI-generated | ✗ Rarely available |
| Mobile app | ✗ Desktop only (macOS + Windows) | Often ✓ |
| Languages | 37 | Varies (often fewer) |
ClinicalFlow is best for: Independent practitioners, small practices, dental offices, rural clinics, international settings without reliable internet, and any provider who wants control over their data and costs.
Version History
v1.0.0 — Initial Release
February 2026
- Dual-mode transcription: Deepgram Nova-3 Medical (online) and Whisper large-v3-turbo (offline, Metal GPU-accelerated, 574 MB)
- AI note generation: Claude Haiku 4.5 (cloud), Ollama (local), and rule-based fallback
- 22 built-in note templates across 6 categories (General, Behavioral Health, Specialty, Radiology, Dental, Preventive) plus custom templates
- Two-pass verification system for hallucination, contradiction, and omission detection
- Interactive dental chart: 32-tooth adult + 20-tooth primary, 8 states, 5-surface marking
- Periodontal charting: 6-point probing depths, BOP, recession, mobility, furcation, voice-driven entry
- Documentation completeness scoring for perio charting sessions
- Medical coding: ICD-10 (up to 8), CPT (up to 4), E&M level assessment
- Dental coding: CDT D-codes + dental ICD-10 with 4 guardrails
- Audit flags and clinical warnings for coding review
- Multi-speaker management with 3 roles (Physician, Patient, Other) and 1.5s silence detection
- Medical term post-processor with 325+ correction patterns across 6 languages
- Whisper hallucination filtering and medical vocabulary conditioning (55+ terms)
- PIN-based authentication with AES-256-GCM encryption at rest (PBKDF2 100k iterations, Argon2id)
- Auto-lock after configurable inactivity (default: 5 minutes)
- EHR integration via HL7 v2 export
- PMS Bridge for Dentrix, Eaglesoft, and Open Dental
- Insurance narrative generation from notes and billing codes
- PDF export (headless_chrome Rust crate, Chromium DevTools Protocol), text export, clipboard copy, configurable export actions
- Session archiving with transcript, note, audio, dental chart, and coding data
- Continuous WAV save (~10s intervals) for crash recovery
- Structured logging with PHI sanitization (30-day retention)
- Settings drawer with General/Advanced tabs — General: Account, Appearance, AI & Transcription; Advanced: Notes, Recording, Export Actions, Dental, EHR Integration, PMS Bridge, Language, Security
- Dark and light themes
- 37-language support (full pipeline: transcription + corrections + notes + UI)
- 1,300+ medical term highlighting in transcript
- Welcome wizard (5-screen setup) and 4 demo scenarios (medical, dental, radiology, behavioral health)
- Dictionary-powered features: abbreviation tooltips, medication cross-reference, scoring quick-reference, dental tooth labels, quick-insert palette (Ctrl+J), note autocomplete
- Note line editing toggle (Settings → Advanced → Notes) combining move, add, delete, drag, and dictation controls
- Subscription/licensing via Supabase + Stripe (14-day trial)
- 12 keyboard shortcuts
- Built with Tauri v2 for macOS (Apple Silicon) and Windows