earnings-prep — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited earnings-prep (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Earnings reactions are ±8-20%. That's not where to skip the discipline layers.
macro-warning skill first. In 🔴 RED regime, even a 20% beat can sell off (AMD 2/3/2026 beat 23%, dropped -17.31%). RED regime → recommend trim/hedge only, no adds regardless of expected reaction.$(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/insider_ratio.py 2>/dev/null | head -1) TICKER --window 60 (60d catches pre-earnings ad-hoc activity that 90d dilutes). Pre-earnings C-suite distribution = they know something. Never trust yfinance "% Net Shares" headline (RSU pollutes it). Form 4 code "P" only counts as buy.tax-optimize for STCG vs LTCG impact. STCG ~25-37% federal vs LTCG 15-20%. Often changes the recommendation (hold 30 more days → save 10%)."Look carefully" rule: the most common pre-earnings mistake is treating "beat consensus" as automatic upside. Always answer "what's already priced in" (Step 4 below) — if Forward P/E expanded 30% in 3 months, the beat is already discounted.
See README's Hard Rules for the full anti-pattern list.
Answer 3 questions:
Tools:
WebSearch: "[ticker] Q[X] FY[YEAR] earnings consensus revenue EPS"mcp__yfmcp__yfinance_get_ticker_info for current price + earnings dateCapture:
| Item | Value |
|---|---|
| Earnings date | YYYY-MM-DD (BMO/AMC) |
| Revenue consensus | $X.XB (+Y% YoY) |
| EPS consensus | $X.XX (+Y% YoY) |
| Company self-guide | $X.XB ± $Y |
| Last quarter beat/miss | Beat by X% / Missed |
| Days away | N |
Method 1 (preferred): ATM straddle
Method 2: WebSearch fallback
WebSearch: "[ticker] earnings expected move implied volatility"Output:
Current: $XXX
Implied move: ±X.X%
Expected range: $YYY - $ZZZPull last 8 quarter reactions. Use optionsai.com, optionslam.com, or WebSearch.
Output table:
| Date | Result | One-day reaction | Notes |
|---|---|---|---|
| 8 quarters back | Beat/Miss | +X% / -X% | Why |
| 7 | ... | ... | ... |
| ... | ... | ... | ... |
| Last quarter | Beat 23% | -17.31% | Despite beat (AMD pattern) |
Key statistics:
Before scenario building, assess earnings predictability based on growth model:
| Growth Model | Earnings Predictability | Implication |
|---|---|---|
| Capacity-bottlenecked (Optical, OSAT) | 🔴 Low | High variance, "shipments < demand" common |
| Demand-elastic (GPU, ASIC) | 🟡 Medium | Can beat but expectations also high |
| Independent capex (Memory, Storage) | 🟢 High | Capacity locked, contracts visible |
| Long-cycle infra (Power, Materials) | 🟢🟢 Highest | Backlog-driven, low surprise |
| Recurring SaaS/ARR | 🟢🟢 Highest | Quarterly steady |
For each model, watch for these red flags pre-earnings:
Critical analysis — this is what separates pros from amateurs.
Question 1: What's already in the price?
Question 2: What's NOT in the price?
Examples:
| Scenario | Probability | Conditions | Reaction | Target Price |
|---|---|---|---|---|
| 🚀 Mega-bull | X% | Big beat + raise + new catalyst | +12 to +20% | $YYY |
| 🟢 Bull | X% | Solid beat + in-line guide | +3 to +8% | $YYY |
| 🟡 Flat/-Sell | X% | Beat but priced-in | -3 to -10% | $YYY |
| 🔴 Bear | X% | Miss or guide cut | -10 to -20% | $YYY |
Weighted average price = Σ(probability × target) If weighted < current → 期望值是负的,市场已 priced in 利好
Based on the 4 scenarios, give SPECIFIC action:
| Pre-earnings setup | Action |
|---|---|
| Already +30%+ in last month | Trim 25-50% before |
| At 1Y high + earnings ≤7d | Trim 25-50% (Rule #5 from review-screenshot) |
| Healthy trend, not parabolic | Hold + set 50DMA stop |
| Below 50DMA, beaten down | Hold, low expectations = upside skew |
| Insider distributed pre-earnings | Trim, they know something |
| Setup | Strategy |
|---|---|
| Bullish + IV reasonable | Long call (1-2 weeks out) |
| Bullish + IV very high | Call spread (cap upside, reduce cost) |
| Bullish + already long stock | Buy upside call as add (don't sell stock) |
| Bearish + IV high | Put spread (cheaper than naked put) |
| Uncertain but want to play vol | Strangle or straddle (rare, expensive) |
| Setup | Hedge |
|---|---|
| Want full protection | Long put at ATM (expensive but full hedge) |
| Want protection at lower cost | Put spread (gives up tail) |
| Have core, willing to sell at +X% | Covered call (income, caps upside) |
| Want to stay in but reduce delta | Sell some shares + use proceeds for puts |
# [TICKER] Earnings Prep — [Date]
**Earnings: [Date BMO/AMC] | Days away: N**
## TL;DR
[One paragraph: what to do with current position + size]
## Consensus
| Revenue | EPS | YoY |
## Implied Move
- ATM straddle: ±X.X%
- Range: $YYY - $ZZZ
## Historical Pattern (Last 8 Quarters)
[Table]
- Avg abs move: X.X%
- Win rate: Y/8
## What's Priced In
- ✅ Already in price: [list]
- ❌ NOT priced in: [list — these are upside catalysts]
## 4 Scenarios
| Scenario | Prob | Reaction | Target |
| Mega-bull | X% | +X% | $Y |
| Bull | X% | +X% | $Y |
| Flat | X% | -X% | $Y |
| Bear | X% | -X% | $Y |
**Weighted avg target: $X (vs current $Y) → +/-Z%**
## My Recommendation
- **If I'm long [N shares]**: [trim X / hold / add Y]
- **If I'm not in**: [skip / play call spread / wait]
- **Specific orders**: [exact ticker, qty, price, type]
## Watch list (next 24h)
- [Pre-market reaction signals]
- [Key levels: $X = breakout, $Y = breakdown]| Pitfall | Example | Lesson |
|---|---|---|
| "Earnings will beat, stock will rise" | AMD 2/3/26 (beat 23%, -17.31%) | Beat alone is not enough |
| "Sell put before earnings = easy money" | Multiple times | Until it's not, then you lose 10x premium |
| Ignoring IV crush | Bought ATM call before earnings | Need stock to move > implied + IV crush |
| Not checking insider | Dropping after CFO sold $5M pre-earnings | Insider sold for a reason |
| Only checking 8q avg | Recent trend was -10%, -8%, -17% | Trend > average |
| Need | Tool | |
|---|---|---|
| Current price + earnings date | mcp__yfmcp__yfinance_get_ticker_info | |
| Option chain for straddle | mcp__yfmcp__yfinance_get_option_chain | |
| Historical earnings reactions | WebSearch: "optionslam [ticker] earnings history" | |
| Implied move | Calculate from straddle OR WebSearch: "[ticker] expected move" | |
| Consensus | WebSearch: "[ticker] Q[X] earnings consensus" | |
| Insider pre-earnings | `$(ls ~/.claude/{skills,plugins/claude-investment-skills}/review-investment-screenshot/scripts/insider_ratio.py 2>/dev/null | head -1) "TICKER" --window 60` (60d window catches pre-earnings ad-hoc activity; default is 90d) |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.