Core Principle
Weave, don't archive. The essence of this skill is to understand and weave scattered material into a thematic article network. "What does this raw note tell me that I didn't know before?" — that's the working mindset, not "which folder does this belong in?"
Derived from farzaa's personal-wiki-skill (gist c35ac0cfbeb957788650e36aabea836d), adapted for this project's vault architecture:
- No
_index.md/_backlinks.json: This repo uses Obsidian[[link]]as the source of truth; no duplicate indexes are maintained. - No ingest subcommand: Raw material enters the vault via
wikictl im(IM gateway) /wikictl ingest(HTTP/ingest) / user manually writing to raw/. This skill starts from "content already in raw/". - Leave task tags to the watcher:
tags: [task/*]are run bylabel_watchervia notecraft. This skill must not touch them. - Three core actions: absorb / cleanup / breakdown. Queries go through
wikictl rag query, status throughwikictl status.
Commands
/wikicraft absorb [raw-note-path | "all" | date-range]
Weave raw notes into existing wiki articles. This is not file-moving — it's content re-creation.
Steps (per raw note):
- Read the raw note; understand what topics it covers and which named entities it mentions (people, places, projects, concepts)
grep -l+ readwiki/to find related articles- Candidate actions (by priority):
- Existing related article found: re-read the full article before deciding how to weave in (don't mechanically append paragraphs)
- Named entity appearing for the first time with sufficient material (≥3 meaningful sentences): create a new article
- Named entity appearing for the first time but only a passing mention: keep it inline in the existing article
- Topic/pattern recurring across multiple notes: create a conceptual article (philosophies/, patterns/, tensions/)
- After editing a wiki article:
- Add each raw note ID as a wikilink in the
sources:frontmatter (e.g.sources: ["[[arxiv-2401.12345]]", "[[arxiv-2310.06825]]"]) — bare strings produce no Obsidian graph edge. - For each entry in
sources:, include a corresponding inline[[<raw-note-id>]]reference in the article body, typically as a## Source(English) or## 来源(Chinese) section listing every cited stub one per line. Frontmatter graph-edge rendering depends on Obsidian'sProperties → Display in graphsetting (off by default in many vaults), so the body wikilinks are the load-bearing edges. - Update
last_updated.
- Add each raw note ID as a wikilink in the
- Keep the raw note (do not unlink) — it is the source of truth; the ingest pipeline handles decisions about moving to wiki/
Anti-cramming: If you're about to add a third same-topic paragraph to an existing article, create a new article instead.
Anti-event-log: Articles should read like thematic narratives, not "what happened that day" chronologies. When rewriting, remove chronological structure and reorganize by thematic sections.
Pause every ~15 raw notes for self-check:
- Is the number of new articles created = 0? If so, you may be cramming — consider splitting.
- Randomly re-read 3 of the articles you edited: do they read like knowledge, or like a diary?
/wikicraft cleanup [article-path-or-glob]
Audit existing wiki articles for richness and consistency.
Three phases (can spawn sub-Agents in parallel):
- Inventory: Build a title list + wikilink graph of all wiki articles; flag orphan nodes
- Per-article assessment: Length, tone, quote density, narrative vs. event-log, broken links. Rewrite event-driven sections (
## 2024-03-15style) into thematic sections (## Core Conflict During This Period) - Patch: Deduplicate, add links, remove placeholders
Don't fix structural big-picture issues here — that's for breakdown.
/wikicraft breakdown [--reorganize]
Identify missing and overloaded articles; generate new entries.
Four phases:
- Survey: Scan wiki/ for overloaded (>150 lines), orphaned, and miscategorized articles
- Extract entities: grep all wiki articles; extract named entities mentioned repeatedly but lacking their own page
- Rank + categorize: Sort candidates by reference count; assign to the directory taxonomy below
- Parallel article creation: Spawn a writing Agent per candidate; after writing, grep the entire vault to add backlinks
--reorganize mode: Move miscategorized articles (e.g., life/some-belief.md → philosophies/).
Directory Taxonomy
Articles are organized by topic into directories. Directories emerge from content — do not pre-create empty ones.
- Core:
people/projects/places/events/companies/institutions/ - Media:
books/films/music/games/tools/platforms/courses/ - Inner:
philosophies/patterns/tensions/identities/life/ - Narrative:
eras/transitions/decisions/experiments/setbacks/ - Relationships:
relationships/mentorships/communities/ - Work:
strategies/techniques/skills/ideas/artifacts/ - Misc:
restaurants/health/routines/metaphors/assessments/touchstones/
Writing Guidelines
Golden Rule
"This is not Wikipedia about the thing. This is about the thing's role in the subject's life."
Tone: Encyclopedic, Not AI-esque
Avoid: em-dash piling, big words (legendary / visionary / groundbreaking), editorial commentary (interestingly / importantly), rhetorical questions, progressive narratives, hedge stacking (perhaps / arguably / generally).
Use: Flat factual statements, one assertion per sentence, simple tenses, attributed phrasing ("described as energizing", not "was energizing"), quotes limited to the two most impactful at most.
Length Targets
| Type | Lines |
|---|---|
| Person (1 mention) | 20-30 |
| Person (3+ mentions) | 40-80 |
| Place / Restaurant | 20-40 |
| Company | 25-50 |
| Philosophy / Pattern | 40-80 |
| Era | 60-100 |
| Decision / Transition | 40-70 |
| Minimum | 15 |
150 lines → split candidate.
Article Structure Skeleton
---
title: <Title>
aliases: ["<Title>"] # required when title differs from filename slug; see Agreement 7
type: person | project | place | concept | event
created: YYYY-MM-DD
last_updated: YYYY-MM-DD
related: ["[[Article A]]", "[[Article B]]"]
sources: ["[[<raw-note-id-1>]]", "[[<raw-note-id-2>]]"]
---
# <Title>
<Thematic paragraphs, not chronological order.>
## Timeline (only when temporal anchoring is genuinely needed)
## Source / 来源
- [[<raw-note-id-1>]]
- [[<raw-note-id-2>]]
Organized by Type
- Person: By role phase / relationship phase, not by when you met them
- Place: What happened there + what it signifies
- Project: Conception → development → outcome
- Event: What happened (brief) + why it matters (emphasis) + aftermath
- Philosophy: Thesis → evolution → validation / invalidation
- Pattern: Trigger → cycle → breaking attempts
- Decision: Situation → options → reasoning → choice
- Era: Context / projects / team / emotional tone
Agreements with This Project
- Do not touch
tags: [task/*]: That is the watcher's domain; it triggers notecraft. - Do not write to raw/: raw/ is the source of truth — read-only. To update understanding, edit the references and summaries in wiki/ articles.
- Frontmatter
sources:must use the raw note filename (without.md) so RAG can trace back. - No need to manually commit after editing wiki articles: The
git_autopilotdaemon handles commits automatically. - Plan before major changes: When cleanup / breakdown involves moving/reorganizing multiple files, align with the user first via ExitPlanMode workflow.
- Obsidian
[[shortest]]link format:.obsidian/app.jsonhasnewLinkFormat: shortest; write links as[[Title]]not[[wiki/path/to/Title]]. - Aliases when title ≠ filename slug: Obsidian resolves
[[X]]to a file namedX.mdOR a file whosealiases:frontmatter containsX. Addaliases: ["<title>"](quoted flow form, plural key) whenever the article'stitle:does not exactly match its filename slug. When in doubt, add it — common triggers: title contains CJK characters / CJK punctuation (、,:) / spaces / colons / commas; filename was renamed; title is missing entirely (use the H1 or filename as alias). Without this the[[<title>]]links from other articles render as unresolved (faded) graph nodes.
Do Not
- Do not create
_index.md/_backlinks.jsonduplicate indexes — Obsidian handles this itself. - Do not pre-create empty directories as placeholders — directories emerge from content.
- Do not copy raw note source material verbatim into articles — absorb means digest and restructure.
- Do not do style unification/rewriting during the absorb phase — that belongs to cleanup.
- Do not run cleanup/breakdown as "rewrite every article" — only touch what's broken.