A graph of atomic structured claims, walkable by AI (LLMs) natively as semantic engines.
This document is the design overview. Read it once to understand what second-brain is and why it's shaped the way it is. Every decision elsewhere in the plugin clears the principles below or gets cut.
The graph is data. The LLM is the runtime.
A claim note is a structured atom: a sentence-as-title, a body, frontmatter that names what kind of claim it is and what it touches, and inline wikilinks marking semantic connections. That is the entire substrate. No queues, no phases, no ticking state.
Walking the graph is what an LLM does natively: read a node, follow a link, read another, decide where to go next, hold the partial answer in working context, return it. This is what semantic engines are for.
The plugin's job is therefore not to script the walk. Its job is to:
- Make claims easy to write well (templates, validators on demand, clear conventions).
- Make the graph easy to walk (consistent frontmatter, consistent linking style, a search index).
- Make synthesis easy to do (a small set of orthogonal verbs the model can compose).
- Otherwise stay out of the way.
No mandatory subagent rules. No phase machines. If a task is small, the model handles it inline. If it's large, the model decides to delegate. Delegation is a tool, not a law.
The notes folder is the database. No queue file, no completed-task list, no parallel state machinery that has to stay in sync with what's on disk. Anything derivable from the notes is derived on demand.
A tweet should produce 1–3 claims. A paper should produce 10–30. The plugin lets the model see the source and decide. No "tweet vs paper" config dial.
Heavy passes (whole-vault audit, deep ingestion, methodology coach) are opt-in tools the model reaches for when it has a reason — not phases that fire every time. Default to fast; escalate when the work merits it.
A small set of orthogonal primitives the model can compose freely beats a large set of named workflows that pre-decide the composition. The skills are verbs, not recipes.
Subagents are valuable for: parallel independent work, protecting context window from large tool outputs, fresh-context for adversarial review. They are not valuable for every step of a sequential pipeline. Default to inline; spawn a subagent only when there's a real reason.
When the model does work, the user sees what's happening. Progress reporting is an interface concern, not an architectural one. No invisible hooks. Orientation happens in the visible turn, performed by the model on session start.
The vocabulary file lets the same skills produce domain-native output (claim/topic-map for research, memory/life-area-map for personal, etc.). The plugin doesn't enforce domain-specific note schemas — let the user shape the graph by writing notes the way their field actually thinks.
A user processing a source feels:
- Fast. Tweet → claims in seconds. Paper → claims in minutes.
- Honest. The model says what it's about to do, does it, and shows what changed.
- Light. The graph state lives in the notes. Nothing else has to be reconciled.
- Composable. Simple verbs combine for new things without writing new skills.
- Walkable. Reading any claim and following its links is the canonical way to use the graph.
A user inspecting the plugin sees:
- A handful of skills (verbs), each doing one thing well.
- A clear note schema with a small frontmatter contract.
- A vocabulary file that maps universal terms to their domain.
- No queues, no orchestration layers, no phase machines.
Nine active + one reserved:
| Verb | Type | What it does |
|---|---|---|
/extract |
primitive | source → atomic claim notes (mechanical, inline) |
/connect |
primitive | wire a note into the graph (forward + backward links) |
/walk |
primitive | semantic + topology query over the graph |
/audit |
primitive | schema + link + cold-read quality report |
/learn |
composite | full ingestion: extract → connect → audit. --deep parallelises per-claim |
/init |
composite | scaffold a vault from a preset (guided or quick) |
/anneal |
composite | methodology-coach pass on recent work; explicit, never proactive |
/dream |
composite | model surfaces connections / patterns / questions from recent activity to inbox |
/no-surrender |
primitive (gated) | probe user grip on a claim across mechanism / implications / falsifiability / bounds; updates engagement vector |
/teach |
composite (gated) | Socratic teaching on identified engagement gaps; pedagogical sibling to /no-surrender; does NOT write engagement (no-write contract enforced at the tool-allowlist level) |
Detailed specs in each skills/<verb>/SKILL.md.
Gated verbs (/no-surrender, /teach) are off by default behind surrender.enabled in vault.yaml. Activation is a deliberate user choice — the architectural application of the same anti-surrender principle the verbs themselves implement at the per-claim level. See skills/no-surrender/SKILL.md and the per-vault surrender-tracking-design.md if present.
Four persistent stores — and the only four:
| Store | What |
|---|---|
notes/**.md |
the graph itself: atomic claims, papers, methods, MOCs |
goals.md |
session intentions (small YAML head + free-form body) |
sessions/ |
append-only session transcripts (audit log) |
vault.yaml |
runtime config: vocabulary, qmd flag, preset, domain |
That's it. No queue, no tasks file, no observation/tension folders, no methodology directory of accumulated rules. State that wants to live somewhere lives in note frontmatter.
The frontmatter is the contract. Every note has at minimum:
---
description: "≤240 char one-liner that adds info beyond the title"
type: claim | paper | method | topic-map | domain-map | memory | life-area-map | index
confidence: <enum specific to type>
created: YYYY-MM-DD
---Type-specific extensions (e.g. source, evidence_type, supports, contradicts, methods, tags for claims) live in the templates at reference/templates/.
Three rules that don't bend:
- Title is a prose proposition.
cognitive-surrender-is-path-dependent.md, notsurrender.md. - Description ≠ summary. Layer heuristic → mechanism → implication. Paraphrasing the title is wrong.
- Inline wikilinks have surrounding prose. Never bare
[[a]] [[b]]in claim bodies.
- Three-tier MOC topology:
index.md→_<domain>.md→_<topic>.md→ leaf claim. Bidirectional links — every claim ends with a## Topicsfooter; every MOC has a## Core claimssection. - Atom titles compose into wikilinks that read as sentences (
title as claim enables traversal as reasoning). - Confidence is honest:
establishedis rare and earned;probableis the typical case;speculativeis fine and must be marked;contestedis for active counter-evidence. - Meta-MOCs (orthogonal layer). A topic-map with
meta: trueis a meta-MOC — it organizes other MOCs rather than claims, sitting orthogonal to the three-tier hierarchy. The canonical instance is_cross-domain-bridges.md, which indexes synthesis claims that wire previously-disconnected clusters (positive space) alongside the lonely-pair output oftopology.py disconnected-clusters(negative space). Meta-MOCs are excluded from disconnected-clusters scans so they don't pollute the lonely-pair signal — without that exclusion they'd appear "disconnected" from every cluster they don't yet bridge.
Default: inline. Spawn a subagent only when:
/learn --deep(one subagent per claim, end-to-end — extract+connect+audit per claim, isolated context)/walkwould return 50+ candidates (spawn a filterer)/audit --vault(spawn a fresh-context inspector)
The unit of context isolation is the claim, not the phase. Never spawn a subagent for a single phase of a single claim — that's the failure mode the inline-first stance exists to avoid.
- A queue.
- A pipeline.
- A state machine.
- A finite set of phases.
- A tool that runs against you.
It is a graph and seven verbs that let the model edit it without ceremony.
- Hard determinism. The plugin is cooperative with an LLM, not a deterministic compiler. Same input may produce slightly different graphs across runs; that's acceptable.
- Multi-user collaboration semantics. Single-user, single-vault. If multi-user is needed later, it's a different plugin.
- Generic-purpose markdown editing. The plugin assumes the conventions above; if you want freeform notes, use a different tool.
README.md— short intro for newcomersskills/<verb>/SKILL.md— what each verb doesreference/methodology.md— editorial conventionsreference/empirical-grounding/— ~60 PKM/cognition notes consulted on demandreference/templates/— frontmatter contracts per note typepresets/<preset>/CLAUDE.md.template— what a vault's CLAUDE.md looks like