@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.
- package/.cursor/rules/definition-of-done.md +1 -0
- package/.cursor/rules/no-emoticons.md +26 -12
- package/README.md +483 -69
- package/dist/agentic/executor.js +473 -41
- package/dist/agentic/executor.js.map +1 -1
- package/dist/agentic/index.js.map +1 -1
- package/dist/agentic/tools/lookup-person.js +123 -4
- package/dist/agentic/tools/lookup-person.js.map +1 -1
- package/dist/agentic/tools/lookup-project.js +139 -22
- package/dist/agentic/tools/lookup-project.js.map +1 -1
- package/dist/agentic/tools/route-note.js +5 -1
- package/dist/agentic/tools/route-note.js.map +1 -1
- package/dist/arguments.js +6 -3
- package/dist/arguments.js.map +1 -1
- package/dist/cli/action.js +704 -0
- package/dist/cli/action.js.map +1 -0
- package/dist/cli/config.js +482 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/context.js +466 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/feedback.js +858 -0
- package/dist/cli/feedback.js.map +1 -0
- package/dist/cli/index.js +103 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/install.js +572 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/transcript.js +199 -0
- package/dist/cli/transcript.js.map +1 -0
- package/dist/constants.js +11 -4
- package/dist/constants.js.map +1 -1
- package/dist/context/index.js +25 -1
- package/dist/context/index.js.map +1 -1
- package/dist/context/storage.js +56 -3
- package/dist/context/storage.js.map +1 -1
- package/dist/interactive/handler.js +310 -9
- package/dist/interactive/handler.js.map +1 -1
- package/dist/main.js +11 -1
- package/dist/main.js.map +1 -1
- package/dist/output/index.js.map +1 -1
- package/dist/output/manager.js +46 -1
- package/dist/output/manager.js.map +1 -1
- package/dist/phases/complete.js +37 -2
- package/dist/phases/complete.js.map +1 -1
- package/dist/pipeline/orchestrator.js +104 -31
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/protokoll.js +68 -2
- package/dist/protokoll.js.map +1 -1
- package/dist/reasoning/client.js +83 -0
- package/dist/reasoning/client.js.map +1 -1
- package/dist/reasoning/index.js +1 -0
- package/dist/reasoning/index.js.map +1 -1
- package/dist/util/metadata.js.map +1 -1
- package/dist/util/sound.js +116 -0
- package/dist/util/sound.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 +100 -4
- package/guide/interactive.md +15 -14
- package/guide/quickstart.md +21 -7
- package/guide/reasoning.md +18 -4
- package/guide/routing.md +192 -97
- package/package.json +1 -1
- package/scripts/coverage-priority.mjs +323 -0
- package/tsconfig.tsbuildinfo +1 -1
- 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
|
-
-
|
|
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)
|
|
@@ -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
|
-
|
|
125
|
+
**Product Managers**: Record customer conversations, feature ideas, meeting notes—Protokoll routes them to projects automatically
|
|
119
126
|
|
|
120
|
-
|
|
127
|
+
**Researchers**: Capture interview insights, lab notes, findings—build a growing knowledge base that improves over time
|
|
121
128
|
|
|
122
|
-
|
|
129
|
+
**Authors & Creators**: Dictate ideas, chapter notes, research—get organized files without manual organization
|
|
123
130
|
|
|
124
|
-
|
|
131
|
+
**Managers**: Record 1-on-1s, team meetings, strategy sessions—automatic routing means they're never lost
|
|
125
132
|
|
|
126
|
-
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
-
#
|
|
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
|
|
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
|
-
| `--
|
|
360
|
-
| `--
|
|
361
|
-
| `--self-reflection` |
|
|
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
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
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
|
|
1011
|
+
### How to Use Interactive Mode
|
|
1012
|
+
|
|
1013
|
+
Interactive mode is **enabled by default**. Simply run:
|
|
605
1014
|
|
|
606
1015
|
```bash
|
|
607
|
-
|
|
608
|
-
|
|
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
|
-
#
|
|
611
|
-
echo "interactive:
|
|
1024
|
+
# Or set in config
|
|
1025
|
+
echo "interactive: false" >> ~/.protokoll/config.yaml
|
|
612
1026
|
```
|
|
613
1027
|
|
|
614
1028
|
### First-Run Onboarding
|