A Zettelkasten capture layer for ideas, observations, and references.
Notes exist on a spectrum from raw capture (fleeting) to permanent
knowledge (insight).
| |
|---|
| ID prefix | NOTE |
| State machine | note |
| MCP server | note-management |
| Skill | note-management (Layer 2) |
State machine
fleeting → insight
↘ promoted (promoted to another entity kind)
↘ archived
insight, promoted, and archived are terminal.
Note types (Luhmann/Ahrens taxonomy)
| Type | Description |
|---|
fleeting | Quick capture, not yet refined — review within a week |
insight | Permanent note — self-contained conclusion, part of knowledge base |
reference | Literature note — pointer to an external source with summary |
question | Open question — may promote to WorkItem (spike) or Discussion |
Fields
Required
| Field | Type | Description |
|---|
title | string (1–120) | Self-contained claim or question — not a topic label |
body | string | The note content |
type | enum | fleeting · insight · reference · question |
state | string | Current state |
Optional
| Field | Type | Description |
|---|
tags | string[] | Freeform tags for discoverability |
source | string | For reference notes: URL, book title, or conversation |
promotes_to | object | {kind, id} — target entity when promoted |
review_due | date | When the note should be reviewed |
inbox | object | Hook-inbox status and routing metadata |
links | object[] | Typed edges to other Notes (see below) |
Hook inbox
The note-management MCP server can capture external or
agent-generated interrupts as Notes with spec.inbox. Inbox items move
through captured, claimed, completed, or failed, with an
injection_mode of interrupt, ambient, or next-cycle.
Hook adapters may use the filesystem hand-off directories
tasks/inbox/, tasks/claimed/, tasks/done/, and tasks/failed/.
Use prepare_hook_inbox_dirs to create that layout, then
capture_inbox_item, claim_inbox_item, complete_inbox_item, and
fail_inbox_item to keep the canonical Note state in processkit.
Links — typed Zettelkasten edges
Each entry in links has:
| Field | Type | Description |
|---|
target | NOTE-* | The linked note |
relation | enum | See table below |
context | string (≥10 chars) | One sentence explaining why the connection matters |
| Relation | Meaning |
|---|
elaborates | This note expands on the target |
contradicts | This note disagrees with the target |
supports | This note provides evidence for the target |
is-example-of | This note is a concrete case of the target's claim |
see-also | Related but not directly argumentative |
refines | This note sharpens or corrects the target |
sourced-from | This note draws its content from the target |
Example
---
apiVersion: processkit.projectious.work/v1
kind: Note
metadata:
id: NOTE-20260411_0905-ClearDawn-fts5-trigram
created: '2026-04-11T09:05:00Z'
spec:
title: FTS5 trigram tokeniser matches substrings without pre-tokenisation
body: |
SQLite's FTS5 with the trigram tokeniser splits text into overlapping
3-character sequences. This lets you search for partial words
(e.g. "Crow" matches "StoutCrow") without needing a dedicated
tokenisation pass. Ideal for entity ID word-pair search.
type: insight
state: insight
tags: [sqlite, fts5, search]
links:
- target: NOTE-20260411_0906-BrightWave-search-ux
relation: supports
context: >
Trigram matching is what makes the search UX feel instant —
users type partial word-pairs and get matches immediately.
---
Notes
- Title discipline matters: a good Note title is a self-contained
claim or question —
"FTS5 trigram tokeniser matches substrings" not
"FTS5 notes". The title alone should convey the idea.
- Tags group notes by topic; links build arguments. Use both.
- A
question note that remains unanswered after a week should become
a Discussion or WorkItem spike.