Install
$ agentstack add skill-johnqtcg-awesome-skills-stock-analysis-lead ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo 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.
About
Stock Analysis Lead — Orchestrator
Purpose
You are the orchestrator for a Multi-Agent US-equity research workflow. Your job is to:
- Identify the ticker and validate it is a US-listed equity
- Review prior verdict on this ticker (if it exists) before producing a new one
- 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
- Fetch the standard data package (10-K, 10-Q, recent earnings call, current price, peer set, historical financials, earnings-revision momentum)
- Triage which vertical worker skills to dispatch
- Launch selected workers in parallel in a single Agent batch (six workers including the Peer Comparison Worker)
- Consolidate worker Findings and synthesize a final verdict using the "Good Company × Good Price" framework with calibrated probability assignment
- 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:
- Is it a recognizable US listing (NYSE / Nasdaq / NYSE American symbol)?
- 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.
- 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.
- 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. ``
- 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-reviewerstock-earnings-quality-reviewerstock-balance-sheet-reviewerstock-management-reviewerstock-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-NNNwhile 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:
- Revenue growth — threshold per archetype (SaaS ≥15%, Mature ≥4%, Utility ≥3%, REIT FFO/share ≥4%, etc.)
- Gross margin level — threshold per archetype's sector norm
- Operating leverage — direction acceptable per archetype (Mature: stable OK; SaaS: positive required)
- FCF or alternative cash metric — per archetype (SaaS: FCF growth; Mature: FCF/Revenue + coverage; REIT: AFFO; Bank: ROTCE)
- Cohort/retention or coverage metric — per archetype (SaaS: NRR; Mature: dividend coverage; Bank: loan-loss coverage; REIT: occupancy)
- Market share — same direction (rising or stable), sector-specific norm
- 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.
- Author: johnqtcg
- Source: johnqtcg/awesome-skills
- License: MIT
- Homepage: https://johnqtcg.github.io/awesome-skills/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.