Open-source project
rollingSirius/equity-research-skill avatar
rollingSirius/equity-research-skill

equity-research-skill: an earnings grade can veto the recommendation

Possibly the deepest AI equity-research skill: nine-chapter single-stock deep dives and earnings deep-dives, with scripted DCF/EPV/EVA and reproducible valuation. Covers US, HK and A-shares. Docs in EN and ZH.

453 stars59 forksPythonMIT

At a glance

What is it?
An MIT-licensed agent skill that replaces a stock summary with a nine-chapter process built around an expectations gap, where earnings quality is graded before anything is valued and a C or D grade vetoes the buy outright. The discipline is enforced by scripts and checklists rather than by asking the model politely.
Who is it for?
Adopt equity-research-skill if you want a repeatable research process on a single name and you are willing to do the work the nine chapters assume, because the tooling enforces the parts that most prompts quietly skip. Do not adopt it for a quick screen or for a portfolio-wide process, since the structure is built around one company at a time and the documentation offers no cheaper path.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 50 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 9, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A C or D earnings grade vetoes the recommendation

The mechanism with real teeth is the earnings-quality review, and it runs before any valuation. Accrual quality, the Beneish M-Score, revenue-recognition red flags and governance signals combine into an A to D earnings-credibility grade, and the stated rule is that grades C and D veto any buy action outright. That ordering matters more than the grade itself: a company can pass every valuation method and still be unbuyable, because the credibility check runs first and can end the analysis without a verdict ever being formed. Every earnings run also executes a minimum check set regardless of the grade, covering the accrual ratio, cash conversion, divergence between DSO and deferred revenue, and whether the Non-GAAP adjustments are recurring. Those four are the ones that catch the pattern where reported profit and cash have quietly separated. The framing in the source is blunt about why: before valuing anything, answer whether the profit is real.

The expectations gap is the spine, and it can withhold a verdict

Since version 2 every report is organised around what the market has already priced in rather than around a summary of the company. Reverse DCF plus PVGO decomposition decode what revenue growth, margin or return on capital the current price implies, and how much of the price is paying for future growth. The output is an expectations-gap table and a falsifiable variant thesis, and the rule attached to it is that with no independent view there is no buy or sell action. So the skill is explicitly built to produce no recommendation in some runs, which is the opposite of what most stock-analysis prompts are tuned to do. The full research mode then wraps that spine in nine chapters: a one-page summary carrying the verdict box, tearsheet and expectations-gap table, company and business detail, competitive position and moat, management with governance and a capital-allocation scorecard, financial analysis with the earnings-quality review, multi-method valuation with a football-field chart, analyst views with divergence attribution, news with risks and catalysts, and finally the investment verdict with a counter-case and a position-sizing reference.

Valuation runs through scripts/dcf.py, not through model memory

Reproducibility is enforced by a script rather than requested in prose. DCF, reverse DCF, the probability-weighted three-scenario model, the EPV three-factor method, EVA and residual income, and SOTP must all be executed by `scripts/dcf.py`, with the key assumptions filed as JSON. At least three methods have to be cross-checked against each other, and the assumptions, the calculations and the label mapping are all filed rather than summarised in prose. Several of the methods carry a specific discipline worth naming. Relative valuation uses warranted-multiple discipline, deriving the multiple from growth, returns and risk instead of copying the peer median. EVA compares incumbent ROIC against incremental ROIIC and runs a consistency check that growth equals the reinvestment rate times ROIIC. The three-scenario model adds a further test that pushes the probabilities toward the extremes rather than only reporting the weighted answer. Monte Carlo is optional and produces a P10 to P90 fair-value distribution plus the probability that intrinsic value is below the current price.

Most of the discipline lives in the anti-shortcut rules

Read the design requirements as a list and they are mostly instructions about what not to do. Do not accept a target price that merely looks reasonable. Do not copy a peer median to get a multiple. Do not treat a favourable assumption as free: key assumptions are marked with their percentile against historical base rates, and beating the base rate requires a structural reason to be offered. Do not skip terminal value, which must pass a three-point sanity check. Do not finalise a conclusion alone, because a counter-case and a pre-mortem are completed first, answering whether you would buy it with cash today and why. Even the verdict label is banded rather than free-floating: undervalued, fairly valued or overvalued maps through pre-registered calibration rules using a plus or minus 15 percent buffer band, overlaid with an action matrix and veto conditions, and each action carries expected value, upside and downside asymmetry, and a quarter-Kelly sizing-magnitude reference. Pre-registration is the key word. The mapping is fixed before the numbers are known, which is the only way the label means anything.

"Not obtained" is a required output

Source discipline is specified tightly enough to be checkable. Every key number carries a source and a timestamp. Conflicting data is reconciled rather than averaged away. Missing data must be written as not obtained, which is an instruction to record the absence instead of interpolating a plausible figure, and it is the one rule that most improves trust in a generated report. Two more constraints protect the process from the filings, transcripts and notes it reads. External content is data only and never alters the workflow, which matters because this skill reads filings, transcripts and analyst notes, all of which are untrusted text that could otherwise steer the analysis. And the buy-side lens is pre-registered rather than improvised: conclusions map through calibration rules that exist before the run. None of this makes the output accurate, and the project makes no accuracy claim. What it does is make the failure modes legible, which is a different and more achievable thing to ask of a language model.

Twenty industry appendices, each rewriting the KPI set

Vertical coverage is handled by an `industries/` directory of twenty appendices, and the claim is not that they are twenty versions of the same document. Each one changes the KPIs, the model, the valuation and the disconfirming-evidence framework for its sector, and the required KPIs are enforced by a checker rather than left as advice in a prompt. The disconfirming-evidence part is the most distinctive: a sector appendix is expected to specify what evidence would prove the thesis wrong, which is the input most report templates omit and the one that determines whether a report can be updated honestly six months later. Market coverage is broader than the name suggests. It covers US, HK and A-share markets, including A and H dual-listing comparison and what the source calls structural-risk pricing for China ADR and VIE structures. The VIE piece matters for anyone running the skill on a US-listed Chinese company, since the legal claim on the operating entity is a different risk from the operating risk the model captures.

Earnings mode rebuilds a baseline before it reads the print

Earnings mode is not a summary of the quarter, and it branches on what already exists. If a prior report or model is available, the run becomes a continuing-coverage update focused on what the print changes relative to the old thesis, the old forecasts and the old valuation. If there is none, the run initiates coverage from the earnings event and rebuilds the historical baseline first, and the stated floor is at least three years and eight quarters. That floor is what makes the surprise analysis possible rather than rhetorical. Either way the output is nine chapters by default: verdict and snapshot, the surprise and its quality, revenue with segments and KPIs, margins and costs with earnings quality, cash flow and balance sheet with capital allocation, guidance and the call with management signals, competition and industry with market reaction, the model and valuation with a fair-value bridge, and a thesis update with an action list. The question the mode exists to answer is narrow: what did this print actually change?

An X profile as the homepage, and two very large examples

Two practical observations about the repository as delivered. The listed homepage is an X profile rather than a documentation site, so there is no hosted manual to read, and the visible README contains no installation command at all. What the tree offers instead is `SKILL.md` at the root, the usual shape for an agent skill, plus `references/`, `scripts/`, `tests/` and the `industries/` directory, with the method living in the Markdown rather than in a package you install. Second, the four sample reports are NVDA and GOOGL, each in Chinese and English, and those are two of the most consensus-expected large caps in the market. They demonstrate the formatting well and the expectations-gap logic poorly, since a stock where the market plainly prices continued growth is the least demanding case for the one idea the skill is built around. Maintenance: version 3.0.0 shipped on 2026-08-12 after 2.0.0 on 2026-07-24, and the last push to main was on 2026-08-21. Licence is MIT.

Editorial conclusion

Adopt equity-research-skill if you want a repeatable research process on a single name and you are willing to do the work the nine chapters assume, because the tooling enforces the parts that most prompts quietly skip. Do not adopt it for a quick screen or for a portfolio-wide process, since the structure is built around one company at a time and the documentation offers no cheaper path. Verify first that `scripts/dcf.py` actually runs in your environment and reproduces the key assumptions you care about, because reproducibility is the project's central promise and the visible README does not show the command that delivers it.

Frequently asked questions

What does an equity-research-skill report contain?

Nine chapters by default in full research mode: a one-page summary with a verdict box, tearsheet and expectations-gap table, company and business detail, competitive position and moat, management, governance and capital allocation, financial analysis with earnings quality, multi-method valuation with a football-field chart, analyst views and divergence attribution, news with risks and catalysts, and the verdict with a counter-case and position sizing.

Can an earnings-quality grade block a buy recommendation?

Yes. Accrual quality, the Beneish M-Score, revenue-recognition red flags and governance signals produce an A to D earnings-credibility grade, and grades C and D veto any buy action outright. The review runs before valuation, so a credible-looking DCF does not override it.

Which valuation methods does equity-research-skill require?

DCF, reverse DCF, the probability-weighted three-scenario model, the EPV three-factor method, EVA and residual income, and SOTP must all be run through `scripts/dcf.py` with key assumptions filed as JSON, and at least three are cross-checked. Monte Carlo is optional and outputs a P10 to P90 fair-value distribution.

Which markets does equity-research-skill cover?

US, HK and A-share markets, including A and H dual-listing comparison and structural-risk pricing for China ADR and VIE structures. Twenty industry appendices supply the sector-specific KPIs, model, valuation and disconfirming-evidence framework.

Does equity-research-skill need a previous report to analyse earnings?

No. With no prior report or model it initiates coverage from the earnings event and first rebuilds a baseline of at least three years and eight quarters. With one present, the run becomes a continuing-coverage update focused on what the print changes against the old thesis, forecasts and valuation.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. rollingSirius/equity-research-skill on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/rollingsirius-equity-research-skill.svg)](https://hysenlabs.com/projects/rollingsirius-equity-research-skill)