Ingest a source into the Knowledge Archive. This is the key Karpathy-inspired upgrade: reading a source doesn't just create one note — it ripples updates through existing related notes.
If no argument provided: Show usage: /knowledge ingest <url-or-file-path>
Step 1 — Fetch the source
- URL: Use WebFetch to retrieve and read the content. If WebFetch fails, try
curl -sL via Bash.
- File path: Use Read tool to read the local file.
Summarize the source in 2-3 sentences. Identify key entities, claims, and insights.
Step 2 — Classify and create primary note
Determine entity type (People, Companies, Ideas, or Research) using the classification rules in _schema.md. Most ingested sources become Ideas.
Create the primary note using the schema for that type:
- Generate kebab-case slug from title (max 60 chars)
- Write to
KNOWLEDGE/<Type>/<slug>.md with proper frontmatter
- Include
source_url: or source_path: in frontmatter
- MANDATORY: Include
related: array with 2-4 typed links — the ripple pass (Step 3) identifies these, and they must be baked into the frontmatter of the primary note at creation time, not added after
Step 3 — Ripple pass (the key innovation)
Search for existing notes that relate to this new content:
# Search by extracted tags
rg -i "TAG1|TAG2|TAG3" ~/.claude/PAI/MEMORY/KNOWLEDGE/ --type md -l --glob '!_*'
# Search by key entities/concepts mentioned
rg -i "ENTITY1|ENTITY2" ~/.claude/PAI/MEMORY/KNOWLEDGE/ --type md -l --glob '!_*'
For each related note found (up to 10):
- Read the note
- Determine if the new source adds information, context, or contradicts existing claims
- If yes, propose the specific update (add wikilink, add evidence, note contradiction)
Present the ripple plan to the user:
📥 INGEST RIPPLE PLAN:
PRIMARY: Ideas/new-note-slug — "Title" (created)
PRIMARY related: frontmatter links (MANDATORY):
→ Ideas/existing-note-1 — type: extends
→ Ideas/existing-note-2 — type: supports
→ People/person-slug — type: related
RIPPLE (reverse-direction updates to existing notes):
→ Ideas/existing-note-1 — add body [[new-note-slug]] wikilink + add to its related: array (type: extends)
→ Ideas/existing-note-2 — update Evidence section with new data point + add to related:
→ Ideas/existing-note-3 — ⚠️ CONTRADICTION: new source says X, note says Y — type: contradicts
NO CHANGE: Ideas/tangentially-related — mentioned same tag but no substantive connection
Step 4 — Execute ripple updates
After the user approves (or you determine updates are low-risk cross-references):
- Primary note: ensure
related: frontmatter array has 2-4 typed entries — this is mandatory, not optional
- Related notes: add reverse-direction
related: entries to their frontmatter with appropriate types
- Body wikilinks: add
[[wikilinks]] in existing prose where natural (not forced)
- Update
updated: date on modified notes
- For contradictions: add a
> ⚠️ **Contradiction:** [note] claims X — see [[new-note]] for counter-evidence callout, AND add type: contradicts in related: arrays
Step 5 — Log and index
Append to KNOWLEDGE/_log.md:
```