@redaksjon/protokoll 0.0.12 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/rules/definition-of-done.md +1 -0
- package/.cursor/rules/no-emoticons.md +26 -12
- package/README.md +681 -69
- package/dist/feedback.js +5193 -0
- package/dist/feedback.js.map +1 -0
- package/dist/main.js +1861 -2
- package/dist/main.js.map +1 -1
- package/dist/mcp/server.js +1330 -0
- package/dist/mcp/server.js.map +1 -0
- package/docs/duplicate-question-prevention.md +117 -0
- package/docs/examples.md +152 -0
- package/docs/interactive-context-example.md +92 -0
- package/docs/package-lock.json +6 -0
- package/docs/package.json +3 -1
- package/guide/action.md +375 -0
- package/guide/config.md +207 -0
- package/guide/configuration.md +82 -67
- package/guide/context-commands.md +574 -0
- package/guide/context-system.md +20 -7
- package/guide/development.md +106 -4
- package/guide/feedback.md +335 -0
- package/guide/index.md +116 -4
- package/guide/interactive.md +15 -14
- package/guide/mcp-integration.md +341 -0
- package/guide/quickstart.md +21 -7
- package/guide/reasoning.md +18 -4
- package/guide/routing.md +192 -97
- package/package.json +5 -3
- package/scripts/coverage-priority.mjs +323 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/vite.config.ts +13 -29
- package/vitest.config.ts +5 -1
- package/dist/agentic/executor.js +0 -315
- package/dist/agentic/executor.js.map +0 -1
- package/dist/agentic/index.js +0 -19
- package/dist/agentic/index.js.map +0 -1
- package/dist/agentic/registry.js +0 -41
- package/dist/agentic/registry.js.map +0 -1
- package/dist/agentic/tools/lookup-person.js +0 -66
- package/dist/agentic/tools/lookup-person.js.map +0 -1
- package/dist/agentic/tools/lookup-project.js +0 -93
- package/dist/agentic/tools/lookup-project.js.map +0 -1
- package/dist/agentic/tools/route-note.js +0 -45
- package/dist/agentic/tools/route-note.js.map +0 -1
- package/dist/agentic/tools/store-context.js +0 -51
- package/dist/agentic/tools/store-context.js.map +0 -1
- package/dist/agentic/tools/verify-spelling.js +0 -57
- package/dist/agentic/tools/verify-spelling.js.map +0 -1
- package/dist/arguments.js +0 -175
- package/dist/arguments.js.map +0 -1
- package/dist/constants.js +0 -84
- package/dist/constants.js.map +0 -1
- package/dist/context/discovery.js +0 -114
- package/dist/context/discovery.js.map +0 -1
- package/dist/context/index.js +0 -58
- package/dist/context/index.js.map +0 -1
- package/dist/context/storage.js +0 -131
- package/dist/context/storage.js.map +0 -1
- package/dist/interactive/handler.js +0 -223
- package/dist/interactive/handler.js.map +0 -1
- package/dist/interactive/index.js +0 -18
- package/dist/interactive/index.js.map +0 -1
- package/dist/interactive/onboarding.js +0 -28
- package/dist/interactive/onboarding.js.map +0 -1
- package/dist/logging.js +0 -46
- package/dist/logging.js.map +0 -1
- package/dist/output/index.js +0 -8
- package/dist/output/index.js.map +0 -1
- package/dist/output/manager.js +0 -105
- package/dist/output/manager.js.map +0 -1
- package/dist/phases/complete.js +0 -107
- package/dist/phases/complete.js.map +0 -1
- package/dist/phases/locate.js +0 -64
- package/dist/phases/locate.js.map +0 -1
- package/dist/pipeline/index.js +0 -8
- package/dist/pipeline/index.js.map +0 -1
- package/dist/pipeline/orchestrator.js +0 -281
- package/dist/pipeline/orchestrator.js.map +0 -1
- package/dist/protokoll.js +0 -114
- package/dist/protokoll.js.map +0 -1
- package/dist/reasoning/client.js +0 -150
- package/dist/reasoning/client.js.map +0 -1
- package/dist/reasoning/index.js +0 -36
- package/dist/reasoning/index.js.map +0 -1
- package/dist/reasoning/strategy.js +0 -60
- package/dist/reasoning/strategy.js.map +0 -1
- package/dist/reflection/collector.js +0 -124
- package/dist/reflection/collector.js.map +0 -1
- package/dist/reflection/index.js +0 -16
- package/dist/reflection/index.js.map +0 -1
- package/dist/reflection/reporter.js +0 -238
- package/dist/reflection/reporter.js.map +0 -1
- package/dist/routing/classifier.js +0 -201
- package/dist/routing/classifier.js.map +0 -1
- package/dist/routing/index.js +0 -27
- package/dist/routing/index.js.map +0 -1
- package/dist/routing/router.js +0 -153
- package/dist/routing/router.js.map +0 -1
- package/dist/transcription/index.js +0 -41
- package/dist/transcription/index.js.map +0 -1
- package/dist/transcription/service.js +0 -64
- package/dist/transcription/service.js.map +0 -1
- package/dist/transcription/types.js +0 -31
- package/dist/transcription/types.js.map +0 -1
- package/dist/util/dates.js +0 -96
- package/dist/util/dates.js.map +0 -1
- package/dist/util/media.js +0 -103
- package/dist/util/media.js.map +0 -1
- package/dist/util/metadata.js +0 -95
- package/dist/util/metadata.js.map +0 -1
- package/dist/util/storage.js +0 -135
- package/dist/util/storage.js.map +0 -1
package/README.md
CHANGED
|
@@ -17,11 +17,11 @@ Protokoll solves this.
|
|
|
17
17
|
|
|
18
18
|
Protokoll is an intelligent audio transcription system that uses advanced reasoning models to create highly accurate, context-enhanced transcripts. Unlike basic transcription tools, Protokoll:
|
|
19
19
|
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
20
|
+
- **Learns Your World**: Maintains a knowledge base of people, projects, and organizations you mention. When Whisper mishears someone, Protokoll recognizes and corrects it using phonetic variants and context awareness
|
|
21
|
+
- **Routes Intelligently**: Multi-signal classification sends notes to the right destination—work notes stay in your work folder, client calls go to client projects, personal thoughts go to personal notes
|
|
22
|
+
- **Preserves Everything**: This is NOT a summarizer. Protokoll preserves the full content of what you said while cleaning up filler words, false starts, and obvious transcription errors
|
|
23
|
+
- **Improves Over Time**: The more you use it, the smarter it gets. Build context incrementally and watch transcription quality improve session after session
|
|
24
|
+
- **Zero Configuration Start**: Works out of the box with sensible defaults. No API wrestling, no complex setup—just transcribe
|
|
25
25
|
|
|
26
26
|
## The Core Philosophy: Context You Own and Control
|
|
27
27
|
|
|
@@ -31,7 +31,7 @@ When you first start using Protokoll, it doesn't know anything about you. It doe
|
|
|
31
31
|
|
|
32
32
|
**But that's the point.** Protokoll is designed to learn from you:
|
|
33
33
|
|
|
34
|
-
1. **Interactive Discovery**: When you run `protokoll
|
|
34
|
+
1. **Interactive Discovery**: When you run `protokoll` (interactive by default) and mention "Project Alpha" for the first time, the system recognizes it doesn't know what that is. It asks: *"Is Project Alpha a new project? Where should notes about it be stored?"* You tell it, and from that moment forward, every note mentioning Project Alpha routes correctly.
|
|
35
35
|
|
|
36
36
|
2. **Context Files You Own**: Unlike cloud transcription services that keep your data in their black box, Protokoll stores everything it learns in simple YAML files in your `.protokoll/context/` directory:
|
|
37
37
|
|
|
@@ -77,8 +77,15 @@ The goal is simple: **After a few weeks of use, Protokoll should understand your
|
|
|
77
77
|
- [Prerequisites](#prerequisites)
|
|
78
78
|
- [Installation](#installation)
|
|
79
79
|
- [Getting Started](#getting-started)
|
|
80
|
+
- [Progress Tracking](#progress-tracking)
|
|
81
|
+
- [Transcription Summary](#transcription-summary)
|
|
80
82
|
- [Configuration](#configuration)
|
|
83
|
+
- [Interactive Configuration Editor](#interactive-configuration-editor)
|
|
84
|
+
- [Quick Configuration Commands](#quick-configuration-commands)
|
|
81
85
|
- [Command Line Options](#command-line-options)
|
|
86
|
+
- [Context Management Commands](#context-management-commands)
|
|
87
|
+
- [Transcript Actions](#transcript-actions)
|
|
88
|
+
- [Feedback Command](#feedback-command)
|
|
82
89
|
- [Key Features](#key-features)
|
|
83
90
|
- [Context System](#context-system)
|
|
84
91
|
- [Routing System](#routing-system)
|
|
@@ -87,6 +94,7 @@ The goal is simple: **After a few weeks of use, Protokoll should understand your
|
|
|
87
94
|
- [Output Structure](#output-structure)
|
|
88
95
|
- [Supported Models](#supported-models)
|
|
89
96
|
- [Troubleshooting](#troubleshooting)
|
|
97
|
+
- [MCP Server Integration](#mcp-server-integration)
|
|
90
98
|
- [Architecture](#architecture)
|
|
91
99
|
- [Examples](#examples)
|
|
92
100
|
|
|
@@ -115,15 +123,15 @@ You're drowning in voice memos but can't use them because they're disorganized.
|
|
|
115
123
|
|
|
116
124
|
### Who Should Use Protokoll
|
|
117
125
|
|
|
118
|
-
|
|
126
|
+
**Product Managers**: Record customer conversations, feature ideas, meeting notes—Protokoll routes them to projects automatically
|
|
119
127
|
|
|
120
|
-
|
|
128
|
+
**Researchers**: Capture interview insights, lab notes, findings—build a growing knowledge base that improves over time
|
|
121
129
|
|
|
122
|
-
|
|
130
|
+
**Authors & Creators**: Dictate ideas, chapter notes, research—get organized files without manual organization
|
|
123
131
|
|
|
124
|
-
|
|
132
|
+
**Managers**: Record 1-on-1s, team meetings, strategy sessions—automatic routing means they're never lost
|
|
125
133
|
|
|
126
|
-
|
|
134
|
+
**Teams**: Self-hosted means your transcripts never leave your server—perfect for regulated industries
|
|
127
135
|
|
|
128
136
|
## Prerequisites
|
|
129
137
|
|
|
@@ -209,10 +217,20 @@ EOF
|
|
|
209
217
|
cat > ~/.protokoll/projects/work.yaml << EOF
|
|
210
218
|
id: work
|
|
211
219
|
name: Work Notes
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
220
|
+
type: project
|
|
221
|
+
classification:
|
|
222
|
+
context_type: work
|
|
223
|
+
explicit_phrases:
|
|
224
|
+
- "work note"
|
|
225
|
+
- "work meeting"
|
|
226
|
+
routing:
|
|
227
|
+
destination: ~/work/notes
|
|
228
|
+
structure: month
|
|
229
|
+
filename_options:
|
|
230
|
+
- date
|
|
231
|
+
- time
|
|
232
|
+
- subject
|
|
233
|
+
active: true
|
|
216
234
|
EOF
|
|
217
235
|
|
|
218
236
|
# 4. Now transcribe - names are corrected, routing is automatic
|
|
@@ -230,6 +248,50 @@ protokoll --input-directory ~/recordings
|
|
|
230
248
|
3. **Routing**: Notes automatically go to the right folder based on content
|
|
231
249
|
4. **Output**: You get markdown files with perfect names, proper organization, and full content
|
|
232
250
|
|
|
251
|
+
### Progress Tracking
|
|
252
|
+
|
|
253
|
+
When processing multiple files, Protokoll shows clear progress indicators so you always know where you are:
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
Found 11 file(s) to process in ~/recordings
|
|
257
|
+
[1/11] Starting: ~/recordings/meeting-notes.m4a
|
|
258
|
+
[1/11] Transcribing audio...
|
|
259
|
+
[1/11] Transcription: 2847 chars in 3.2s
|
|
260
|
+
[1/11] Enhancing with gpt-5.2...
|
|
261
|
+
[1/11] Enhancement: 3 iterations, 2 tools, 4.1s
|
|
262
|
+
[1/11] Output: ~/notes/2026/01/260115-1412-meeting-notes.md (7.3s total)
|
|
263
|
+
[1/11] Completed: ~/recordings/meeting-notes.m4a -> ~/notes/2026/01/260115-1412-meeting-notes.md
|
|
264
|
+
[2/11] Starting: ~/recordings/quick-thought.m4a
|
|
265
|
+
...
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
The `[X/Y]` prefix on every log message tells you exactly which file you're on and how many remain—no more wondering if the system is making progress during long batch runs.
|
|
269
|
+
|
|
270
|
+
### Transcription Summary
|
|
271
|
+
|
|
272
|
+
When batch processing completes, Protokoll prints a summary of all processed files:
|
|
273
|
+
|
|
274
|
+
```
|
|
275
|
+
============================================================
|
|
276
|
+
TRANSCRIPTION SUMMARY
|
|
277
|
+
============================================================
|
|
278
|
+
Processed 11 file(s)
|
|
279
|
+
|
|
280
|
+
Input Files:
|
|
281
|
+
/Users/me/recordings/meeting-notes.m4a
|
|
282
|
+
/Users/me/recordings/quick-thought.m4a
|
|
283
|
+
/Users/me/recordings/client-call.m4a
|
|
284
|
+
|
|
285
|
+
Output Files:
|
|
286
|
+
/Users/me/notes/2026/01/260115-1412-meeting-notes.md
|
|
287
|
+
/Users/me/notes/2026/01/260115-1430-quick-thought.md
|
|
288
|
+
/Users/me/notes/2026/01/260115-1500-client-call.md
|
|
289
|
+
|
|
290
|
+
============================================================
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Each file path is printed on its own line, making it easy to copy and paste to the command line for further processing—like reviewing transcripts, sending them for feedback, or moving them to a different location.
|
|
294
|
+
|
|
233
295
|
### Where Are My Files?
|
|
234
296
|
|
|
235
297
|
```bash
|
|
@@ -268,6 +330,54 @@ Protokoll uses hierarchical configuration discovery. It walks up the directory t
|
|
|
268
330
|
- **Global**: `~/.protokoll/config.yaml`
|
|
269
331
|
- **Project-specific**: `./protokoll/config.yaml` (in any parent directory)
|
|
270
332
|
|
|
333
|
+
### Interactive Configuration Editor
|
|
334
|
+
|
|
335
|
+
The easiest way to configure Protokoll is with the interactive config command:
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
# Launch interactive configuration editor
|
|
339
|
+
protokoll config
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
This opens a guided editor that walks through each setting:
|
|
343
|
+
|
|
344
|
+
```
|
|
345
|
+
╔════════════════════════════════════════════════════════════════╗
|
|
346
|
+
║ PROTOKOLL CONFIGURATION EDITOR ║
|
|
347
|
+
╚════════════════════════════════════════════════════════════════╝
|
|
348
|
+
|
|
349
|
+
Config file: ~/.protokoll/config.yaml
|
|
350
|
+
|
|
351
|
+
── AI Models ──
|
|
352
|
+
|
|
353
|
+
model
|
|
354
|
+
AI model for transcription enhancement
|
|
355
|
+
Examples: gpt-5.2, gpt-4o, gpt-4o-mini, claude-3-5-sonnet
|
|
356
|
+
Current: default: gpt-5.2
|
|
357
|
+
New value (Enter to skip):
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Quick Configuration Commands
|
|
361
|
+
|
|
362
|
+
Set individual values directly from the command line:
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
# View all settings
|
|
366
|
+
protokoll config --list
|
|
367
|
+
|
|
368
|
+
# View a specific setting
|
|
369
|
+
protokoll config model
|
|
370
|
+
|
|
371
|
+
# Set a specific value
|
|
372
|
+
protokoll config model gpt-4o-mini
|
|
373
|
+
protokoll config debug true
|
|
374
|
+
protokoll config outputDirectory ~/my-notes
|
|
375
|
+
protokoll config outputFilenameOptions "date,time,subject"
|
|
376
|
+
|
|
377
|
+
# Show config file path
|
|
378
|
+
protokoll config --path
|
|
379
|
+
```
|
|
380
|
+
|
|
271
381
|
### Full Configuration Example
|
|
272
382
|
|
|
273
383
|
Create `~/.protokoll/config.yaml`:
|
|
@@ -277,47 +387,31 @@ Create `~/.protokoll/config.yaml`:
|
|
|
277
387
|
model: "gpt-5.2" # Reasoning model (default with high reasoning)
|
|
278
388
|
transcriptionModel: "whisper-1" # Transcription model
|
|
279
389
|
|
|
280
|
-
#
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
conflict_resolution: "primary" # ask, primary, or all
|
|
302
|
-
|
|
303
|
-
projects:
|
|
304
|
-
- projectId: "work"
|
|
305
|
-
destination:
|
|
306
|
-
path: "~/work/notes"
|
|
307
|
-
structure: "month"
|
|
308
|
-
filename_options:
|
|
309
|
-
- date
|
|
310
|
-
- subject
|
|
311
|
-
classification:
|
|
312
|
-
context_type: "work"
|
|
313
|
-
explicit_phrases:
|
|
314
|
-
- "work note"
|
|
315
|
-
- "this is about work"
|
|
316
|
-
associated_people:
|
|
317
|
-
- "john-smith"
|
|
318
|
-
active: true
|
|
390
|
+
# Directory settings (Dreadcabinet options)
|
|
391
|
+
inputDirectory: "./recordings" # Where to find audio files
|
|
392
|
+
outputDirectory: "~/notes" # Where to write transcripts
|
|
393
|
+
outputStructure: "month" # Directory structure (none, year, month, day)
|
|
394
|
+
outputFilenameOptions: # Filename components
|
|
395
|
+
- date
|
|
396
|
+
- time
|
|
397
|
+
- subject
|
|
398
|
+
|
|
399
|
+
# Processing options
|
|
400
|
+
processedDirectory: "./processed" # Move processed audio here (optional)
|
|
401
|
+
|
|
402
|
+
# Feature flags (flat, not nested)
|
|
403
|
+
interactive: true # Interactive prompts (enabled by default)
|
|
404
|
+
selfReflection: true # Generate reports by default
|
|
405
|
+
silent: false # Sound notifications
|
|
406
|
+
debug: false # Debug mode
|
|
407
|
+
|
|
408
|
+
# Advanced
|
|
409
|
+
maxAudioSize: 26214400 # Max audio file size in bytes (25MB)
|
|
410
|
+
tempDirectory: "/tmp" # Temporary file storage
|
|
319
411
|
```
|
|
320
412
|
|
|
413
|
+
**Note**: Project-specific routing is configured in **project files** (e.g., `~/.protokoll/projects/work.yaml`), not in the main config. See [Routing System](#routing-system) for details.
|
|
414
|
+
|
|
321
415
|
### Directory Structure Options
|
|
322
416
|
|
|
323
417
|
Protokoll uses Dreadcabinet patterns for organizing output:
|
|
@@ -356,13 +450,16 @@ Combined example: `260111-1430-meeting-notes.md`
|
|
|
356
450
|
|
|
357
451
|
| Option | Description |
|
|
358
452
|
|--------|-------------|
|
|
359
|
-
| `--
|
|
360
|
-
| `--
|
|
361
|
-
| `--self-reflection` |
|
|
453
|
+
| `--batch` | Disable interactive mode (for automation) |
|
|
454
|
+
| `--self-reflection` | Generate reflection reports (default: true) |
|
|
455
|
+
| `--no-self-reflection` | Disable reflection reports |
|
|
456
|
+
| `--silent` | Disable sound notifications |
|
|
362
457
|
| `--dry-run` | Show what would happen |
|
|
363
458
|
| `--verbose` | Enable verbose logging |
|
|
364
459
|
| `--debug` | Enable debug mode with intermediate files |
|
|
365
460
|
|
|
461
|
+
> **Note**: Interactive mode is **enabled by default**. Use `--batch` to disable it for automation/cron jobs.
|
|
462
|
+
|
|
366
463
|
### Advanced Options
|
|
367
464
|
|
|
368
465
|
| Option | Description | Default |
|
|
@@ -373,6 +470,304 @@ Combined example: `260111-1430-meeting-notes.md`
|
|
|
373
470
|
| `--max-audio-size <bytes>` | Max file size before splitting | `25MB` |
|
|
374
471
|
| `--temp-directory <dir>` | Temp files for audio splitting | System temp |
|
|
375
472
|
|
|
473
|
+
## Context Management Commands
|
|
474
|
+
|
|
475
|
+
Protokoll includes a complete CLI for managing context entities directly from the command line. Instead of manually editing YAML files, you can use these subcommands to list, view, add, and delete entities.
|
|
476
|
+
|
|
477
|
+
### Entity Types
|
|
478
|
+
|
|
479
|
+
| Command | Description |
|
|
480
|
+
|---------|-------------|
|
|
481
|
+
| `project` | Manage projects (routing destinations) |
|
|
482
|
+
| `person` | Manage people (name recognition) |
|
|
483
|
+
| `term` | Manage technical terms |
|
|
484
|
+
| `company` | Manage companies |
|
|
485
|
+
| `ignored` | Manage ignored terms (won't prompt for these) |
|
|
486
|
+
| `context` | Overall context system management |
|
|
487
|
+
|
|
488
|
+
### Common Actions
|
|
489
|
+
|
|
490
|
+
Each entity type supports the same actions:
|
|
491
|
+
|
|
492
|
+
```bash
|
|
493
|
+
# List all entities of a type
|
|
494
|
+
protokoll project list
|
|
495
|
+
protokoll person list
|
|
496
|
+
protokoll term list
|
|
497
|
+
protokoll company list
|
|
498
|
+
protokoll ignored list
|
|
499
|
+
|
|
500
|
+
# Show details for a specific entity
|
|
501
|
+
protokoll project show <id>
|
|
502
|
+
protokoll person show priya-sharma
|
|
503
|
+
|
|
504
|
+
# Add a new entity (interactive)
|
|
505
|
+
protokoll project add
|
|
506
|
+
protokoll person add
|
|
507
|
+
protokoll term add
|
|
508
|
+
|
|
509
|
+
# Delete an entity
|
|
510
|
+
protokoll project delete <id>
|
|
511
|
+
protokoll person delete john-smith --force
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
### Context Overview
|
|
515
|
+
|
|
516
|
+
```bash
|
|
517
|
+
# Show context system status (discovered directories, entity counts)
|
|
518
|
+
protokoll context status
|
|
519
|
+
|
|
520
|
+
# Search across all entity types
|
|
521
|
+
protokoll context search "acme"
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
### Example: Adding a Person
|
|
525
|
+
|
|
526
|
+
```bash
|
|
527
|
+
$ protokoll person add
|
|
528
|
+
|
|
529
|
+
[Add New Person]
|
|
530
|
+
|
|
531
|
+
Full name: Priya Sharma
|
|
532
|
+
ID (Enter for "priya-sharma"):
|
|
533
|
+
First name (Enter to skip): Priya
|
|
534
|
+
Last name (Enter to skip): Sharma
|
|
535
|
+
Company ID (Enter to skip): acme-corp
|
|
536
|
+
Role (Enter to skip): Product Manager
|
|
537
|
+
Sounds like (comma-separated, Enter to skip): pre a, pria, preeya
|
|
538
|
+
Context notes (Enter to skip): Colleague from product team
|
|
539
|
+
|
|
540
|
+
Person "Priya Sharma" saved successfully.
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
### Example: Adding a Project
|
|
544
|
+
|
|
545
|
+
```bash
|
|
546
|
+
$ protokoll project add
|
|
547
|
+
|
|
548
|
+
[Add New Project]
|
|
549
|
+
|
|
550
|
+
Project name: Client Alpha
|
|
551
|
+
ID (Enter for "client-alpha"):
|
|
552
|
+
Output destination path: ~/clients/alpha/notes
|
|
553
|
+
Directory structure (none/year/month/day, Enter for month): month
|
|
554
|
+
Context type (work/personal/mixed, Enter for work): work
|
|
555
|
+
Trigger phrases (comma-separated): client alpha, alpha project
|
|
556
|
+
Topic keywords (comma-separated, Enter to skip): client engagement
|
|
557
|
+
Description (Enter to skip): Primary client project
|
|
558
|
+
|
|
559
|
+
Project "Client Alpha" saved successfully.
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
### Options
|
|
563
|
+
|
|
564
|
+
| Option | Description |
|
|
565
|
+
|--------|-------------|
|
|
566
|
+
| `-v, --verbose` | Show full details (for `list` commands) |
|
|
567
|
+
| `-f, --force` | Skip confirmation (for `delete` commands) |
|
|
568
|
+
|
|
569
|
+
For complete documentation, see the [Context Commands Guide](./guide/context-commands.md).
|
|
570
|
+
|
|
571
|
+
## Transcript Actions
|
|
572
|
+
|
|
573
|
+
Protokoll includes the `action` command for editing and combining existing transcripts. This is useful for post-processing, organizing, and managing your transcript library.
|
|
574
|
+
|
|
575
|
+
### Edit a Single Transcript
|
|
576
|
+
|
|
577
|
+
Change the title and/or project of an existing transcript:
|
|
578
|
+
|
|
579
|
+
```bash
|
|
580
|
+
# Change the title (updates document heading and filename)
|
|
581
|
+
protokoll action --title "Time to Celebrate" /path/to/transcript.md
|
|
582
|
+
|
|
583
|
+
# Change the project (updates metadata and moves to project's destination)
|
|
584
|
+
protokoll action --project client-alpha /path/to/transcript.md
|
|
585
|
+
|
|
586
|
+
# Change both title and project
|
|
587
|
+
protokoll action --title "Q1 Planning Session" --project quarterly-planning /path/to/transcript.md
|
|
588
|
+
|
|
589
|
+
# Preview what would happen without making changes
|
|
590
|
+
protokoll action --title "New Title" /path/to/transcript.md --dry-run --verbose
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
### Combine Multiple Transcripts
|
|
594
|
+
|
|
595
|
+
Merge multiple related transcripts into a single document. When combining, source files are automatically deleted after the combined file is created.
|
|
596
|
+
|
|
597
|
+
```bash
|
|
598
|
+
# Combine transcripts with a custom title
|
|
599
|
+
protokoll action --title "Time to Celebrate" --combine "/path/to/transcript1.md
|
|
600
|
+
/path/to/transcript2.md
|
|
601
|
+
/path/to/transcript3.md"
|
|
602
|
+
|
|
603
|
+
# Combine and change project
|
|
604
|
+
protokoll action --title "Full Meeting Notes" --project my-project --combine "/path/to/part1.md
|
|
605
|
+
/path/to/part2.md"
|
|
606
|
+
|
|
607
|
+
# Preview what would happen without making changes
|
|
608
|
+
protokoll action --combine "/path/to/files..." --dry-run --verbose
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
#### What Combine Does
|
|
612
|
+
|
|
613
|
+
1. **Parses all transcripts**: Extracts metadata, title, and content from each file
|
|
614
|
+
2. **Sorts chronologically**: Orders transcripts by filename (which includes timestamp)
|
|
615
|
+
3. **Merges metadata**: Uses the first transcript's date/time, combines durations, deduplicates tags
|
|
616
|
+
4. **Creates sections**: Each source transcript becomes a section with its original title
|
|
617
|
+
5. **Routes intelligently**: If `--project` is specified, uses that project's routing configuration
|
|
618
|
+
6. **Cleans up**: Automatically deletes source files after successful combine
|
|
619
|
+
|
|
620
|
+
#### Action Options
|
|
621
|
+
|
|
622
|
+
| Option | Description |
|
|
623
|
+
|--------|-------------|
|
|
624
|
+
| `-t, --title <title>` | Set a custom title (also affects the output filename) |
|
|
625
|
+
| `-p, --project <id>` | Change to a different project (updates metadata and routing) |
|
|
626
|
+
| `-c, --combine <files>` | Combine multiple files (newline-separated list) |
|
|
627
|
+
| `--dry-run` | Show what would happen without making changes |
|
|
628
|
+
| `-v, --verbose` | Show detailed output |
|
|
629
|
+
|
|
630
|
+
#### Title Slugification
|
|
631
|
+
|
|
632
|
+
When you provide a custom title with `--title`, it's automatically converted to a filename-safe slug:
|
|
633
|
+
|
|
634
|
+
| Title | Filename |
|
|
635
|
+
|-------|----------|
|
|
636
|
+
| `Time to Celebrate` | `15-1412-time-to-celebrate.md` |
|
|
637
|
+
| `Meeting: Q1 Planning & Review!` | `15-1412-meeting-q1-planning-review.md` |
|
|
638
|
+
| `Sprint 42 Retrospective` | `15-1412-sprint-42-retrospective.md` |
|
|
639
|
+
|
|
640
|
+
The slug preserves the original timestamp prefix and is limited to 50 characters.
|
|
641
|
+
|
|
642
|
+
#### Common Use Cases
|
|
643
|
+
|
|
644
|
+
```bash
|
|
645
|
+
# Rename a transcript with a more meaningful title
|
|
646
|
+
protokoll action --title "Q1 Budget Review Meeting" ~/notes/2026/01/15-1412-meeting.md
|
|
647
|
+
|
|
648
|
+
# Move a transcript to a different project
|
|
649
|
+
protokoll action --project client-beta ~/notes/2026/01/15-1412-meeting.md
|
|
650
|
+
|
|
651
|
+
# Consolidate a long meeting recorded in segments
|
|
652
|
+
protokoll action --title "Full Team Standup" --combine "~/notes/part1.md
|
|
653
|
+
~/notes/part2.md
|
|
654
|
+
~/notes/part3.md"
|
|
655
|
+
|
|
656
|
+
# Reorganize scattered notes into a project
|
|
657
|
+
protokoll action --title "Sprint 42 Planning" --project sprint-42 --combine "~/notes/misc1.md
|
|
658
|
+
~/notes/misc2.md"
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
#### Example Output
|
|
662
|
+
|
|
663
|
+
When combining transcripts, the output looks like:
|
|
664
|
+
|
|
665
|
+
```markdown
|
|
666
|
+
# Meeting Notes Part 1 (Combined)
|
|
667
|
+
|
|
668
|
+
## Metadata
|
|
669
|
+
|
|
670
|
+
**Date**: January 15, 2026
|
|
671
|
+
**Time**: 02:12 PM
|
|
672
|
+
|
|
673
|
+
**Project**: AI Safety
|
|
674
|
+
**Project ID**: `ai-safety`
|
|
675
|
+
|
|
676
|
+
### Routing
|
|
677
|
+
|
|
678
|
+
**Destination**: /Users/you/notes/ai-safety
|
|
679
|
+
**Confidence**: 85.0%
|
|
680
|
+
|
|
681
|
+
**Tags**: `work`, `ai`, `safety`, `meeting`
|
|
682
|
+
|
|
683
|
+
**Duration**: 15m 30s
|
|
684
|
+
|
|
685
|
+
---
|
|
686
|
+
|
|
687
|
+
## Meeting Notes Part 1
|
|
688
|
+
*Source: 15-1412-meeting-part-1.md*
|
|
689
|
+
|
|
690
|
+
First part of the meeting content...
|
|
691
|
+
|
|
692
|
+
## Meeting Notes Part 2
|
|
693
|
+
*Source: 15-1421-meeting-part-2.md*
|
|
694
|
+
|
|
695
|
+
Second part of the meeting content...
|
|
696
|
+
```
|
|
697
|
+
|
|
698
|
+
For complete documentation, see the [Action Commands Guide](./guide/action.md).
|
|
699
|
+
|
|
700
|
+
## Feedback Command
|
|
701
|
+
|
|
702
|
+
The `feedback` command uses an agentic model to understand natural language feedback and take corrective actions automatically.
|
|
703
|
+
|
|
704
|
+
### Basic Usage
|
|
705
|
+
|
|
706
|
+
```bash
|
|
707
|
+
# Interactive feedback
|
|
708
|
+
protokoll feedback /path/to/transcript.md
|
|
709
|
+
|
|
710
|
+
# Direct feedback
|
|
711
|
+
protokoll feedback /path/to/transcript.md -f "YB should be Wibey"
|
|
712
|
+
|
|
713
|
+
# Preview changes
|
|
714
|
+
protokoll feedback /path/to/transcript.md -f "WCMP should be WCNP" --dry-run -v
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
### What You Can Do
|
|
718
|
+
|
|
719
|
+
#### Fix Terms & Abbreviations
|
|
720
|
+
|
|
721
|
+
```bash
|
|
722
|
+
protokoll feedback notes.md -f "WCMP should be WCNP - Walmart's Native Cloud Platform"
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
This will:
|
|
726
|
+
1. Replace "WCMP" with "WCNP" throughout the transcript
|
|
727
|
+
2. Add "WCNP" to your vocabulary with the full expansion
|
|
728
|
+
3. Store phonetic variants so it won't be misheard again
|
|
729
|
+
|
|
730
|
+
#### Fix Names
|
|
731
|
+
|
|
732
|
+
```bash
|
|
733
|
+
protokoll feedback notes.md -f "San Jay Grouper is actually Sanjay Gupta"
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
This will:
|
|
737
|
+
1. Replace the name throughout the transcript
|
|
738
|
+
2. Fix variations like "San Jay" or "Sanjay Grouper"
|
|
739
|
+
3. Add the person to context for future recognition
|
|
740
|
+
|
|
741
|
+
#### Change Project Assignment
|
|
742
|
+
|
|
743
|
+
```bash
|
|
744
|
+
protokoll feedback notes.md -f "This should be in the Quantum Readiness project"
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
This will:
|
|
748
|
+
1. Update the project metadata
|
|
749
|
+
2. Move the file to the project's destination
|
|
750
|
+
3. Rename the file according to project rules
|
|
751
|
+
|
|
752
|
+
### Feedback Options
|
|
753
|
+
|
|
754
|
+
| Option | Short | Description |
|
|
755
|
+
|--------|-------|-------------|
|
|
756
|
+
| `--feedback <text>` | `-f` | Provide feedback directly (non-interactive) |
|
|
757
|
+
| `--model <model>` | `-m` | Reasoning model to use (default: gpt-5.2) |
|
|
758
|
+
| `--dry-run` | | Show what would happen without making changes |
|
|
759
|
+
| `--verbose` | `-v` | Show detailed output |
|
|
760
|
+
| `--help-me` | | Show examples of feedback you can provide |
|
|
761
|
+
|
|
762
|
+
### Get Help
|
|
763
|
+
|
|
764
|
+
```bash
|
|
765
|
+
# Show feedback examples
|
|
766
|
+
protokoll feedback --help-me
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
For complete documentation, see the [Feedback Guide](./guide/feedback.md).
|
|
770
|
+
|
|
376
771
|
## Key Features
|
|
377
772
|
|
|
378
773
|
### Intelligent Name Recognition
|
|
@@ -462,13 +857,26 @@ context: "Colleague from engineering team"
|
|
|
462
857
|
# ~/.protokoll/projects/quarterly-planning.yaml
|
|
463
858
|
id: quarterly-planning
|
|
464
859
|
name: Quarterly Planning
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
860
|
+
type: project
|
|
861
|
+
|
|
862
|
+
classification:
|
|
863
|
+
context_type: work
|
|
864
|
+
explicit_phrases:
|
|
865
|
+
- "quarterly planning"
|
|
866
|
+
- "Q1 planning"
|
|
867
|
+
- "roadmap review"
|
|
868
|
+
topics:
|
|
869
|
+
- "roadmap"
|
|
870
|
+
- "budget"
|
|
871
|
+
|
|
872
|
+
routing:
|
|
873
|
+
destination: "~/work/planning/notes"
|
|
874
|
+
structure: "month"
|
|
875
|
+
filename_options:
|
|
876
|
+
- date
|
|
877
|
+
- time
|
|
878
|
+
- subject
|
|
879
|
+
|
|
472
880
|
active: true
|
|
473
881
|
```
|
|
474
882
|
|
|
@@ -601,14 +1009,21 @@ Is this correct? (Y/Enter to accept, or enter different path):
|
|
|
601
1009
|
> y
|
|
602
1010
|
```
|
|
603
1011
|
|
|
604
|
-
### How to
|
|
1012
|
+
### How to Use Interactive Mode
|
|
1013
|
+
|
|
1014
|
+
Interactive mode is **enabled by default**. Simply run:
|
|
605
1015
|
|
|
606
1016
|
```bash
|
|
607
|
-
|
|
608
|
-
|
|
1017
|
+
protokoll --input-directory ~/recordings
|
|
1018
|
+
```
|
|
1019
|
+
|
|
1020
|
+
To disable interactive mode (for automation/cron jobs):
|
|
609
1021
|
|
|
610
|
-
|
|
611
|
-
|
|
1022
|
+
```bash
|
|
1023
|
+
protokoll --input-directory ~/recordings --batch
|
|
1024
|
+
|
|
1025
|
+
# Or set in config
|
|
1026
|
+
echo "interactive: false" >> ~/.protokoll/config.yaml
|
|
612
1027
|
```
|
|
613
1028
|
|
|
614
1029
|
### First-Run Onboarding
|
|
@@ -849,6 +1264,203 @@ Check `./output/protokoll/` for:
|
|
|
849
1264
|
- LLM requests/responses
|
|
850
1265
|
- Routing decisions
|
|
851
1266
|
|
|
1267
|
+
## MCP Server Integration
|
|
1268
|
+
|
|
1269
|
+
Protokoll can run as an MCP (Model Context Protocol) server, allowing AI assistants like Cursor and Claude to interact with transcription and context management directly—without needing to understand command-line interfaces.
|
|
1270
|
+
|
|
1271
|
+
### Why MCP?
|
|
1272
|
+
|
|
1273
|
+
Traditional workflow:
|
|
1274
|
+
1. Open terminal
|
|
1275
|
+
2. Navigate to directory
|
|
1276
|
+
3. Remember command syntax
|
|
1277
|
+
4. Copy-paste file paths
|
|
1278
|
+
5. Run commands
|
|
1279
|
+
|
|
1280
|
+
With MCP, you just talk naturally:
|
|
1281
|
+
- *"Can you transcribe this meeting recording?"*
|
|
1282
|
+
- *"Add Sanjay Gupta as a person - Whisper mishears him as 'San Jay Grouper'"*
|
|
1283
|
+
- *"This should be in the Quantum Readiness project"*
|
|
1284
|
+
|
|
1285
|
+
The AI handles all the details.
|
|
1286
|
+
|
|
1287
|
+
### Project-Aware Configuration
|
|
1288
|
+
|
|
1289
|
+
**Important**: Protokoll supports multiple project configurations. When you have different `.protokoll` directories for different projects, the MCP server intelligently discovers and uses the right configuration.
|
|
1290
|
+
|
|
1291
|
+
#### How It Works
|
|
1292
|
+
|
|
1293
|
+
When you ask to transcribe a file, the AI:
|
|
1294
|
+
|
|
1295
|
+
1. **Discovers configurations** - Walks up the directory tree to find `.protokoll` directories
|
|
1296
|
+
2. **Suggests projects** - Analyzes the file path to determine which project it likely belongs to
|
|
1297
|
+
3. **Asks for clarification** - If ambiguous, asks which project to use
|
|
1298
|
+
4. **Processes with context** - Uses the appropriate configuration for transcription
|
|
1299
|
+
|
|
1300
|
+
#### Example: Ambiguous Location
|
|
1301
|
+
|
|
1302
|
+
```
|
|
1303
|
+
You: "Can you transcribe ~/Downloads/meeting.m4a?"
|
|
1304
|
+
|
|
1305
|
+
AI: "I found your Protokoll configuration with 3 projects configured.
|
|
1306
|
+
Based on the file location in Downloads, I can't automatically
|
|
1307
|
+
determine which project this belongs to. Is this for:
|
|
1308
|
+
1. Client Alpha
|
|
1309
|
+
2. Internal Notes
|
|
1310
|
+
3. Personal
|
|
1311
|
+
Which project should I use?"
|
|
1312
|
+
|
|
1313
|
+
You: "It's for Client Alpha"
|
|
1314
|
+
|
|
1315
|
+
AI: "Got it! Processing with Client Alpha configuration..."
|
|
1316
|
+
[transcribes and routes to ~/notes/client-alpha/]
|
|
1317
|
+
```
|
|
1318
|
+
|
|
1319
|
+
#### Example: Clear Location
|
|
1320
|
+
|
|
1321
|
+
```
|
|
1322
|
+
You: "Transcribe ~/work/client-alpha/recordings/standup.m4a"
|
|
1323
|
+
|
|
1324
|
+
AI: "Found Client Alpha configuration nearby. Processing..."
|
|
1325
|
+
[automatically uses the right config and routing]
|
|
1326
|
+
```
|
|
1327
|
+
|
|
1328
|
+
### Available MCP Tools
|
|
1329
|
+
|
|
1330
|
+
| Tool | Purpose |
|
|
1331
|
+
|------|---------|
|
|
1332
|
+
| **Discovery** | |
|
|
1333
|
+
| `protokoll_discover_config` | Find .protokoll configurations for a file/directory |
|
|
1334
|
+
| `protokoll_suggest_project` | Determine which project a file belongs to |
|
|
1335
|
+
| **Transcription** | |
|
|
1336
|
+
| `protokoll_process_audio` | Process a single audio file |
|
|
1337
|
+
| `protokoll_batch_process` | Process all audio files in a directory |
|
|
1338
|
+
| **Context Management** | |
|
|
1339
|
+
| `protokoll_context_status` | Get status of the context system |
|
|
1340
|
+
| `protokoll_list_projects` | List all configured projects |
|
|
1341
|
+
| `protokoll_list_people` | List all people in context |
|
|
1342
|
+
| `protokoll_list_terms` | List technical terms |
|
|
1343
|
+
| `protokoll_list_companies` | List companies |
|
|
1344
|
+
| `protokoll_search_context` | Search across all entity types |
|
|
1345
|
+
| `protokoll_get_entity` | Get detailed info about an entity |
|
|
1346
|
+
| `protokoll_add_person` | Add a new person to context |
|
|
1347
|
+
| `protokoll_add_project` | Add a new project |
|
|
1348
|
+
| `protokoll_add_term` | Add a technical term |
|
|
1349
|
+
| `protokoll_add_company` | Add a company |
|
|
1350
|
+
| `protokoll_delete_entity` | Delete an entity |
|
|
1351
|
+
| **Transcript Actions** | |
|
|
1352
|
+
| `protokoll_read_transcript` | Read and parse a transcript file |
|
|
1353
|
+
| `protokoll_edit_transcript` | Edit title or change project |
|
|
1354
|
+
| `protokoll_combine_transcripts` | Combine multiple transcripts |
|
|
1355
|
+
| `protokoll_provide_feedback` | Natural language feedback to correct transcripts |
|
|
1356
|
+
|
|
1357
|
+
### Setup
|
|
1358
|
+
|
|
1359
|
+
Add Protokoll to your MCP configuration:
|
|
1360
|
+
|
|
1361
|
+
**For Cursor:**
|
|
1362
|
+
|
|
1363
|
+
Add to `~/.cursor/mcp.json`:
|
|
1364
|
+
|
|
1365
|
+
```json
|
|
1366
|
+
{
|
|
1367
|
+
"mcpServers": {
|
|
1368
|
+
"protokoll": {
|
|
1369
|
+
"command": "protokoll-mcp"
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
```
|
|
1374
|
+
|
|
1375
|
+
**For Claude Desktop:**
|
|
1376
|
+
|
|
1377
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
1378
|
+
|
|
1379
|
+
```json
|
|
1380
|
+
{
|
|
1381
|
+
"mcpServers": {
|
|
1382
|
+
"protokoll": {
|
|
1383
|
+
"command": "protokoll-mcp"
|
|
1384
|
+
}
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1387
|
+
```
|
|
1388
|
+
|
|
1389
|
+
### Example Conversations
|
|
1390
|
+
|
|
1391
|
+
**Basic Transcription:**
|
|
1392
|
+
```
|
|
1393
|
+
Human: Transcribe ~/recordings/standup.m4a
|
|
1394
|
+
|
|
1395
|
+
AI: [discovers config, suggests project]
|
|
1396
|
+
|
|
1397
|
+
AI: Done! Transcript saved to ~/notes/2026/01/16-0900-standup.md
|
|
1398
|
+
Project: Daily Standups (95% confidence)
|
|
1399
|
+
People recognized: Sarah Chen, Mike Johnson
|
|
1400
|
+
```
|
|
1401
|
+
|
|
1402
|
+
**Add Context:**
|
|
1403
|
+
```
|
|
1404
|
+
Human: "San Jay" should be "Sanjay Gupta" - he's a product manager at Acme
|
|
1405
|
+
|
|
1406
|
+
AI: [calls protokoll_add_person]
|
|
1407
|
+
|
|
1408
|
+
AI: Added Sanjay Gupta to your context. Future transcripts will
|
|
1409
|
+
recognize "San Jay", "Sanjay", and similar variations.
|
|
1410
|
+
```
|
|
1411
|
+
|
|
1412
|
+
**Provide Feedback:**
|
|
1413
|
+
```
|
|
1414
|
+
Human: In that last transcript, WCMP should be WCNP
|
|
1415
|
+
|
|
1416
|
+
AI: [calls protokoll_provide_feedback]
|
|
1417
|
+
|
|
1418
|
+
AI: Fixed! I replaced "WCMP" with "WCNP" (3 occurrences) and added
|
|
1419
|
+
WCNP to your vocabulary for future transcripts.
|
|
1420
|
+
```
|
|
1421
|
+
|
|
1422
|
+
**Combine Transcripts:**
|
|
1423
|
+
```
|
|
1424
|
+
Human: Combine these three meeting parts into one:
|
|
1425
|
+
~/notes/meeting-part1.md
|
|
1426
|
+
~/notes/meeting-part2.md
|
|
1427
|
+
~/notes/meeting-part3.md
|
|
1428
|
+
|
|
1429
|
+
AI: [calls protokoll_combine_transcripts]
|
|
1430
|
+
|
|
1431
|
+
AI: Combined into ~/notes/16-1400-full-meeting.md
|
|
1432
|
+
The source files have been deleted.
|
|
1433
|
+
```
|
|
1434
|
+
|
|
1435
|
+
### Configuration Hierarchy
|
|
1436
|
+
|
|
1437
|
+
The MCP server respects Protokoll's hierarchical configuration:
|
|
1438
|
+
|
|
1439
|
+
```
|
|
1440
|
+
~/
|
|
1441
|
+
├── .protokoll/ # Global config (shared context)
|
|
1442
|
+
│ ├── config.yaml
|
|
1443
|
+
│ ├── people/ # People you mention across all projects
|
|
1444
|
+
│ └── companies/
|
|
1445
|
+
└── work/
|
|
1446
|
+
└── client-alpha/
|
|
1447
|
+
└── .protokoll/ # Project-specific (overrides global)
|
|
1448
|
+
├── config.yaml # Client-specific settings
|
|
1449
|
+
├── people/ # Client Alpha contacts
|
|
1450
|
+
└── projects/ # Routing for this client
|
|
1451
|
+
```
|
|
1452
|
+
|
|
1453
|
+
When processing a file, the nearest `.protokoll` takes precedence, but inherits from parent directories.
|
|
1454
|
+
|
|
1455
|
+
### Best Practices
|
|
1456
|
+
|
|
1457
|
+
1. **Create project-specific configs** when you have different routing needs
|
|
1458
|
+
2. **Use global config** for shared context (common terms, general contacts)
|
|
1459
|
+
3. **Let the AI discover** - it will ask when clarification is needed
|
|
1460
|
+
4. **Accept context suggestions** - when the AI offers to add terms/people, say yes
|
|
1461
|
+
|
|
1462
|
+
For complete documentation, see the [MCP Integration Guide](./guide/mcp-integration.md).
|
|
1463
|
+
|
|
852
1464
|
## Architecture
|
|
853
1465
|
|
|
854
1466
|
Protokoll is built with a modular architecture designed for extensibility:
|