Analyst-style equity research over one shared engine: segment-aware Rule of 40, DCF, red flags, screening — read-only, not investment advice.
Project description
finance-skills
Analyst-style equity research from real fundamentals — one engine, many views.
Ask in plain English or call a verb. Numbers come from a single fetch → compute pipeline (Rule of 40, DCF, red flags, compare, screen…), so answers never drift between commands.
Read-only. Not investment advice. Public data only; verify against 10-K/10-Q filings before acting.
pip install finance-skills
finance-skills brief CRWV --fixture # offline sample
finance-skills is NBIS a value trap? # routes → redflags
Also installs as an agent skill (/finance-skills …) for Claude Code, Codex, and similar tools.
Why this exists
Most stock helpers either invent numbers or slap a flat Rule-of-40 on everything. This project:
| Principle | What you get |
|---|---|
| One engine | brief, valuation, redflags, compare, screen… all share build_report |
| Regime-aware Rule of 40 | Neocloud / hypergrowth vs steady SaaS — EBITDA vs FCF capital-intensity gap |
| Fail-closed | Missing debt/cash/FCF → analysis skipped with exact missing inputs, never fabricated |
| Agent-ready | Deterministic keyword routing, --json, gaps + filing checklist for the next step |
Sharpest on growth and capital-intensive tech (AI infra, SaaS-like names) where headline growth can hide weak cash economics. Works on any public ticker yfinance can fetch.
Methodology: references/rule40.md · references/ai-cloud.md
Install
pip install finance-skills
finance-skills help
As an agent skill (Claude Code / Antigravity / Codex):
curl -fsSL https://raw.githubusercontent.com/notEhEnG/finance-skills/main/install.sh | bash -s -- claude
# or: bash -s -- antigravity | codex | all
Then invoke: /finance-skills is NVDA overvalued?
Live data needs network + yfinance. Offline demos: --fixture (CRWV, NBIS sample data, clearly labelled).
Quick start
# Default stack (regime, Rule 40, multiples, solvency, flags, gaps)
finance-skills brief NVDA
finance-skills NBIS --fixture # bare ticker → brief
# Common questions
finance-skills valuation AAPL
finance-skills redflags PLTR
finance-skills compare AMD NVDA
finance-skills framework neocloud CRWV --fixture
# Personas & teaching
finance-skills brief NBIS --fixture --style=risk --explain
finance-skills learn rule40
# Peers & screening
finance-skills compare --preset=ai-infra --fixture
finance-skills screen "growth > 50 and fcf_margin < 0" CRWV NBIS --fixture
Plain English is routed automatically (value trap → redflags, is it a buy → valuation, default → brief). Details: SKILL.md.
Commands
| Verb | Job |
|---|---|
brief |
Default answer stack (what most questions want) |
company |
9-stage walkthrough |
analyze |
Dense full dump |
valuation |
Multiples + DCF + scenarios when allowed |
redflags / health |
Warning signs / solvency |
framework |
saas · neocloud · semiconductor checklist |
compare |
Side-by-side (+ --preset=saas|ai-infra|semiconductor|megacap) |
screen / watchlist |
Filter & track a universe |
export |
Markdown / JSON / CSV |
learn |
Offline concept explainers (no ticker) |
Flags (where relevant): --fixture · --json · --style=value|growth|quality|risk · --explain
Aliases: val→valuation, risk→redflags, r40/growth→brief, dcf→valuation, semis→framework semiconductor.
Example (offline fixture)
finance-skills brief CRWV --fixture — AI neocloud sample. Headline growth looks fine; cash economics and Rule of 40 do not:
═══ CoreWeave, Inc. (CRWV) — brief ═══
Source: fixture · as of 2026-Q1 [SAMPLE DATA — not live]
Price: $100 Market cap: $48.00B
Regime: ai neocloud
Rule of 40: preferred -668 vs bar 38 → BELOW BAR
EBITDA-based 167 · FCF-based -205 · capital-intensity gap 372
Capex-adjusted -668
Capital-intensive: growth is burning cash faster than it earns; watch backlog/RPO and funding runway.
Valuation
EV / Sales: 31.3x
EV / EBITDA: 55.9x
DCF / share: n/a — DCF skipped because free cash flow is not positive (…)
Solvency / quality
Revenue growth: 111.1%
FCF margin: -315.8%
Capex intensity: 463.2%
Dilution: 9.1%
Net debt/EBITDA: 10.81x
Top red flags
⛔ Cash burn · ⛔ Elevated leverage · ⚠ Heavy dilution
Disabled analyses (exact inputs)
· dcf: free cash flow is not positive → unlocks via sustainable positive FCF + …
Filing verification checklist (before trusting this output)
· free cash flow, debt, cash, share count, capex, backlog/RPO …
That is the product thesis in one screen: same engine, regime-aware Rule of 40, fail-closed DCF, what to verify next.
Architecture
data.py (IO only) → metrics.py (pure math) → analyze.build_report
↓
brief · valuation · redflags · company · compare · …
| Layer | Role |
|---|---|
data.py |
Fetch / cache / fixtures — only network module |
metrics.py |
Rule 40, DCF (+ scenarios), EV multiples — no I/O |
analyze.py |
One structured report |
| Views | Format & emphasize; never recompute |
router.py |
Tickers, aliases, keywords, CLI dispatch |
Safety invariants (read-only, no brokers, no eval) are enforced in CI — see SECURITY.md.
Development
python -m pip install -e ".[dev]"
python -m pytest tests/ -q --cov=scripts
python -m ruff check scripts tests
python -m mypy
Contributing: CONTRIBUTING.md · Changelog: CHANGELOG.md
License
MIT · © contributors
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file finance_skills-0.5.1.tar.gz.
File metadata
- Download URL: finance_skills-0.5.1.tar.gz
- Upload date:
- Size: 70.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5880119c185f16be2848804c192de952ac3876150a6159d79b1ea851934c80b7
|
|
| MD5 |
e0ef06ca66aaf0804325481ce5f9086a
|
|
| BLAKE2b-256 |
a1bb49f4a8fbef0cff8c730e796de0171baad5acc8976ef7788726ff3b680361
|
Provenance
The following attestation bundles were made for finance_skills-0.5.1.tar.gz:
Publisher:
release.yml on notEhEnG/finance-skills
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
finance_skills-0.5.1.tar.gz -
Subject digest:
5880119c185f16be2848804c192de952ac3876150a6159d79b1ea851934c80b7 - Sigstore transparency entry: 2139248931
- Sigstore integration time:
-
Permalink:
notEhEnG/finance-skills@2b1daec3a63a0b559b6368da69962a1ce888df91 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/notEhEnG
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2b1daec3a63a0b559b6368da69962a1ce888df91 -
Trigger Event:
push
-
Statement type:
File details
Details for the file finance_skills-0.5.1-py3-none-any.whl.
File metadata
- Download URL: finance_skills-0.5.1-py3-none-any.whl
- Upload date:
- Size: 68.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2713e75ace8545720b848cb003ff99e99ff3191e36c9e74d06d12e92b46c6077
|
|
| MD5 |
3161ca42efdde1c4764b1e9a9b4e2789
|
|
| BLAKE2b-256 |
365bee2963aad264a28d1ed164625a756ee656c6e0661055f73c750fb99bb092
|
Provenance
The following attestation bundles were made for finance_skills-0.5.1-py3-none-any.whl:
Publisher:
release.yml on notEhEnG/finance-skills
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
finance_skills-0.5.1-py3-none-any.whl -
Subject digest:
2713e75ace8545720b848cb003ff99e99ff3191e36c9e74d06d12e92b46c6077 - Sigstore transparency entry: 2139248938
- Sigstore integration time:
-
Permalink:
notEhEnG/finance-skills@2b1daec3a63a0b559b6368da69962a1ce888df91 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/notEhEnG
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2b1daec3a63a0b559b6368da69962a1ce888df91 -
Trigger Event:
push
-
Statement type: