@redaksjon/protokoll 0.0.15 → 0.2.0

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.
@@ -42,77 +42,303 @@ Projects define routing destinations and classification rules.
42
42
  protokoll project list
43
43
  ```
44
44
 
45
- Output:
45
+ Output (compact table with row numbers):
46
46
  ```
47
47
  Projects (3):
48
48
 
49
- quarterly-planning Quarterly Planning -> ~/work/planning/notes
50
- personal Personal Notes -> ~/notes [inactive]
51
- work Work Notes -> ~/work/notes
49
+ ┌─────┬────────────────────┬────────────────────┬───────────────────────────┐
50
+ # │ ID │ Name │ Info │
51
+ ├─────┼────────────────────┼────────────────────┼───────────────────────────┤
52
+ │ 1 │ personal │ Personal Notes │ INACTIVE → ~/notes │
53
+ ├─────┼────────────────────┼────────────────────┼───────────────────────────┤
54
+ │ 2 │ quarterly-planning │ Quarterly Planning │ → ~/work/planning/notes │
55
+ ├─────┼────────────────────┼────────────────────┼───────────────────────────┤
56
+ │ 3 │ work │ Work Notes │ → ~/work/notes │
57
+ └─────┴────────────────────┴────────────────────┴───────────────────────────┘
58
+
59
+ Use "project show <id>" or "project show <#>" to see full details for any entry.
52
60
  ```
53
61
 
54
- With verbose output:
62
+ The table uses fixed column widths and truncates long paths intelligently. For full details including descriptions, trigger phrases, and all configuration, use either the ID or row number:
55
63
  ```bash
56
- protokoll project list --verbose
64
+ protokoll project show walmart # By ID
65
+ protokoll project show 6 # By row number from list
57
66
  ```
58
67
 
59
- Shows full YAML for each project.
68
+ Or for verbose output with full YAML details:
69
+ ```bash
70
+ protokoll project list --verbose
71
+ ```
60
72
 
61
73
  ### Show Project Details
62
74
 
75
+ You can show details using either the ID or the row number from the list:
76
+
63
77
  ```bash
64
- protokoll project show quarterly-planning
78
+ protokoll project show quarterly-planning # By ID
79
+ protokoll project show 2 # By row number
65
80
  ```
66
81
 
67
- Output:
82
+ Output (formatted table):
68
83
  ```
69
84
  Project: Quarterly Planning
70
85
 
71
- id: quarterly-planning
72
- name: Quarterly Planning
73
- type: project
74
- classification:
75
- context_type: work
76
- explicit_phrases:
77
- - quarterly planning
78
- - Q1 planning
79
- topics:
80
- - roadmap
81
- - budget
82
- routing:
83
- destination: ~/work/planning/notes
84
- structure: month
85
- filename_options:
86
- - date
87
- - time
88
- - subject
89
- active: true
86
+ ┌─────────────────────┬────────────────────────────────────────────┐
87
+ ID │ quarterly-planning │
88
+ ├─────────────────────┼────────────────────────────────────────────┤
89
+ │ Name │ Quarterly Planning │
90
+ ├─────────────────────┼────────────────────────────────────────────┤
91
+ │ Type │ project │
92
+ ├─────────────────────┼────────────────────────────────────────────┤
93
+ Context Type │ work │
94
+ ├─────────────────────┼────────────────────────────────────────────┤
95
+ Trigger Phrases │ • quarterly planning │
96
+ │ │ • Q1 planning │
97
+ ├─────────────────────┼────────────────────────────────────────────┤
98
+ Topics │ • roadmap │
99
+ │ │ • budget │
100
+ ├─────────────────────┼────────────────────────────────────────────┤
101
+ Destination │ ~/work/planning/notes │
102
+ ├─────────────────────┼────────────────────────────────────────────┤
103
+ Directory Structure │ month │
104
+ ├─────────────────────┼────────────────────────────────────────────┤
105
+ │ Filename Options │ • date │
106
+ │ │ • time │
107
+ │ │ • subject │
108
+ ├─────────────────────┼────────────────────────────────────────────┤
109
+ │ Sounds Like │ • quarterly plan │
110
+ │ │ • quarter planning │
111
+ ├─────────────────────┼────────────────────────────────────────────┤
112
+ │ Active │ true │
113
+ └─────────────────────┴────────────────────────────────────────────┘
90
114
 
91
115
  File: /Users/you/.protokoll/projects/quarterly-planning.yaml
92
116
  ```
93
117
 
118
+ The formatted output makes it easy to read all fields. Arrays are displayed as bullet points, and nested objects are expanded in a readable format.
119
+
94
120
  ### Add a Project
95
121
 
96
122
  ```bash
97
123
  protokoll project add
98
124
  ```
99
125
 
100
- Interactive prompts:
126
+ For the best experience, provide the project name on the command line:
127
+
128
+ ```bash
129
+ protokoll project add --name "Client Alpha"
130
+ ```
131
+
132
+ The streamlined process uses sensible defaults and focuses on the smart assistance features:
133
+
101
134
  ```
102
135
  [Add New Project]
103
136
 
104
137
  Project name: Client Alpha
105
- ID (Enter for "client-alpha"):
106
- Output destination path: ~/clients/alpha/notes
107
- Directory structure (none/year/month/day, Enter for month): month
108
- Context type (work/personal/mixed, Enter for work): work
109
- Trigger phrases (comma-separated): client alpha, alpha project, working on alpha
110
- Topic keywords (comma-separated, Enter to skip): client engagement, consulting
111
- Description (Enter to skip): Primary client project for Q1
138
+
139
+ [Generating phonetic variants...]
140
+ Calling AI model...
141
+ (Phonetic variants help when Whisper mishears the project name)
142
+ Sounds like (Enter for suggested, or edit):
143
+ client alpha,client alfa,klient alpha,clint alpha,...(+4 more)
144
+ >
145
+
146
+ [Generating trigger phrases...]
147
+ • Calling AI model...
148
+ (Trigger phrases indicate content belongs to this project)
149
+ Trigger phrases (Enter for suggested, or edit):
150
+ client alpha,alpha project,working on alpha,alpha client,...(+8 more)
151
+ >
152
+
153
+ Topic keywords (Enter for suggested, or edit):
154
+ client engagement,consulting,project management,...(+5 more)
155
+ >
156
+
157
+ Description (Enter for suggested, or edit):
158
+ Primary client project for Q1
159
+ >
112
160
 
113
161
  Project "Client Alpha" saved successfully.
114
162
  ```
115
163
 
164
+ The project creation now uses these sensible defaults:
165
+ - **ID**: Auto-generated from name (e.g., "Client Alpha" → "client-alpha")
166
+ - **Context type**: Defaults to "work"
167
+ - **Directory structure**: Defaults to "month"
168
+ - **Output destination**: Uses your configured default
169
+
170
+ You can override any default using command-line options:
171
+
172
+ ```bash
173
+ protokoll project add --name "Personal Notes" \
174
+ --context personal \
175
+ --structure day \
176
+ --destination ~/personal-notes
177
+ ```
178
+
179
+ #### Non-Interactive Mode
180
+
181
+ If you want to accept all AI-generated suggestions automatically without being prompted, use the `--yes` flag:
182
+
183
+ ```bash
184
+ protokoll project add --name "FjellGrunn" --yes
185
+ ```
186
+
187
+ This will generate phonetic variants, trigger phrases, topics, and description using AI, then immediately save the project without waiting for your confirmation. Output looks like:
188
+
189
+ ```
190
+ [Add New Project]
191
+
192
+ [Generating phonetic variants...]
193
+ • Calling AI model...
194
+ (Phonetic variants help when Whisper mishears the project name)
195
+ fyellgruhn,feelgrun,feellgrun,fyellgrunn,fyehlgrunn,fjehlgrun,...(+16 more)
196
+ ✓ Accepted (--yes mode)
197
+
198
+ [Generating trigger phrases...]
199
+ • Calling AI model...
200
+ (Trigger phrases indicate content belongs to this project)
201
+ fjellgrunn,fjell grunn project,working on fjellgrunn,...(+12 more)
202
+ ✓ Accepted (--yes mode)
203
+
204
+ Project "FjellGrunn" saved successfully.
205
+ ```
206
+
207
+ This mode is useful for:
208
+ - **Automation**: Scripts that create projects without manual intervention
209
+ - **Trusting the AI**: When you're confident the AI will generate good suggestions
210
+ - **Speed**: Quickly creating multiple projects in a batch
211
+
212
+ You can combine `--yes` with other flags:
213
+
214
+ ```bash
215
+ # Non-interactive with source URL
216
+ protokoll project add https://github.com/myorg/myproject --name "My Project" --yes
217
+
218
+ # Non-interactive with local README
219
+ protokoll project add /path/to/README.md --name "Documentation" --yes
220
+ ```
221
+
222
+ #### Project Field Reference
223
+
224
+ | Field | How Set | Purpose | Examples |
225
+ |-------|---------|---------|----------|
226
+ | **Name** | Prompted (or `--name` flag) | Display name for the project | "Client Alpha", "Personal Notes" |
227
+ | **ID** | Auto-generated from name | Filename and reference identifier | "client-alpha", "personal-notes" |
228
+ | **Context type** | Auto: "work" (override with `--context`) | Nature of content | work, personal, mixed |
229
+ | **Directory structure** | Auto: "month" (override with `--structure`) | Date-based folder organization | none, year, month, day |
230
+ | **Output destination** | Auto: configured default (override with `--destination`) | Where transcripts are saved | "~/clients/alpha/notes" |
231
+ | **Sounds like** | AI-suggested (editable) | Phonetic variants for misheard names | "protocol" for "Protokoll" |
232
+ | **Trigger phrases** | AI-suggested (editable) | High-confidence matching phrases | "client alpha", "working on alpha" |
233
+ | **Topic keywords** | AI-suggested (editable) | Lower-confidence theme associations | "budget", "roadmap" |
234
+ | **Description** | AI-suggested (editable) | Your reference note | "Primary client project for Q1" |
235
+
236
+ ##### Understanding Trigger Phrases vs Sounds Like vs Topics
237
+
238
+ - **Trigger phrases** (`explicit_phrases`): High-confidence content matching. If someone says "working on the alpha project" in a recording, and "alpha project" is a trigger phrase, the transcript routes to this project. These match the *content* being discussed.
239
+
240
+ - **Sounds like** (`sounds_like`): Phonetic variants for when Whisper mishears the *project name itself*. If your project is named "Protokoll" (Norwegian), Whisper might transcribe it as "protocol" or "pro to call". Add these variants so lookups still find the project.
241
+
242
+ - **Topic keywords** (`topics`): Lower-confidence associations. If a transcript mentions "budget" and your project has "budget" as a topic, it's a weaker signal than a trigger phrase. Topics help with classification but shouldn't be relied on alone.
243
+
244
+ #### Smart Project Creation
245
+
246
+ Protokoll can use AI assistance to automatically generate sounds_like, trigger phrases, topics, and descriptions:
247
+
248
+ **Basic Smart Creation**
249
+
250
+ ```bash
251
+ # AI generates sounds_like and trigger phrases from project name
252
+ protokoll project add
253
+
254
+ [Add New Project]
255
+
256
+ Project name: Protokoll
257
+ ID (Enter for "protokoll"):
258
+
259
+ [Generating phonetic variants...]
260
+ Sounds like (Enter for suggested, or edit):
261
+ protocol,pro to call,proto call,protocolle,...
262
+
263
+ [Generating trigger phrases...]
264
+ Trigger phrases (Enter for suggested, or edit):
265
+ protokoll,working on protokoll,protokoll project,protokoll meeting,...
266
+ ```
267
+
268
+ **With Source Content**
269
+
270
+ ```bash
271
+ # Provide URL or file for full context analysis
272
+ protokoll project add https://github.com/myorg/myproject
273
+
274
+ [Fetching content from source...]
275
+ Found: github - myorg/myproject
276
+
277
+ [Analyzing content...]
278
+
279
+ Project name (Enter for "MyProject"):
280
+ ID (Enter for "myproject"):
281
+
282
+ [Generating phonetic variants...]
283
+ [Generating trigger phrases...]
284
+
285
+ Topic keywords (Enter for suggested, or edit):
286
+ typescript,automation,api,github,...
287
+
288
+ Description (Enter for suggested, or edit):
289
+ MyProject is a comprehensive automation toolkit...
290
+ ```
291
+
292
+ **Command-Line Options**
293
+
294
+ ```bash
295
+ # Skip prompts with arguments
296
+ protokoll project add --name "My Project"
297
+ protokoll project add --name "My Project" --context work
298
+
299
+ # Combine with source
300
+ protokoll project add https://github.com/org/repo --name "Repo Name"
301
+
302
+ # Control smart assistance
303
+ protokoll project add --smart # Force enable
304
+ protokoll project add --no-smart # Force disable
305
+ ```
306
+
307
+ **Supported Source Types**
308
+
309
+ | Type | Description | Example |
310
+ |------|-------------|---------|
311
+ | GitHub URL | Fetches raw README.md | `https://github.com/org/repo` |
312
+ | Web URL | Fetches page content | `https://example.com/docs` |
313
+ | Local file | Reads file content | `./README.md` |
314
+ | Directory | Finds README in directory | `./my-project/` |
315
+
316
+ **Configuration**
317
+
318
+ ```yaml
319
+ # .protokoll/config.yaml
320
+ smartAssistance:
321
+ enabled: true # Enable AI-assisted project creation
322
+ phoneticModel: "gpt-5-nano" # Fast model for phonetic variants
323
+ analysisModel: "gpt-5-mini" # Model for content analysis
324
+ soundsLikeOnAdd: true # Auto-generate phonetic variants
325
+ triggerPhrasesOnAdd: true # Auto-generate trigger phrases
326
+ promptForSource: true # Ask for URL/file when creating projects
327
+ ```
328
+
329
+ **How It Works**
330
+
331
+ 1. Enter project name
332
+ 2. AI generates sounds_like (phonetic variants for transcription correction)
333
+ 3. AI generates trigger phrases (content-matching for classification)
334
+ 4. Optionally provide URL/file for topics and description
335
+ 5. All suggestions are editable before saving
336
+
337
+ **Requirements**
338
+
339
+ - `OPENAI_API_KEY` environment variable set
340
+ - Network access for URL fetching and API calls
341
+
116
342
  ### Delete a Project
117
343
 
118
344
  ```bash
@@ -131,6 +357,46 @@ Skip confirmation:
131
357
  protokoll project delete client-alpha --force
132
358
  ```
133
359
 
360
+ ### Edit a Project (MCP Only)
361
+
362
+ The `protokoll_edit_project` MCP tool allows manual edits to existing projects without requiring LLM regeneration:
363
+
364
+ ```typescript
365
+ // Add sounds_like variants (for when Whisper mishears project name)
366
+ await use_mcp_tool('protokoll_edit_project', {
367
+ id: 'protokoll',
368
+ add_sounds_like: ['pro to call', 'proto call']
369
+ });
370
+
371
+ // Update routing configuration
372
+ await use_mcp_tool('protokoll_edit_project', {
373
+ id: 'client-alpha',
374
+ destination: '~/notes/clients/alpha',
375
+ structure: 'month'
376
+ });
377
+
378
+ // Add trigger phrases and topics
379
+ await use_mcp_tool('protokoll_edit_project', {
380
+ id: 'quarterly-planning',
381
+ add_explicit_phrases: ['Q2 planning', 'quarterly review'],
382
+ add_topics: ['budget', 'roadmap']
383
+ });
384
+
385
+ // Deactivate a project
386
+ await use_mcp_tool('protokoll_edit_project', {
387
+ id: 'old-project',
388
+ active: false
389
+ });
390
+ ```
391
+
392
+ **Available fields:**
393
+ - `name`, `description`, `destination`, `structure`, `contextType`, `active` - Simple updates
394
+ - `sounds_like`, `topics`, `explicit_phrases` - Replace entire array
395
+ - `add_sounds_like`, `add_topics`, `add_explicit_phrases` - Add to existing array
396
+ - `remove_sounds_like`, `remove_topics`, `remove_explicit_phrases` - Remove from array
397
+
398
+ **Note:** For regenerating metadata from documentation, use `protokoll_update_project` instead.
399
+
134
400
  ## Person Commands
135
401
 
136
402
  People are used for name recognition and correction in transcripts.
@@ -141,37 +407,55 @@ People are used for name recognition and correction in transcripts.
141
407
  protokoll person list
142
408
  ```
143
409
 
144
- Output:
410
+ Output (compact table with row numbers):
145
411
  ```
146
- People (5):
412
+ People (3):
147
413
 
148
- john-smith John Smith (acme-corp) - Engineering Lead
149
- priya-sharma Priya Sharma (acme-corp) - Product Manager
150
- sarah-chen Sarah Chen - Designer
414
+ ┌─────┬──────────────┬──────────────┬────────────────────────────┐
415
+ # │ ID │ Name │ Info │
416
+ ├─────┼──────────────┼──────────────┼────────────────────────────┤
417
+ │ 1 │ john-smith │ John Smith │ Engineering Lead · @acme │
418
+ ├─────┼──────────────┼──────────────┼────────────────────────────┤
419
+ │ 2 │ priya-sharma │ Priya Sharma │ Product Manager · @acme │
420
+ ├─────┼──────────────┼──────────────┼────────────────────────────┤
421
+ │ 3 │ sarah-chen │ Sarah Chen │ Designer │
422
+ └─────┴──────────────┴──────────────┴────────────────────────────┘
423
+
424
+ Use "person show <id>" or "person show <#>" to see full details for any entry.
151
425
  ```
152
426
 
153
427
  ### Show Person Details
154
428
 
155
429
  ```bash
156
- protokoll person show priya-sharma
430
+ protokoll person show priya-sharma # By ID
431
+ protokoll person show 2 # By row number
157
432
  ```
158
433
 
159
- Output:
434
+ Output (formatted table):
160
435
  ```
161
436
  Person: Priya Sharma
162
437
 
163
- id: priya-sharma
164
- name: Priya Sharma
165
- type: person
166
- firstName: Priya
167
- lastName: Sharma
168
- company: acme-corp
169
- role: Product Manager
170
- sounds_like:
171
- - pre a
172
- - pria
173
- - preeya
174
- context: Colleague from product team
438
+ ┌─────────────┬──────────────────────────────────────────┐
439
+ ID │ priya-sharma │
440
+ ├─────────────┼──────────────────────────────────────────┤
441
+ Name │ Priya Sharma │
442
+ ├─────────────┼──────────────────────────────────────────┤
443
+ Type │ person │
444
+ ├─────────────┼──────────────────────────────────────────┤
445
+ │ First Name │ Priya │
446
+ ├─────────────┼──────────────────────────────────────────┤
447
+ Last Name │ Sharma │
448
+ ├─────────────┼──────────────────────────────────────────┤
449
+ Company │ acme-corp │
450
+ ├─────────────┼──────────────────────────────────────────┤
451
+ │ Role │ Product Manager │
452
+ ├─────────────┼──────────────────────────────────────────┤
453
+ │ Sounds Like │ • pre a │
454
+ │ │ • pria │
455
+ │ │ • preeya │
456
+ ├─────────────┼──────────────────────────────────────────┤
457
+ │ Context │ Colleague from product team │
458
+ └─────────────┴──────────────────────────────────────────┘
175
459
 
176
460
  File: /Users/you/.protokoll/people/priya-sharma.yaml
177
461
  ```
@@ -208,6 +492,38 @@ protokoll person delete john-smith
208
492
  protokoll person delete john-smith --force
209
493
  ```
210
494
 
495
+ ### Edit a Person (MCP Only)
496
+
497
+ The `protokoll_edit_person` MCP tool allows manual edits to existing people:
498
+
499
+ ```typescript
500
+ // Add sounds_like variants
501
+ await use_mcp_tool('protokoll_edit_person', {
502
+ id: 'priya-sharma',
503
+ add_sounds_like: ['pre a sharma', 'preeya']
504
+ });
505
+
506
+ // Update multiple fields
507
+ await use_mcp_tool('protokoll_edit_person', {
508
+ id: 'john-smith',
509
+ company: 'new-company',
510
+ role: 'Senior Engineer',
511
+ add_sounds_like: ['john smyth']
512
+ });
513
+
514
+ // Remove sounds_like variants
515
+ await use_mcp_tool('protokoll_edit_person', {
516
+ id: 'jane-doe',
517
+ remove_sounds_like: ['outdated-variant']
518
+ });
519
+ ```
520
+
521
+ **Available fields:**
522
+ - `name`, `firstName`, `lastName`, `company`, `role`, `context` - Simple text updates
523
+ - `sounds_like` - Replace entire array
524
+ - `add_sounds_like` - Add to existing array
525
+ - `remove_sounds_like` - Remove from array
526
+
211
527
  ## Term Commands
212
528
 
213
529
  Terms define technical vocabulary and their phonetic variants.
@@ -218,37 +534,57 @@ Terms define technical vocabulary and their phonetic variants.
218
534
  protokoll term list
219
535
  ```
220
536
 
221
- Output:
537
+ Output (compact table with row numbers):
222
538
  ```
223
- Terms (4):
539
+ Terms (3):
540
+
541
+ ┌─────┬────────────┬────────────┬──────────────────────────────────┐
542
+ │ # │ ID │ Name │ Info │
543
+ ├─────┼────────────┼────────────┼──────────────────────────────────┤
544
+ │ 1 │ graphql │ GraphQL │ GraphQL Query Language │
545
+ ├─────┼────────────┼────────────┼──────────────────────────────────┤
546
+ │ 2 │ kubernetes │ Kubernetes │ Container orchestration platform │
547
+ ├─────┼────────────┼────────────┼──────────────────────────────────┤
548
+ │ 3 │ react │ React │ JavaScript UI library │
549
+ └─────┴────────────┴────────────┴──────────────────────────────────┘
224
550
 
225
- graphql GraphQL (GraphQL Query Language)
226
- kubernetes Kubernetes (Container orchestration platform)
227
- react React (JavaScript UI library)
551
+ Use "term show <id>" or "term show <#>" to see full details for any entry.
552
+ ```
553
+
554
+ Long expansions are truncated in the table view. For verbose output with full YAML details:
555
+ ```bash
556
+ protokoll term list --verbose
228
557
  ```
229
558
 
230
559
  ### Show Term Details
231
560
 
232
561
  ```bash
233
- protokoll term show kubernetes
562
+ protokoll term show kubernetes # By ID
563
+ protokoll term show 2 # By row number
234
564
  ```
235
565
 
236
- Output:
566
+ Output (formatted table):
237
567
  ```
238
568
  Term: Kubernetes
239
569
 
240
- id: kubernetes
241
- name: Kubernetes
242
- type: term
243
- expansion: Container orchestration platform
244
- domain: engineering
245
- sounds_like:
246
- - kube
247
- - k8s
248
- - cube er net ease
249
- - kuber netties
250
- projects:
251
- - infrastructure
570
+ ┌─────────────┬────────────────────────────────────────┐
571
+ ID │ kubernetes │
572
+ ├─────────────┼────────────────────────────────────────┤
573
+ Name │ Kubernetes │
574
+ ├─────────────┼────────────────────────────────────────┤
575
+ │ Type │ term │
576
+ ├─────────────┼────────────────────────────────────────┤
577
+ Expansion │ Container orchestration platform │
578
+ ├─────────────┼────────────────────────────────────────┤
579
+ Domain │ engineering │
580
+ ├─────────────┼────────────────────────────────────────┤
581
+ Sounds Like │ • kube │
582
+ │ │ • k8s │
583
+ │ │ • cube er net ease │
584
+ │ │ • kuber netties │
585
+ ├─────────────┼────────────────────────────────────────┤
586
+ │ Projects │ • infrastructure │
587
+ └─────────────┴────────────────────────────────────────┘
252
588
 
253
589
  File: /Users/you/.protokoll/terms/kubernetes.yaml
254
590
  ```
@@ -273,12 +609,83 @@ Associated project IDs (comma-separated, Enter to skip): api-project
273
609
  Term "GraphQL" saved successfully.
274
610
  ```
275
611
 
612
+ ### Update a Term from Source
613
+
614
+ Regenerate term metadata by analyzing updated documentation:
615
+
616
+ ```bash
617
+ protokoll term update kubernetes https://kubernetes.io/docs/concepts/overview/
618
+ ```
619
+
620
+ This will:
621
+ - Fetch content from the URL
622
+ - Regenerate description, topics, domain using LLM
623
+ - Generate new sounds_like variants
624
+ - Suggest relevant projects based on topics
625
+ - Update the term file with new metadata
626
+
627
+ **Use case**: The Kubernetes project has evolved significantly. Update the term definition to reflect current documentation.
628
+
629
+ ### Merge Duplicate Terms
630
+
631
+ ```bash
632
+ protokoll term merge kubernetes-dupe kubernetes
633
+ ```
634
+
635
+ This will:
636
+ - Combine sounds_like arrays (deduplicated)
637
+ - Combine topics arrays (deduplicated)
638
+ - Combine projects arrays (deduplicated)
639
+ - Keep target's description/domain (fall back to source if missing)
640
+ - Delete the source term
641
+ - Save the merged term
642
+
643
+ **Use case**: You accidentally created "kubernetes" and "k8s" as separate terms. Merge them into one.
644
+
276
645
  ### Delete a Term
277
646
 
278
647
  ```bash
279
648
  protokoll term delete graphql
280
649
  ```
281
650
 
651
+ ### Edit a Term (MCP Only)
652
+
653
+ The `protokoll_edit_term` MCP tool allows manual edits to existing terms without requiring LLM calls. Unlike `update` which regenerates metadata from a source, `edit` lets you make specific changes:
654
+
655
+ ```typescript
656
+ // Add a specific sounds_like variant
657
+ await use_mcp_tool('protokoll_edit_term', {
658
+ id: 'cardigantime',
659
+ add_sounds_like: ['Cartesian Time', 'card again time']
660
+ });
661
+
662
+ // Update multiple fields
663
+ await use_mcp_tool('protokoll_edit_term', {
664
+ id: 'kubernetes',
665
+ domain: 'devops',
666
+ description: 'Container orchestration platform',
667
+ add_topics: ['containers', 'orchestration']
668
+ });
669
+
670
+ // Replace sounds_like entirely
671
+ await use_mcp_tool('protokoll_edit_term', {
672
+ id: 'graphql',
673
+ sounds_like: ['graph ql', 'graph q l'] // Replaces all existing
674
+ });
675
+
676
+ // Remove specific topics
677
+ await use_mcp_tool('protokoll_edit_term', {
678
+ id: 'docker',
679
+ remove_topics: ['obsolete-topic']
680
+ });
681
+ ```
682
+
683
+ **Available fields:**
684
+ - `expansion`, `domain`, `description` - Simple text updates
685
+ - `sounds_like`, `topics`, `projects` - Replace entire array
686
+ - `add_sounds_like`, `add_topics`, `add_projects` - Add to existing array
687
+ - `remove_sounds_like`, `remove_topics`, `remove_projects` - Remove from array
688
+
282
689
  ## Company Commands
283
690
 
284
691
  Companies are used for organization recognition and can be linked to people.
@@ -289,34 +696,49 @@ Companies are used for organization recognition and can be linked to people.
289
696
  protokoll company list
290
697
  ```
291
698
 
292
- Output:
699
+ Output (compact table with row numbers):
293
700
  ```
294
701
  Companies (3):
295
702
 
296
- acme-corp Acme Corporation [Manufacturing]
297
- techstart TechStart Inc [Technology]
298
- globalbank Global Bank [Finance]
703
+ ┌─────┬────────────┬──────────────────┬──────────────┐
704
+ # │ ID │ Name │ Info │
705
+ ├─────┼────────────┼──────────────────┼──────────────┤
706
+ │ 1 │ acme-corp │ Acme Corporation │ Manufacturing│
707
+ ├─────┼────────────┼──────────────────┼──────────────┤
708
+ │ 2 │ globalbank │ Global Bank │ Finance │
709
+ ├─────┼────────────┼──────────────────┼──────────────┤
710
+ │ 3 │ techstart │ TechStart Inc │ Technology │
711
+ └─────┴────────────┴──────────────────┴──────────────┘
712
+
713
+ Use "company show <id>" or "company show <#>" to see full details for any entry.
299
714
  ```
300
715
 
301
716
  ### Show Company Details
302
717
 
303
718
  ```bash
304
- protokoll company show acme-corp
719
+ protokoll company show acme-corp # By ID
720
+ protokoll company show 1 # By row number
305
721
  ```
306
722
 
307
- Output:
723
+ Output (formatted table):
308
724
  ```
309
725
  Company: Acme Corporation
310
726
 
311
- id: acme-corp
312
- name: Acme Corporation
313
- type: company
314
- fullName: Acme Corporation Ltd.
315
- industry: Manufacturing
316
- sounds_like:
317
- - acme
318
- - acme corp
319
- - a c m e
727
+ ┌─────────────┬──────────────────────────┐
728
+ ID │ acme-corp │
729
+ ├─────────────┼──────────────────────────┤
730
+ Name │ Acme Corporation
731
+ ├─────────────┼──────────────────────────┤
732
+ │ Type │ company │
733
+ ├─────────────┼──────────────────────────┤
734
+ Full Name │ Acme Corporation Ltd. │
735
+ ├─────────────┼──────────────────────────┤
736
+ │ Industry │ Manufacturing │
737
+ ├─────────────┼──────────────────────────┤
738
+ │ Sounds Like │ • acme │
739
+ │ │ • acme corp │
740
+ │ │ • a c m e │
741
+ └─────────────┴──────────────────────────┘
320
742
 
321
743
  File: /Users/you/.protokoll/companies/acme-corp.yaml
322
744
  ```
@@ -356,13 +778,21 @@ Ignored terms are words or phrases that Protokoll won't ask about during interac
356
778
  protokoll ignored list
357
779
  ```
358
780
 
359
- Output:
781
+ Output (compact table with row numbers):
360
782
  ```
361
783
  Ignored terms (3):
362
784
 
363
- um um [ignored 2026-01-12]
364
- like like [ignored 2026-01-10]
365
- basically basically [ignored 2026-01-08]
785
+ ┌─────┬───────────┬───────────┬──────────────┐
786
+ # │ ID │ Name │ Info │
787
+ ├─────┼───────────┼───────────┼──────────────┤
788
+ │ 1 │ basically │ basically │ 1/8/2026 │
789
+ ├─────┼───────────┼───────────┼──────────────┤
790
+ │ 2 │ like │ like │ 1/10/2026 │
791
+ ├─────┼───────────┼───────────┼──────────────┤
792
+ │ 3 │ um │ um │ 1/12/2026 │
793
+ └─────┴───────────┴───────────┴──────────────┘
794
+
795
+ Use "ignored show <id>" to see full details for any entry.
366
796
  ```
367
797
 
368
798
  ### Show Ignored Term Details