Thesis Tracker logo

Thesis Tracker

Community
yennanliu
thesis-tracker

Write, save, and re-check an investment thesis — KPIs with thresholds, invalidation triggers, catalysts, a pre-mortem, and a decision log; `--update` re-reads the saved file against new data and returns INTACT / WEAKENED / BROKEN

Overview

Publisheryennanliu
RepositoryInvestSkill
Skill namethesis-tracker
Stars
254
Forks
61
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by yennanliu on GitHub. Read the source before you install it.

Installation

Install the Thesis Tracker AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/yennanliu/InvestSkill/tree/main/plugins/us-stock-analysis/skills/thesis-tracker
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/yennanliu/InvestSkill.git /tmp/InvestSkill
mkdir -p .claude/skills
cp -r /tmp/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker .claude/skills/thesis-tracker
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Thesis Tracker in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Thesis Tracker on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Thesis Tracker is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Thesis Tracker — Write It Down, Then Check It

⚠️ Data Verification — Do This Before Any Analysis

Before running any analysis, always retrieve the latest market data for the ticker:

  1. Fetch current price — use web search or ask the user for the live price, 52-week range, and market cap. Never assume a price from training data.
  2. Confirm key figures — the current value of every KPI the thesis names (revenue growth, margin, FCF, net debt, subscriber count, …). A thesis check against stale KPIs is worse than no check: it produces false confidence.
  3. State your data source — fill in the Data & Sources header (next section) so the origin, as-of date, retrieval path, and confidence of every figure are explicit at the top of the output.
  4. Flag stale data explicitly — if live data is unavailable, display this warning before proceeding:

⚠️ Live data unavailable. The following analysis uses training-data estimates which may be significantly out of date. Verify all prices and metrics before making any decisions.

Never silently substitute training-data estimates for current prices. When in doubt, ask the user to paste the latest quote.


📋 Data & Sources Header — Open Every Output With It

The first thing in the output is this provenance block, filled in — never left as placeholders. It is the standard documented on the Data & Accuracy page and the first thing result-validator looks for:

Data & Sources
  As of:      <date the figures represent, e.g. 2026-06-30>
  Source:     <primary docs — SEC EDGAR 10-K/10-Q, company IR, FRED, exchange data …>
  Retrieval:  <pasted by user | web/tool retrieval | model memory>
  Confidence: <HIGH | MEDIUM | LOW>
  • Retrieval: model memory must be paired with Confidence: LOW — memory is a placeholder until confirmed against a primary source.
  • Mixed sources: list each with its own as-of date rather than blending them.
  • Sources disagree on the same figure (a closing price, a deal term): prefer the primary source (SEC filing, company release, exchange data) over an aggregator, then the most recent dated one. Show both values with their sources and dates, say which you used and why, and never average them.
  • Data the user pasted is reported as pasted by user; do not upgrade its confidence beyond what the user's own source supports.

Overview

Every other framework in the catalog answers a question today: is it cheap, is the moat real, is the chart constructive, what does the bear say. None of them remembers the answer. Three months later the investor is left with a position, a vague feeling, and no record of what they expected to happen — which is exactly the state in which people average down on a broken story or sell a working one on a bad week.

This skill turns an analysis into a contract with your future self. It produces a single saved file per ticker that states, in falsifiable terms, why the position exists, which numbers have to keep being true, what would prove the idea wrong, and when the next check is due. Then, on --update, it re-reads that file against current data and hands back one word — INTACT, WEAKENED, or BROKEN (or INSUFFICIENT EVIDENCE when the data to decide is not there) — together with the specific line that changed.

It fills the gap between Playbook steps 1 (write the thesis), 9 (monitor), and 10 (know when to sell) in the Learning track, which today have no skill behind them.

What it is not. It is not a valuation, a screen, or a timing tool. It imports its KPIs and triggers from the other skills (stock-eval for quality metrics, stock-valuation for the fair-value range, bear-case for the thesis-killers, catalyst-calendar for dates, position-ladder for the share-count ceiling) and holds them to account. Run the analysis skills first; run this one to write down what they concluded.


1. Modes

ModeInvocationWhat it does
Openthesis-tracker NVDA (+ pasted analyses, or none)Interview the user, draft the thesis file, save it to output/thesis/NVDA.md
Updatethesis-tracker NVDA --update (+ current data or a fresh analysis)Re-read the saved file, refresh every KPI, re-test every trigger, return INTACT / WEAKENED / BROKEN (or INSUFFICIENT EVIDENCE), append to the decision log
Reviewthesis-tracker --review (no ticker)Read every file in output/thesis/, list status and next-check date per ticker, flag anything overdue or sitting at INSUFFICIENT EVIDENCE
Closethesis-tracker NVDA --close "sold — trigger 2 fired"Mark the thesis closed with the exit reason and final P&L; keep the file for trade-postmortem

If the environment cannot write files, output the complete thesis file as a fenced block and tell the user to save it at the stated path — the contract matters, not the storage.


2. Inputs

InputRequiredDefault if unstated
Ticker✅ for Open, Update, Close · not used by Review (it reads every file)—
The thesis in the user's own words✅ for Openask — never invent a thesis for the user
Entry price and date, position sizerecommendedrecord as "not stated"
Prior analyses (stock-eval, bear-case, stock-valuation, …)optionalderive KPIs from the thesis text
Horizonoptional12 months
Existing thesis file✅ for Update / Close—

The user writes the thesis; the skill sharpens it. If the stated thesis is not falsifiable ("great company, will go up"), push back with the three questions in Phase 1 until it is. A thesis that cannot be wrong cannot be tracked.


3. Framework

Phase 1 — Sharpen the thesis (Open)

Reduce the thesis to one paragraph that answers, in order:

  1. What has to happen to the business for this to work (the mechanism — not "the stock goes up")
  2. Why the market is wrong today — what is mispriced, and why the user sees it and the marginal buyer does not
  3. Why now — the catalyst, the regime, or the price that makes this a decision today instead of in a year

Reject any paragraph that only restates the company description. Test: could a reasonable bear read this and know exactly what to disagree with?

Phase 2 — Pick the KPIs (3–5, no more)

Each KPI is a number the thesis depends on, with a threshold below or above which the thesis is in trouble, and a source that can be checked next quarter.

KPIThresholdWhy it matters to this thesisSourceCurrentDate
e.g. Data-center revenue growth (YoY)≥ 40%The multiple assumes hyperscaler capex keeps compounding10-Q segment table112%2026-05-28
e.g. Gross margin≥ 70%Pricing power is the moat claim; margin is its footprint10-Q75.5%2026-05-28
e.g. Net cash> $0Rules out balance-sheet stress in a downturn10-Q+$38B2026-05-28

Rules:

  • Prefer KPIs from the financial statements over sentiment or price-based ones. Price is the output, not an input to the thesis.
  • One valuation KPI is allowed (e.g. forward P/E ≤ 35 or price within stock-valuation's fair-value range) so that "the thesis is right but fully priced" is a detectable state.
  • If a KPI has no threshold, it is a curiosity, not a KPI. Remove it.
  • Import thresholds from the analyses that produced them when available (stock-eval quality gates, dividend-analysis payout ceiling, short-interest squeeze levels).

Phase 3 — Write the invalidation triggers

Triggers are events, not feelings. Each one names the observation and the action it obliges:

Triggers   | if <observable event or KPI breach>        → <action: review / trim / exit>

Draw them from three places, in this order of authority:

  1. The Thesis Invalidation sections of every analysis skill already run on the ticker — copy them in verbatim, they were written for exactly this
  2. The bear-case Thesis-Killers — the bear's best arguments become the bull's triggers
  3. The user's own "I would sell if…" — written down while calm

A KPI breach is a review trigger by default; two simultaneous breaches, or any breach of the thesis's core mechanism (Phase 1, item 1), is an exit trigger. Price alone is never an exit trigger unless the user is explicitly running a stop-loss discipline — write that down too, so it is a rule and not a reaction.

Phase 4 — Catalysts and the next check

List the dated events that will produce new evidence for or against the thesis (earnings, product cycles, regulatory decisions, lock-up expiries, FOMC when the thesis is rate-sensitive). Import from catalyst-calendar when available. The next-check date is the earliest of: the next catalyst, the next earnings release, or 90 days.

Phase 5 — The pre-mortem

One paragraph, written in the past tense, dated twelve months out:

"It is <date + 12 months>. The position lost 40%. Looking back, the reason was…"

This forces the most probable failure path into the open while it can still be wired into a trigger. If the pre-mortem names a cause that no trigger would catch, add the trigger.

Phase 6 — Update: re-test everything (--update)

On every update:

  1. Refresh the Current / Date columns of every KPI from the newest data the user supplies or the assistant can retrieve. Never carry a stale value forward silently — mark it stale with its date.
  2. Re-test every trigger: fired / not fired / cannot assess (say why).
  3. Re-read the thesis paragraph against what actually happened. Did the mechanism play out, stall, or go the other way?
  4. Return exactly one status. Apply the rules top-down; the first that matches wins:
StatusRule
BROKENTwo or more KPIs breached on current data, or any exit-trigger fired, or the core mechanism has been falsified (the thing that had to happen did not, and the reason is structural)
WEAKENEDOne KPI breached or one review-trigger fired or the mechanism is behind schedule — the thesis is still possible but the evidence has moved against it
INSUFFICIENT EVIDENCEFewer than half the KPIs could be refreshed with data dated after the last check, and no trigger could be assessed. Nothing is known to have broken — but nothing has been confirmed either. Name the KPIs that need data, and do not carry the previous status forward
INTACTEvery KPI is within threshold on data dated after the last check; no trigger fired; mechanism on track. A stale KPI cannot support INTACT — at best it leaves the status at INSUFFICIENT EVIDENCE

An INSUFFICIENT EVIDENCE status does not change the file's last confirmed status line; it is recorded in the decision log (checked — insufficient evidence — <KPIs missing>) and the next-check date is moved to when the data will exist (usually the next filing).

  1. Name the specific line that changed — the KPI, its old value, its new value, and the threshold. A status without a line is an opinion.
  2. Append a decision log row. The log records what the user did and why, priced and dated, and names the skill that informed it. It is the raw material for trade-postmortem.

Status is not a signal. WEAKENED does not mean sell; it means the next check moves up and the position should not be added to. BROKEN means the reason for owning it is gone — what to do about that is a position-ladder / tax question, but adding is off the table. INSUFFICIENT EVIDENCE means the honest answer is "I don't know yet" — treat it like WEAKENED for position management (no adding) until the data arrives.

Phase 7 — Thesis Health Score (0–10)

The headline number, used for the signal block. It measures how well the thesis is holding up against its own tests, not how attractive the stock is.

ComponentWeight10 looks like0 looks like
KPI adherence40%All KPIs inside threshold with marginMajority breached
Trigger status30%None firedExit trigger fired
Mechanism progress20%Phase 1 "what has to happen" is visibly happeningFalsified
Evidence freshness10%Every KPI dated within the last quarterKPIs stale or unverifiable

Map — the same bands as the standard Score Guide: ≥ 6.0 → INTACT · 4.0–5.9 → WEAKENED · < 4.0 → BROKEN. INSUFFICIENT EVIDENCE is not scored from the table above — report the score as n/a in the file and use 5.0 in the signal block (NEUTRAL, Confidence LOW) so it stays comparable across skills. If the rule table in Phase 6 and the score disagree, the rule table wins and the score is adjusted to match — the score summarizes the rules, it does not override them.


4. The Saved File — Contract

output/thesis/<TICKER>.md. Keep the section order and the pipe tables exactly; --update and --review parse them.

# Thesis · <TICKER> · opened YYYY-MM-DD · status INTACT | WEAKENED | BROKEN | INSUFFICIENT EVIDENCE | CLOSED
Data & Sources · as of YYYY-MM-DD · <sources> · <retrieval> · <confidence>

## Thesis
<one paragraph: what has to happen · why the market is wrong · why now>
Horizon: <n> months   Entry: $<price> on YYYY-MM-DD   Size: <shares or % of portfolio>   Ceiling: <from position-ladder, if any>

## KPIs
| KPI | Threshold | Source | Current | Date | Status |
|-----|-----------|--------|---------|------|--------|
| … | … | … | … | … | ✓ / ✗ / stale |

## Triggers
| If | Then | Source | Status |
|----|------|--------|--------|
| … | review / trim / exit | bear-case · stock-eval · user | not fired / FIRED YYYY-MM-DD |

## Catalysts
| Date | Event | Expected impact | Evidence for / against |
|------|-------|-----------------|------------------------|

## Pre-mortem
"It is YYYY-MM-DD. This lost 40% because …"

## Next check
YYYY-MM-DD — <reason: earnings / catalyst / 90-day>

## Decision log
| Date | Action | Price | Reason | Informed by |
|------|--------|-------|--------|-------------|
| YYYY-MM-DD | opened | $… | … | stock-eval, bear-case |

5. Output Format

Open mode

  1. Data & Sources header
  2. The sharpened thesis paragraph, with a one-line note on what was changed from the user's draft and why
  3. The KPI table, the trigger table, the catalyst list, the pre-mortem, the next-check date
  4. The complete saved file in a fenced block (and confirmation of the path it was written to)
  5. Thesis Invalidation and the Investment Signal block

Update mode

  1. Data & Sources header
  2. Status line first: NVDA · WEAKENED · 2026-08-29 — Gross margin 68.1% (was 75.5%) breached the ≥ 70% threshold
  3. KPI table with old → new values and ✓/✗; trigger table with fired/not fired
  4. What the change means for the Phase 1 mechanism, in three sentences
  5. The updated file (fenced) with the new decision-log row
  6. Thesis Invalidation and the Investment Signal block

Review mode — one table: ticker · status · score · next check · overdue? · last decision.


Example

User: thesis-tracker NVDA — I bought at $118 on 2026-05-30. Thesis: data-center demand
      compounds for at least two more years and the market is still pricing a one-off cycle.
      Here are my stock-eval and bear-case outputs. [pasted]

The assistant sharpens the paragraph (adds "why now": hyperscaler FY27 capex guides due in
the next two prints), sets four KPIs (DC revenue growth ≥ 40%, gross margin ≥ 70%, net cash > 0,
forward P/E ≤ 35), imports three triggers from the bear-case Thesis-Killers (a top-3 customer
announcing in-house silicon at scale; export-control expansion to a second major market;
inventory days > 120), lists the next two earnings dates and one export-policy decision as
catalysts, writes the pre-mortem ("…because the 2027 capex guides came in flat and the
multiple compressed before revenue did"), and saves output/thesis/NVDA.md with status INTACT
and a next check on the August print.

User: thesis-tracker NVDA --update [pastes the August 10-Q highlights]

The assistant returns: NVDA · WEAKENED · 2026-08-29 — Gross margin 68.1% (was 75.5%) breached
the ≥ 70% threshold; the other three KPIs hold; no trigger fired. Notes that the pricing-power
leg of the thesis is the one under pressure, moves the next check to the October analyst day,
and appends the log row "2026-08-29 · hold, no add · $131 · margin breach under review".

Notes

  • Run the analysis skills first. This skill is a notebook with rules; it is only as good as the analyses it summarizes. Open with at least stock-eval and bear-case in hand.
  • Never write the thesis for the user. Sharpen, question, and structure — but the conviction has to be theirs or the file will not be believed when it says BROKEN.
  • Hold the KPI count at five. More KPIs means more noise and a guaranteed breach every quarter; the thesis becomes permanently WEAKENED and the status stops carrying information.
  • A WEAKENED status blocks adding, not holding. Pair with position-ladder, whose thesis-break gate is meant to read this status.
  • Closed files are inputs to trade-postmortem. Do not delete them.
  • File paths and the output/ convention follow full-report. Where the environment cannot write, print the file.

Thesis Invalidation

After delivering the analysis signal, specify what would reverse it:

If signal is BULLISH (thesis INTACT) — it turns WEAKENED or BROKEN if:

  • Any KPI in the file crosses its threshold at the next check (name the KPI closest to its threshold today and by how much)
  • Any trigger in the file fires — the trigger table is the invalidation list for this thesis
  • The core mechanism stalls for two consecutive checks even with KPIs technically inside threshold (the numbers hold but the story does not)

If signal is BEARISH (thesis BROKEN) — the verdict is wrong if:

  • The breached KPI was a one-off (a charge, a reclassification, a timing shift) and reverts within one quarter — say what evidence would show that
  • The fired trigger was mis-specified (it caught a symptom that turned out not to matter to the mechanism) — rewrite the trigger rather than ignore it
  • The user's original thesis was narrower than the one written down — re-open with the honest, narrower version

Re-run this analysis when:

  • The next-check date in the file arrives
  • Any catalyst in the file occurs
  • Price moves ±20% from the entry or the last check (a check, not a reaction)
  • A new bear-case or stock-eval run produces triggers the file lacks
  • 90 days have elapsed since the last update

Standard Signal Output

This skill measures thesis health, not stock direction, so state the mapping: Signal: BULLISH means the thesis is INTACT (the reason for owning it holds); NEUTRAL means WEAKENED (hold, do not add, check sooner) — or INSUFFICIENT EVIDENCE, in which case Confidence: LOW and Action: HOLD are mandatory; BEARISH means BROKEN (the reason for owning it is gone). Action: BUY here means "the thesis supports continuing to hold or ladder within the stated ceiling" — never "buy without limit." Read the direction of the stock from stock-eval or bear-case, not from this block.

All analysis concludes with this standardized block:

╔══════════════════════════════════════════════╗
║              INVESTMENT SIGNAL               ║
╠══════════════════════════════════════════════╣
║ Signal:      BULLISH / NEUTRAL / BEARISH     ║
║ Confidence:  HIGH / MEDIUM / LOW             ║
║ Horizon:     SHORT / MEDIUM / LONG-TERM      ║
║ Score:       X.X / 10                        ║
╠══════════════════════════════════════════════╣
║ Action:      BUY / HOLD / SELL               ║
║ Conviction:  STRONG / MODERATE / WEAK        ║
╚══════════════════════════════════════════════╝

Score Guide: 8.0–10.0 Strongly Bullish | 6.0–7.9 Moderately Bullish | 4.0–5.9 Neutral | 2.0–3.9 Moderately Bearish | 0.0–1.9 Strongly Bearish Confidence: HIGH (strong data, clear signals) | MEDIUM (mixed signals) | LOW (limited data, conflicting signals) Horizon: SHORT-TERM (1 week–3 months) | MEDIUM-TERM (3 months–1 year) | LONG-TERM (1+ years)

Note: The Score above is the Thesis Health Score, mapped onto the standard scale for cross-skill comparability. It rates how well the written thesis is surviving its own tests — not how attractive the stock is.

Disclaimer: Educational analysis only. Not financial advice. A thesis file is a record of the user's reasoning, not a recommendation to hold, add to, or sell any position.

Frequently asked questions

What does the Thesis Tracker AI skill do?

Write, save, and re-check an investment thesis — KPIs with thresholds, invalidation triggers, catalysts, a pre-mortem, and a decision log; `--update` re-reads the saved file against new data and returns INTACT / WEAKENED / BROKEN

Why use Thesis Tracker on TypingMind?

Because you install it once and use it with any model. Thesis Tracker is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Thesis Tracker in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/yennanliu/InvestSkill/tree/main/plugins/us-stock-analysis/skills/thesis-tracker. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Thesis Tracker?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Thesis Tracker?

As many as you like. As long as a model supports skills, you can use Thesis Tracker with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Thesis Tracker AI skill free?

Yes. It is published on GitHub by yennanliu under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇