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 folder you can read
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. The optional fields rank it on merit; correlation is shown as information, not a demerit.
---
ticker: NVDA
company: NVIDIA
status: watching # watching | researching | passed | promoted
provenance: "[[Dave Chen]]" # a [[source]], [[EDGES]], or a hunch
tier: B # optional: A | B | C | PASS — merit ranking
conviction: medium # optional: how strongly you hold the view
edge: in-edge # optional: in-edge | anti-edge
correlation: high # optional: overlap with what you hold — info, not a demerit
ai-correlation: high # optional: exposure to the AI build-out — info
url: https://nvidia.com # optional: go straight to the company
horizon: 3-5y # optional: the holding horizon you have in mind
entry-trigger: pullback under 100 # optional: what would make you act
last-reviewed: 2026-05-20
---
#fast-grower
Why it is on the radar, what would have to be true, the open questions.
Rank on merit; correlation is information, not a demerit. cupel board reads tier to rank the whole watchlist at a glance, and a dotted ticker files with the dot as a hyphen: SOP.PA becomes SOP-PA.md.
theses/<TICKER>-thesis.md
The full write-up: the story in two minutes, the load-bearing claim, valuation and what is priced in, a Scenarios & timeframe block (bear / base / bull with rough magnitude and horizon), risks, and falsifiers.
---
ticker: NVDA
company: NVIDIA
figures-as-of: 2026-05-20 # date of the figures the scenarios project from; doctor flags stale ones
last-reviewed: 2026-05-20
---
The story in two minutes. The load-bearing claim. Valuation and what is
priced in. Scenarios & timeframe: bear / base / bull, rough upside and
horizon, projected from real, dated figures. Risks. Falsifiers.
Links: [[Dave Chen]], [[EDGES]].
positions/<TICKER>.md
Everything you hold — diversified core ETFs and edge picks — each tagged with a role. size-pct is a percent of total capital including cash, so cash is the remainder. doctor flags a satellite over your cap; a core holding is exempt.
---
ticker: NVDA
company: NVIDIA
role: satellite # core | satellite — core is exempt from the cap
size-pct: 6 # % of total capital (incl. cash); core + satellite + cash ≈ 100
cost-basis: 110.40
currency: USD # currency of cost-basis / last-price
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]].
cupel portfolio reads last-price and price-as-of for the per-holding gain % — recorded prices, never live quotes. doctor flags a stale price-as-of.
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 satellite over your
max-position-pct, or satellite total over yoursatellite-target-pct(a core holding is exempt). - A large idle-cash remainder, or sizes summing past 100%.
- Stale reviews, measured against
review-stale-days, and decisions whosereview-ondate has arrived. - Stale thesis figures, where
figures-as-ofhas aged out, so scenarios never project from numbers you can no longer trust.
$ cupel doctor
# reports time since last pulse, plus any inconsistencies
cupel portfolio reads your positions deterministically: core vs. satellite, each holding’s size, the satellite total against your target, and the cash remainder. It also shows, per holding, the gain % from recorded cost-basis to last-price and a size-weighted price return — recorded prices, never live quotes — and, once cupel capital sets your total investable capital, value and gain in money. The arithmetic is the CLI’s; what to do about a concentrated, over-cash, or oversized book is the model’s call.
$ cupel portfolio
# core VWCE 41% · satellite AMD 12% (over 10% cap) · cash 47%
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.