@redaksjon/protokoll 0.0.12 → 0.0.13

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 (75) 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 +483 -69
  4. package/dist/agentic/executor.js +473 -41
  5. package/dist/agentic/executor.js.map +1 -1
  6. package/dist/agentic/index.js.map +1 -1
  7. package/dist/agentic/tools/lookup-person.js +123 -4
  8. package/dist/agentic/tools/lookup-person.js.map +1 -1
  9. package/dist/agentic/tools/lookup-project.js +139 -22
  10. package/dist/agentic/tools/lookup-project.js.map +1 -1
  11. package/dist/agentic/tools/route-note.js +5 -1
  12. package/dist/agentic/tools/route-note.js.map +1 -1
  13. package/dist/arguments.js +6 -3
  14. package/dist/arguments.js.map +1 -1
  15. package/dist/cli/action.js +704 -0
  16. package/dist/cli/action.js.map +1 -0
  17. package/dist/cli/config.js +482 -0
  18. package/dist/cli/config.js.map +1 -0
  19. package/dist/cli/context.js +466 -0
  20. package/dist/cli/context.js.map +1 -0
  21. package/dist/cli/feedback.js +858 -0
  22. package/dist/cli/feedback.js.map +1 -0
  23. package/dist/cli/index.js +103 -0
  24. package/dist/cli/index.js.map +1 -0
  25. package/dist/cli/install.js +572 -0
  26. package/dist/cli/install.js.map +1 -0
  27. package/dist/cli/transcript.js +199 -0
  28. package/dist/cli/transcript.js.map +1 -0
  29. package/dist/constants.js +11 -4
  30. package/dist/constants.js.map +1 -1
  31. package/dist/context/index.js +25 -1
  32. package/dist/context/index.js.map +1 -1
  33. package/dist/context/storage.js +56 -3
  34. package/dist/context/storage.js.map +1 -1
  35. package/dist/interactive/handler.js +310 -9
  36. package/dist/interactive/handler.js.map +1 -1
  37. package/dist/main.js +11 -1
  38. package/dist/main.js.map +1 -1
  39. package/dist/output/index.js.map +1 -1
  40. package/dist/output/manager.js +46 -1
  41. package/dist/output/manager.js.map +1 -1
  42. package/dist/phases/complete.js +37 -2
  43. package/dist/phases/complete.js.map +1 -1
  44. package/dist/pipeline/orchestrator.js +104 -31
  45. package/dist/pipeline/orchestrator.js.map +1 -1
  46. package/dist/protokoll.js +68 -2
  47. package/dist/protokoll.js.map +1 -1
  48. package/dist/reasoning/client.js +83 -0
  49. package/dist/reasoning/client.js.map +1 -1
  50. package/dist/reasoning/index.js +1 -0
  51. package/dist/reasoning/index.js.map +1 -1
  52. package/dist/util/metadata.js.map +1 -1
  53. package/dist/util/sound.js +116 -0
  54. package/dist/util/sound.js.map +1 -0
  55. package/docs/duplicate-question-prevention.md +117 -0
  56. package/docs/examples.md +152 -0
  57. package/docs/interactive-context-example.md +92 -0
  58. package/docs/package-lock.json +6 -0
  59. package/docs/package.json +3 -1
  60. package/guide/action.md +375 -0
  61. package/guide/config.md +207 -0
  62. package/guide/configuration.md +82 -67
  63. package/guide/context-commands.md +574 -0
  64. package/guide/context-system.md +20 -7
  65. package/guide/development.md +106 -4
  66. package/guide/feedback.md +335 -0
  67. package/guide/index.md +100 -4
  68. package/guide/interactive.md +15 -14
  69. package/guide/quickstart.md +21 -7
  70. package/guide/reasoning.md +18 -4
  71. package/guide/routing.md +192 -97
  72. package/package.json +1 -1
  73. package/scripts/coverage-priority.mjs +323 -0
  74. package/tsconfig.tsbuildinfo +1 -1
  75. package/vitest.config.ts +5 -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)
@@ -115,15 +122,15 @@ You're drowning in voice memos but can't use them because they're disorganized.
115
122
 
116
123
  ### Who Should Use Protokoll
117
124
 
118
- **Product Managers**: Record customer conversations, feature ideas, meeting notes—Protokoll routes them to projects automatically
125
+ **Product Managers**: Record customer conversations, feature ideas, meeting notes—Protokoll routes them to projects automatically
119
126
 
120
- **Researchers**: Capture interview insights, lab notes, findings—build a growing knowledge base that improves over time
127
+ **Researchers**: Capture interview insights, lab notes, findings—build a growing knowledge base that improves over time
121
128
 
122
- **Authors & Creators**: Dictate ideas, chapter notes, research—get organized files without manual organization
129
+ **Authors & Creators**: Dictate ideas, chapter notes, research—get organized files without manual organization
123
130
 
124
- **Managers**: Record 1-on-1s, team meetings, strategy sessions—automatic routing means they're never lost
131
+ **Managers**: Record 1-on-1s, team meetings, strategy sessions—automatic routing means they're never lost
125
132
 
126
- **Teams**: Self-hosted means your transcripts never leave your server—perfect for regulated industries
133
+ **Teams**: Self-hosted means your transcripts never leave your server—perfect for regulated industries
127
134
 
128
135
  ## Prerequisites
129
136
 
@@ -209,10 +216,20 @@ EOF
209
216
  cat > ~/.protokoll/projects/work.yaml << EOF
210
217
  id: work
211
218
  name: Work Notes
212
- destination: ~/work/notes
213
- triggers:
214
- - "work note"
215
- - "work meeting"
219
+ type: project
220
+ classification:
221
+ context_type: work
222
+ explicit_phrases:
223
+ - "work note"
224
+ - "work meeting"
225
+ routing:
226
+ destination: ~/work/notes
227
+ structure: month
228
+ filename_options:
229
+ - date
230
+ - time
231
+ - subject
232
+ active: true
216
233
  EOF
217
234
 
218
235
  # 4. Now transcribe - names are corrected, routing is automatic
@@ -230,6 +247,50 @@ protokoll --input-directory ~/recordings
230
247
  3. **Routing**: Notes automatically go to the right folder based on content
231
248
  4. **Output**: You get markdown files with perfect names, proper organization, and full content
232
249
 
250
+ ### Progress Tracking
251
+
252
+ When processing multiple files, Protokoll shows clear progress indicators so you always know where you are:
253
+
254
+ ```
255
+ Found 11 file(s) to process in ~/recordings
256
+ [1/11] Starting: ~/recordings/meeting-notes.m4a
257
+ [1/11] Transcribing audio...
258
+ [1/11] Transcription: 2847 chars in 3.2s
259
+ [1/11] Enhancing with gpt-5.2...
260
+ [1/11] Enhancement: 3 iterations, 2 tools, 4.1s
261
+ [1/11] Output: ~/notes/2026/01/260115-1412-meeting-notes.md (7.3s total)
262
+ [1/11] Completed: ~/recordings/meeting-notes.m4a -> ~/notes/2026/01/260115-1412-meeting-notes.md
263
+ [2/11] Starting: ~/recordings/quick-thought.m4a
264
+ ...
265
+ ```
266
+
267
+ 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.
268
+
269
+ ### Transcription Summary
270
+
271
+ When batch processing completes, Protokoll prints a summary of all processed files:
272
+
273
+ ```
274
+ ============================================================
275
+ TRANSCRIPTION SUMMARY
276
+ ============================================================
277
+ Processed 11 file(s)
278
+
279
+ Input Files:
280
+ /Users/me/recordings/meeting-notes.m4a
281
+ /Users/me/recordings/quick-thought.m4a
282
+ /Users/me/recordings/client-call.m4a
283
+
284
+ Output Files:
285
+ /Users/me/notes/2026/01/260115-1412-meeting-notes.md
286
+ /Users/me/notes/2026/01/260115-1430-quick-thought.md
287
+ /Users/me/notes/2026/01/260115-1500-client-call.md
288
+
289
+ ============================================================
290
+ ```
291
+
292
+ 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.
293
+
233
294
  ### Where Are My Files?
234
295
 
235
296
  ```bash
@@ -268,6 +329,54 @@ Protokoll uses hierarchical configuration discovery. It walks up the directory t
268
329
  - **Global**: `~/.protokoll/config.yaml`
269
330
  - **Project-specific**: `./protokoll/config.yaml` (in any parent directory)
270
331
 
332
+ ### Interactive Configuration Editor
333
+
334
+ The easiest way to configure Protokoll is with the interactive config command:
335
+
336
+ ```bash
337
+ # Launch interactive configuration editor
338
+ protokoll config
339
+ ```
340
+
341
+ This opens a guided editor that walks through each setting:
342
+
343
+ ```
344
+ ╔════════════════════════════════════════════════════════════════╗
345
+ ║ PROTOKOLL CONFIGURATION EDITOR ║
346
+ ╚════════════════════════════════════════════════════════════════╝
347
+
348
+ Config file: ~/.protokoll/config.yaml
349
+
350
+ ── AI Models ──
351
+
352
+ model
353
+ AI model for transcription enhancement
354
+ Examples: gpt-5.2, gpt-4o, gpt-4o-mini, claude-3-5-sonnet
355
+ Current: default: gpt-5.2
356
+ New value (Enter to skip):
357
+ ```
358
+
359
+ ### Quick Configuration Commands
360
+
361
+ Set individual values directly from the command line:
362
+
363
+ ```bash
364
+ # View all settings
365
+ protokoll config --list
366
+
367
+ # View a specific setting
368
+ protokoll config model
369
+
370
+ # Set a specific value
371
+ protokoll config model gpt-4o-mini
372
+ protokoll config debug true
373
+ protokoll config outputDirectory ~/my-notes
374
+ protokoll config outputFilenameOptions "date,time,subject"
375
+
376
+ # Show config file path
377
+ protokoll config --path
378
+ ```
379
+
271
380
  ### Full Configuration Example
272
381
 
273
382
  Create `~/.protokoll/config.yaml`:
@@ -277,47 +386,31 @@ Create `~/.protokoll/config.yaml`:
277
386
  model: "gpt-5.2" # Reasoning model (default with high reasoning)
278
387
  transcriptionModel: "whisper-1" # Transcription model
279
388
 
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
389
+ # Directory settings (Dreadcabinet options)
390
+ inputDirectory: "./recordings" # Where to find audio files
391
+ outputDirectory: "~/notes" # Where to write transcripts
392
+ outputStructure: "month" # Directory structure (none, year, month, day)
393
+ outputFilenameOptions: # Filename components
394
+ - date
395
+ - time
396
+ - subject
397
+
398
+ # Processing options
399
+ processedDirectory: "./processed" # Move processed audio here (optional)
400
+
401
+ # Feature flags (flat, not nested)
402
+ interactive: true # Interactive prompts (enabled by default)
403
+ selfReflection: true # Generate reports by default
404
+ silent: false # Sound notifications
405
+ debug: false # Debug mode
406
+
407
+ # Advanced
408
+ maxAudioSize: 26214400 # Max audio file size in bytes (25MB)
409
+ tempDirectory: "/tmp" # Temporary file storage
319
410
  ```
320
411
 
412
+ **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.
413
+
321
414
  ### Directory Structure Options
322
415
 
323
416
  Protokoll uses Dreadcabinet patterns for organizing output:
@@ -356,13 +449,16 @@ Combined example: `260111-1430-meeting-notes.md`
356
449
 
357
450
  | Option | Description |
358
451
  |--------|-------------|
359
- | `--interactive` | Enable interactive clarifications |
360
- | `--batch` | Disable interactivity (batch processing) |
361
- | `--self-reflection` | Generate reflection reports |
452
+ | `--batch` | Disable interactive mode (for automation) |
453
+ | `--self-reflection` | Generate reflection reports (default: true) |
454
+ | `--no-self-reflection` | Disable reflection reports |
455
+ | `--silent` | Disable sound notifications |
362
456
  | `--dry-run` | Show what would happen |
363
457
  | `--verbose` | Enable verbose logging |
364
458
  | `--debug` | Enable debug mode with intermediate files |
365
459
 
460
+ > **Note**: Interactive mode is **enabled by default**. Use `--batch` to disable it for automation/cron jobs.
461
+
366
462
  ### Advanced Options
367
463
 
368
464
  | Option | Description | Default |
@@ -373,6 +469,304 @@ Combined example: `260111-1430-meeting-notes.md`
373
469
  | `--max-audio-size <bytes>` | Max file size before splitting | `25MB` |
374
470
  | `--temp-directory <dir>` | Temp files for audio splitting | System temp |
375
471
 
472
+ ## Context Management Commands
473
+
474
+ 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.
475
+
476
+ ### Entity Types
477
+
478
+ | Command | Description |
479
+ |---------|-------------|
480
+ | `project` | Manage projects (routing destinations) |
481
+ | `person` | Manage people (name recognition) |
482
+ | `term` | Manage technical terms |
483
+ | `company` | Manage companies |
484
+ | `ignored` | Manage ignored terms (won't prompt for these) |
485
+ | `context` | Overall context system management |
486
+
487
+ ### Common Actions
488
+
489
+ Each entity type supports the same actions:
490
+
491
+ ```bash
492
+ # List all entities of a type
493
+ protokoll project list
494
+ protokoll person list
495
+ protokoll term list
496
+ protokoll company list
497
+ protokoll ignored list
498
+
499
+ # Show details for a specific entity
500
+ protokoll project show <id>
501
+ protokoll person show priya-sharma
502
+
503
+ # Add a new entity (interactive)
504
+ protokoll project add
505
+ protokoll person add
506
+ protokoll term add
507
+
508
+ # Delete an entity
509
+ protokoll project delete <id>
510
+ protokoll person delete john-smith --force
511
+ ```
512
+
513
+ ### Context Overview
514
+
515
+ ```bash
516
+ # Show context system status (discovered directories, entity counts)
517
+ protokoll context status
518
+
519
+ # Search across all entity types
520
+ protokoll context search "acme"
521
+ ```
522
+
523
+ ### Example: Adding a Person
524
+
525
+ ```bash
526
+ $ protokoll person add
527
+
528
+ [Add New Person]
529
+
530
+ Full name: Priya Sharma
531
+ ID (Enter for "priya-sharma"):
532
+ First name (Enter to skip): Priya
533
+ Last name (Enter to skip): Sharma
534
+ Company ID (Enter to skip): acme-corp
535
+ Role (Enter to skip): Product Manager
536
+ Sounds like (comma-separated, Enter to skip): pre a, pria, preeya
537
+ Context notes (Enter to skip): Colleague from product team
538
+
539
+ Person "Priya Sharma" saved successfully.
540
+ ```
541
+
542
+ ### Example: Adding a Project
543
+
544
+ ```bash
545
+ $ protokoll project add
546
+
547
+ [Add New Project]
548
+
549
+ Project name: Client Alpha
550
+ ID (Enter for "client-alpha"):
551
+ Output destination path: ~/clients/alpha/notes
552
+ Directory structure (none/year/month/day, Enter for month): month
553
+ Context type (work/personal/mixed, Enter for work): work
554
+ Trigger phrases (comma-separated): client alpha, alpha project
555
+ Topic keywords (comma-separated, Enter to skip): client engagement
556
+ Description (Enter to skip): Primary client project
557
+
558
+ Project "Client Alpha" saved successfully.
559
+ ```
560
+
561
+ ### Options
562
+
563
+ | Option | Description |
564
+ |--------|-------------|
565
+ | `-v, --verbose` | Show full details (for `list` commands) |
566
+ | `-f, --force` | Skip confirmation (for `delete` commands) |
567
+
568
+ For complete documentation, see the [Context Commands Guide](./guide/context-commands.md).
569
+
570
+ ## Transcript Actions
571
+
572
+ Protokoll includes the `action` command for editing and combining existing transcripts. This is useful for post-processing, organizing, and managing your transcript library.
573
+
574
+ ### Edit a Single Transcript
575
+
576
+ Change the title and/or project of an existing transcript:
577
+
578
+ ```bash
579
+ # Change the title (updates document heading and filename)
580
+ protokoll action --title "Time to Celebrate" /path/to/transcript.md
581
+
582
+ # Change the project (updates metadata and moves to project's destination)
583
+ protokoll action --project client-alpha /path/to/transcript.md
584
+
585
+ # Change both title and project
586
+ protokoll action --title "Q1 Planning Session" --project quarterly-planning /path/to/transcript.md
587
+
588
+ # Preview what would happen without making changes
589
+ protokoll action --title "New Title" /path/to/transcript.md --dry-run --verbose
590
+ ```
591
+
592
+ ### Combine Multiple Transcripts
593
+
594
+ Merge multiple related transcripts into a single document. When combining, source files are automatically deleted after the combined file is created.
595
+
596
+ ```bash
597
+ # Combine transcripts with a custom title
598
+ protokoll action --title "Time to Celebrate" --combine "/path/to/transcript1.md
599
+ /path/to/transcript2.md
600
+ /path/to/transcript3.md"
601
+
602
+ # Combine and change project
603
+ protokoll action --title "Full Meeting Notes" --project my-project --combine "/path/to/part1.md
604
+ /path/to/part2.md"
605
+
606
+ # Preview what would happen without making changes
607
+ protokoll action --combine "/path/to/files..." --dry-run --verbose
608
+ ```
609
+
610
+ #### What Combine Does
611
+
612
+ 1. **Parses all transcripts**: Extracts metadata, title, and content from each file
613
+ 2. **Sorts chronologically**: Orders transcripts by filename (which includes timestamp)
614
+ 3. **Merges metadata**: Uses the first transcript's date/time, combines durations, deduplicates tags
615
+ 4. **Creates sections**: Each source transcript becomes a section with its original title
616
+ 5. **Routes intelligently**: If `--project` is specified, uses that project's routing configuration
617
+ 6. **Cleans up**: Automatically deletes source files after successful combine
618
+
619
+ #### Action Options
620
+
621
+ | Option | Description |
622
+ |--------|-------------|
623
+ | `-t, --title <title>` | Set a custom title (also affects the output filename) |
624
+ | `-p, --project <id>` | Change to a different project (updates metadata and routing) |
625
+ | `-c, --combine <files>` | Combine multiple files (newline-separated list) |
626
+ | `--dry-run` | Show what would happen without making changes |
627
+ | `-v, --verbose` | Show detailed output |
628
+
629
+ #### Title Slugification
630
+
631
+ When you provide a custom title with `--title`, it's automatically converted to a filename-safe slug:
632
+
633
+ | Title | Filename |
634
+ |-------|----------|
635
+ | `Time to Celebrate` | `15-1412-time-to-celebrate.md` |
636
+ | `Meeting: Q1 Planning & Review!` | `15-1412-meeting-q1-planning-review.md` |
637
+ | `Sprint 42 Retrospective` | `15-1412-sprint-42-retrospective.md` |
638
+
639
+ The slug preserves the original timestamp prefix and is limited to 50 characters.
640
+
641
+ #### Common Use Cases
642
+
643
+ ```bash
644
+ # Rename a transcript with a more meaningful title
645
+ protokoll action --title "Q1 Budget Review Meeting" ~/notes/2026/01/15-1412-meeting.md
646
+
647
+ # Move a transcript to a different project
648
+ protokoll action --project client-beta ~/notes/2026/01/15-1412-meeting.md
649
+
650
+ # Consolidate a long meeting recorded in segments
651
+ protokoll action --title "Full Team Standup" --combine "~/notes/part1.md
652
+ ~/notes/part2.md
653
+ ~/notes/part3.md"
654
+
655
+ # Reorganize scattered notes into a project
656
+ protokoll action --title "Sprint 42 Planning" --project sprint-42 --combine "~/notes/misc1.md
657
+ ~/notes/misc2.md"
658
+ ```
659
+
660
+ #### Example Output
661
+
662
+ When combining transcripts, the output looks like:
663
+
664
+ ```markdown
665
+ # Meeting Notes Part 1 (Combined)
666
+
667
+ ## Metadata
668
+
669
+ **Date**: January 15, 2026
670
+ **Time**: 02:12 PM
671
+
672
+ **Project**: AI Safety
673
+ **Project ID**: `ai-safety`
674
+
675
+ ### Routing
676
+
677
+ **Destination**: /Users/you/notes/ai-safety
678
+ **Confidence**: 85.0%
679
+
680
+ **Tags**: `work`, `ai`, `safety`, `meeting`
681
+
682
+ **Duration**: 15m 30s
683
+
684
+ ---
685
+
686
+ ## Meeting Notes Part 1
687
+ *Source: 15-1412-meeting-part-1.md*
688
+
689
+ First part of the meeting content...
690
+
691
+ ## Meeting Notes Part 2
692
+ *Source: 15-1421-meeting-part-2.md*
693
+
694
+ Second part of the meeting content...
695
+ ```
696
+
697
+ For complete documentation, see the [Action Commands Guide](./guide/action.md).
698
+
699
+ ## Feedback Command
700
+
701
+ The `feedback` command uses an agentic model to understand natural language feedback and take corrective actions automatically.
702
+
703
+ ### Basic Usage
704
+
705
+ ```bash
706
+ # Interactive feedback
707
+ protokoll feedback /path/to/transcript.md
708
+
709
+ # Direct feedback
710
+ protokoll feedback /path/to/transcript.md -f "YB should be Wibey"
711
+
712
+ # Preview changes
713
+ protokoll feedback /path/to/transcript.md -f "WCMP should be WCNP" --dry-run -v
714
+ ```
715
+
716
+ ### What You Can Do
717
+
718
+ #### Fix Terms & Abbreviations
719
+
720
+ ```bash
721
+ protokoll feedback notes.md -f "WCMP should be WCNP - Walmart's Native Cloud Platform"
722
+ ```
723
+
724
+ This will:
725
+ 1. Replace "WCMP" with "WCNP" throughout the transcript
726
+ 2. Add "WCNP" to your vocabulary with the full expansion
727
+ 3. Store phonetic variants so it won't be misheard again
728
+
729
+ #### Fix Names
730
+
731
+ ```bash
732
+ protokoll feedback notes.md -f "San Jay Grouper is actually Sanjay Gupta"
733
+ ```
734
+
735
+ This will:
736
+ 1. Replace the name throughout the transcript
737
+ 2. Fix variations like "San Jay" or "Sanjay Grouper"
738
+ 3. Add the person to context for future recognition
739
+
740
+ #### Change Project Assignment
741
+
742
+ ```bash
743
+ protokoll feedback notes.md -f "This should be in the Quantum Readiness project"
744
+ ```
745
+
746
+ This will:
747
+ 1. Update the project metadata
748
+ 2. Move the file to the project's destination
749
+ 3. Rename the file according to project rules
750
+
751
+ ### Feedback Options
752
+
753
+ | Option | Short | Description |
754
+ |--------|-------|-------------|
755
+ | `--feedback <text>` | `-f` | Provide feedback directly (non-interactive) |
756
+ | `--model <model>` | `-m` | Reasoning model to use (default: gpt-5.2) |
757
+ | `--dry-run` | | Show what would happen without making changes |
758
+ | `--verbose` | `-v` | Show detailed output |
759
+ | `--help-me` | | Show examples of feedback you can provide |
760
+
761
+ ### Get Help
762
+
763
+ ```bash
764
+ # Show feedback examples
765
+ protokoll feedback --help-me
766
+ ```
767
+
768
+ For complete documentation, see the [Feedback Guide](./guide/feedback.md).
769
+
376
770
  ## Key Features
377
771
 
378
772
  ### Intelligent Name Recognition
@@ -462,13 +856,26 @@ context: "Colleague from engineering team"
462
856
  # ~/.protokoll/projects/quarterly-planning.yaml
463
857
  id: quarterly-planning
464
858
  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"
859
+ type: project
860
+
861
+ classification:
862
+ context_type: work
863
+ explicit_phrases:
864
+ - "quarterly planning"
865
+ - "Q1 planning"
866
+ - "roadmap review"
867
+ topics:
868
+ - "roadmap"
869
+ - "budget"
870
+
871
+ routing:
872
+ destination: "~/work/planning/notes"
873
+ structure: "month"
874
+ filename_options:
875
+ - date
876
+ - time
877
+ - subject
878
+
472
879
  active: true
473
880
  ```
474
881
 
@@ -601,14 +1008,21 @@ Is this correct? (Y/Enter to accept, or enter different path):
601
1008
  > y
602
1009
  ```
603
1010
 
604
- ### How to Enable Interactive Mode
1011
+ ### How to Use Interactive Mode
1012
+
1013
+ Interactive mode is **enabled by default**. Simply run:
605
1014
 
606
1015
  ```bash
607
- # Single run with interactive mode
608
- protokoll --input-directory ~/recordings --interactive
1016
+ protokoll --input-directory ~/recordings
1017
+ ```
1018
+
1019
+ To disable interactive mode (for automation/cron jobs):
1020
+
1021
+ ```bash
1022
+ protokoll --input-directory ~/recordings --batch
609
1023
 
610
- # Set as default in config
611
- echo "interactive: true" >> ~/.protokoll/config.yaml
1024
+ # Or set in config
1025
+ echo "interactive: false" >> ~/.protokoll/config.yaml
612
1026
  ```
613
1027
 
614
1028
  ### First-Run Onboarding