From Writing
Build and maintain a personal knowledge base that separates raw source material (raw/) from LLM-curated wiki pages (wiki/). Use this skill whenever the user wants to capture, organize, summarize, or cross-link notes, papers, articles, books, meetings, or entity pages (people, organizations, locations, events, products, projects) — or asks to turn raw content into a clean wiki page, create/update an entity, log a meeting, or lint/validate their notes. Trigger even when the user doesn't say "wiki" explicitly but is clearly doing personal knowledge management, note-taking, second-brain, or PKM work in a raw/ + wiki/ layout.
How this skill is triggered — by the user, by Claude, or both
Slash command
/writing:knowledge-wikiThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A system for turning raw source material into a concise, cross-linked, human-readable
references/capture.mdreferences/entities/event.mdreferences/entities/location.mdreferences/entities/meeting.mdreferences/entities/organization.mdreferences/entities/person.mdreferences/entities/product.mdreferences/entities/project.mdreferences/growth.mdreferences/ingest.mdreferences/linting.mdreferences/pages/analysis.mdreferences/pages/concept.mdreferences/pages/dashboard.mdreferences/pages/summary.mdreferences/search.mdscripts/clip.pyscripts/index.pyscripts/ingest.pyscripts/lint.pyA system for turning raw source material into a concise, cross-linked, human-readable
wiki. raw/ holds what you collect; wiki/ holds what the model curates. Every page
is predictable, one-topic, and links to related pages so the knowledge forms a graph.
Grow the knowledge base by adding pages, not by growing a page. When a page starts covering more than one topic, split the extra topic into its own page and link to it. This keeps every page concise and scannable.
The wiki root is the folder that contains everything below. When a root isn't given
explicitly, it defaults to ~/brain (override with an explicit path or the $BRAIN_DIR
environment variable). Pass it to every script, e.g. uv run scripts/lint.py ~/brain.
index.md
log.md
raw/ # source material — you put content here
papers/
articles/
books/
notes/
meetings/
<dt>-<meeting-name>.md
wiki/ # LLM-curated content
summaries/ # what a single source says (content page)
analyses/ # what you make of one or more sources (content page)
concepts/ # evergreen explanations of an idea (content page)
dashboards/ # link rollups spanning many pages (content page)
entities/ # the things: people, orgs, projects, meetings, ...
<type>/
<entity>.md # flat while small, e.g. person/anirudh-aggarwal.md
<entity>/index.md # promoted to a folder once it grows (see references/growth.md)
Entities are grouped by type (one folder per type), each instance a flat kebab-case
.md file. Keep wiki/ organized but shallow.
raw/ subfolder, unchanged — manually or with
scripts/clip.py for web articles. See references/capture.md.wiki/ page(s) using the base schema plus the
entity's extension (see references below). Overwrite to reflect current
understanding — do not append an edit log.scripts/lint.py before considering the work done.To process new or changed raw files in bulk, run scripts/ingest.py — it detects what
changed under raw/ and drives a scoped researcher agent (research + Microsoft 365 WorkIQ
tools) through steps 2–5 for each file, then refreshes search. See
references/ingest.md.
Run scripts with uv run so inline dependencies are provided automatically:
| Script | Purpose | Reference |
|---|---|---|
scripts/clip.py <url> | Clip a web article into raw/articles/ | capture |
scripts/ingest.py | Curate changed raw/ files into wiki/ | ingest |
scripts/index.py | Regenerate the index.md catalog | — |
scripts/reindex.py | Refresh the optional qmd search index | search |
scripts/lint.py | Validate the wiki against conventions | linting |
index.md is the regenerated catalog of every page; log.md is an append-only activity
log — add a line like ## [YYYY-MM-DD] ingest | <source title> when you ingest a source.
Search before creating a page (avoid duplicates) and before answering a non-trivial
question (ground it). Use the agent's built-in read/search, or the optional qmd
keyword + semantic index for better recall over both wiki/ and raw/. qmd is the
default search path and degrades gracefully when not installed. See
references/search.md.
Track these by default; only add a new type if clearly relevant (ask first).
| Type | Reference |
|---|---|
| person | references/entities/person.md |
| organization | references/entities/organization.md |
| location | references/entities/location.md |
| event | references/entities/event.md |
| product | references/entities/product.md |
| project | references/entities/project.md |
| meeting | references/entities/meeting.md |
Read only the reference for the type you are working on. Each reference documents that type's extra frontmatter fields and body layout as deltas from the base schema below.
Beyond entities, wiki/ holds four kinds of derived-knowledge pages. Together with raw/
they form a pipeline: raw source → summary (what it says) → analysis (what you make of it)
→ concept (the durable idea) → dashboard (navigational rollup). Entities are the actors
these pages refer to.
| Type | Question it answers | Reference |
|---|---|---|
| summary | What does this one source say? (neutral, one per source) | references/pages/summary.md |
| analysis | What do I make of these sources? (synthesis, opinion) | references/pages/analysis.md |
| concept | What is X, evergreen and reusable? | references/pages/concept.md |
| dashboard | What's the current state of this area? (link rollup) | references/pages/dashboard.md |
Content pages use the same base schema and page rules as entities. The exception is dashboards, which intentionally span topics and are exempt from the page-length limit.
Every page — entity or content — starts from this. type is the singular, lowercase page
type: an entity (person, project, …) or a content type (summary, analysis,
concept, dashboard).
---
name: <name>
type: <entity>
status: <draft|active|archived>
tags: ["#tag", ...]
source: []
---
# Title (H1)
Lead summary of 2–3 sentences, directly under the H1 — no heading of its own.
## Overview
Current best understanding — not an edit history.
## Decisions & Rationale
Why X was chosen over Y.
## Open Questions
What is unknown, and what would resolve it.
## Related
Wiki-style links to other pages or online resources.
## Open Questions; track
unknowns on the related project or meeting instead.[Anirudh Aggarwal](../person/anirudh-aggarwal.md).orgs, projects, meetings, parent, source, …) also
use relative paths.Run the linter after any change. Use uv run so PyYAML is provided automatically (the
script declares its dependency inline via PEP 723):
uv run scripts/lint.py <wiki-root>
It checks dead/bad links, page length, heading structure, frontmatter validity, and folder-layout rules. See references/linting.md for the full list of checks, severities, and configuration flags. Treat errors as blocking; review warnings and fix or justify them.
npx claudepluginhub ani1797/forge --plugin writingGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Dispatches multiple subagents concurrently for independent tasks without shared state. Use when facing 2+ unrelated failures or subsystems that can be investigated in parallel.