.claude/skills/research-note/SKILL.md
Generate a professional Word document research note
npx skillsauth add daloopa/investing research-noteInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate a professional research note (.docx) for the company specified by the user: $ARGUMENTS
Before starting, read ../data-access.md for data access methods and ../design-system.md for formatting conventions. Follow the data access detection logic and design system throughout this skill.
This is an orchestrator skill that gathers comprehensive data, then renders a Word document. Work through each phase sequentially, building up a context object that gets written to JSON and rendered.
Look up the company by ticker using discover_companies. Capture:
company_idlatest_calendar_quarter — anchor for all period calculations (see ../data-access.md Section 1.5)latest_fiscal_quarter../data-access.md Section 4.5Get current stock price, market cap, shares outstanding, beta, and trading multiples for {TICKER} (see ../data-access.md Section 2 for how to source market data).
Initialize context: context = {company_name, ticker, date, price, market_cap, firm_name, ...}
Calculate 8 quarters backward from latest_calendar_quarter. Pull Income Statement metrics:
Pull Cash Flow & Balance Sheet:
For every value returned by get_company_fundamentals, record its fundamental_id (the id field). Store each data point as {value, fundamental_id} so citations can be rendered in the final document.
Compute margins and YoY growth rates for each quarter. Build context.financials with tables. Every Daloopa-sourced number must include its citation link: [$X.XX million](https://daloopa.com/src/{fundamental_id}).
After the core financial pull, add:
New context keys:
cost_margin_analysis (string) — narrative explaining what's driving margins, with Daloopa citationsopex_breakdown_table (dynamic table) — [{metric, Q1, Q2, ...}] rows for R&D, SG&A, Other OpEx, each with absolute values and % of revenue sub-rowsThink about what KPIs matter most for THIS company's business model. Search for:
Pull the same 8 quarters (from latest_calendar_quarter). Build context.kpis and context.segments.
After the KPI/segment pull, determine the company's sector and apply the relevant analysis template:
Search for relevant series using discover_company_series with sector-appropriate keywords. Pull available data and build the narrative.
New context key:
industry_deep_dive (string) — sector-specific analysis narrative with Daloopa citations, organized by the relevant template aboveSearch for guidance series ("guidance", "outlook", "forecast", "estimate", "target").
Pull guidance and corresponding actuals. Apply +1 quarter offset rule.
Compute beat/miss rates and patterns.
Build context.guidance (set context.has_guidance = true/false).
Using the financial baseline from Phase B:
Build falsifiable bull/bear beliefs instead of probability-weighted scenarios:
Write 4-6 numbered beliefs, each with:
Example format: "1. Revenue growth re-accelerates to 15%+ as AI monetization scales. Cloud segment grew $X.Xbn last quarter, up X% YoY, with management noting..."
Same format — 4-6 numbered falsifiable beliefs with evidence for the downside case.
For each side:
New context keys:
bull_beliefs (string) — numbered falsifiable beliefs with evidencebear_beliefs (string) — numbered falsifiable beliefs with evidencebull_target (string) — price target + valuation mathbear_target (string) — price target + valuation mathrisk_reward_assessment (string) — asymmetry analysisDo NOT set these old keys (they are removed from the template): bull_probability, base_probability, bear_probability, bull_description, base_description, bear_description, scenario_chart, bull_price_target, base_price_target, bear_price_target.
Pull buyback, dividend, share count, FCF data.
Compute shareholder yield, FCF payout ratio, net leverage.
Build context.capital_allocation.
DCF:
context.dcf (set context.has_dcf = true)Comps:
context.comps (set context.has_comps = true)Search SEC filings across multiple queries:
Extract and organize into:
context.risks — ranked list of risks with impact/probabilitycontext.investment_thesis — variant perception, thesis pillars, catalystscontext.company_description — 2-3 sentence business descriptionRun 4 WebSearch queries to gather recent external context:
"{TICKER} {company_name} news {year}" — recent headlines and developments"{TICKER} analyst upgrade downgrade price target" — sell-side sentiment shifts"{TICKER} catalysts risks" — forward-looking events and risk factors"{company_name} industry outlook {sector}" — macro and industry trendsOrganize results into three new context keys:
news_timeline (string) — 6-10 key events from the last 6-12 months in reverse chronological order. Each event: date, headline, 1-sentence impact, sentiment tag (Positive / Negative / Mixed / Upcoming). Format as a numbered list.
forward_catalysts (string) — Organized by timeframe:
policy_backdrop (string) — Macro/regulatory context affecting the company. Tariffs, regulation, interest rates, sector-specific policy. Leave empty string if not material.
If chart generation is available (see ../data-access.md Section 5), generate charts:
time-series --data '{periods, values}' --output reports/.charts/{TICKER}_revenue_trend.pngtime-series --data '{periods, series}' --output reports/.charts/{TICKER}_margin_trend.pngpie --data '{segments}' --output reports/.charts/{TICKER}_segment_pie.pngdcf-sensitivity --data '{wacc_values, growth_values, prices, current_price}' --output reports/.charts/{TICKER}_dcf_sensitivity.pngIf chart generator isn't available or a chart fails, skip that chart and note it. Set chart paths in context (e.g., context.revenue_chart = "reports/.charts/...")
Note: scenario_chart is no longer generated by this skill (research notes use bull/bear beliefs, not scenario analysis). The /ib-deck skill still uses scenario-bar charts.
This is the most judgment-intensive step. Be honest and critical — the reader is a professional investor who needs your real assessment, not a balanced summary.
Write:
context.executive_summary, context.variant_perceptionIdentify the 5 most critical bull/bear debates for this stock. Each tension is a single line that frames both sides. Alternate between bullish-leaning and bearish-leaning tensions. Every tension must reference a specific data point from the analysis.
Format as a numbered list:
Build context.five_key_tensions (string).
Build two monitoring lists for ongoing tracking:
Quantitative Monitors — 5-7 specific metrics with explicit thresholds:
Qualitative Monitors — 5-7 factors to watch:
Build context.monitoring_quantitative and context.monitoring_qualitative (strings, numbered lists).
Also build structured tables for the template:
context.key_metrics_table — [{metric, value, vs_prior}] for the exec summary tablecontext.financials_table — [{metric, q1, q2, ...}] for the financial analysis sectioncontext.segments_table, context.geo_table, context.shares_outstanding_tablecontext.opex_breakdown_table — [{metric, q1, q2, ...}] for R&D, SG&A, % of revenue rowscontext.guidance_table, context.comps_table, etc.reports/.tmp/{TICKER}_context.jsonpython infra/docx_renderer.py --template templates/research_note.docx --context reports/.tmp/{TICKER}_context.json --output reports/{TICKER}_research_note.docxVerify these keys exist before rendering (set empty string if data unavailable):
Cover & Summary:
company_name, ticker, date, price, market_cap, five_key_tensions, executive_summary, key_metrics_table
Thesis & Overview:
investment_thesis, variant_perception, company_description
News:
news_timeline
Financials:
revenue_chart, financials_table, margin_chart, cost_margin_analysis, opex_breakdown_table, segment_chart, segments_table, geo_table, shares_outstanding_table
Industry:
industry_deep_dive
Guidance:
has_guidance, guidance_track_record
What You Need to Believe:
bull_beliefs, bull_target, bear_beliefs, bear_target, risk_reward_assessment
Catalysts:
forward_catalysts, policy_backdrop
Capital Allocation:
capital_allocation_commentary
Valuation:
has_dcf, dcf_summary, dcf_sensitivity_chart, has_comps, comps_commentary
Risks:
risks_summary
Monitoring:
monitoring_quantitative, monitoring_qualitative
Appendix:
appendix_content
Tell the user:
reports/{TICKER}_research_note.docxreports/.tmp/{TICKER}_context.jsonCitation enforcement: Every financial figure from Daloopa in the context JSON AND the rendered document must use citation format: [$X.XX million](https://daloopa.com/src/{fundamental_id}). If a number came from get_company_fundamentals, it must have a citation link. No exceptions. Before rendering, verify that the context JSON contains fundamental_ids for all Daloopa-sourced values.
development
Cash conversion cycle, earnings quality, and working capital deep-dive
testing
Refresh existing research note and Excel model with latest data
tools
Bottoms-up unit economics decomposition for any public company
tools
Quick one-page company overview and snapshot