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.