Skip to content

sangmin7648/tacit

Repository files navigation

tacit

Harness your tacit knowledge into AI agent context — on-device, always-on transcription.

macOS Go License: MIT Latest Release

curl -fsSL https://raw.githubusercontent.com/sangmin7648/tacit/main/install.sh | sh
tacit setup
tacit listen   # start capturing

Spoken ideas disappear. tacit transcribes them on-device, classifies them with Ollama, and surfaces them as live context in any AI conversation — automatically.


How it works

speak → capture → VAD → STT → classify → store → retrieve
  1. Capture — Records microphone and system audio simultaneously in real time
  2. Process — Voice Activity Detection filters silence; Whisper transcribes speech on-device
  3. Classify — Ollama extracts title, category, keywords, and summary from the transcript
  4. Store — Saves a structured Markdown entry to ~/.tacit/memory/<category>/
  5. Retrieve/tacit.knowledge searches your knowledge base from inside any Claude conversation

Features

  • 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

Use with AI

After tacit setup, two skills are available inside Claude Code conversations:

/tacit.knowledge — search your spoken history

/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 — save the current conversation

/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.


Configuration

~/.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.

Architecture

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/]
Loading

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.


Requirements


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/tacit

If ~/.local/bin is not in your PATH:

export PATH="$HOME/.local/bin:$PATH"

Run the end-to-end test to verify the full pipeline:

make e2e-test
Contributing

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 pipeline

Note: Do not run go build ./... directly — pkg/stt uses CGo against whisper.cpp and requires make build to compile first.