Skip to content

Commit c196810

Browse files
sangmin7648claude
andcommitted
docs: overhaul README with polished structure and compelling copy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent a189f6b commit c196810

1 file changed

Lines changed: 117 additions & 55 deletions

File tree

README.md

Lines changed: 117 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,135 @@
11
# tacit
22

3-
What you say becomes AI knowledge. Captures conversations in the background, automatically organizes them so your AI can retrieve them.
3+
> Harness your tacit knowledge into AI agent context — on-device, always-on transcription.
44
5-
## Install
5+
[![macOS](https://img.shields.io/badge/platform-macOS-lightgrey?logo=apple)](https://github.com/sangmin7648/tacit/releases)
6+
[![Go](https://img.shields.io/badge/Go-1.23+-00ADD8?logo=go)](https://go.dev/)
7+
[![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
8+
[![Latest Release](https://img.shields.io/github/v/release/sangmin7648/tacit)](https://github.com/sangmin7648/tacit/releases/latest)
69

710
```bash
811
curl -fsSL https://raw.githubusercontent.com/sangmin7648/tacit/main/install.sh | sh
12+
tacit setup
13+
tacit listen # start capturing
914
```
1015

11-
## Setup
16+
---
1217

13-
```bash
14-
tacit setup
15-
```
18+
You think out loud. The most valuable insights happen in conversation, not in text editors — and most of them disappear. tacit captures what you say, transcribes it on-device with Whisper, classifies it with Claude, and stores it to `~/.tacit/`. Then `/tacit.knowledge` retrieves it directly inside any AI conversation, turning your spoken history into live agent context.
1619

17-
## Usage
20+
<!-- TODO: Add demo GIF showing tacit listen → speech → /tacit.knowledge retrieval -->
1821

19-
### Keep it running
22+
---
2023

21-
```bash
22-
tacit listen # start capturing
24+
## How it works
25+
26+
```
27+
speak → capture → VAD → STT → classify → store → retrieve
2328
```
2429

25-
Leave it on. Whenever speech is detected, it automatically transcribes → classifies → stores.
30+
1. **Capture** — Records microphone and system audio simultaneously in real time
31+
2. **Process** — Voice Activity Detection filters silence; Whisper transcribes speech on-device
32+
3. **Classify** — Claude extracts title, category, keywords, and summary from the transcript
33+
4. **Store** — Saves a structured Markdown entry to `~/.tacit/memory/<category>/`
34+
5. **Retrieve**`/tacit.knowledge` searches your knowledge base from inside any Claude conversation
35+
36+
---
37+
38+
## Features
39+
40+
- **Fully automatic** — speak naturally; tacit handles transcription, classification, and storage without any manual steps
41+
- **On-device STT** — powered by [whisper.cpp](https://github.com/ggerganov/whisper.cpp); no audio ever leaves your machine
42+
- **Dual audio sources** — captures microphone and system audio simultaneously
43+
- **Language-agnostic** — Whisper auto-detects language; works with Korean, English, or mixed conversation
44+
- **AI-native retrieval** — first-class [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) skill integration for in-conversation search
45+
46+
---
2647

2748
## Use with AI
2849

29-
After `tacit setup`, you can search your spoken conversations directly from any AI agent using the SKILL:
50+
After `tacit setup`, two skills are available inside Claude Code conversations:
51+
52+
### `/tacit.knowledge` — search your spoken history
3053

3154
```
3255
/tacit.knowledge summarize the search ranking discussion from earlier
33-
"find the API design we talked about last week"
34-
"any project-related ideas from last month?"
56+
/tacit.knowledge find the API design we talked about last week
57+
/tacit.knowledge any ideas about the onboarding flow from last month?
58+
```
59+
60+
You can also use the CLI directly:
61+
62+
```bash
63+
tacit list # list entries from the last hour
64+
tacit list 7d # list entries from the last 7 days
65+
tacit search "keyword" # full-text search across all entries
66+
tacit search --duration 24h "deployment"
67+
tacit get <file-path> # print full content of a specific entry
68+
```
69+
70+
### `/tacit.memorize` — save the current conversation
71+
3572
```
73+
/tacit.memorize
74+
/tacit.memorize skill development # optional hint guides categorization
75+
```
76+
77+
Analyzes the current Claude conversation thread and saves it as a structured knowledge entry — automatically available to future `/tacit.knowledge` queries.
78+
79+
---
80+
81+
## Configuration
82+
83+
`~/.tacit/config.yaml` — all fields are optional.
84+
85+
| Field | Type | Default | Description |
86+
|---|---|---|---|
87+
| `whisper_model` | string | `base` | Whisper model size: `tiny`, `base`, `small`, `medium`, `large`. Larger = more accurate, slower. |
88+
| `min_speech_duration` | duration | `8s` | Minimum segment length to process. Shorter segments are skipped. |
89+
| `silence_duration` | duration | `1500ms` | Duration of silence required to end a speech segment. |
90+
| `speech_threshold` | float | `0.5` | VAD confidence threshold (0–1). Higher = more conservative. |
91+
| `energy_threshold` | int | `200` | Audio energy gate. Frames below this value are rejected before VAD. |
92+
| `claude_model` | string | `haiku` | Claude model used for classification: `haiku`, `sonnet`, `opus`. |
93+
94+
---
95+
96+
## Architecture
97+
98+
```mermaid
99+
graph LR
100+
MIC[Microphone\n16kHz mono] --> CAP[Capture\nmalgo]
101+
SYS[System Audio\nScreenCaptureKit] --> CAP
102+
CAP --> VAD[VAD\nten-vad / Silero]
103+
VAD --> BUF[Segment Buffer]
104+
BUF --> STT[STT\nwhisper.cpp]
105+
STT --> CLS[Classify\nClaude CLI]
106+
CLS --> KB[Knowledge Base\n~/.tacit/memory/]
107+
```
108+
109+
**Storage format** — each entry is a plain Markdown file:
110+
111+
```markdown
112+
---
113+
title: "Search ranking discussion"
114+
category: "dev"
115+
created_at: "2026-04-14T15:30:45+09:00"
116+
keywords: ["search", "ranking", "BM25", "lexical", "recall"]
117+
---
118+
119+
One-sentence AI-generated summary.
120+
121+
---
122+
123+
Raw transcribed text from speech.
124+
```
125+
126+
Entries are stored under `~/.tacit/memory/<category>/YYYYMMDD-HHMMSS.md` — plain files, no proprietary database, fully editable.
127+
128+
---
36129

37130
## Requirements
38131

39-
- macOS
132+
- macOS (Apple Silicon or Intel)
40133
- [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)
41134

42135
---
@@ -58,55 +151,24 @@ make install # installs to ~/.local/bin/tacit
58151
> export PATH="$HOME/.local/bin:$PATH"
59152
> ```
60153
61-
</details>
62-
63-
<details>
64-
<summary>Configuration</summary>
154+
Run the end-to-end test to verify the full pipeline:
65155
66-
`~/.tacit/config.yaml` (all fields optional):
67-
68-
```yaml
69-
whisper_model: base # tiny, base, small, medium, large
70-
min_speech_duration: 8s
71-
silence_duration: 1500ms
72-
speech_threshold: 0.5
73-
energy_threshold: 200
74-
claude_model: haiku
156+
```bash
157+
make e2e-test
75158
```
76159
77160
</details>
78161

79162
<details>
80-
<summary>Architecture</summary>
163+
<summary>Contributing</summary>
81164

82-
```
83-
mic → VAD → STT → AI classify → knowledge base
84-
```
165+
Issues and pull requests are welcome. Please open an issue first for significant changes.
85166

86-
```mermaid
87-
graph LR
88-
MIC[Microphone<br/>16kHz mono] --> CAP[Capture<br/>malgo]
89-
CAP --> VAD[VAD<br/>ten-vad]
90-
VAD --> BUF[Segment Buffer]
91-
BUF --> STT[STT<br/>whisper.cpp]
92-
STT --> CLS[Classify<br/>Claude CLI]
93-
CLS --> KB[Knowledge Base<br/>~/.tacit/]
167+
```bash
168+
make test # run unit tests
169+
make e2e-test # build + process test audio through full pipeline
94170
```
95171

96-
Storage format: Markdown files with YAML frontmatter
97-
98-
```markdown
99-
---
100-
title: "Title"
101-
category: "category"
102-
created_at: "2026-03-29T15:30:45+09:00"
103-
---
104-
105-
AI-generated summary
106-
107-
---
108-
109-
Raw STT transcript
110-
```
172+
> **Note:** Do not run `go build ./...` directly — `pkg/stt` uses CGo against whisper.cpp and requires `make build` to compile first.
111173
112174
</details>

0 commit comments

Comments
 (0)