A 5-field note schema an agent can trust
Shared by Pavel · Updated 2026-11-06
Direct answer: Give every note five frontmatter fields: type, status (active or superseded), date, supersedes, source. Never delete an old decision; mark it superseded and point the new note at it.
Cost: about five lines per note, and one rule: an agent reads only status: active notes as current.
Label key: [vendor] = the vendor's own documentation; [measured] = a number someone measured; [opinion] = judgment. All sources read 2026-11-06.
The 5 fields
| Field | Values | Why an agent needs it |
|---|---|---|
type | meeting, decision, fact, orientation | lets it filter before reading |
status | active or superseded | separates current from history |
date | 2026-11-06 (Obsidian date format) | orders conflicting notes |
supersedes | list of quoted links, or empty | links a new note to the one it replaces |
source | URL, meeting, or person | lets it check a claim |
Format facts [vendor]: properties are YAML at the top of the file; a list property is hyphenated lines; internal links in text or list properties must be quoted; dates are stored as 2020-08-21; nested properties are not supported in the Properties UI. Source: https://obsidian.md/help/properties (page is script-rendered; text read from the help repo file https://github.com/obsidianmd/obsidian-help, "Properties.md").
Worked meeting note (valid Obsidian properties)
---
type: meeting
status: active
date: 2026-11-04
supersedes:
- "[[2026-10-21 Pricing call]]"
source: https://example.com/calls/4412
attendees:
- Dana (customer)
- Sam (us)
---
# Pricing call, 2026-11-04
## Decisions
- Annual plan only for teams over 10 seats.
## Facts stated
- Customer runs 14 agents against one CRM [source: Dana, on the call].
## Open
- Who owns the contract draft? Not decided.
attendees is an extra field to show lists; the schema itself is the five. Not yet tested: opening this exact note in Obsidian. The syntax follows the vendor examples above.
Orientation note convention
One note per folder, named _START-HERE.md, type: orientation, status: active. It lists: what the folder holds, which note types exist, the rule "read only status: active as current", and links to the five most important active notes. Keep it short, because everything an agent loads costs context [vendor]: Claude Code advises under 200 lines per CLAUDE.md file (https://code.claude.com/docs/en/memory).
Marking a decision superseded (not deleted)
- Write the new note with
supersedes: ["[[old note]]"]. - In the old note change
status: activetostatus: superseded. Change nothing else. - Add one line at the top of the old note:
Superseded by [[new note]] on 2026-11-04.
[opinion] Keeping the old note preserves the reason a decision changed, which a delete loses. No source measures this.
How Claude Code loads memory and instruction files [vendor]
Source: https://code.claude.com/docs/en/memory
- Each session starts with a fresh context window.
CLAUDE.mdfiles are instructions you write; auto memory is notes Claude writes. CLAUDE.mdandCLAUDE.local.mdload from the working directory and every directory above it; files in subdirectories load on demand when Claude reads a file there.CLAUDE.mdcan import files with@path/to/file, up to four hops deep, and imported files load with it.- Auto memory: the first 200 lines or 25KB of
MEMORY.mdload at start; topic files are read on demand. - Claude treats these as context, not enforced configuration. The page says there is no guarantee of strict compliance; to block an action, use a hook.
- When Claude writes a memory file starting with YAML frontmatter, Claude Code records a
modifiedtimestamp in it.
What this means for the schema: an orientation note does not load by itself. Reference it from CLAUDE.md with @notes/_START-HERE.md so it is read first, or Claude reads it only when it chooses to. The status field is read by the model; nothing in Claude Code filters by it. [opinion]
Copy-ready: the rule for CLAUDE.md (not yet tested)
## Notes
Read @notes/_START-HERE.md first.
Treat a note as current only if its frontmatter has `status: active`.
If two active notes conflict, the later `date` wins; tell me about the conflict.
Never delete a note. To replace one, set the old note to `status: superseded`.
Gap: stale notes
The claim that an LLM quotes a stale note as current has no measurement behind it in anything read for this page. I did not find a study. The five fields are a precaution; their effect on agent accuracy is untested, and the Claude Code docs say instructions are not guaranteed to be followed.