Quek Kar Min140 downloadsScuttlebutt - Record or import meeting audio in the sidebar, transcribe it with your local Whisper/vLLM server, then auto-summarize it into a tidy, tagged note. Fully local and private.
Scuttlebutt (n.): the ship's gossip — the talk, the news, what everyone's discussing.
A local-first meeting companion that lives in your Obsidian sidebar, inspired by anarlog. Record (or import) a meeting, transcribe it against your local Whisper/vLLM server, auto-summarize it with your local LLM, review the Summary / Transcript / Memo side-by-side, then save one tidy note with a clean title and tags.
Local-first: everything runs against endpoints you configure. No cloud, no accounts.
On old sailing ships, the scuttlebutt was the cask of drinking water the crew gathered around — a scuttle (a hole cut in something) tapped into a butt (a large barrel). It was the ship's water cooler, and because sailors swapped news and gossip while drinking there, "scuttlebutt" came to mean the talk, the rumors, the news — what everyone's discussing.
That's exactly what this plugin captures: the scuttlebutt of your meetings, turned into notes you can keep.
record | import → transcribe → summarize (+ title + tags) → review in sidebar → save note
whisper.cpp server, etc.). Re-transcribe from the Transcript tab any time.title, date, tags, participants, audio), the summary, and the transcript/memo tucked into collapsible callouts.Product, Engineering, Research, Design, …).YYYY-MM-DD — Topic Title.md, so notes sort chronologically and read cleanly.npm install
npm run build # or: node esbuild.js --watch (watch mode)
bash install.sh ~/path/to/your/vault
Then enable it in Settings → Community plugins → Scuttlebutt, and click the mic ribbon icon to open the sidebar.
Open Settings → Scuttlebutt. There are two endpoints; each has a URL, API key, Test, and Model dropdown. Click Test to validate the endpoint and load its model list — on success the dropdown fills in, on failure it blanks out.
http://localhost:8000/v1http://localhost:8001/v1Other options: input device (see below), spoken/summary language, auto-summarize, title & tag suggestion, output folders, save-audio, and the summary system prompt (with a reset-to-default button).
npm run build # bundle the plugin to ./main.js
npm test # run the unit tests (Node's built-in test runner)
The pure logic (file naming, tag/transcript parsing, multipart encoding, …) lives in src/utils.ts and is covered by tests/utils.test.ts. Obsidian- and DOM-dependent code lives in src/main.ts.
Releases are built and published by GitHub Actions (.github/workflows/release.yml). To cut one:
Bump the version in manifest.json, package.json, and versions.json, and add a CHANGELOG.md entry.
Commit, then tag with the exact version (no v prefix) and push the tag:
git tag 1.0.5 && git push origin 1.0.5
CI verifies the tag matches manifest.json, runs the tests, builds, attests the assets, and publishes the release with main.js, manifest.json, and styles.css attached individually.
Scuttlebutt runs as an Obsidian plugin (JavaScript in Electron), so it's limited to the browser's getUserMedia / getDisplayMedia APIs. On macOS those cannot capture system audio the way a native app (like anarlog, which uses Core Audio process taps) can. To record the other side of a call on macOS, install a loopback device such as BlackHole, create an Aggregate Device that includes it, and select that device under Settings → Capture → Input device. When "Capture system audio" yields no track, Scuttlebutt tells you and continues with the microphone.
Scuttlebutt keeps your data on your machine and your own servers. Specifically:
Release assets (main.js, manifest.json, styles.css) are built in GitHub Actions with build provenance attestations, so you can cryptographically verify they were built from this repository:
gh attestation verify main.js --repo qkm2000/Scuttlebutt
requestUrl, which avoids browser CORS restrictions when calling local servers.MIT © Kar Min