Harness your tacit knowledge into AI agent context — on-device, always-on transcription.
curl -fsSL https://raw.githubusercontent.com/sangmin7648/tacit/main/install.sh | sh
tacit setup
tacit listen # start capturingSpoken ideas disappear. tacit transcribes them on-device, classifies them with Ollama, and surfaces them as live context in any AI conversation — automatically.
speak → capture → VAD → STT → classify → store → retrieve
- Capture — Records microphone and system audio simultaneously in real time
- Process — Voice Activity Detection filters silence; Whisper transcribes speech on-device
- Classify — Ollama extracts title, category, keywords, and summary from the transcript
- Store — Saves a structured Markdown entry to
~/.tacit/memory/<category>/ - Retrieve —
/tacit.knowledgesearches your knowledge base from inside any Claude conversation
- Fully automatic — speak naturally; tacit handles transcription, classification, and storage without any manual steps
- On-device STT — powered by whisper.cpp; no audio ever leaves your machine
- Dual audio sources — captures microphone and system audio simultaneously
- Language-agnostic — Whisper auto-detects language; works with Korean, English, or mixed conversation
- AI-native retrieval — first-class Claude Code CLI skill integration for in-conversation search
After tacit setup, two skills are available inside Claude Code conversations:
/tacit.knowledge summarize the search ranking discussion from earlier
/tacit.knowledge find the API design we talked about last week
/tacit.knowledge any ideas about the onboarding flow from last month?
/tacit.memorize
/tacit.memorize skill development # optional hint guides categorization
Analyzes the current Claude conversation thread and saves it as a structured knowledge entry — automatically available to future /tacit.knowledge queries.
~/.tacit/config.yaml — all fields are optional.
| Field | Type | Default | Description |
|---|---|---|---|
whisper_model |
string | base |
Whisper model size: tiny, base, small, medium, large. Larger = more accurate, slower. |
min_speech_duration |
duration | 8s |
Minimum segment length to process. Shorter segments are skipped. |
silence_duration |
duration | 1500ms |
Duration of silence required to end a speech segment. |
speech_threshold |
float | 0.5 |
VAD confidence threshold (0–1). Higher = more conservative. |
energy_threshold |
int | 200 |
Audio energy gate. Frames below this value are rejected before VAD. |
graph LR
MIC[Microphone\n16kHz mono] --> CAP[Capture\nmalgo]
SYS[System Audio\nScreenCaptureKit] --> CAP
CAP --> VAD[VAD\nten-vad / Silero]
VAD --> BUF[Segment Buffer]
BUF --> STT[STT\nwhisper.cpp]
STT --> CLS[Classify\nOllama]
CLS --> KB[Knowledge Base\n~/.tacit/memory/]
Storage format — each entry is a plain Markdown file:
---
title: "Search ranking discussion"
category: "dev"
created_at: "2026-04-14T15:30:45+09:00"
keywords: ["search", "ranking", "BM25", "lexical", "recall"]
---
One-sentence AI-generated summary.
---
Raw transcribed text from speech.Entries are stored under ~/.tacit/memory/<category>/YYYYMMDD-HHMMSS.md — plain files, no proprietary database, fully editable.
- macOS (Apple Silicon)
- Claude Code CLI
Build from source
Requirements: Go 1.23+, CMake, macOS
git clone --recursive https://github.com/sangmin7648/tacit.git
cd tacit
make build
make install # installs to ~/.local/bin/tacitIf
~/.local/binis not in yourPATH:export PATH="$HOME/.local/bin:$PATH"
Run the end-to-end test to verify the full pipeline:
make e2e-testContributing
Issues and pull requests are welcome. Please open an issue first for significant changes.
make test # run unit tests
make e2e-test # build + process test audio through full pipelineNote: Do not run
go build ./...directly —pkg/sttuses CGo against whisper.cpp and requiresmake buildto compile first.