/minutes-ingest
Process meetings through the knowledge extraction pipeline to update person profiles, append to the knowledge log, and maintain the index.
Prerequisites
The [knowledge] section must be configured in ~/.config/minutes/config.toml:
[knowledge]
enabled = true
path = "/path/to/knowledge/base"
adapter = "wiki" # or "para", "obsidian"
engine = "none" # or "agent" for LLM extraction
min_confidence = "strong"
If not configured, explain what's needed and offer to help set it up.
How to run
Single meeting
minutes ingest ~/meetings/2026-04-03-strategy-call.md
All normal meetings (backfill)
minutes ingest --all
Preview without writing (recommended first time)
minutes ingest --all --dry-run
What it does
- Reads each meeting's YAML frontmatter (decisions, action_items, entities, intents)
- Extracts structured facts with confidence levels and source provenance
- Updates person profiles in the knowledge base (adapter-dependent format)
- Appends to
log.md with a timestamped entry for each ingested meeting
- Skips facts that already exist (deduplication) or are below the confidence threshold
- Excludes meetings designated
sensitivity: restricted from automated knowledge-base ingestion
Safety guarantees
engine = "none" (default): Only extracts from parsed YAML frontmatter. No LLM involved, zero hallucination risk.
- Confidence thresholds: Facts below
min_confidence are counted as "skipped" but never written.
- Provenance: Every fact records which meeting it came from and when.
- Deduplication: Facts whose text already appears in a person's profile are skipped.
- Dry-run: Always suggest
--dry-run first if the user hasn't used ingest before.
Interpreting the output
Ingesting 73 meeting(s) into knowledge base at /path/to/kb
2026-04-03-strategy.md — 4 written, 1 skipped — Mat, Dan
2026-04-05-standup.md — 2 written, 0 skipped — Alice
SKIP 2026-03-18-test.md: no frontmatter
Done. 6 fact(s) written, 1 skipped, 1 error(s), 3 people updated.
- written: facts that passed confidence threshold and didn't already exist
- skipped: facts below confidence threshold (logged, not written)
- SKIP: files that couldn't be parsed (no frontmatter, invalid YAML, etc.)
Gotchas
- Meetings without summarization have no structured data — If a meeting was recorded before summarization was enabled, its frontmatter won't have
action_items or decisions. The ingest will correctly extract 0 facts. This is expected, not an error.
engine = "agent" requires an AI CLI — If the user wants richer LLM-based extraction from transcript body text, they need claude, codex, gemini, opencode, or pi on PATH.
- PARA adapter writes
items.json — If the user's knowledge base uses the PARA format, facts go into areas/people/{slug}/items.json with atomic fact schema (id, status, supersededBy).
- First run should be dry-run — Always suggest
minutes ingest --all --dry-run before the first real run so the user can see what would be extracted.
1---2name: minutes-ingest3description: Extract facts from meetings and update your knowledge base — person profiles, chronological log, and index. Use when the user asks "ingest my meetings", "update my knowledge base", "extract facts from meetings", "sync meetings to wiki", "backfill knowledge", or wants their PARA/Obsidian/wiki profiles updated from conversation data.4---5
6# /minutes-ingest
7
8Process meetings through the knowledge extraction pipeline to update person profiles, append to the knowledge log, and maintain the index.
9
10## Prerequisites
11
12The `[knowledge]` section must be configured in `~/.config/minutes/config.toml`:
13
14```toml
15[knowledge]
16enabled = true
17path = "/path/to/knowledge/base"
18adapter = "wiki" # or "para", "obsidian"
19engine = "none" # or "agent" for LLM extraction
20min_confidence = "strong"
21```
22
23If not configured, explain what's needed and offer to help set it up.
24
25## How to run
26
27### Single meeting
28```bash
29minutes ingest ~/meetings/2026-04-03-strategy-call.md
30```
31
32### All normal meetings (backfill)
33```bash
34minutes ingest --all
35```
36
37### Preview without writing (recommended first time)
38```bash
39minutes ingest --all --dry-run
40```
41
42## What it does
43
441. **Reads** each meeting's YAML frontmatter (decisions, action_items, entities, intents)
452. **Extracts** structured facts with confidence levels and source provenance
463. **Updates** person profiles in the knowledge base (adapter-dependent format)
474. **Appends** to `log.md` with a timestamped entry for each ingested meeting
485. **Skips** facts that already exist (deduplication) or are below the confidence threshold
496. **Excludes** meetings designated `sensitivity: restricted` from automated knowledge-base ingestion
50
51## Safety guarantees
52
53- **`engine = "none"` (default)**: Only extracts from parsed YAML frontmatter. No LLM involved, zero hallucination risk.
54- **Confidence thresholds**: Facts below `min_confidence` are counted as "skipped" but never written.
55- **Provenance**: Every fact records which meeting it came from and when.
56- **Deduplication**: Facts whose text already appears in a person's profile are skipped.
57- **Dry-run**: Always suggest `--dry-run` first if the user hasn't used ingest before.
58
59## Interpreting the output
60
61```
62Ingesting 73 meeting(s) into knowledge base at /path/to/kb
63 2026-04-03-strategy.md — 4 written, 1 skipped — Mat, Dan
64 2026-04-05-standup.md — 2 written, 0 skipped — Alice
65 SKIP 2026-03-18-test.md: no frontmatter
66
67Done. 6 fact(s) written, 1 skipped, 1 error(s), 3 people updated.
68```
69
70- **written**: facts that passed confidence threshold and didn't already exist
71- **skipped**: facts below confidence threshold (logged, not written)
72- **SKIP**: files that couldn't be parsed (no frontmatter, invalid YAML, etc.)
73
74## Gotchas
75
76- **Meetings without summarization have no structured data** — If a meeting was recorded before summarization was enabled, its frontmatter won't have `action_items` or `decisions`. The ingest will correctly extract 0 facts. This is expected, not an error.
77- **`engine = "agent"` requires an AI CLI** — If the user wants richer LLM-based extraction from transcript body text, they need `claude`, `codex`, `gemini`, `opencode`, or `pi` on PATH.
78- **PARA adapter writes `items.json`** — If the user's knowledge base uses the PARA format, facts go into `areas/people/{slug}/items.json` with atomic fact schema (id, status, supersededBy).
79- **First run should be dry-run** — Always suggest `minutes ingest --all --dry-run` before the first real run so the user can see what would be extracted.
80