@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.
Files changed (112) hide show
  1. package/.cursor/rules/definition-of-done.md +1 -0
  2. package/.cursor/rules/no-emoticons.md +26 -12
  3. package/README.md +681 -69
  4. package/dist/feedback.js +5193 -0
  5. package/dist/feedback.js.map +1 -0
  6. package/dist/main.js +1861 -2
  7. package/dist/main.js.map +1 -1
  8. package/dist/mcp/server.js +1330 -0
  9. package/dist/mcp/server.js.map +1 -0
  10. package/docs/duplicate-question-prevention.md +117 -0
  11. package/docs/examples.md +152 -0
  12. package/docs/interactive-context-example.md +92 -0
  13. package/docs/package-lock.json +6 -0
  14. package/docs/package.json +3 -1
  15. package/guide/action.md +375 -0
  16. package/guide/config.md +207 -0
  17. package/guide/configuration.md +82 -67
  18. package/guide/context-commands.md +574 -0
  19. package/guide/context-system.md +20 -7
  20. package/guide/development.md +106 -4
  21. package/guide/feedback.md +335 -0
  22. package/guide/index.md +116 -4
  23. package/guide/interactive.md +15 -14
  24. package/guide/mcp-integration.md +341 -0
  25. package/guide/quickstart.md +21 -7
  26. package/guide/reasoning.md +18 -4
  27. package/guide/routing.md +192 -97
  28. package/package.json +5 -3
  29. package/scripts/coverage-priority.mjs +323 -0
  30. package/tsconfig.tsbuildinfo +1 -1
  31. package/vite.config.ts +13 -29
  32. package/vitest.config.ts +5 -1
  33. package/dist/agentic/executor.js +0 -315
  34. package/dist/agentic/executor.js.map +0 -1
  35. package/dist/agentic/index.js +0 -19
  36. package/dist/agentic/index.js.map +0 -1
  37. package/dist/agentic/registry.js +0 -41
  38. package/dist/agentic/registry.js.map +0 -1
  39. package/dist/agentic/tools/lookup-person.js +0 -66
  40. package/dist/agentic/tools/lookup-person.js.map +0 -1
  41. package/dist/agentic/tools/lookup-project.js +0 -93
  42. package/dist/agentic/tools/lookup-project.js.map +0 -1
  43. package/dist/agentic/tools/route-note.js +0 -45
  44. package/dist/agentic/tools/route-note.js.map +0 -1
  45. package/dist/agentic/tools/store-context.js +0 -51
  46. package/dist/agentic/tools/store-context.js.map +0 -1
  47. package/dist/agentic/tools/verify-spelling.js +0 -57
  48. package/dist/agentic/tools/verify-spelling.js.map +0 -1
  49. package/dist/arguments.js +0 -175
  50. package/dist/arguments.js.map +0 -1
  51. package/dist/constants.js +0 -84
  52. package/dist/constants.js.map +0 -1
  53. package/dist/context/discovery.js +0 -114
  54. package/dist/context/discovery.js.map +0 -1
  55. package/dist/context/index.js +0 -58
  56. package/dist/context/index.js.map +0 -1
  57. package/dist/context/storage.js +0 -131
  58. package/dist/context/storage.js.map +0 -1
  59. package/dist/interactive/handler.js +0 -223
  60. package/dist/interactive/handler.js.map +0 -1
  61. package/dist/interactive/index.js +0 -18
  62. package/dist/interactive/index.js.map +0 -1
  63. package/dist/interactive/onboarding.js +0 -28
  64. package/dist/interactive/onboarding.js.map +0 -1
  65. package/dist/logging.js +0 -46
  66. package/dist/logging.js.map +0 -1
  67. package/dist/output/index.js +0 -8
  68. package/dist/output/index.js.map +0 -1
  69. package/dist/output/manager.js +0 -105
  70. package/dist/output/manager.js.map +0 -1
  71. package/dist/phases/complete.js +0 -107
  72. package/dist/phases/complete.js.map +0 -1
  73. package/dist/phases/locate.js +0 -64
  74. package/dist/phases/locate.js.map +0 -1
  75. package/dist/pipeline/index.js +0 -8
  76. package/dist/pipeline/index.js.map +0 -1
  77. package/dist/pipeline/orchestrator.js +0 -281
  78. package/dist/pipeline/orchestrator.js.map +0 -1
  79. package/dist/protokoll.js +0 -114
  80. package/dist/protokoll.js.map +0 -1
  81. package/dist/reasoning/client.js +0 -150
  82. package/dist/reasoning/client.js.map +0 -1
  83. package/dist/reasoning/index.js +0 -36
  84. package/dist/reasoning/index.js.map +0 -1
  85. package/dist/reasoning/strategy.js +0 -60
  86. package/dist/reasoning/strategy.js.map +0 -1
  87. package/dist/reflection/collector.js +0 -124
  88. package/dist/reflection/collector.js.map +0 -1
  89. package/dist/reflection/index.js +0 -16
  90. package/dist/reflection/index.js.map +0 -1
  91. package/dist/reflection/reporter.js +0 -238
  92. package/dist/reflection/reporter.js.map +0 -1
  93. package/dist/routing/classifier.js +0 -201
  94. package/dist/routing/classifier.js.map +0 -1
  95. package/dist/routing/index.js +0 -27
  96. package/dist/routing/index.js.map +0 -1
  97. package/dist/routing/router.js +0 -153
  98. package/dist/routing/router.js.map +0 -1
  99. package/dist/transcription/index.js +0 -41
  100. package/dist/transcription/index.js.map +0 -1
  101. package/dist/transcription/service.js +0 -64
  102. package/dist/transcription/service.js.map +0 -1
  103. package/dist/transcription/types.js +0 -31
  104. package/dist/transcription/types.js.map +0 -1
  105. package/dist/util/dates.js +0 -96
  106. package/dist/util/dates.js.map +0 -1
  107. package/dist/util/media.js +0 -103
  108. package/dist/util/media.js.map +0 -1
  109. package/dist/util/metadata.js +0 -95
  110. package/dist/util/metadata.js.map +0 -1
  111. package/dist/util/storage.js +0 -135
  112. 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
- - **🧠 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
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 --interactive` 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.
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
- **Product Managers**: Record customer conversations, feature ideas, meeting notes—Protokoll routes them to projects automatically
126
+ **Product Managers**: Record customer conversations, feature ideas, meeting notes—Protokoll routes them to projects automatically
119
127
 
120
- **Researchers**: Capture interview insights, lab notes, findings—build a growing knowledge base that improves over time
128
+ **Researchers**: Capture interview insights, lab notes, findings—build a growing knowledge base that improves over time
121
129
 
122
- **Authors & Creators**: Dictate ideas, chapter notes, research—get organized files without manual organization
130
+ **Authors & Creators**: Dictate ideas, chapter notes, research—get organized files without manual organization
123
131
 
124
- **Managers**: Record 1-on-1s, team meetings, strategy sessions—automatic routing means they're never lost
132
+ **Managers**: Record 1-on-1s, team meetings, strategy sessions—automatic routing means they're never lost
125
133
 
126
- **Teams**: Self-hosted means your transcripts never leave your server—perfect for regulated industries
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
- destination: ~/work/notes
213
- triggers:
214
- - "work note"
215
- - "work meeting"
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
- # Feature flags
281
- interactive: false # Enable by default?
282
- selfReflection: false # Generate reports by default?
283
- debug: false # Debug mode
284
-
285
- # Output settings
286
- output:
287
- intermediateDir: "./output/protokoll"
288
- keepIntermediates: true
289
- timestampFormat: "YYMMDD-HHmm"
290
-
291
- # Default routing
292
- routing:
293
- default:
294
- path: "~/notes"
295
- structure: "month" # none, year, month, or day
296
- filename_options:
297
- - date
298
- - time
299
- - subject
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
- | `--interactive` | Enable interactive clarifications |
360
- | `--batch` | Disable interactivity (batch processing) |
361
- | `--self-reflection` | Generate reflection reports |
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
- category: work
466
- destination: "~/work/planning/notes"
467
- structure: "month"
468
- triggers:
469
- - "quarterly planning"
470
- - "Q1 planning"
471
- - "roadmap review"
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 Enable Interactive Mode
1012
+ ### How to Use Interactive Mode
1013
+
1014
+ Interactive mode is **enabled by default**. Simply run:
605
1015
 
606
1016
  ```bash
607
- # Single run with interactive mode
608
- protokoll --input-directory ~/recordings --interactive
1017
+ protokoll --input-directory ~/recordings
1018
+ ```
1019
+
1020
+ To disable interactive mode (for automation/cron jobs):
609
1021
 
610
- # Set as default in config
611
- echo "interactive: true" >> ~/.protokoll/config.yaml
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: