Skip to content

Thesis Management SOP

Overview

Investment theses are story-focused, not ticker-focused. A thesis captures a narrative ("AI infrastructure spending extends") and maps it to the symbols it implicates. The watchlist is derived automatically from active theses + portfolio holdings.

Theses are the AI's primary input for hypothesis generation. A vague narrative produces vague hypotheses. A specific narrative with falsifiable claims produces testable hypotheses that drive meaningful thesis health signals.

Thesis Structure

Each thesis is a YAML file at ~/.openfin/theses/{slug}.yaml:

slug: ai-compute-hardware
title: AI Drives Compute Hardware Demand
time_horizon: 12-18 months
narrative: |
  Hyperscaler and enterprise AI training/inference workloads continue
  to grow, driving sustained demand for GPUs, custom silicon, and
  networking chips. The capex cycle extends as models get larger and
  inference scales out.

  I spoke with a semiconductor analyst at GS who confirmed channel
  checks show HBM3e yields improving at Samsung — not yet priced in.
status: active
symbols: [NVDA, MRVL, AVGO, AMD, TSM]
notes: ""

Fields

  • slug — URL-safe identifier, used as filename
  • title — human-readable title
  • narrative — the complete expression of the belief. Contains what you believe, why, what would change your mind, private observations, events to watch for. This is the AI's primary input for hypothesis generation.
  • time_horizon — how long the thesis needs to play out (e.g., "6-12 months", "18-24 months"). Waterfalls as default to hypotheses.
  • statusactive | archived | draft
  • symbols — list of ticker strings relevant to this thesis. Used by the packet builder to gather data and by the AI as context for hypothesis generation.
  • notes — additional context

Writing a good narrative

A good narrative should contain: - The belief — what you think is true or will happen - The reasoning — why you believe it (data, conversations, pattern recognition) - The timeframe — when you expect it to play out (reinforces time_horizon) - What to watch for — events, data points, or trends that would confirm or challenge the belief - What would change your mind — the strongest case against your thesis

What's NOT in the thesis model

These concerns live elsewhere in the system: - Role/conviction — portfolio-level concerns derived from positions + hypothesis health, not thesis content - Conditions (pe < 25, price <= 110) — trading rules live in the decision layer where the AI reasons about them dynamically - Price targets / stop loss — portfolio management, not thesis definition. Appear in Decision.entry_zone / Decision.exit_trigger - Catalysts — events to watch are part of the narrative, not a separate list. The AI discovers relevant events from data each week. - Confirming/disconfirming signals — replaced by AI-generated hypotheses + evidence. Human observations belong in the narrative.

Creating a New Thesis

Step 1 — Identify the story

A thesis starts with a narrative, not a ticker. Ask: - What structural change or event creates an opportunity? - What is the expected time horizon? - What would confirm or invalidate this story?

Step 2 — Research symbols

openfin research search "AI inference chip demand 2026"
openfin research news NVDA
openfin market quote NVDA,AMD,AVGO

Step 3 — Write the YAML file

Create ~/.openfin/theses/{slug}.yaml. Guidelines: - slug: lowercase, hyphenated, descriptive (e.g., oil-shock-travel, cancer-genomics-leaders) - narrative: 2-4 sentences minimum. Include specific, falsifiable claims so the AI can generate good hypotheses. - time_horizon: be specific ("12-18 months", not "long-term") - symbols: just ticker strings — no role, conviction, or conditions

Step 4 — Verify

openfin thesis list                    # Confirm it loads
openfin thesis show {slug}             # Review narrative + symbols + time_horizon
openfin thesis symbols                 # Check symbol coverage
openfin watchlist list                 # Confirm symbols appear in derived watchlist

Step 5 — Seed hypotheses (optional)

After the first review cycle, the AI generates hypotheses automatically. But you can seed initial ones:

openfin review hypothesis create {slug} \
  --claim "If ASML Q3 bookings beat, confirms broadening fab capacity" \
  --invalidation "ASML guides down on EUV orders" \
  --time-horizon "6 months"

Maintaining Theses

Updating symbols or narrative

Edit the YAML directly and verify with openfin thesis show {slug}. Every save writes to the thesis_snapshots DB table for audit history.

Checking thesis health

openfin thesis status {slug}           # Health, time pressure, active hypotheses

Health is computed from hypothesis outcomes (confirmed/invalidated ratio, recency-weighted): - untested — no hypotheses resolved yet - strong — confirmed ratio > 0.7 - mixed — 0.4–0.7 - weakening — < 0.4 - failing — < 0.2 or 3+ recent invalidations

Archiving a thesis

Set status: archived. Archived theses' symbols are excluded from the watchlist and review.

Adding ad-hoc tickers

openfin watchlist add FOO              # Adds to the special "watchlist" thesis
openfin watchlist remove FOO

Reviewing provenance

openfin watchlist sources              # Shows where each watchlist symbol comes from

Hypothesis Lifecycle

Hypotheses are AI-generated during reviews. They persist across review runs:

active → confirmed    (claim supported by evidence)
       → invalidated  (invalidation criteria met)
       → revised      (replaced by a refined hypothesis)

Each hypothesis has: - claim — "If A then B" (causal, falsifiable) - invalidation — "Unless C" (what would disprove it) - time_horizon — overrides thesis time_horizon if set

openfin review hypothesis list {slug}                       # All hypotheses
openfin review hypothesis list {slug} --status active       # Active only
openfin review hypothesis update {id} --status confirmed \
  --resolution "What happened"

Recording Evidence

Link evidence to hypotheses when possible:

openfin review evidence NVDA --run-id <id> \
  --source-type news --claim "Record datacenter revenue" \
  --direction confirming --hypothesis-id <hypothesis-id>

Direction: - confirming — supports the thesis/hypothesis - disconfirming — weakens or contradicts it - neutral — informational, no clear direction

Anti-Patterns

  • Don't create a thesis per ticker. If you have one symbol, it probably belongs in an existing thesis or the adhoc watchlist.
  • Don't leave narrative empty. A thesis without a story is just a watchlist entry — use openfin watchlist add instead.
  • Don't write vague narratives. "AI is big" produces useless hypotheses. "HBM3e yields at Samsung are improving faster than priced in" produces testable ones.
  • Don't add role/conviction/conditions to YAML. Those are legacy fields. The AI handles trade reasoning via hypotheses + the decision layer.