CommunityResearch & Data Analysisgithub.com

AhSirJoe/stock-debate

Native bull/bear/PM debate engine for evaluating a stock (or basket) and producing a decision-grade verdict — the deterministic, Opus-run replacement for the external TradingAgents framework (which is credit-gated). TRIGGER when the user wants a buy/sell/hold call, a "debate this stock", a "what do you think of TICKER", a bull-vs-bear, a valuation sanity-check, to (re)evaluate a SaaS/software name, to re-run a name after earnings, or to refresh/update the Stock Pool hub. Built for software/SaaS but works on any equity. Do NOT trigger for pure data lookups or portfolio rebalancing (use /rebalance).

What is stock-debate?

stock-debate is a Claude Code agent skill that native bull/bear/PM debate engine for evaluating a stock (or basket) and producing a decision-grade verdict — the deterministic, Opus-run replacement for the external TradingAgents framework (which is credit-gated). TRIGGER when the user wants a buy/sell/hold call, a "debate this stock", a "what do you think of TICKER", a bull-vs-bear, a valuation sanity-check, to (re)evaluate a SaaS/software name, to re-run a name after earnings, or to refresh/update the Stock Pool hub. Built for software/SaaS but works on any equity. Do NOT trigger for pure data lookups or portfolio rebalancing (use /rebalance).

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AhSirJoe/agentic-investing-stack/tree/HEAD/skill/stock-debate

Installed? Explore more Research & Data Analysis skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

stock-debate — deterministic bull/bear/PM verdict engine (v2)

Objective: maximize absolute, probability-weighted upside subject to a realistic, dated catalyst and constructive momentum. Cheapness alone is never a buy; a big drawdown is never a buy; a no-revenue/TAM-story moonshot is never a buy. Produce an honest, decision-grade verdict by (1) locking the numbers deterministically and date-stamping them, (2) checking the growth is real, (3) clearing three hard gates, (4) running an adversarial bull/bear/PM debate, (5) scoring on the 5-lens framework, and (6) returning a clean-slate verdict with an entry, an expected-value, and the remaining crack.

Hard rules: never recommend a buy without a cash check; never margin (cash ≥ 0). Confirm trade details before any execution. This skill ENDS at analysis — it does not place trades.


Step 1 — Deterministic data FIRST (source of truth; never news/memory for numbers)

Every price / multiple / trajectory in the verdict must trace to a deterministic pull below, and each metric must be date-stamped (record the as-of / latest-quarter date). The #1 error is a stale or misread number — guard it explicitly: if the pulled data predates the company's most recent earnings date, re-pull.

Primary in Cowork — Alpha Vantage MCP (structured, one call covers most of the screen):

  • COMPANY_OVERVIEW(TICKER) → forward P/E, trailing P/E, PEG, EV/EBITDA, EV/Revenue, P/S, margins, ROE, AnalystTargetPrice + rating spread, 50d & 200d MA, 52-week high/low, revenue/earnings growth, LatestQuarter (use as the freshness stamp).
  • EARNINGS_ESTIMATES(TICKER) → forward EPS + revenue estimates (for durable-PEG, Step 2).
  • CASH_FLOW(TICKER) + BALANCE_SHEET(TICKER) → compute EV/FCF and FCF margin (the FCF-first lens).
  • EARNINGS_CALENDAR / earnings date → the catalyst gate clock.
  • RSI, MACD, ADX (and SMA 50/200 if not in overview) → the momentum gate.
  • NEWS_SENTIMENT(TICKER) → recent catalysts / sentiment.
  • Budget: free key = 25 requests/day, ~1/sec. Batch ≤ 20 names/day, space calls, and stamp Metrics Updated. Reserve calls for the deep-dive shortlist; do not refresh all ~100 in one batch.

Fallback / cross-check — WebFetch (routes through Anthropic's fetch service; free, no entitlement):

  • Valuation screen → https://stockanalysis.com/stocks/TICKER/statistics/ (price, fwd P/E, PEG, EV/FCF, EV/EBITDA, P/S, FCF margin, margins, ROE). NOTE: this page is often JS-rendered — if WebFetch returns a shell, escalate to the Chrome tools or rely on the Alpha Vantage pull.
  • Overview / revenue trajectory → .../stocks/TICKER/ and .../financials/?p=quarterly (last ~6 quarters' revenue + YoY% → Accelerating / Flattening / Decelerating).
  • Foreign 20-F/ADR filers with no page → WebSearch the latest IR release.

Live price & options → the Robinhood connector (get_equity_quotes, get_option_chains; account-connected, works in Cowork). Use Robinhood for the current print; Alpha Vantage close can lag.

Macro/regime → WebSearch "SPY vs 200-day MA [month year]" (BULL above / BEAR below); also note VIX and the 10-yr yield trend (long-duration software is rate-sensitive). Never cite a macro catalyst from memory — verify the year.

Local alternative (machine with outbound HTTP, not Cowork): python scripts/finnhub_metrics.py TICKER and python scripts/cohort_trajectory_sec.py TICKER (SEC XBRL trajectory; paths relative to the repo root). Cowork sandbox blocks outbound HTTP from python/curl, so scripts are local-only.

Forward PEG note: the screen PEG / fwd P/E is a screen only — Step 2 recomputes durable PEG on the organic forward growth rate from the actual earnings release.


Step 2 — Growth-quality / PEG-TRAP check (highest-value step)

A low PEG on juiced or backward-looking growth is a trap. Before trusting any multiple, recompute PEG on DURABLE FORWARD growth. Strip out: one-time pull-forwards / term-license / EOL recognition; M&A-inflated reported growth (find the ORGANIC ex-acquisition rate); payments-VOLUME growth (use recurring GP / ARR, not blended revenue); one-time margin steps that pop EPS; float / interest revenue that reverses as rates ease.

durable PEG = fwd P/E ÷ durable forward growth %. If durable PEG ≫ screen PEG, the "cheap" thesis fails. Pull NRR / RPO / organic-ex-M&A from the primary earnings release / 8-K / transcript (WebSearch / Tavily), never a news summary. EV/EBITDA is often n/m for pre-EBITDA SaaS — lean on EV/FCF + FCF margin. When FCF is negative, EV/FCF is also n/m → require a credible, dated path to FCF and judge EV/S against durable growth; if the only support is TAM narrative, it fails the quality floor (Step 2.5c).


Step 2.5 — THREE HARD GATES (a BUY must clear all three)

These encode the objective. A name failing any gate cannot be a BUY — cap it at WAIT/HOLD/AVOID.

(a) Catalyst gate. There must be a concrete, dated, realistic catalyst within ~2 quarters (earnings, product GA, contract/PPA, regulatory decision, guide-raise cadence). "Cheap and patient" is not a catalyst. No catalyst → max verdict = WAIT (or HOLD if already owned on merit).

(b) Momentum gate. Do not initiate a BUY into a confirmed downtrend — i.e. price below a falling 50d AND 50d < 200d (death cross), or RSI < ~40 with negative MACD. A large drawdown is a reason for caution, not a buy signal. Such names are WAIT with an explicit reclaim trigger (e.g. "buy on a reclaim of the 50d at $X on volume"). Constructive = price ≥ rising 50d, or 50d ≥ 200d, or basing with RSI 45–65 turning up. (Momentum is timing for exits/trims but a gate for entries.)

(c) Quality / moonshot floor. AVOID if: pre-revenue or no profit path; negative FCF with no credible dated path; valuation justified only by TAM/story; or a sub-scale single-product binary. Caps the speculative tail regardless of how large the "upside" looks.

Mega-cap durable compounders (CRM/NOW/WDAY/PANW-type) get extended-relevance benefit of the doubt on the momentum gate; the kill-signal for them is growth decelerating, not a price wobble.


Step 3 — Run the bull/bear/PM debate

For 1–2 tickers, reason inline. For a basket, use Opus subagents, pipeline per ticker: parallel(bull, bear) → PM. Each agent receives the LOCKED, date-stamped numbers (cannot hallucinate price/valuation) and may WebSearch ONLY for recent catalysts.

  • Bull — strongest evidence-based long case: moat/bottleneck + pricing power, durable growth, the dated catalyst, and the momentum setup.
  • Bear — strongest case against: commoditization/participant risk, deceleration, disruption, valuation, technical/momentum breakdown, governance, the binary that could break it.
  • Portfolio manager — assign bull/base/bear scenario probabilities, compute a prob-weighted ~12m expected value (EV) and the skew, check the three gates, then decide.

Step 4 — Score on the 5 lenses (bottleneck-first)

  1. Bottleneck vs participant (primary) — owns a supply/demand chokepoint with pricing power (system-of-record, data gravity, switching cost) vs a commoditizable participant. Cheap participant = value trap; durable bottleneck = earns its multiple.
  2. Trajectory (2nd derivative) — Accelerating / Flattening / Decelerating.
  3. Absolute growth — actual YoY% level vs same-size peers.
  4. Valuation (FCF-first) — durable-PEG (Step 2), FCF margin, EV/FCF over Rule-of-40.
  5. Momentum (GATE for entries; context for exits) — 50/200d position & slope, RSI/MACD, 52w position. Per the objective this is a gate on new buys, not a tie-breaker. → AI-bifurcation bucket: Accelerant / Survivor / Disrupted.

Step 5 — Verdict (clean-slate) + EV + the crack

Judge every name as if you held none of it: "would I initiate today, at this price?" Held is a tax footnote. A BUY requires: all three gates cleared + prob-weighted 12m EV ≥ ~+20–25% with positive skew. Rank BUYs by EV.

Taxonomy (mapped to the Stock Pool hub Decision):

VerdictHub DecisionMeaning
CONVICTION BUYConviction BuyTop-EV, all gates clear, durable bottleneck at a fair durable-growth price
BUYBuyOwn today; gates clear; EV hurdle met
ACCUMULATE / SCALEAccumulateQuality you want, but stage in (momentum not yet constructive, or in a defined entry zone)
WAITWatchRight name, wrong level/timing — give the explicit entry/reclaim trigger
HOLDHold/KeepHeld, own-on-merit, no add
TRIM (keep core)TrimDurable but extended/expensive and still growing → right-size, don't exit
REDUCEReduce / Sell-ExitExtended and decelerating, or thesis broken → sell down/out
AVOIDAvoidParticipant / value trap / price-not-moat / moonshot

End with:

  • The crack — is the thesis bulletproof, or is there a remaining crack? State the one thing that most threatens it.
  • Entry / size — entry level(s); size by regime (smaller in BEAR), conviction, and portfolio fit (penalize adding to an already-crowded factor — e.g. if the book is already concentrated in one theme, a new name in that theme competes with that concentration). Never exceed cash; never margin.
  • Monitor (what flips this) — the single metric whose change reverses the verdict.
  • Confidence drivers — LOWER for: thin coverage, foreign 20-F filers, undisclosed NRR, a pre-earnings binary, heavy M&A/payments/float distortion, or data older than the last earnings.
  • Point-in-time — date-stamp the verdict; re-run at next earnings.

Triangulate the target — don't lean on the sell-side AnalystTargetPrice alone (lagging/optimistic, and discount it when rating dispersion is wide). Cross-check with reverse-DCF or a forward-EPS × justified-multiple.


Write-back to the Stock Pool — Master Hub

If the user keeps the Notion hub, offer to update the per-name row, mapping: Decision (taxonomy above) · Fwd P/E · PEG (durable) · Tgt Upside % · Trend (Uptrend/Mixed/Downtrend from the momentum gate) · Last Px + Px Checked (Robinhood) · Metrics Updated (Alpha Vantage LatestQuarter/today) · Rationale (one-line thesis + the crack) · Key Metrics (durable-PEG, EV/FCF, FCF margin, growth). Always stamp the freshness dates so staleness is visible. Per-name analysis page title stays TICKER — YYYY-MM-DD — VERDICT.

Related Skills