How Bristlenose works
A folder of interview recordings in. A report you edit, share and keep as a file out.
Interview folder
audio · video
transcripts · docx
Cloud LLM
Claude · ChatGPT · Azure OpenAI · Gemini
local Ollama is the supported minority option
1 · Read
ingest
extract audio
parse subtitles
parse docx
FFmpeg
2 · Transcribe & clean
transcribe
identify speakers
merge transcript
PII removal
on your machine
3 · Understand
topic segmentation
quote extraction
quote clustering
thematic grouping
LLM calls
4 · Render
report data
output files
one report file
Output folder · SQLite
transcripts · quotes JSON · manifest · event log
researcher edits live in the per-project database
bristlenose serve
FastAPI · 127.0.0.1 only · bearer token
Browser tab
React report (the product UI)
Mac app
SwiftUI shell + WKWebView
runs serve as a bundled sidecar
Your own agent
read-only MCP endpoint
scoped token, one project
HTML export
one file you own, opens offline
drops into Drive or SharePoint
1. A folder goes in: audio, video, subtitles or existing transcripts.
2. Words are transcribed on your machine and personal details redacted.
3. Quotes, themes and sentiment come from one outbound call to your chosen model.
4. Everything lands as files in a folder you own, plus a database for your edits.
5. Serve mode turns that folder into the interactive report.
6. Read it, ask it, or carry it away: the same code runs on the CLI and in the Mac app.
Same code everywhere: the CLI and the Mac app run the same Python; only packaging differs.
Cloud call: the analysis stages are the only outbound LLM traffic.
Screens never leave the machine unless you choose to export them.
Detail for every box: ARCHITECTURE.md .