Test an existing single-stock pitch against new information and update the original memo in place. Companion to equity-research-skill — does NOT build new pitches from scratch. Handles quarterly earnings, investor days, catalyst events, and periodic reviews through one 4-step workflow that preserves the thesis-first / killing-conditions discipline of the parent skill.
The parent equity-research-skill is a zero-to-pitch workflow — it crafts a defensible 10–18 page memo from raw filings to publication. Its own description explicitly says "NOT for earnings updates." That left a methodology gap for the entire post-publication life of a name: every earnings print, every investor day, every catalyst event needs a structured way to test the existing thesis without rebuilding it from scratch.
Most "earnings update" workflows are sell-side templates: produce an 8-12pp note for client distribution. That's the wrong fit for a personal archive — you don't want a delta note alongside the original memo; you want one always-current document per name with a built-in audit trail of how the view evolved.
This skill is built around that constraint:
- Updates the original memo PDF in place for refinements. One canonical document, always current.
- Archives-and-replaces only on direction reversals (LONG → PASS / SHORT). Old PDF preserved at
archive/[TICKER]_pitch_v[N]_[date].pdffor audit. - Carries an Appendix C "Update history" table at the back of every memo — human-readable audit trail visible inside the PDF itself.
- No upfront effort tier. The three-test (pillars / killing conditions / load-bearing magnitude) result is the magnitude assessment; the recommended action follows mechanically.
- Never invents a new pillar via update. Pillars come from the parent skill's Phase 6→8 — updates test them, never extend them. If new evidence points to a missing pillar, that's a signal to rebuild via the parent skill, not back-fill here.
- Killing conditions are sacred. A fired KC must be reflected in the action class; no quiet downgrade.
Per update event:
~/Claude Projects/Equity Research/[TICKER]/updates/
└── 2026-05-25_investor-day/
├── materials/ # raw artefacts pulled in step 1
├── structured_read.md # step 2 — NEW vs RESTATED disclosures
└── three_test.md # step 3 — pillar / KC / magnitude verdicts
Plus in-place edits to:
~/Claude Projects/Equity Research/[TICKER]/deliverables/
├── [TICKER]_pitch.md # Changelog row appended; thesis edits if Class 2+
├── [TICKER]_pitch.pdf # rebuilt
└── [TICKER]_model.xlsx # only if model flexed
On direction reversal only:
~/Claude Projects/Equity Research/[TICKER]/deliverables/archive/
├── [TICKER]_pitch_v[N]_[date].pdf
└── [TICKER]_pitch_v[N]_[date].md
flowchart TD
A[Trigger:<br/>'review TICKER after IR day'<br/>'post-earnings on TICKER'<br/>'is TICKER still my view'] --> B[Step 1<br/>Materials gather<br/>10-30 min]
B --> C[Step 2<br/>Structured read<br/>NEW vs RESTATED · 30-60 min]
C --> D[Step 3<br/>Three-test<br/>Pillars · KCs · Magnitude]
D --> E{Action class<br/>determined<br/>by three-test}
E -->|All SILENT/CONFIRMED, 0 KCs fired| F1[Log-only update<br/>~30 min]
E -->|1+ CONFIRMED, modest shift| F2[In-place refinement<br/>~1 day]
E -->|1 INVALIDATED or 1 KC fired| F3[Heavy refinement<br/>~2 days]
E -->|2+ INVALIDATED or 2+ KCs fired<br/>or load-bearing INVALIDATED| F4[Direction reversal<br/>Re-run parent Phase 7<br/>~2-3 days]
style E fill:#ffe4b5,stroke:#333,color:#000
style F4 fill:#ffcdd2,stroke:#333,color:#000
The amber box is the load-bearing judgement moment — the three-test result mechanically points at an action class, but the user confirms or overrides. The skill never auto-commits to an action.
| Event type | Trigger phrase |
|---|---|
| Quarterly earnings | "update TICKER after Q2 print" / "post-earnings on TICKER" |
| Investor day / capital markets day | "review TICKER after investor day" / "TICKER capital markets day update" |
| Catalyst event | "TICKER update on [ruling/M&A/contract]" / "catalyst note on TICKER" |
| Periodic review (no event) | "periodic review of TICKER" / "is TICKER still my view" / "refresh TICKER" |
- Initial coverage of a new name → use equity-research-skill
- Pre-event scenario notes (will they beat?) → out of scope; consider Anthropic's
earnings-previewif needed - Multi-name fan-out across a coverage list → not designed for this; run once per ticker
| Skill does | You do |
|---|---|
| Pulls new artefacts | Decides if more material is needed |
| Reads end-to-end, structures NEW vs RESTATED | Validates the reading |
| Runs the three-test mechanically | Confirms pillar verdicts |
| Recommends an action class | Picks the action |
| Drafts the in-place memo edits | Approves / edits the diffs |
| Rebuilds PDF, copies to archive | Confirms the final |
Skill never picks the action; surfaces the recommended one with explicit reasoning. Same drafting-vs-deciding split as the parent skill.
git clone https://github.com/GeniusTrader-Harry/equity-research-update-skill.git \
~/.claude/skills/equity-research-updateIn Claude Code, the skill auto-loads when it detects relevant phrasing. Trigger phrases are listed in the table above.
- Claude Code 2.x
- The parent equity-research-skill installed and used to produce the original pitch — this skill reads its working files
- For PDF rebuilds:
pandoc+weasyprint+pango(same toolchain as the parent skill — see its README)
If you have memos that were produced BEFORE the parent skill's Phase 10 KC-format patch and Phase 13 Appendix C scaffold (both required by this skill), you need a one-time backfill:
working/killing_conditions.md— reformat KCs to the structured format (KC1, KC2, … with Trigger / What-it-kills / Cadence / Source / Why fields). See parent skill'sreferences/phase10-pillar-audit.mdfor the schema.deliverables/[TICKER]_pitch.md— append an empty "Appendix C — Update history" scaffold with just the initiation row. See parent skill'sreferences/phase13-pitch-template.mdfor the format.
After backfill, this skill can read both files programmatically and the in-place memo updates can append Changelog rows correctly.
| Result of three-test | Class | Work | Memo state after |
|---|---|---|---|
| All pillars SILENT or CONFIRMED · 0 KCs fired · magnitude unchanged | Log-only | ~30 min | Single Changelog row appended; body untouched; PDF rebuilt and pushed |
| 1+ pillar CONFIRMED with new data · 0 KCs fired · magnitude shifted <5% PT | Refined | ~1 day | Thesis text edited where new evidence lands; model lightly flexed; PT may move; Changelog row appended |
| 1 pillar INVALIDATED · OR 1 KC fired · OR magnitude shifted >5% PT but direction retained | Heavy refinement | ~2 days | Affected pillar's narrative rewritten; KC restated if fired; model rebuilt; PT re-derived; Changelog row appended |
| 2+ pillars INVALIDATED · OR load-bearing pillar INVALIDATED · OR 2+ KCs fired · OR direction-flipped magnitude | Direction reversal | ~2-3 days | Re-run parent skill's Phase 7 (direction commit) against new evidence. Old PDF archived to archive/; new primary published with fresh Appendix C |
These are encoded into the spec because they're the most common failure modes for update workflows:
- NEVER introduce a new pillar via an update. Pillars come from the parent skill's Phase 6→8 — updates test, they don't extend.
- NEVER quietly downgrade a fired killing condition. Fired KCs trigger at least Class 3; if two fire, Class 4. No "well it kind of fired but…"
- NEVER call a refinement 'no change' if PT moved. If you flexed the model and PT moved even 1%, it's at minimum
Refined. - NEVER skip the Q&A pauses. Three explicit pauses (after steps 1, 2, 3) and a final one after step 4. User cadence, never auto-advance.
- NEVER read sell-side before forming your own three-test verdict. Their take anchors you. Read primary sources, do the three-test, then cross-check with sell-side.
- NEVER let the archive site drift from the project memo. After every rebuild, the archive PDF must be byte-identical to the project PDF.
Full list in references/anti-patterns.md.
- NOT a replacement for the parent skill. This skill reads the parent's outputs (
pillars_audited.md,killing_conditions.md,valuation_outputs.yaml). Without those, this skill has nothing to test against. - NOT an automated monitoring tool. Trigger is manual — user invokes when there's a specific event. No cron, no webhook.
- NOT a delta-note format. Updates edit the original memo in place; they don't produce a separate "earnings note" alongside.
- NOT a multi-name workflow. One ticker per invocation.
Built as a companion to equity-research-skill after the first real post-publication event (an investor day on a covered name) exposed the methodology gap. Anti-patterns came out of designing the skill against that specific event — particularly the "never invent a new pillar" and "fired KCs are sacred" rules, which the original workflow's discipline would have caught at initiation but which a sloppy update workflow could easily violate.
Mistakes are mine. Patches welcome.
MIT.