The office
One vault that remembers
cupel keeps all of its state in one Obsidian-compatible vault, the office, not in the current project. Every note is plain markdown with a small YAML frontmatter block, [[wikilinks]] for provenance, and #tags for classification. Find it with cupel where; it is ~/cupel unless CUPEL_HOME is set.
A filing cabinet, not a database
The office is a flat, legible folder you can read with your eyes or open in Obsidian for the graph view. Three singleton notes describe you; five folders hold the work.
Keep frontmatter minimal and put the thinking in the body. PROFILE.md, EDGES.md, and MANDATE.md are singletons cupel always reads; PROFILE.md is free-form (brokers, currency, constraints, preferences), and MANDATE.md frontmatter holds max-position-pct, satellite-target-pct, and review-stale-days, which the linter honors. Keep the whole vault under git: the decision journal’s value compounds as its history grows.
Five shapes, each with required fields
cupel doctor infers a note’s type from its directory and enforces a small set of required frontmatter fields. The rest is prose.
sources/<slug>.md
A person or source you trust. What they are good for, their track record, how to read them.
---
name: Dave Chen (semiconductors)
domain: semis, foundries
trust: former fab engineer; calls supply gluts early
bias: structurally bullish on hardware
url: https://example.com/feed # optional: where to check
last-checked: 2026-05-20
---
watchlist/<TICKER>.md
An idea you are tracking. Every entry traces to a seed.
---
ticker: NVDA
company: NVIDIA
status: watching # watching | researching | passed | promoted
provenance: "[[Dave Chen]]" # a [[source]], [[EDGES]], or a hunch
last-reviewed: 2026-05-20
---
#fast-grower
Why it is on the radar, what would have to be true, the open questions.
theses/<TICKER>-thesis.md
The full write-up: the story in two minutes, the load-bearing claim, valuation and what is priced in, risks, and falsifiers.
---
ticker: NVDA
company: NVIDIA
last-reviewed: 2026-05-20
---
The story in two minutes. The load-bearing claim. Valuation and what is
priced in. Risks. Falsifiers. Links: [[Dave Chen]], [[EDGES]].
positions/<TICKER>.md
Something actually held. doctor flags a size-pct that breaches your mandate cap.
---
ticker: NVDA
company: NVIDIA
size-pct: 6 # doctor flags breaches of max-position-pct
cost-basis: 110.40
opened: 2025-02-11
broker: DeGiro # optional: which account holds it (you may use several)
source: manual # manual | broker
last-reviewed: 2026-05-20
sell-triggers:
- thesis breaks (loses pricing power)
- position exceeds mandate cap
---
Held since 2025. Thesis: [[NVDA-thesis]].
journal/<YYYY-MM-DD>-<slug>.md
A decision. The review-on date is when pulse resurfaces it.
---
date: 2026-05-20
kind: buy # buy | sell | trim | add | pass | review
ticker: NVDA
review-on: 2026-08-20 # when pulse should resurface this
---
What was decided and why, in plain words. Falsifiers: what would prove
this wrong. Links: [[NVDA-thesis]].
No orphan ideas
Provenance is mandatory on watchlist entries: every idea traces to a [[source]], an edge, or a stated hunch. Wikilinks build the graph, and cupel doctor flags dangling ones.
- A thesis links its
[[source]]and[[EDGES]]. - A position links its
[[thesis]]. - A journal entry links the
[[thesis]]or[[position]]it concerns.
Links match by slug, so [[Pragmatic Infra Letter]] resolves to pragmatic-infra-letter.md (case, spaces, and hyphens are ignored). For a note whose natural title differs from its filename, add an aliases: field with the display name so the link resolves in Obsidian too.
---
name: Pragmatic Infra Letter
aliases: [Pragmatic Infra Letter]
last-checked: 2026-05-20
---
Tags classify alongside links: Lynch’s six categories (#fast-grower, #cyclical, and the rest) plus status (#held, #passed). Dates are always YYYY-MM-DD; the linter measures staleness from last-reviewed, last-checked, and last-synced.
Judge the reasoning, not the price
Whenever a conversation reaches a decision, a buy, sell, trim, or a deliberate pass, cupel writes a dated note to journal/ as a byproduct: the date, what was decided, the thesis in a sentence, the provenance, and the falsifiers, what would prove this wrong.
On review
When pulse or brief resurfaces an entry whose review is due, cupel judges reasoning quality first. A sound decision can have a bad outcome and a poor decision a good one, so separate the decision from the result. Profit and loss is secondary; if you want it, cupel asks for the current price rather than guessing. It never fabricates a number.
cupel doctor keeps it honest
The LLM does the judgment; the linter guards the filing cabinet. After any write, cupel runs doctor and fixes what it flags:
- Missing or malformed required frontmatter fields.
- Dangling
[[wikilinks]]that point at no note. - Mandate breaches: a position over your
max-position-pct, or total satellite over yoursatellite-target-pct. - Stale reviews, measured against
review-stale-days, and decisions whosereview-ondate has arrived.
$ cupel doctor
# reports time since last pulse, plus any inconsistencies
cupel portfolio sums your positions deterministically: each holding’s size against the cap, and the total against your satellite target. The arithmetic is the CLI’s; what to do about a concentrated or oversized book is the model’s call.
$ cupel portfolio
# CRWD 12% (over 8% cap) ยท total satellite 26% of 20% target
Because the linter is deterministic and the office is plain files, the slow-burning value, the dated decision journal, the provenance graph, the staleness checks, stays readable and yours, with or without cupel installed.