The orchestrator runs agents in a strict phased pipeline. Each phase's output becomes input context for subsequent phases.
User Request
│
▼
┌─────────┐
│ Planner │ (Sonnet 4.6) — SKIPPED when the request matches a pre-baked
│ │ plan in requests.json (catalog / periodic requests supply their
│ │ own plan and run it directly). A fast regex pre-check and the
│ │ planner can both reject a request ("mode": "rejected").
│ │ Otherwise: decomposes request → JSON plan (mode, targets, tasks).
└────┬────┘
│ plan.agents[*].activate / plan.agents[*].task
▼
┌──────────────────────────────────────────────────────────────┐
│ Phase 1 — Parallel Data Gathering (Haiku 4.5, up to 4 threads) │
│ │
│ ┌──────┐ ┌─────────────┐ ┌───────┐ ┌──────────────────┐ │
│ │ News │ │ Market Data │ │ Macro │ │ Geopolitical │ │
│ │ │ │ │ │ │ │ Risk │ │
│ └──┬───┘ └──────┬──────┘ └───┬───┘ └────────┬─────────┘ │
│ │ │ │ │ │
└─────┼─────────────┼─────────────┼───────────────┼────────────┘
│ │ │ │
▼ ▼ ▼ ▼
news_output + market_data_output + macro_output + geopolitical_output
│
│ All Phase 1 outputs are concatenated as context
▼
┌──────────────────────────────────────────────────────────────┐
│ Phase 2 — Sequential Analysis (each sees all prior output) │
│ │
│ ┌────────────────┐ │
│ │ Equity Analyst │ ← Phase 1 outputs │
│ └───────┬────────┘ │
│ ▼ │
│ ┌────────────────────────┐ │
│ │ Swing Trading Analyst │ ← Phase 1 + equity_analyst │
│ └───────┬────────────────┘ │
│ ▼ │
│ ┌────────────────────────┐ │
│ │ Macro Liquidity │ ← Phase 1 + prior analysts │
│ │ Analyst │ │
│ └───────┬────────────────┘ │
│ ▼ │
│ ┌────────────────┐ │
│ │ Scenario Agent │ ← Phase 1 + all analyst outputs │
│ └───────┬────────┘ │
└──────────┼───────────────────────────────────────────────────┘
│
│ All Phase 1 + Phase 2 outputs
▼
┌──────────────────────────────────────────────────────────────┐
│ Phase 3 — Review │
│ │
│ ┌────────┐ │
│ │ Critic │ ← all prior outputs │
│ └───┬────┘ │
│ │ assumption challenges, gaps, bias check │
└──────┼───────────────────────────────────────────────────────┘
│
│ All prior outputs + critic feedback
▼
┌──────────────────────────────────────────────────────────────┐
│ Phase 4 — Report │
│ │
│ ┌───────────────┐ │
│ │ Report Writer │ ← everything (ONE of 6 writer variants, │
│ │ │ chosen by which report_writer_* the │
│ └───────┬───────┘ plan activated; default report_writer) │
│ │ │
│ ▼ │
│ reports/{tenant_id}/*.md │
│ reports/{tenant_id}/*.meta.json │
│ reports/{tenant_id}/*.log │
└──────────────────────────────────────────────────────────────┘
The model: field in each skill's frontmatter is informational only. The
authoritative per-agent model is AGENT_MODEL in agents/orchestrator.py
(falling back to the orchestrator default for anything unlisted). Current
assignments:
| Phase / agent | Model |
|---|---|
| Phase 0 — planner | Sonnet 4.6 |
| Phase 1 — news, market_data, macro, geopolitical_risk | Haiku 4.5 |
| Phase 2 — equity_analyst, swing_trading_analyst, macro_liquidity_analyst, scenario | Sonnet 4.6 |
| Phase 3 — critic | Opus 4.7 |
Phase 4 — report_writer and all report_writer_* variants |
Sonnet 4.6 (16k max tokens) |
(So the Phase-1 skill files say claude-sonnet-4-6 in frontmatter, but they
actually run on Haiku 4.5 at runtime.)
Not every agent runs in every mode. For free-form requests the planner emits one
of the modes below and sets activate per agent. Phase agents run only when
their activate flag is set.
| Agent | equity_deep_dive | swing_trade | market_brief | macro_outlook | news_digest | data_pull |
|---|---|---|---|---|---|---|
| news | Yes | Yes | Yes | Yes | * | |
| market_data | Yes | Yes | Yes | * | ||
| macro | Yes | Yes | Yes | Yes | * | |
| geopolitical_risk | Yes | Yes | * | |||
| equity_analyst | Yes | |||||
| swing_trading_analyst | Yes | Yes | ||||
| macro_liquidity_analyst | Yes | Yes | Yes | |||
| scenario | Yes | |||||
| critic | Yes | Yes | Yes | Yes | Yes | No |
| report_writer | Yes | Yes | Yes | Yes | Yes | * |
* = depends on the specific plan. data_pull is a lightweight mode that
skips the critic; agent activation is set by the plan rather than fixed.
Specialized (pre-baked) modes. Catalog / periodic requests in requests.json
ship a full plan (planner skipped) and can use custom modes —
vip_market_report, tech_theme, ai_investment, whale-activity and
watchlist reports — each of which activates a specialized Phase-4 writer
(see Report writer selection below).
Authoritative mapping lives in AGENT_TOOLS in agents/orchestrator.py. An
entry is either "module" (all of that module's tools) or "module:tool1,tool2"
(a named subset). Current wiring:
| Agent | Tool modules (subset shown after :) |
|---|---|
| news | newsapi_ai, newsdata, gdelt:search_gdelt_news, articles, fmp:get_news,get_company_profile, finviz:news, web_search, alpaca_mktdata:get_alpaca_news |
| market_data | fmp, sec, openfigi, finviz:screener,latest_filings,quote_history,group_performance, 13f, uw, alpaca_mktdata:get_market_movers,get_most_active,get_stock_snapshots |
| macro | fred, imf, articles, alphavantage, newsapi_ai:search_news,get_macro_news |
| geopolitical_risk | newsapi_ai, newsdata, gdelt:search_gdelt_news,get_gdelt_geo_news, articles, web_search |
| equity_analyst | fmp, fred, sec, openfigi, newsapi_ai:search_news,get_company_news, uw |
| swing_trading_analyst | fmp, fred, newsapi_ai, newsdata:search_newsdata, alphavantage:get_commodity_prices,get_forex_daily, uw:ext_get_options_flow,ext_get_oi_changes,ext_get_options_screener |
| macro_liquidity_analyst | macro_liquidity, fred:get_interest_rates,get_credit_conditions,get_money_supply,get_macro_snapshot |
planner, scenario, critic, all report_writer_* |
none (pure reasoning / writing) |
Short names resolve to modules via TOOL_MODULES in agents/runner.py:
fmp fred imf newsapi newsapi_ai gdelt newsdata articles sec
alphavantage openfigi macro_liquidity finviz 13f unusualwhales uw
alpaca_mktdata
tools.json enables/disables modules without code changes. newsapi (the
legacy NewsAPI.org module) is superseded by newsapi_ai; gdelt + newsdata
also serve as news fallbacks.uw reads the daily Unusual Whales snapshot CSVs in uw/ (options flow, OI
changes, dark pool, stock/options screener). Files are seeded from local on
deploy and refreshed by the scheduler via uw_download.py. Returns empty
results gracefully when no files are present.alpaca_mktdata (tools/data_ingestion_alpaca_mktdata.py) provides Alpaca
Market Data REST endpoints: get_market_movers, get_most_active,
get_stock_snapshots, get_alpaca_news. Uses env-var API keys (not per-tenant
TLS), so usable directly by agents without key injection.unusualwhales (live REST API) is registered but not currently bound to any
agent in AGENT_TOOLS.web_search is an Anthropic server-side tool (see
SERVER_TOOLS in runner.py), not a local module — wired into news and
geopolitical_risk.Each agent is driven by a markdown skill file (agents/skills/*.md) loaded as
the system prompt by AgentRunner. Below is a condensed summary of each agent's
role, tools, workflow, and output format. Full skill files are in agents/skills/.
Phase 4 has six writer variants (report_writer plus five specialized writers);
the rest of the pipeline has one skill per agent.
All agents include a <summary> block at the end of their output (1000–2000
chars) that is passed as compressed context to downstream agents.
The
model:in each skill block below is reproduced from the skill file's frontmatter and is informational — the runtime model comes fromAGENT_MODEL(see Runtime models above). Notably the Phase-1 agents run on Haiku 4.5 despite their frontmatter saying Sonnet.
name: critic description: Stress-tests the analysis — challenges assumptions, identifies gaps, flags data quality issues. model: claude-opus-4-7
Devil's advocate and quality controller. Finds weaknesses in the analysis to make it stronger.
Tools: None (pure reasoning from prior agent context).
Inputs: All prior agent outputs (news, market data, macro, geopolitical risk, equity thesis, scenarios).
Output: Assumption Challenges table (assumption, challenge, severity), Data Quality Concerns (stale, missing, contradictions, sample bias), Analytical Gaps, Counter-Arguments, Bias Check (anchoring, recency, confirmation, narrative, consensus), Confidence Assessment table (data quality, analytical rigour, valuation range, scenario completeness → overall), Recommendations for Improvement.
Guidelines: Constructive not destructive. Challenge strongest claims hardest. Check logical consistency and that recommendation follows from analysis.
name: equity_analyst description: Synthesises market data, news, and macro context into an investment thesis with valuation and recommendation. model: claude-sonnet-4-6
Senior equity research analyst. Synthesises all prior agent output into a rigorous investment thesis with valuation and recommendation.
Tools: FMP (quote, profile, financials, metrics, ratios, analyst data, DCF,
earnings transcripts, research bundle), FRED (yield curve, credit conditions,
real rates, any series), SEC EDGAR (get_sec_company_facts,
get_sec_submissions, get_sec_concept, search_sec_filings), OpenFIGI
(map_identifiers, search_figi).
Inputs: News briefing, market data, macro assessment, geopolitical risk register.
Workflow: Review all context → fetch missing data → build thesis → cross-check conclusions against data. Emphasise Earnings Analysis for recent earnings tasks; emphasise Comparable Company Analysis for comparison tasks.
Output sections:
- Business Quality Assessment (moat, revenue quality, capital allocation,
management)
- Competitive Position (market share, advantages, threats, industry structure)
- Financial Analysis (growth, margins, balance sheet, FCF, capital returns)
- Earnings Analysis (beat/miss, guidance update, estimate revision impact —
when recent quarter reported)
- Comparable Company Analysis (4–6 peers: mkt cap, rev growth, EBITDA margin,
P/E, EV/EBITDA, EV/Revenue; premium/discount vs. median)
- Valuation Assessment (DCF + relative methods → blended fair value +
historical range)
- Investment Thesis (recommendation, fair value range, conviction)
- Key Catalysts, Risk Factors
- Summary block (<summary>, 1000–2000 chars for downstream agents)
Guidelines: Peer selection must justify by business model, end-market, and scale similarity. For earnings: lead with beat/miss, quantify variance, explain WHY.
name: geopolitical_risk description: Scans news and articles for geopolitical risks, assesses probability and market impact. model: claude-sonnet-4-6
Geopolitical risk analyst — assesses how political events and international tensions affect financial markets.
Tools: NewsAPI* (get_geopolitical_news, get_central_bank_news,
search_news, get_finance_news_snapshot), GDELT (search_gdelt_news,
get_gdelt_sentiment, get_gdelt_coverage_volume, get_gdelt_geo_news),
NewsData.io (search_newsdata, get_newsdata_market), Articles archive
(search_articles, get_article_summaries, get_article — max 2 full reads).
* NewsAPI disabled by default; GDELT + NewsData.io serve as replacements.
Performance budget: ≤ 8 tool calls total.
Workflow: Geopolitical headlines → central bank news → targeted topic searches → GDELT/NewsData for international/regional perspectives → article summaries (prefer over full text).
Output: Geopolitical Risk Register (probability × impact × timeframe ×
affected assets table), Risk Detail (description, trigger signals, transmission
mechanism, affected sectors, historical analogue, hedging implications),
Geopolitical Sentiment (risk level, direction, key uncertainty), Central Bank
Watch, Summary block (<summary>, 1000–2000 chars).
name: macro description: Pulls macroeconomic data from FRED, IMF, ECB, BIS, and Alpha Vantage to assess the macro regime and outlook. model: claude-sonnet-4-6
Macroeconomist — assesses the current macroeconomic regime and outlook from FRED, IMF, ECB, BIS, and Alpha Vantage data.
Tools: FRED (14 tools — get_macro_snapshot, get_yield_curve,
get_inflation_dashboard, get_labor_market, get_housing_market,
get_credit_conditions, get_consumer_health, get_manufacturing_trade,
get_monetary_aggregates, get_financial_stress, get_real_rates,
get_leading_indicators, get_fred_series, list_available_series), IMF (9
tools — global outlook, GDP, inflation, current account, unemployment, debt,
fiscal balance, indicator, country listing), ECB (6 tools — rates, HICP,
money supply, FX, bond yields, snapshot), BIS (7 tools — credit/GDP, debt
service, property prices, total credit, policy rates, effective exchange rates,
snapshot), Alpha Vantage (get_forex_daily, get_commodity_prices,
get_crypto_daily, get_economic_data), Articles archive.
Performance budget: ≤ 12 tool calls. Use composite tools
(get_macro_snapshot, get_ecb_snapshot, get_bis_snapshot,
get_imf_global_outlook) instead of individual series calls.
Workflow: get_macro_snapshot (US) → get_imf_global_outlook (global) →
get_ecb_snapshot + get_bis_snapshot (Europe/global finance) → drill into
specific areas per task → get_forex_daily / get_commodity_prices for FX and
commodities → search articles for qualitative commentary.
Output: Macro Regime Assessment (Growth / Inflation / Policy / Credit
classifications), Key Indicators table with trends, Regional Outlook (US, Euro
Area, China, EM), Risks & Watchpoints, Data Quality Notes, Summary block
(<summary>, 1000–2000 chars).
name: macro_liquidity_analyst description: Macro liquidity regime analyst. Scores liquidity conditions from FRED data and explains implications for asset classes. model: claude-sonnet-4-6
Macro-liquidity regime analyst — scores liquidity conditions from FRED data, classifies the regime, and explains asset-class implications.
Tools: Macro Liquidity (get_macro_liquidity_score,
get_liquidity_regime, explain_liquidity_for_asset,
generate_macro_liquidity_report), FRED supplementary (get_interest_rates,
get_credit_conditions, get_money_supply, get_macro_snapshot).
Performance budget: ≤ 6 tool calls total.
Workflow (strict 5-step process): 1. Liquidity Score — composite score (-3 to +3) with 4-pillar breakdown (real rates, central bank balance sheet, credit impulse, funding stress) 2. Context — yield curve shape, credit spread direction, rate stance 3. Asset Implications — per asset class (equities, bonds, commodities, crypto) 4. Regime Change Signals — components near thresholds, leading indicators 5. Summary block
Output: Ends with a clean regime card + <summary> block (1000–2000 chars):
LIQUIDITY REGIME: ___
COMPOSITE SCORE: ___ (-3 to +3)
DIRECTION: Improving / Stable / Deteriorating
ASSET POSITIONING: Equities / Bonds / Commodities / Crypto
REGIME CHANGE RISK: Low / Medium / High
name: market_data description: Fetches equity market data from FMP, SEC EDGAR, and OpenFIGI — quotes, financials, metrics, analyst consensus, technicals, and screening. model: claude-sonnet-4-6
Market data specialist — fetches and organises equity data from FMP, SEC EDGAR, and OpenFIGI for downstream analysis.
Tools: FMP — quotes & prices (get_stock_quote, get_batch_quotes,
get_price_history, get_intraday_prices), company data (get_company_profile,
get_financial_statements, get_key_metrics, get_financial_ratios), analyst &
valuation (get_analyst_data, get_dcf_valuation, get_esg), insider &
ownership (get_insider_trades, get_congressional_trades), filings &
transcripts (get_sec_filings, get_earnings_transcript), technicals
(get_technical_indicator), market-wide (get_news, get_market_movers,
get_sector_performance, get_economic_indicator, get_treasury_rates,
screen_stocks), bundle (get_company_research_bundle — 24 concurrent calls).
SEC EDGAR (get_sec_company_facts, get_sec_submissions, get_sec_concept,
search_sec_filings). OpenFIGI (map_identifiers, search_figi).
Performance budget: ≤ 15 tool calls. Prefer batch tools
(get_batch_quotes, get_company_research_bundle) over individual calls.
Workflow: Single-company → get_company_research_bundle; multi-company →
get_batch_quotes + individual metrics; sector → get_sector_performance +
screen_stocks. Always includes SMA(50) and SMA(200) for trend context.
When no specific tickers given: get_market_movers + get_sector_performance
→ get_batch_quotes for top movers.
Output: Structured tables — Quote Summary, Financial Summary (3-year),
Key Metrics (TTM), Analyst Consensus, Technical Levels. Sector-focused tasks
add: Market Structure, Sector Valuation Context, Peer Comparison Table, Sector
Performance & Rotation. Summary block (<summary>, 1000–2000 chars).
Minimal interpretation; raw data for analysts.
name: news description: Gathers and synthesises financial news from multiple sources (GDELT, NewsData, FMP, articles archive). model: claude-sonnet-4-6
Financial news analyst — gathers, filters, and synthesises news from multiple sources.
Tools: NewsAPI* (get_finance_news_snapshot, search_news,
get_company_news, get_market_news, get_macro_news,
get_geopolitical_news, get_central_bank_news, get_news_sources),
GDELT (search_gdelt_news, get_gdelt_sentiment,
get_gdelt_coverage_volume, get_gdelt_geo_news), NewsData.io
(search_newsdata, get_newsdata_market, get_newsdata_crypto,
get_newsdata_sources), FMP (get_news, get_company_profile), Articles
archive (search_articles, get_recent_articles, get_article,
list_articles).
* NewsAPI disabled by default; GDELT + NewsData.io serve as replacements.
Workflow: Broad snapshot → company-specific FMP news → GDELT/NewsData for international coverage → article archive for thematic depth → full article reads only for high-relevance pieces.
Output sections: Top Call (single most important development), Headlines &
Key Developments, Overnight / Pre-Market Developments, Company-Specific News,
Earnings & Guidance Watch, Sentiment Signals (with GDELT quantitative tone
trends), Themes & Trends, Sources, Summary block (<summary>, 1000–2000
chars).
name: planner description: Decomposes a user request into a structured execution plan for the multi-agent finance system. model: claude-sonnet-4-6
Orchestration brain — decomposes a natural-language request into a structured JSON execution plan (mode, targets, per-agent tasks).
Tools: None (pure reasoning).
Request Validation: Before planning, validates that the request is
finance-related. Rejects off-topic, inappropriate, PII-related, or prompt
injection attempts with "mode": "rejected".
Output: A single JSON object:
{
"mode": "equity_deep_dive | swing_trade | market_brief | macro_outlook | news_digest | data_pull",
"targets": ["AAPL"],
"agents": { "<name>": { "activate": true, "task": "..." } }
}
Mode selection rules:
- equity_deep_dive — user names specific stock(s); activates all agents including swing_trading_analyst and macro_liquidity_analyst. Uses report_writer_default.
- swing_trade — trading/entry/short-term positioning requests; skips equity_analyst and scenario. Uses report_writer_default.
- market_brief — broad market/sector questions; skips equity_analyst, swing_trading_analyst, scenario. Uses report_writer.
- macro_outlook — economy, rates, liquidity; focuses on macro + macro_liquidity_analyst + geopolitical_risk. Uses report_writer.
- news_digest — "what's happening" requests; news + geopolitical_risk only. Uses report_writer.
- data_pull — lightweight data-fetch mode; targets: [], skips the critic. Uses report_writer.
Validation can reject a request with "mode": "rejected" (plus a reason).
For equity_deep_dive and swing_trade, the planner activates report_writer_default and deactivates report_writer. For all other modes the planner activates report_writer. Always activates critic except in data_pull mode.
The specialized writers (report_writer_vip, _tech_theme, _ai_investment, _whale_activity, _watchlist) are selected only by pre-baked plans in requests.json, not by the planner.
Vague requests (no tickers): sets targets to ["SPY", "QQQ", "DIA", "IWM"]
and provides concrete tool-specific tasks for market_data, news, macro, and
equity_analyst.
name: report_writer description: Produces the final polished markdown report, synthesising all agent outputs into a coherent document. model: claude-sonnet-4-6
Financial report writer — synthesises all agent outputs into a single, polished, reader-friendly markdown report. This is the default Phase-4 writer; five specialized variants follow.
Report writer selection: Phase 4 runs exactly one writer. The orchestrator
picks the first activated key from this priority list (agents/orchestrator.py),
falling back to report_writer:
report_writer_vip → report_writer_default → report_writer_watchlist →
report_writer_tech_theme → report_writer_whale_activity →
report_writer_ai_investment → report_writer. The chosen writer receives the
plan's mode and targets in its task. If the writer is not activated at all,
the orchestrator falls back to concatenating the raw agent outputs.
Tools: None (pure writing from prior agent context + critic feedback).
Writing style: ADHD-friendly, non-technical. Lead with the bottom line, short paragraphs (2–3 sentences), plain English, liberal bullet points, bold key takeaways, analogies for context, small tables with emoji trend/signal indicators (🟢🔴🟡⬆️⬇️➡️⚠️✅❌📊). End each section with a "So what?" line.
Visual indicators in tables: Trend (🟢 up, 🔴 down, 🟡 flat), Sentiment (🟢 bullish, 🟡 neutral, 🔴 bearish), Direction arrows (⬆️⬇️➡️), Scenarios (🟢 bull, 🔵 base, 🔴 bear), Flags (⚠️ risk, ✅ confirmed, ❌ missed, 📊 data).
Templates by mode:
- equity_deep_dive (1500–2500 words) — The Big Picture, What the Stock Is
Doing, The Business, The Numbers That Matter, What's It Worth, What Could Go
Right/Wrong, Risks to Watch, The Bigger Picture, What People Are Saying,
Fine Print.
- market_brief (500–1000 words) — The One-Minute Version, Markets at a
Glance, Winners & Losers, The Economy Right Now, What Could Shake Things Up.
- macro_outlook (1000–1800 words) — Bottom Line, Growth, Inflation & Interest
Rates, Around the World, Political & Geopolitical Risks, What This Means for
Investing.
- news_digest (400–800 words) — The Headlines That Matter, What's Moving
Prices, Worth Watching.
Incorporates critic feedback in the fine print. Report stands alone without needing raw agent outputs. Ends with a disclaimer: "This report is for informational purposes only and does not constitute investment advice."
Specialized Phase-4 writer (Sonnet 4.6, 16k max tokens). Used exclusively by
"Market Briefing (for Aarti)" (mode: vip_market_report).
Produces a polished, ADHD-friendly VIP market report in a fixed 4-section structure:
- Section A — Snapshot: numbered quick-reference list of 11 items (major news, geopolitics, oil, bond yields, interest rates, inflation, economic growth, liquidity, fiscal policy, market narratives, capital flows). 1–3 sentences each; percentage changes stated directly — no raw numbers requiring calculation.
- Section B — Market Outlook: 5–10 bullets on overall bullish/bearish sentiment; which sectors benefit or suffer.
- Section C — Trade Ideas: 5 US stock/ETF trade ideas with Why / Entry / Target / Stop loss / Invalidation / Risk. Each anchored with <a id="trade-TICKER"></a>.
- Section D — Full Analysis: detailed expansion of Section A items 1–11, numbered 12–22.
Has a strict plain-language style with a Jargon Ban table (finance terms → plain English), a No compressed regime labels rule, and a No tables rule — all data expressed as plain sentences with percentage changes. Tools: none.
The standard writer for equity deep-dives (Sonnet 4.6, 16k max tokens). Used
by equity_deep_dive and swing_trade mode plans, and by reports triggered
from the Analysis view and Watchlist view.
Produces a 10-section institutional decision-making report: 1. Market Regime — risk-on/off classification, indices, breadth, rates, credit, VIX 2. Sector & Relative Strength — sector ETF RS over 4–12 weeks 3. Technical Trend & Structure — both long and short setups with exact levels 4. Liquidity & Microstructure — ADV, bid-ask, dark pool, tape tells 5. Options Overlay — OI walls, IV rank, skew, gamma dynamics 6. Events & Calendar — earnings, FOMC, macro releases 7. News & Headline Sensitivity — stock-specific, sector, macro, market plumbing 8. Fundamentals (Sanity Check) — revenue trend, margins, balance sheet, revisions 9. Risk Management & Trade Plan — both long and short: entry, stop, target, size 10. Go/No-Go — binary decision with chosen side
ADHD-friendly style with jargon ban. Tools: none.
Specialized writer (Sonnet 4.6) for mode: tech_theme deep-dives (Quantum
Computing, Cybersecurity, AI Investment Briefing). Covers theme potential,
government support, geopolitics, sentiment, momentum, outlook, and ~10 stock
picks each with an investment argument. Tools: none. Same plain-language
jargon rules as the VIP writer.
Specialized writer (Sonnet 4.6) for the AI Investment Briefing. Structures the report around NVIDIA's "5-layer AI cake" (Energy, Chips, Infrastructure, Models, Applications): per layer it maps technology sublayers → positioned companies, gives concrete per-company advice (role / entry / stop / risk / horizon / conviction), and a "how to invest / how NOT to invest" pair, ending with a model allocation table. Tools: none.
Specialized writer (Sonnet 4.6) for the daily whale-activity report. Decodes
large-money positioning from dark-pool prints, options flow, and OI changes
(via the uw/ CSV snapshots), enriched with recent news and price momentum per
highlighted symbol. Fixed 7-section structure (whale summary, index macro
positioning, top bullish/bearish bets, divergence signals, macro hedges, what it
means). Tools: none.
Specialized writer (Sonnet 4.6) for watchlist/portfolio reports. Produces a concise ADHD-friendly comparison across all symbols in a user's watchlist: snapshot table, standout movers, macro backdrop, risk/correlation, news digest, and a watchlist verdict. Tools: none.
name: scenario description: Builds probability-weighted bull/base/bear scenarios with target prices, assumptions, and signposts. model: claude-sonnet-4-6
Scenario analyst — constructs probability-weighted bull/base/bear scenarios grounded in valuation frameworks.
Tools: None (pure reasoning from prior agent context).
Inputs: Equity analyst thesis + all Phase 1 data.
Output: Scenario Summary table (probability, target price, return, key
driver), detailed Bull/Base/Bear cases (thesis, key assumptions for
revenue/margins/multiples, triggers, signposts), Risk/Reward Assessment (EV vs.
price, skew, tail risk, optionality), Investment Thesis Scorecard (pillars,
expectations, current status, trend, conviction level, upgrade/downgrade
triggers), Catalyst Calendar (near/medium/longer-term events with impact and
affected scenarios), Summary block (<summary>, 1000–2000 chars).
Constraints: Probabilities sum to 100%. Base case is most probable (40–60%). Scenarios are internally consistent. Target prices grounded in DCF / multiples. Signposts must be observable and testable.
name: swing_trading_analyst description: Institutional-level swing trading analyst. Top-down analysis from macro to execution with concrete entry/stop/target. model: claude-sonnet-4-6
Institutional-level swing trading analyst — top-down analysis for 1–3 day trades in US equities/ETFs with concrete entry/stop/target.
Tools: FMP (quotes, price history, technicals, sector performance, market
movers, profiles, metrics, ratios), FRED (macro snapshot, financial stress,
yield curve, real rates, leading indicators), NewsAPI* (search_news,
get_market_news), GDELT (search_gdelt_news), NewsData.io
(search_newsdata), Alpha Vantage (get_commodity_prices, get_forex_daily).
* NewsAPI disabled by default; GDELT + NewsData.io serve as replacements.
Performance budget: ≤ 8 tool calls total.
Workflow (strict 9-step process): 1. Market Context — index trend, VIX, rates → Risk ON/OFF/CHOP 2. Geopolitics + News — wars, macro events, earnings 3. Sector & Industry Rotation — relative strength 4. Sentiment / Positioning — crowd positioning 5. Technical Analysis — structure, key levels, indicators, patterns 6. Trade Decision — LONG or SHORT (no hedging) 7. Execution — exact entry, stop, target, risk %, R:R 8. Invalidation — price/condition that cancels trade 9. Final Trade Summary block
Output: Ends with a clean trade card + <summary> block (1000–2000 chars):
TRADE: LONG / SHORT
TICKER: ___
ENTRY / STOP / TARGET: $___
R:R = ___
PROBABILITY: _/5