feat(skills): add finance research and DCF valuation skills

- finance-research: guides agent on financial data retrieval and analysis
  workflows using the data tool
- dcf-valuation: 8-step DCF valuation workflow with sector WACC reference
  data, sensitivity analysis, and validation checks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jiayuan Zhang 2026-02-11 16:44:05 +08:00
parent d47594d7b2
commit 6e28513ec5
3 changed files with 339 additions and 0 deletions

View file

@ -0,0 +1,208 @@
---
name: DCF Valuation
description: Perform Discounted Cash Flow (DCF) valuation analysis for public companies. Use when the user asks to value a stock, calculate intrinsic value, fair value, perform DCF analysis, determine if a stock is undervalued or overvalued, or estimate a price target.
version: 1.0.0
metadata:
emoji: "\U0001F9EE"
requires:
env:
- FINANCIAL_DATASETS_API_KEY
tags:
- finance
- valuation
- dcf
userInvocable: true
disableModelInvocation: false
---
## Instructions
Perform a rigorous Discounted Cash Flow (DCF) valuation. Follow all steps and show your work.
### Progress Checklist
```
DCF Analysis Progress:
- [ ] Step 1: Gather financial data
- [ ] Step 2: Calculate historical FCF and growth
- [ ] Step 3: Estimate WACC
- [ ] Step 4: Project future cash flows
- [ ] Step 5: Calculate present value and fair value
- [ ] Step 6: Sensitivity analysis
- [ ] Step 7: Validate results
- [ ] Step 8: Present findings
```
### Step 1: Gather Financial Data
Use `data` tool with `domain="finance"` for all calls:
1. **Cash Flow History** (5 years):
```
action: "get_cash_flow_statements"
params: { ticker: "[TICKER]", period: "annual", limit: 5 }
```
Extract: `free_cash_flow`, `net_cash_flow_from_operations`, `capital_expenditure`
Fallback: FCF = Operating Cash Flow - CapEx
2. **Income Statements** (5 years):
```
action: "get_income_statements"
params: { ticker: "[TICKER]", period: "annual", limit: 5 }
```
Extract: `revenue`, `operating_income`, `net_income`, `income_tax_expense`
3. **Balance Sheet** (latest):
```
action: "get_balance_sheets"
params: { ticker: "[TICKER]", period: "annual", limit: 1 }
```
Extract: `total_debt`, `cash_and_equivalents`, `outstanding_shares`
4. **Financial Metrics** (current):
```
action: "get_financial_metrics_snapshot"
params: { ticker: "[TICKER]" }
```
Extract: `market_cap`, `enterprise_value`, `return_on_invested_capital`, `debt_to_equity`, `free_cash_flow_per_share`
5. **Analyst Estimates**:
```
action: "get_analyst_estimates"
params: { ticker: "[TICKER]", period: "annual" }
```
Extract: Forward EPS estimates for growth validation
6. **Current Price**:
```
action: "get_price_snapshot"
params: { ticker: "[TICKER]" }
```
7. **Company Facts**:
```
action: "get_company_facts"
params: { ticker: "[TICKER]" }
```
Extract: `sector` — use to determine WACC range from [sector-wacc.md](references/sector-wacc.md)
### Step 2: Calculate Historical FCF and Growth
- Compute FCF for each of the last 5 years
- Calculate 5-year FCF CAGR: `(FCF_latest / FCF_earliest)^(1/years) - 1`
- Cross-validate with: revenue growth, operating income growth, analyst EPS growth
- **Cap projected growth at 15%** (sustained higher growth is rare)
- If FCF is volatile, weight analyst estimates more heavily
### Step 3: Estimate WACC
Use the company's `sector` to look up the base WACC range from [sector-wacc.md](references/sector-wacc.md).
**Calculate WACC:**
```
WACC = (E/V) * Re + (D/V) * Rd * (1 - Tax Rate)
Where:
E = Market cap (equity value)
D = Total debt
V = E + D
Re = Risk-free rate + Beta * Equity Risk Premium
Rd = Cost of debt (estimate from interest expense / total debt)
Tax Rate = Effective tax rate from income statements
```
**Default assumptions:**
- Risk-free rate: ~4.0-4.5% (10-year Treasury)
- Equity risk premium: ~5.5%
- If beta unavailable, use sector average
**Sanity check:** WACC should be 2-4% below ROIC for value-creating companies.
### Step 4: Project Future Cash Flows (Years 1-5)
- Apply growth rate with annual decay (multiply by 0.95 each year)
- Year 1: FCF * (1 + growth_rate)
- Year 2: FCF * (1 + growth_rate * 0.95)
- Year 3: FCF * (1 + growth_rate * 0.90)
- Year 4: FCF * (1 + growth_rate * 0.85)
- Year 5: FCF * (1 + growth_rate * 0.80)
**Terminal Value** (Gordon Growth Model):
```
TV = FCF_Year5 * (1 + g) / (WACC - g)
Where g = terminal growth rate (2.5% default, GDP proxy)
```
### Step 5: Calculate Present Value and Fair Value
```
PV of each FCF = FCF_t / (1 + WACC)^t
PV of Terminal Value = TV / (1 + WACC)^5
Enterprise Value = Sum of PV(FCFs) + PV(Terminal Value)
Net Debt = Total Debt - Cash and Equivalents
Equity Value = Enterprise Value - Net Debt
Fair Value per Share = Equity Value / Shares Outstanding
```
### Step 6: Sensitivity Analysis
Create a matrix varying two key assumptions:
| | TG 2.0% | TG 2.5% | TG 3.0% |
|---|---|---|---|
| **WACC -1%** | $ | $ | $ |
| **WACC base** | $ | $ | $ |
| **WACC +1%** | $ | $ | $ |
(TG = Terminal Growth Rate)
### Step 7: Validate Results
Before presenting, check:
1. **EV comparison**: Calculated EV within 30% of reported enterprise_value
- If off by >30%, revisit WACC or growth assumptions
2. **Terminal value ratio**: Should be 50-80% of total EV for mature companies
- If >90%, growth rate may be too high
- If <40%, near-term projections may be aggressive
3. **FCF yield check**: Compare fair value FCF yield to current market FCF yield
If validation fails, adjust assumptions and recalculate.
### Step 8: Present Results
Format clearly with:
1. **Executive Summary**
- Current price vs. fair value estimate
- Upside/downside percentage
- Verdict: Undervalued / Fairly Valued / Overvalued
2. **Key Assumptions Table**
| Assumption | Value | Source |
|---|---|---|
| Growth Rate | X% | 5Y CAGR + analyst cross-check |
| WACC | X% | Sector range + company adjustments |
| Terminal Growth | X% | GDP proxy |
| Tax Rate | X% | Effective rate from financials |
3. **Projected FCF Table**
| Year | FCF | Growth | PV of FCF |
|---|---|---|---|
4. **Valuation Bridge**
- PV of projected FCFs
- PV of Terminal Value
- = Enterprise Value
- - Net Debt
- = Equity Value
- / Shares Outstanding
- = **Fair Value per Share**
5. **Sensitivity Matrix** (from Step 6)
6. **Risks & Caveats**
- Key risks to the valuation thesis
- DCF limitations (sensitive to growth and WACC assumptions)
- Company-specific caveats (high debt, cyclicality, early-stage, etc.)

View file

@ -0,0 +1,40 @@
# Sector WACC Reference
Use the company's `sector` from `get_company_facts` to look up the base WACC range below, then adjust for company-specific factors.
## WACC by Sector
| Sector | Typical WACC Range | Notes |
|--------|-------------------|-------|
| Communication Services | 8-10% | Mix of stable telecom and growth media |
| Consumer Discretionary | 8-10% | Cyclical exposure |
| Consumer Staples | 7-8% | Defensive, stable demand |
| Energy | 9-11% | Commodity price exposure |
| Financials | 8-10% | Leverage already in business model |
| Health Care | 8-10% | Regulatory and pipeline risk |
| Industrials | 8-9% | Moderate cyclicality |
| Information Technology | 8-12% | Higher end for high-growth; lower for mature |
| Materials | 8-10% | Cyclical, commodity exposure |
| Real Estate | 7-9% | Interest rate sensitivity |
| Utilities | 6-7% | Regulated, stable cash flows |
## Adjustment Factors
**Add to base WACC:**
- High debt (D/E > 1.5): +1-2%
- Small cap (< $2B market cap): +1-2%
- Emerging markets exposure: +1-3%
- Concentrated customer base: +0.5-1%
- Regulatory uncertainty: +0.5-1.5%
**Subtract from base WACC:**
- Market leader with moat: -0.5-1%
- Recurring revenue model: -0.5-1%
- Investment grade credit: -0.5%
## Sanity Checks
- WACC should typically be 2-4% below ROIC for value-creating companies
- If WACC > ROIC, the company may be destroying value
- Typical range for US large-cap: 7-12%
- Anything below 6% or above 14% warrants extra scrutiny

View file

@ -0,0 +1,91 @@
---
name: Finance Research
description: Conduct financial research and analysis including stock analysis, company fundamentals, SEC filings review, and market data retrieval. Use when the user asks about stocks, financial statements, company performance, market data, or investment analysis.
version: 1.0.0
metadata:
emoji: "\U0001F4CA"
requires:
env:
- FINANCIAL_DATASETS_API_KEY
tags:
- finance
- research
- stocks
- data
userInvocable: true
disableModelInvocation: false
---
## Instructions
You are conducting financial research using real market data. Use the `data` tool with `domain="finance"` and the appropriate action.
### Available Data Actions
#### Price Data
- `get_price_snapshot` — Current stock price. Params: `{ ticker }`
- `get_prices` — Historical OHLCV prices. Params: `{ ticker, start_date, end_date, interval?, interval_multiplier? }`
- interval: "day" (default), "week", "month", "year"
- `get_crypto_price_snapshot` — Current crypto price. Params: `{ ticker }` (e.g. "BTC-USD")
- `get_crypto_prices` — Historical crypto prices. Same params as get_prices.
- `get_available_crypto_tickers` — List available crypto tickers. Params: `{}`
#### Financial Statements
All share params: `{ ticker, period, limit?, report_period_gt?, report_period_gte?, report_period_lt?, report_period_lte? }`
- period: "annual", "quarterly", or "ttm"
- Dates in YYYY-MM-DD format
Actions:
- `get_income_statements` — Revenue, expenses, net income, EPS
- `get_balance_sheets` — Assets, liabilities, equity, debt, cash
- `get_cash_flow_statements` — Operating, investing, financing cash flows, FCF
- `get_all_financial_statements` — All three at once (more efficient when you need multiple)
#### Metrics & Estimates
- `get_financial_metrics_snapshot` — Current key ratios (P/E, market cap, margins, etc.). Params: `{ ticker }`
- `get_financial_metrics` — Historical metrics. Params: `{ ticker, period?, limit?, report_period*? }`
- `get_analyst_estimates` — EPS and revenue estimates. Params: `{ ticker, period? }`
#### Company Info
- `get_company_facts` — Sector, industry, employees, exchange, website. Params: `{ ticker }`
- `get_news` — Recent news articles. Params: `{ ticker, start_date?, end_date?, limit? }`
- `get_insider_trades` — Insider buying/selling (SEC Form 4). Params: `{ ticker, limit?, filing_date*? }`
- `get_segmented_revenues` — Revenue by segment/geography. Params: `{ ticker, period, limit? }`
#### SEC Filings
- `get_filings` — List filings metadata. Params: `{ ticker, filing_type?, limit? }`
- filing_type: "10-K", "10-Q", "8-K"
- `get_filing_items` — Read specific filing sections. Params: `{ ticker, filing_type, accession_number?, item? }`
- item: array of section names (e.g. ["Item-1A", "Item-7"] for 10-K)
### Research Workflow
1. **Understand** what financial data is needed
2. **Get context** — start with `get_price_snapshot` and `get_company_facts` for orientation
3. **Gather data** — use the appropriate actions for the analysis
4. **Analyze** — interpret data with proper financial reasoning
5. **Present** — clear findings with data tables and key takeaways
### Best Practices
- Use `get_all_financial_statements` when you need multiple statement types (saves API calls)
- Use annual data for trend analysis, quarterly for recent performance, TTM for current state
- Cross-reference metrics: revenue growth vs cash flow growth, margins vs peers
- Always note the time period and currency when presenting financial data
- For SEC filing analysis: first `get_filings` to find relevant filings, then `get_filing_items` to read specific sections
- Common 10-K items: Item-1 (Business), Item-1A (Risk Factors), Item-7 (MD&A), Item-8 (Financial Statements)
- Common 10-Q items: Part-1,Item-1 (Financial Statements), Part-1,Item-2 (MD&A)
### Example: Company Analysis
For "Analyze Apple's financial health":
```
1. data(domain="finance", action="get_price_snapshot", params={ticker: "AAPL"})
2. data(domain="finance", action="get_company_facts", params={ticker: "AAPL"})
3. data(domain="finance", action="get_all_financial_statements", params={ticker: "AAPL", period: "annual", limit: 3})
4. data(domain="finance", action="get_financial_metrics_snapshot", params={ticker: "AAPL"})
5. data(domain="finance", action="get_analyst_estimates", params={ticker: "AAPL"})
```
Then analyze trends, margins, growth rates, and present findings.