| name | wiki-knowledge-base |
| description | Build and maintain a local Markdown-based knowledge wiki with Obsidian-style double-links. Inspired by Karpathy's "let's build" approach. Use when the user wants to create a personal knowledge base, wiki, or structured information repository from research articles, competitive analysis, or domain knowledge. Triggers on phrases like "build a wiki", "knowledge base", "knowledge graph", "organize research", "wiki maintenance", "wiki lint", or when working in a directory with wiki/concepts/entities structure. |
Wiki Knowledge Base
Build a local, Obsidian-compatible knowledge wiki from raw research materials. Uses a concept-entity-comparison-source architecture with double-link ([[slug]]) networking.
Directory Structure
<project-root>/
├── raw/ # Immutable source materials (read-only)
│ └── articles/ # Web articles, reports (Obsidian Web Clipper → Markdown)
├── wiki/ # LLM-maintained knowledge pages
│ ├── index.md # Master directory (update after every operation)
│ ├── log.md # Append-only operation log
│ ├── concepts/ # Abstract concepts (AI Agent, MCP Protocol, ...)
│ ├── entities/ # Concrete products/companies/tools (Smithery, Cursor, ...)
│ ├── comparisons/ # Cross-entity analysis tables
│ └── sources/ # Structured summaries of raw/ materials
└── outputs/ # Generated reports, lint results
Page Format
Every wiki page requires YAML frontmatter:
---
title: Page Title
type: concept | entity | source-summary | comparison
sources:
- raw/articles/filename.md
related:
- "[[related-slug]]"
created: YYYY-MM-DD
updated: YYYY-MM-DD
confidence: high | medium | low
---
Naming Conventions
- File names: kebab-case (
ai-agent.md, mcp-model-context-protocol.md)
- Double-links: must use slug format
[[slug]], never Chinese text or PascalCase
- Source references: plain text path to
raw/ files in frontmatter
Four Page Types
| Type | Purpose | Example |
|---|
concept | Abstract domain knowledge, definitions, frameworks | AI Agent, MCP Protocol, Coding Agent |
entity | Specific products, companies, tools with facts/data | Smithery, Cursor, Claude Code |
comparison | Side-by-side analysis tables | MCP Platform Comparison |
source-summary | Structured summary of a raw article | 提炼 key findings from raw/ |
Concept vs Entity: concept = "what is X?" (category), entity = "what is Y specifically?" (instance). This avoids duplication—define once, link everywhere.
Three-layer distillation: raw/ (full articles, 10k+ words) → wiki/sources/ (summaries, ~500 words) → wiki/concepts/ + wiki/entities/ (structured knowledge).
Workflow: Ingest
When new materials arrive in raw/:
- Read new files in
raw/
- Discuss key findings with user
- Create
wiki/sources/<slug>.md summary with proper frontmatter
- Create or update related concept/entity pages, extracting information from the source
- Update
wiki/index.md with new entries
- Append operation to
wiki/log.md
Workflow: Query
When answering questions from the wiki:
- Read
wiki/index.md to locate relevant pages
- Read related concept/entity/comparison pages
- Synthesize answer using
[[slug]] citations
- If answer has lasting value, propose saving as a new wiki page
Workflow: Lint
Run health checks periodically (or when asked):
- Contradiction detection: Find conflicting claims across pages (e.g., different numbers for same metric)
- Orphan detection: Find pages with no inbound
[[double-link]] from other pages (index.md doesn't count)
- Dangling links: Find
[[links]] pointing to non-existent files
- Ambiguous links: Find links using Chinese/PascalCase instead of slug format
- Missing concepts: Find entities mentioned in text but without their own page
- Content quality: Flag pages with
confidence: low or thin content (<100 words)
- Source coverage: Check that concept/entity pages link back to their source summaries
Fix strategy:
- Dangling links: sed batch-replace to correct slug format
- Ambiguous links: replace with correct slug, or remove
[] if too generic (e.g., [[AI]] → plain text)
- Orphan source pages: add
[[source-slug]] in corresponding concept/entity page body
- Contradictions: verify against source pages, unify to source-of-truth data
Save lint report to outputs/lint-YYYY-MM-DD.md.
Workflow: Git
After every operation batch:
git add -A && git commit -m "<type>: <description>"
Commit message format: <type>: <description> where type is ingest, lint, fix, create.