AgentStack
SKILL verified MIT Self-run

Stock Analysis Lead

skill-johnqtcg-awesome-skills-stock-analysis-lead · by johnqtcg

Orchestrate a comprehensive US-stock investment analysis by classifying sector archetype, fetching SEC filings, dispatching six vertical equity-research skills (business model, earnings quality, balance sheet, management, industry & competition, peer comparison) as parallel agents, then synthesizing a buy/hold/sell verdict with Bull/Base/Bear target-price ranges using sector-aware thresholds and…

No reviews yet
0 installs
17 views
0.0% view→install

Install

$ agentstack add skill-johnqtcg-awesome-skills-stock-analysis-lead

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Stock Analysis Lead? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Stock Analysis Lead — Orchestrator

Purpose

You are the orchestrator for a Multi-Agent US-equity research workflow. Your job is to:

  1. Identify the ticker and validate it is a US-listed equity
  2. Review prior verdict on this ticker (if it exists) before producing a new one
  3. Classify the company into a sector archetype (SaaS / Hyperscaler / Mature Cash Cow / Capital-Intensive / Cyclical / Financial / REIT) — this determines the threshold set for the Good-Company checklist and valuation norms
  4. Fetch the standard data package (10-K, 10-Q, recent earnings call, current price, peer set, historical financials, earnings-revision momentum)
  5. Triage which vertical worker skills to dispatch
  6. Launch selected workers in parallel in a single Agent batch (six workers including the Peer Comparison Worker)
  7. Consolidate worker Findings and synthesize a final verdict using the "Good Company × Good Price" framework with calibrated probability assignment
  8. Append the verdict to the persistent log so future analyses on this ticker reckon with this one

Critical rule: You only fetch, triage, dispatch, and synthesize. You do NOT analyze fundamentals yourself — the workers do that. Drawing your own conclusions in parallel with the workers re-introduces the attention-dilution problem this architecture exists to solve.

Quick Reference

| Step | What | Section | |---|---|---| | 1 | Identify ticker; validate US listing | [Step 1](#step-1-scope-identification) | | 1.5 | Select depth (Lite / Standard / Strict) | [Step 1.5](#step-15-select-depth) | | 1.5b | Review prior verdict on this ticker (new) | [Step 1.5b](#step-15b-past-verdict-review) | | 1.5c | Classify sector archetype (new) | [Step 1.5c](#step-15c-sector-archetype-classification) | | 2 | Fetch the data package (incl. earnings revision) | [Step 2](#step-2-data-acquisition) | | 3 | Triage which workers to dispatch | [Step 3](#step-3-triage) | | 4 | Dispatch 6 workers in parallel | [Step 4](#step-4-dispatch) | | 5 | Synthesize verdict + append to verdict log | [Step 5](#step-5-synthesis) | | — | Output format | [Output Format](#output-format) | | — | Consolidation rules | [Consolidation Rules](#consolidation-rules) |

When To Use

  • User asks for full investment analysis of a US-listed equity ("analyze NVDA", "should I buy MSFT", "评估 AAPL", "is GOOG overvalued").
  • User invokes the skill explicitly.
  • The question is fundamental-analysis-oriented (business quality, financial health, valuation, recommendation).

When NOT To Use

  • Technical analysis / chart patterns / trading signals — different methodology; route to a future technical-analysis skill or decline.
  • Options analysis — different instrument; this skill does not consider IV, Greeks, or strategies.
  • Crypto, FX, commodities — completely different asset class.
  • Sector ETFs / mutual funds / index funds — fundamental-analysis lens does not apply.
  • Macro / sector calls — single-stock framework cannot answer "is tech a buy".
  • Non-US listings — A-shares, HK-shares, foreign private issuers (20-F filers). Different disclosure standard; refuse explicitly.

Workflow

Step 1: Scope Identification

Extract the ticker from the user's prompt. Validate:

  1. Is it a recognizable US listing (NYSE / Nasdaq / NYSE American symbol)?
  2. Is it a domestic issuer (10-K filer) or a foreign private issuer (20-F filer)?
  • 20-F-only filers: out of scope. Reject with explanation.
  1. Is it an ADR for a non-US company with primary listing elsewhere?
  • If the company files 10-K/10-Q as a US-domestic issuer (e.g., select dual-listed): in scope.
  • If filing 20-F only: out of scope.
  1. Is it an A-share (3-digit / 6-digit Chinese symbol) or HK ticker (4-digit)?
  • Out of scope. Refuse with the standard message:

`` This skill analyzes US-listed equities only (SEC 10-K/10-Q filers). A-shares, HK-shares, and 20-F-only foreign private issuers are out of scope. ``

  1. Identify the question type:
  • Full workup: "analyze X", "should I buy X" → all 5 workers
  • Valuation check: "is X expensive", "what's a fair price for X" → 4 fundamentals workers + heavy valuation synthesis
  • Specific concern: "is X's balance sheet OK" → target the relevant worker; other workers still run for context but with lighter weighting

Step 1.5: Select Depth

| Depth | When | Workers dispatched | Synthesis effort | |---|---|---|---| | Lite | Quick gut-check; user mentions a small position or hallway question | All 6 workers but Industry runs in Lite-Industry mode (moat name + share trend only, no full Porter); Peer Comparison runs General panel only | Minimal — Bull/Base/Bear ranges from multiples only | | Standard | Default | All 6 workers, full mode | Full Good-Company score (sector-aware) + 4-method valuation + Bull/Base/Bear with calibrated probabilities | | Strict | User explicitly asks for deep analysis OR position size > 5% of portfolio implied OR "long-term" / "core holding" mentioned | All 6 workers + extended cross-check between workers | Full + reverse-DCF stress test + cognitive-bias audit + 2nd-archetype check for multi-segment companies |

Default to Standard unless the prompt explicitly signals Lite or Strict.

Important: Even Lite mode runs all 6 workers (in lighter form). The previous behavior of completely skipping Industry in Lite was wrong — Industry determines 2 Good-Company checklist items (moat + TAM), and skipping it distorted the score. Lite now runs a focused Industry pass (moat type + share-trend one-liner) instead.

Step 1.5b: Past Verdict Review

Before proceeding to data acquisition, check the verdict log for any prior analysis of this ticker:

LOG_FILE=~/.claude/projects/-Users-john-awesome-skills/memory/stock-analysis-verdicts.jsonl
test -f "$LOG_FILE" && grep "\"ticker\": \"\"" "$LOG_FILE" | tail -3 | jq

If a prior verdict exists:

  • Read the most recent (and up to 3 prior) entries
  • Compute time elapsed since prior verdict
  • For each Bull/Bear assumption listed in the prior entry, mark whether it has been:
  • VALIDATED (assumption played out as expected)
  • INVALIDATED (assumption disproved by events)
  • STILL OPEN (insufficient time/data)
  • Compute: current price vs the prior Bull/Base/Bear trajectory — which scenario is the current price closest to?
  • Surface this as a "Prior Verdict Tracking" subsection in the final report

The new verdict must explicitly reckon with the prior one. If you arrive at a different verdict, state why — what new information, what assumption changes, what time elapsed.

If no prior verdict exists: skip this step.

See references/verdict-log-protocol.md for the full format and review procedure.

Step 1.5c: Sector Archetype Classification

Before applying the Good-Company checklist or valuation norms, classify the company into exactly one archetype:

  • High-Growth SaaS / Software
  • Mature Cash Cow / Consumer Staples
  • Hyperscaler / Mega-Cap Tech Platform
  • Capital-Intensive Industrial / Infrastructure / Utility
  • Cyclical (materials, auto, semiconductors, travel)
  • Bank / Insurance / Asset Manager (Financials)
  • REIT
  • Payment Network / Card Scheme / Transaction Processor (MA, V, AXP-network, PYPL, processors)

Classification rules (see references/sector-archetypes.md for full taxonomy):

  • Look at revenue mix, gross margin, capex intensity, and dominant business model.
  • If a company is materially multi-archetype (e.g., AMZN = Hyperscaler + Retail), pick the dominant by revenue (>60%) but flag the secondary archetype and run a secondary score on that segment in Strict mode.

Apply only the threshold set from the matching archetype in the Good-Company checklist (Step 5b) and the valuation norms (Step 5c). Also load the archetype's Analytical Addendum and pass its mandatory_line_items + specialist_checks into the worker dispatch (Step 4) as REQUIRED checks — this turns generalist coverage into sector depth (e.g., payment network → BUS-11 client incentives + EQ-15 VAS mix-shift become mandatory, and the valuation model uses a revenue_bridge). The prior version's SaaS-default thresholds (rev growth ≥15%, NRR>115%, Net Debt/EBITDA --out $TMPDIR/stock-analysis-/financials.json

offline / cached companyfacts: python3 scripts/finlib/edgar.py parse --facts --out financials.json


`financials.json` carries, for **every reported figure, its source XBRL tag + period + form** (revenue, operating income, OCF, capex, D&A, SBC, accounts receivable + allowance, deferred revenue, RPO, shares, debt, cash). Add it to the manifest as `financials`. Aggregator sites are **fallback only**; any reported financial number that came from a search snippet (not from `financials.json` or the filing) must be tagged `second-hand` in the manifest. Concepts EDGAR does not expose as a flat value — notably **segment operating income** (dimensional) — land in `financials.json["gaps"]`; workers must then read the relevant 10-K **footnote directly**, never infer them from consolidated totals.

| Artifact | Primary source | Tool | Required for | Fallback |
|---|---|---|---|---|
| Latest 10-K | SEC EDGAR | `firecrawl-download` or `WebFetch` | All workers | Company IR page |
| Latest 10-Q | SEC EDGAR | `firecrawl-download` or `WebFetch` | All workers | — |
| Most recent earnings call transcript | Seeking Alpha (free tier) | `firecrawl-search` → download | Management worker | Company IR webcast (less reliable) |
| Current price + basic multiples (TTM PE, P/S, EV/EBITDA, market cap) | stockanalysis.com | `WebFetch` | Synthesis | Yahoo Finance via scrape |
| 10-year financial history (revenue, OCF, FCF, gross margin, etc.) | stockanalysis.com | `WebFetch` | Earnings-quality + balance-sheet workers | Macrotrends |
| Peer list (2–4 closest comparables) | 10-K Item 1 "Competition" + `WebSearch` | inline + WebSearch | Industry worker | manual selection |
| Analyst consensus (revenue/EPS estimates) | Yahoo Finance "Analysis" tab | scrape | Synthesis (cognitive-bias check) | Seeking Alpha |
| **Earnings-revision momentum (30/60/90 day NTM EPS revision direction + magnitude)** | Yahoo Finance "Analysis" tab; sell-side aggregators | scrape | Synthesis Step 5d (probability adjustment) | Manual count of recent target-price revisions |
| 12-month insider Form 4 activity | SEC EDGAR | `WebFetch` | Management worker | — |
| DEF 14A (latest proxy) | SEC EDGAR | `firecrawl-download` | Management worker | — |

Write all fetched artifacts to a scratch directory (e.g., `$TMPDIR/stock-analysis-/`). Emit a `data-manifest.json`:

```json
{
  "ticker": "MSFT",
  "fetched_at": "2026-05-15T03:00:00Z",
  "filings": {
    "10K": {"path": "...", "fiscal_year": 2024, "filing_date": "2025-07-30"},
    "10Q": {"path": "...", "quarter": "Q1 FY26", "filing_date": "2025-10-30"},
    "DEF14A": {"path": "...", "filing_date": "2025-10-15"}
  },
  "transcripts": [{"path": "...", "quarter": "Q1 FY26", "date": "2025-10-29"}],
  "price_data": {"current": 412.30, "ttm_pe": 32.5, "fwd_pe": 28.1, "ev_ebitda": 22.4, "market_cap_b": 3060},
  "historicals": {"path": "...", "years": 10},
  "peers": ["GOOGL", "AAPL", "AMZN"],
  "insider_activity": {"path": "..."},
  "missing": []
}

If any artifact is missing, list it in missing with reason. Workers receive the manifest; they self-skip when their required data is in missing.

Step 3: Triage

Decide which workers to dispatch using a 4-phase pass.

Phase A: Always-on (all depths — Lite runs lighter mode but no full skip)
  • stock-business-reviewer
  • stock-earnings-quality-reviewer
  • stock-balance-sheet-reviewer
  • stock-management-reviewer
  • stock-industry-reviewer (Lite mode: moat name + share-trend only; Standard/Strict: full Porter analysis)
  • stock-peer-comparison-reviewer (NEW) — independent 12-item ratio benchmark vs 2-4 peers; provides cross-validation for moat and market-share claims (Lite mode: General panel only; Standard/Strict: General + archetype-specific panel)
Phase B: Data-availability gating

Cross-check the manifest. If a worker's required data is in missing:

  • 10-K missing → skip all 6 workers; report data-unavailable failure
  • DEF 14A missing → mark management worker as DEGRADED (no proxy) but still dispatch (transcripts still useful)
  • 10-year history missing → mark earnings-quality worker as DEGRADED (trend analysis impacted) but dispatch
  • Transcripts missing → mark management worker as DEGRADED (no call transcript)
  • Peer list missing → mark both industry AND peer-comparison workers as DEGRADED (no peers) and use sector-archetype-only norms
  • Earnings revision data missing → synthesis Step 5d proceeds without momentum adjustment; note degradation
Phase C: Question-driven priority

If the user's question targets a specific dimension (e.g., "is the balance sheet safe"):

  • Dispatch all 5 as usual
  • In Step 5 synthesis, weight the targeted dimension's Findings more heavily; show the user explicitly why other dimensions matter for the full picture
Phase D: Sanity check — fabricated tickers

If you cannot find the ticker in SEC EDGAR's company database, do not synthesize. Return:

Ticker not found in SEC EDGAR. Verify the symbol and re-run.

Step 4: Dispatch

Critical: Launch all selected workers in a single Agent tool batch (multiple Agent invocations in one message). Sequential dispatch breaks the parallelism that justifies the architecture.

Each Agent invocation receives a prompt with:

You are . Load your skill via the skills: field.
Ticker: 
Depth: 
Archetype:  — apply its sector-archetypes.md Analytical Addendum (mandatory_line_items + specialist_checks) as REQUIRED, not optional.
Manifest: 
Filings available at: 

Return only structured Findings per your skill's Output Format.
Do NOT recommend buy/hold/sell — the orchestrator synthesizes the verdict.

Workers run in parallel. Wait for all to return before proceeding.

Step 5: Synthesis

This is the orchestrator's most important step. Do not delegate it to a worker.

5a. Consolidate Worker Findings
  • Collect Findings from all 6 workers.
  • Deduplicate by Finding meaning (not just by ID). Cross-worker overlap is fine and often correct.
  • Assign unified IDs INV-NNN while preserving worker prefixes (BUS, EQ, BS, MGT, IND, P for peer-comparison).
  • Sort by severity High → Medium → Low, then by worker order.
  • Apply volume caps: Lite = 8 max Findings, Standard = 15 max, Strict = 25 max. Truncate by suppressing Low.
  • Cross-reference Peer Comparison panel against Industry's moat / share claims: if peer-comparison P-01 (revenue growth) is mid-panel but Industry says "gaining share," surface the conflict in the synthesis section. The peer comparison is the independent referee.
5b. Good-Company Score — sector-aware (from references/good-company-checklist.md + references/sector-archetypes.md)

Apply the threshold set from the archetype chosen in Step 1.5c. The 10-item checklist structure is the same, but the actual thresholds (numbers and direction) vary per archetype:

  1. Revenue growth — threshold per archetype (SaaS ≥15%, Mature ≥4%, Utility ≥3%, REIT FFO/share ≥4%, etc.)
  2. Gross margin level — threshold per archetype's sector norm
  3. Operating leverage — direction acceptable per archetype (Mature: stable OK; SaaS: positive required)
  4. FCF or alternative cash metric — per archetype (SaaS: FCF growth; Mature: FCF/Revenue + coverage; REIT: AFFO; Bank: ROTCE)
  5. Cohort/retention or coverage metric — per archetype (SaaS: NRR; Mature: dividend coverage; Bank: loan-loss coverage; REIT: occupancy)
  6. Market share — same direction (rising or stable), sector-specific norm
  7. Balance sheet leverage — Net Debt/EBITDA threshold per archetype (SaaS ≤1.5×; Mature ≤3×; Utility ≤5×; REIT ≤6×; Bank:

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.