agentleFS
tusharagg1tusharagg1/aifolimizer/.claude/skills/earnings-postmortem/SKILL.md

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.

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
  1. Distinctive:

    Before fetching market data, load prior decisions on this ticker so the verdict stays consistent across sessions:

    line 10
  2. Very specific:

    Call mcp__aifolimizer__get_profile - account types and capital.

    line 19
  3. Very specific:

    Call mcp__aifolimizer__get_earnings_results with symbols=[ticker], quarters=4 - last 4 quarters EPS actual vs estimate, surprise %, …

    line 21
  4. Very specific:

    Call mcp__aifolimizer__get_fundamentals with symbols=[ticker] - current P/E, forward P/E, EPS TTM, analyst target, recommendation, profit …

    line 22
  5. Very specific:

    Call mcp__aifolimizer__get_news_headlines with ticker=ticker - post-report news + analyst reactions

    line 23
  6. Very specific:

    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 …

    line 24
  7. Very specific:

    Before emitting any Add/BUY verdict, call mcp__aifolimizer__get_positioning_signals with symbols=[ticker] - a beat often pulls the crowd …

    line 68
  8. Distinctive:

    If user holds: hold / add / trim / exit with reasoning tied to cost basis

    line 69
  9. Distinctive:

    If user doesn't hold: initiate / wait / pass

    line 70
  10. Very specific:

    Call mcp__aifolimizer__log_recommendation with action (BUY/HOLD/SELL/ADD/TRIM/PASS), conviction (HIGH/MED/LOW), target_pct + stop_pct (% …

    line 76
  11. Distinctive:

    Always render 4-quarter trend table - verbal-only not acceptable

    line 81
  12. Very specific:

    Never invent EPS or revenue figures - quote from get_earnings_results or state "WebSearch: <source, date>"

    line 84

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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_history with ticker=TICKER, max_decisions=5 - prior actions, outcomes, reflections
  • mcp__aifolimizer__get_ticker_reflection with symbol=TICKER, n=3 - prior recs + realized alpha
  • mcp__aifolimizer__get_cross_ticker_lessons with max_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

  1. Call mcp__aifolimizer__get_profile - account types and capital. Frame any post-report trim/add decision and tax impact
  2. Confirm ticker via mcp__aifolimizer__get_portfolio - current weight + cost basis (or note "not held" if researching watchlist name)
  3. Call mcp__aifolimizer__get_earnings_results with symbols=[ticker], quarters=4 - last 4 quarters EPS actual vs estimate, surprise %, beat/meet/miss outcome
  4. Call mcp__aifolimizer__get_fundamentals with symbols=[ticker] - current P/E, forward P/E, EPS TTM, analyst target, recommendation, profit margin, revenue growth
  5. Call mcp__aifolimizer__get_news_headlines with ticker=ticker - post-report news + analyst reactions
  6. 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 direct EDGAR link; confirms the filing exists and timestamps it (primary source for section 2 numbers). US-listed only
  7. 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_results most 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_commentary with ticker=<TICKER> FIRST. Lead with mgmt_tone_trend (improving/deteriorating/stable vs prior quarters) - this is the predictive field. IGNORE the absolute mgmt_tone/mgmt_tone_signal in isolation: prepared remarks are always promotional, so absolute tone is near-1.0 every quarter. primary_metric shows the trend source (av_sentiment = AV's LLM model, preferred; lexicon_tone = EDGAR-only). Probabilistic drift read, NOT a verdict: improving trend agreeing with a beat strengthens the upward-drift thesis; deteriorating after a beat (tone worse despite good numbers) is a strong caution flag. If relative is false (only one quarter / non-US) or source is 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_signals with symbols=[ticker] - a beat often pulls the crowd into the post-print reaction. If crowding_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_results or state "WebSearch: <source, date>"
  • Forward guidance MUST come from WebSearch (yfinance has no guidance field) - do not fabricate

Gotchas

  • get_earnings_results returns yfinance earnings_history - EPS only, no revenue. Revenue beats/misses require WebSearch (earnings press release or transcript)
  • yfinance surprisePercent is decimal (0.05 = 5%) - service already multiplies by 100, but verify sign on negative surprises
  • For .TO tickers, yfinance earnings_history sparse - 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_technicals cached 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

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.