Earnings postmortem
Skill tusharagg1/aifolimizer/.claude/skills/earnings-postmortem
Run a post-earnings report breakdown on a specific ticker - beat/miss vs consensus, last 4 quarters trend, management guidance shift, and "does the result change my thesis?". Use when the user pastes an earnings report, asks "did X beat?", "what did Y report?", "how did earnings go?", or names a stock with words like "reported", "earnings call", "Q1 results". Fetches portfolio via aifolimizer MCP.From its SKILL.md
npx -y skills add tusharagg1/aifolimizer --skill earnings-postmortemAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.0 KB, as published. Nobody here has run it
Earnings Postmortem (Post-Report Breakdown)
Stage 0 - Decision Memory (load BEFORE forming any verdict)
Before fetching market data, load prior decisions on this ticker so the verdict stays consistent across sessions:
mcp__aifolimizer__get_ticker_decision_historywithticker=TICKER, max_decisions=5- prior actions, outcomes, reflectionsmcp__aifolimizer__get_ticker_reflectionwithsymbol=TICKER, n=3- prior recs + realized alphamcp__aifolimizer__get_cross_ticker_lessonswithmax_lessons=3- portfolio-level win/loss patterns
Reconciliation rule: if a prior decision exists and your new read flips it, state explicitly WHY it changed (new data / catalyst / price move). Never silently contradict a logged decision - that drift is exactly what this prevents.
How to run
- Call
mcp__aifolimizer__get_profile- account types and capital. Frame any post-report trim/add decision and tax impact - Confirm ticker via
mcp__aifolimizer__get_portfolio- current weight + cost basis (or note "not held" if researching watchlist name) - Call
mcp__aifolimizer__get_earnings_resultswithsymbols=[ticker],quarters=4- last 4 quarters EPS actual vs estimate, surprise %, beat/meet/miss outcome - Call
mcp__aifolimizer__get_fundamentalswithsymbols=[ticker]- current P/E, forward P/E, EPS TTM, analyst target, recommendation, profit margin, revenue growth - Call
mcp__aifolimizer__get_news_headlineswithticker=ticker- post-report news + analyst reactions - Call
mcp__aifolimizer__get_recent_filingswithticker=ticker, forms=["8-K","10-Q","10-K"]- the actual results 8-K + the 10-Q/10-K with a direct EDGAR link; confirms the filing exists and timestamps it (primary source for section 2 numbers). US-listed only - WebSearch only for: full earnings call transcript quotes, segment revenue breakdown, forward guidance text, options-implied move that already played out, sell-side rating changes post-report
Investor profile
- Canadian retail investor
- Time horizons: short-term trading + long-term (10yr+) holding
- Account types and capital: always read from
get_profile- never hardcode
Output structure
1. Verdict (top, one paragraph)
- Beat / Meet / Miss on EPS (from
get_earnings_resultsmost recent quarter) - Stock reaction summary (from news + price move if available)
- Thesis change: confirmed / weakened / broken
- Action: Hold / Add / Trim / Exit - with tax-account framing
2. Headline numbers
- This quarter EPS actual vs estimate, surprise %
- Revenue actual vs estimate (from WebSearch if not in MCP - clearly label source)
- YoY growth on revenue and EPS
3. Last 4 quarters trend
Render markdown table. Columns: Quarter | EPS Estimate | EPS Actual | Surprise % | Outcome. Below table: one sentence on pattern (improving beats, deteriorating, choppy).
4. Management commentary signal
- Call
mcp__aifolimizer__get_earnings_commentarywithticker=<TICKER>FIRST. Lead withmgmt_tone_trend(improving/deteriorating/stable vs prior quarters) - this is the predictive field. IGNORE the absolutemgmt_tone/mgmt_tone_signalin isolation: prepared remarks are always promotional, so absolute tone is near-1.0 every quarter.primary_metricshows the trend source (av_sentiment = AV's LLM model, preferred; lexicon_tone = EDGAR-only). Probabilistic drift read, NOT a verdict:improvingtrend agreeing with a beat strengthens the upward-drift thesis;deterioratingafter a beat (tone worse despite good numbers) is a strong caution flag. Ifrelativeis false (only one quarter / non-US) orsourceis None, fall back to WebSearch. - Guidance: raised / maintained / lowered (commentary tool gives language tone; WebSearch for the exact guidance numbers - yfinance doesn't carry guidance)
- Key segment commentary (e.g., cloud growth, ad revenue, subscriber net adds)
- New risks called out by management
- Capital allocation changes (buybacks, dividend, capex)
5. Analyst reaction
- Upgrades/downgrades since report (from headlines + WebSearch)
- Price target revisions: pre vs post
- Consensus shift
6. Valuation re-rate
- Forward P/E now vs pre-report
- Did multiple expand or compress on print?
- Is current price implying guidance is credible?
7. Recommendation (Canadian tax aware)
- Before emitting any Add/BUY verdict, call
mcp__aifolimizer__get_positioning_signalswithsymbols=[ticker]- a beat often pulls the crowd into the post-print reaction. Ifcrowding_score>=70(consensus-crowded), downgrade conviction or defer the add (negative expected alpha for late entries) - If user holds: hold / add / trim / exit with reasoning tied to cost basis
- If user doesn't hold: initiate / wait / pass
- Account placement (TFSA / RRSP / Non-Reg) - same framework as stock-analysis
- For Non-Reg trims, flag capital gains realization explicitly
After output - log decision
Call mcp__aifolimizer__log_recommendation with action (BUY/HOLD/SELL/ADD/TRIM/PASS), conviction (HIGH/MED/LOW), target_pct + stop_pct (% from entry - entry is captured live), 1-line rationale citing thesis-change verdict (confirmed / weakened / broken), skill="earnings-postmortem". Feeds forward win-rate / track-record loop.
Rules
- Decision summary at very top
- Always render 4-quarter trend table - verbal-only not acceptable
- Under 600 words
- Cite cost basis if user holds ticker
- Never invent EPS or revenue figures - quote from
get_earnings_resultsor state "WebSearch: <source, date>" - Forward guidance MUST come from WebSearch (yfinance has no guidance field) - do not fabricate
Gotchas
get_earnings_resultsreturns yfinanceearnings_history- EPS only, no revenue. Revenue beats/misses require WebSearch (earnings press release or transcript)- yfinance
surprisePercentis decimal (0.05 = 5%) - service already multiplies by 100, but verify sign on negative surprises - For .TO tickers, yfinance
earnings_historysparse - many TSX names return empty. Note "TSX coverage gap", rely on WebSearch with company's IR release - "outcome" field is strict EPS-only beat/miss - company can beat on EPS via buybacks while missing on revenue. Always look at revenue separately
- "Stock reaction" requires post-report price move -
get_technicalscached 1h, may not reflect fresh print. Note timestamp - Pre-earnings consensus revisions matter: "beat" against lowered estimate weaker than beat against raised estimate. Flag if WebSearch shows estimates cut in 2 weeks before report
- Guidance shift is dominant signal, not headline beat. Beat with guide-down is sell catalyst; small miss with guide-up is buy
- Crypto holdings: skill inapplicable - redirect to crypto-specific analysis