earnings-postmortem
Skill2 starsChanged 5 months agoMITView on GitHub
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.
In this repository29 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- adversarial-researchSkill
- auto-rebalanceSkill
- cash-deploymentSkill
- daily-briefingSkill
- dividend-strategySkill
- earnings-analyzerSkill
- employer-stockSkill
- health-checkSkill
- macro-impactSkill
- momentum-scannerSkill
- optimize-allocationSkill
- pead-trackerSkill
- perf-optimizerSkill
- portfolio-healthSkill
- portfolio-reviewSkill
- position-reviewSkill
- pre-trade-checkSkill
- profile-setupSkill
- risk-assessmentSkill
- sector-rotationSkill
- stock-analysisSkill
- stock-compareSkill
- tax-loss-reviewSkill
- top-trades-todaySkill
- trade-journalSkill
- trading-deskSkill
- weekly-mirrorSkill
The file
We split this skill into the rules it gives an agent
12 rules. About 0 are common, 4 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 10
Before fetching market data, load prior decisions on this ticker so the verdict stays consistent across sessions:
- Very specific: line 19
Call mcp__aifolimizer__get_profile - account types and capital.
- Very specific: line 21
Call mcp__aifolimizer__get_earnings_results with symbols=[ticker], quarters=4 - last 4 quarters EPS actual vs estimate, surprise %, …
- Very specific: line 22
Call mcp__aifolimizer__get_fundamentals with symbols=[ticker] - current P/E, forward P/E, EPS TTM, analyst target, recommendation, profit …
- Very specific: line 23
Call mcp__aifolimizer__get_news_headlines with ticker=ticker - post-report news + analyst reactions
- Very specific: line 24
Call mcp__aifolimizer__get_recent_filings with ticker=ticker, forms=["8-K","10-Q","10-K"] - the actual results 8-K + the 10-Q/10-K with a …
- Very specific: line 68
Before emitting any Add/BUY verdict, call mcp__aifolimizer__get_positioning_signals with symbols=[ticker] - a beat often pulls the crowd …
- Distinctive: line 69
If user holds: hold / add / trim / exit with reasoning tied to cost basis
- Distinctive: line 70
If user doesn't hold: initiate / wait / pass
- Very specific: line 76
Call mcp__aifolimizer__log_recommendation with action (BUY/HOLD/SELL/ADD/TRIM/PASS), conviction (HIGH/MED/LOW), target_pct + stop_pct (% …
- Distinctive: line 81
Always render 4-quarter trend table - verbal-only not acceptable
- Very specific: line 84
Never invent EPS or revenue figures - quote from get_earnings_results or state "WebSearch: <source, date>"
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

