name: kg-ingest description: Ingest source files into the wiki — read, discuss key takeaways, write source/entity/concept pages with wikilinks. Requires wiki/ to be initialized (run /kg-init first). trigger: /kg-ingest
/kg-ingest — Ingest Sources into Wiki
Turn raw source material into wiki pages while preserving provenance and contradictions. This skill writes derived wiki content; it never modifies the raw source.
Activate When
- User invokes
/kg-ingest <file>or/kg-ingest <folder> - User says "이 문서를 wiki에 넣어줘", "자료 인제스트", "README를 지식베이스에 반영"
- User pastes a long-form source and asks to summarize-and-file
Do Not Activate When
- Source is external web content not yet downloaded → use
/kg-autoresearchfirst - User wants to query existing knowledge →
/kg-query - User wants to capture tacit knowledge from conversation →
/kg-elicit
Preconditions
wiki/exists. If not, stop and suggest/kg-init.- Source file/folder is readable.
Workflow
1. Read source
Read the full source when feasible. For huge files, build a section map first and ingest section by section.
2. Extract & discuss
- 3-5 key takeaways
- Candidate entities (artifacts, modules, files)
- Candidate concepts (abstract ideas, principles)
- Explicit claims with evidence snippets
3. Plan writes
Present the planned writes before touching any file:
Plan:
Create: <list of new pages with proposed instance_of class>
Update: <list of pages and what will be added/appended>
Possible tensions: <list of contradictions with existing claims, or "none">
Confirmation gate (deterministic triggers — request user input when ANY is true):
- Name collision: title-string similarity ≥ 0.7 between proposed page name and any existing page filename. Use Python's
difflib.SequenceMatcher(None, new_title, existing_title).ratio()(range [0,1], stdlib only — not BM25, which is for query-document relevance, not name comparison). Compare against every file inwiki/<folder>/*.md; flag if any pair scores ≥ 0.7. - Class judgment: proposed
instance_ofis one of multiple plausible classes (e.g., Concept vs Procedure, Artifact vs Concept) AND the source folder has no clear precedent. - Contradiction: source claim contradicts an existing page with
epistemic_status: validatedORconfidence: high.
Optional graph-based trigger (graphify soft dependency):
- If
graphify-out/graph.jsonexists ANDmtime < 7 days(freshness gate), additionally trigger when:- CLI:
graphify path "<new_entity>" "<best_difflib_match>"returns ≤ 2 hops (graph-distance proximity to the closest existing title found in Trigger 1). Equivalent MCP tool:shortest_path(<a>, <b>)if/kg-mcpserver is registered.
- CLI:
- If graph is stale (≥ 7 days) or absent, skip this check and note "graph unavailable, name-similarity-only confirmation" in Caveats.
Otherwise proceed automatically. Default behavior matches Authority Matrix: page identity/classification = Human (when triggered), routine bookkeeping = LLM (see ~/.claude/skills/kg/references/authority-matrix.md).
4. Write content pages
wiki/sources/<slug>.md— source summary with provenance and frontmatterwiki/entities/<entity>.md— create or append (preserve existing claims)wiki/concepts/<concept>.md— create or append with rationale- Use
[[wikilinks]]for cross-references - Never erase contradictory older claims. If contradiction exists, add a
> [!warning] Tensioncallout citing both sources.
5. Update derived files
wiki/<folder>/_index.md— folder indexwiki/index.md— main catalogwiki/overview.md— keep under 500 wordswiki/log.md— append entry
6. Refresh graph
- Run
/kg-update(or suggest if a separate session manages the graph)
7. Elicitation sweep
Scan source text + recent conversation for trigger keywords: 실패, 주의, 반복, 명심, 비법, failed, gotcha, pitfall, lesson learned.
- If found: invoke
/kg-elicitwith the keyword context as the topic. - If not found but source is a postmortem-style doc (headings like "What went wrong", "Root cause", "Lessons"): suggest
/kg-postmortem. - Codex review output — if source is a Codex review with structured findings: file to
wiki/experiences/codex-review-<date>-<slug>.md. Recurring patterns (3+ reviews) → suggest Heuristic promotion via/kg-elicit. See~/.claude/skills/kg/references/codex-integration.md. - This step is skippable; don't block ingest on it.
8. Update wiki/hot.md
Add the ingested source to Recent Activity. Increment reflect_debt in Maintenance Debt.
9. Reflect reminder
If this is the 3rd+ ingest since last /kg-reflect, append:
Reflect 권장 — 이번 세션에서
/kg-reflect를 실행하면 schema drift와 emerging pattern을 확인할 수 있습니다.
This is a suggestion, not a gate.
Batch mode
If many files, ask "all at once or one by one?" Batch mode:
Pre-scan (mandatory, before any write):
- Extract candidate entity names + proposed
instance_offrom all files - For each candidate, evaluate the 3 deterministic Confirmation gate triggers (name collision / class judgment / contradiction)
- If graphify available and fresh, additionally evaluate the graph-distance trigger
- Collect
(file, candidate, trigger_reason)tuples where any trigger fires - Show consolidated conflict list to user
- User decides: batch-approve all conflicts | per-file decision | cancel
Auto-proceed for non-triggering writes — these run via parallel subagents without per-file confirmation.
Skipped in batch: per-file discussion, elicitation sweep (suggest manual /kg-elicit after batch finishes).
Rationale: confirmation gate is preserved at the batch boundary, not bypassed. Single approval covers all conflicting files; clean files run automatically.
Output Contract
Always end with:
Ingest result: PASS | PARTIAL | FAIL
Source: <path>
Source page: [[sources/<slug>]]
Created pages:
- [[...]]
Updated pages:
- [[...]]
Tensions found:
- <none | list with citations>
Claims extracted:
- <N> claims, <M> with direct evidence
Indexes updated:
- index.md, <folder>/_index.md, overview.md, log.md, hot.md
Next command:
- /kg-update: <recommended | already run>
- /kg-reflect: <recommended if reflect_debt >= 3 | not needed>
Examples
Example 1 — single file, no ambiguity
User:
/kg-ingest docs/architecture/auth-system.md
Expected behavior:
- Read full file.
- Discuss 3-5 takeaways with user.
- Show plan (e.g., create
concepts/auth-flow.md, updateentities/auth-service.md). No ambiguity → proceed without confirmation. - Write all files with provenance.
- Update indexes/log/hot.
- Suggest
/kg-update. - Output result block.
Example 2 — contradiction found
User:
/kg-ingest docs/perf-2026-q2.md
Expected behavior:
- During Plan writes, detect that source claims "Module X is the bottleneck" but existing
concepts/perf-bottleneck.md(epistemic_status: validated) says "Module Y is the bottleneck". - Stop and ask: "Source contradicts validated claim in [[perf-bottleneck]]. Options: (a) write as Tension callout citing both, (b) update existing page to mark old claim deprecated, (c) skip this claim."
- Apply chosen option. Never silently overwrite.
Exceptions and Escalation
- Source unreadable → stop before writing; report file path.
- Wiki absent → stop and suggest
/kg-init. - Source is web URL → stop and suggest
/kg-autoresearch(which queues for approval before ingest). - Conflict with high-confidence claim → stop in Plan writes, request user resolution. Never auto-resolve.
- Candidate Heuristic appears in source → ask before invoking
/kg-elicit. Do not auto-promote Experience to Heuristic. - Batch mode: skip the per-file gates but produce a final consolidated write report and a list of items requiring user follow-up.
Quality Gates
Before final answer:
- Every created page has provenance (
provenance.sources) - Every contradiction is preserved (Tension callout, not silent overwrite)
- Indexes (
index.md,<folder>/_index.md) include the new pages -
log.mdhas the ingest entry -
hot.mdRecent Activity reflects this ingest