"66 legendary investors review your stock picks — Buffett and a Chinese day-trader finally sit at the same table."
A-share / HK / US deep-analysis engine — with first-class Chinese-market coverage Western terminals don't touch. 66 investors × 9 schools × 22 dimensions × 22 institutional methods, all free data sources, zero API keys. v3.9.2: flow & data-contract hotfix (issue #82/#83) · 685 pytest pass.
Install · Usage · Why Western Investors Should Care · Jury Panel · Methods · Screenshots · FAQ
English | 中文
If you've ever tried to research a Chinese A-share from outside China, you know the pain:
- Bloomberg covers HK and ADRs, but A-share data is thin and the context is missing.
- Reuters / FT give you macro headlines, not per-company fundamentals.
- Anthropic's financial-services-plugins ships great institutional models (DCF / LBO / Comps) — US-only, and gated behind paid FactSet / S&P feeds.
- You end up copy-pasting from Eastmoney through Google Translate, and by the time you've built a DCF in Excel, the name's already moved 8%.
This plugin fixes the Chinese half of that problem. It reads A-share / H-share / US markets with the same interface, speaks to 20+ free Chinese data sources (akshare / Eastmoney / XueQiu / CNInfo / HKEXNews / mx妙想 API), and hands Claude enough context to actually reason about a Chinese company — not just translate its ticker.
It's also why this exists: if legends get Chinese stocks wrong, ordinary investors need every analytical advantage they can get. Charlie Munger famously loaded up on Alibaba (BABA) through Daily Journal Corp in 2021, then had to cut the position in half in 2022 after a ~70% drawdown. At the 2022 DJCO meeting, Munger called it "one of the worst mistakes I ever made" — an estimated nine-figure hit. Even one of the greatest investors of all time underestimated how differently the Chinese regulatory and competitive landscape behaves.
So yes — this plugin helps you understand Chinese names like Alibaba (BABA / 09988.HK), Tencent (00700.HK), Kweichow Moutai (600519.SH), CATL (300750.SZ), BYD (002594.SZ), Pop Mart (09992.HK), Pinduoduo (PDD) — the same names that keep showing up in Western portfolios and keep surprising their owners 😉
One sentence: give it a ticker, Claude becomes your analyst — pulls 22 dimensions of data, runs 22 Wall-Street analysis models, has 66 investors with distinct methodologies score the stock, and produces a 600 KB Bloomberg-style HTML report.
/stock-deep-analyzer:analyze-stock 600519 # Kweichow Moutai (A-share)
/stock-deep-analyzer:analyze-stock 00700.HK # Tencent (HK)
/stock-deep-analyzer:analyze-stock BABA # Alibaba ADR
/stock-deep-analyzer:analyze-stock AAPL # Apple
After 5-8 minutes you get:
- A self-contained HTML report — opens in any browser, works offline
- A portrait share card (1080×1920) for social media
- A landscape war-report card (1920×1080)
- A one-line summary for chat / Slack / Telegram
This is early-stage; forum reports plenty of bugs. If you want to help test or just trade notes, WeChat group QR below (primarily Chinese-speaking — if you prefer English, file issues on GitHub and we'll reply). For the latest features, track the develop branch.
No matter which agent you use, one line does it:
/plugin marketplace add wbh604/UZI-Skill
/plugin install stock-deep-analyzer@uzi-skill
Then say /stock-deep-analyzer:analyze-stock Tencent or /stock-deep-analyzer:analyze-stock 00700.HK.
⚠️ Always use thestock-deep-analyzer:namespace prefixAfter install, all skills/commands live under
stock-deep-analyzer:<name>. Short names (/analyze-stock) don't always resolve in every environment — to be safe, always use the full name:
/stock-deep-analyzer:analyze-stock <ticker>/stock-deep-analyzer:quick-scan <ticker>/stock-deep-analyzer:scan-trap <ticker>/stock-deep-analyzer:dcf <ticker>/:ic-memo/:investor-panel/:trap-detector/ ...Cursor / Gemini CLI / Codex behave the same way — use the full prefixed name.
Just tell Codex:
Please follow https://raw.githubusercontent.com/wbh604/UZI-Skill/main/.codex/INSTALL.md to install UZI-Skill, then deep-analyze Alibaba (BABA).
Install https://github.com/wbh604/UZI-Skill and analyze Tencent (00700.HK) for me.
/add-plugin stock-deep-analyzer
Then say "analyze BABA".
gemini extensions install https://github.com/wbh604/UZI-SkillFollow https://raw.githubusercontent.com/wbh604/UZI-Skill/main/.opencode/INSTALL.md and analyze Pop Mart (09992.HK).
Paste this:
Clone https://github.com/wbh604/UZI-Skill, read
AGENTS.md, then deep-analyze Alibaba (09988.HK).
git clone https://github.com/wbh604/UZI-Skill.git
cd UZI-Skill && pip install -r requirements.txt
python skills/deep-analysis/scripts/run_real_test.py BABATell any agent:
Analyze 00700.HK in remote mode — generate a public link so I can view it on my phone.
The agent spins up a Cloudflare Tunnel and gives you a https://xxx.trycloudflare.com URL.
/stock-deep-analyzer:analyze-stock 600519 # A-share by ticker
/stock-deep-analyzer:analyze-stock 00700.HK # HK
/stock-deep-analyzer:analyze-stock BABA # US ADR
/stock-deep-analyzer:analyze-stock AAPL # US
Ticker format tips for English users:
- A-share: 6-digit +
.SH(Shanghai) or.SZ(Shenzhen) — e.g.600519.SH,002594.SZ. Bare 6-digit like600519also works.- HK: 5-digit +
.HK— e.g.00700.HK,09988.HK.- US: plain symbol —
AAPL,BABA,PDD,NVDA.- Chinese names also resolve:
贵州茅台,腾讯控股. For English input, prefer ticker codes over company names (name-resolution is tuned for Chinese).
All commands require the
/stock-deep-analyzer:prefix for reliable dispatch across environments.
| Command | What It Does |
|---|---|
/stock-deep-analyzer:dcf 600519 |
DCF valuation · WACC + 5×5 sensitivity table |
/stock-deep-analyzer:comps 002273 |
Peer comparison · PE / PB percentile ranking |
/stock-deep-analyzer:lbo 600519 |
LBO stress test · PE-buyer IRR perspective |
/stock-deep-analyzer:initiate BABA |
Initiating-coverage report · JPM / GS format |
/stock-deep-analyzer:ic-memo BABA |
Investment-committee memo · 3-scenario returns |
/stock-deep-analyzer:earnings AAPL |
Earnings beat/miss analysis |
/stock-deep-analyzer:catalysts 300750 |
Catalyst calendar · next 60 days |
/stock-deep-analyzer:thesis 600519 |
Investment-thesis tracker · 5 pillars |
/stock-deep-analyzer:screen AAPL |
5 quant screens · value / growth / quality / GARP / short |
/stock-deep-analyzer:dd BABA |
Due-diligence checklist · 21 items across 5 workstreams |
/stock-deep-analyzer:quick-scan 00700.HK |
30-second sanity check |
/stock-deep-analyzer:panel-only 600519 |
Just run the 66-investor jury — no HTML report |
/stock-deep-analyzer:scan-trap 600519 |
Pump-and-dump / trap detection (8 signals) |
/stock-deep-analyzer:segmental-model 300308 |
🆕 Bottom-up segmental revenue model · 3-scenario × 3-year projection · cross-checks top-down DCF |
Let users pick how much thinking they want — quick / standard / deep-dive:
python run.py 600519 --depth lite # ⚡ Quick read (1-2 min)
python run.py 600519 # 📊 Standard (5-8 min) · default
python run.py 600519 --depth deep # 🔬 Institutional (15-20 min)Or via env var:
export UZI_DEPTH=lite # or medium / deep
python run.py 600519| Aspect | ⚡ lite | 📊 medium | 🔬 deep |
|---|---|---|---|
| Runtime | 1-2 min | 5-8 min | 15-20 min |
| Fetchers | Core 7 dims | All 22 dims | All 22 + reinforced fallback |
| Investors | 10 representatives | 51 full panel | 51 + Bull-Bear structured debate |
| Institutional methods | DCF only | All 17 | All 17 + Segmental Build-Up |
| ddgs qualitative queries | all skipped (saves tokens) | on-demand · budget 30 | full throttle · budget 60 |
| fund_holders | Top 5 with full 5Y stats | Top 20 full + rest as listing | Top 100 full |
| Self-review gate | critical blocks | critical blocks · warning ack-able | both block |
| Token cost (Codex) | minimal | moderate | maximum |
| Use case | Quick glance · boss just asked · preview ETF holdings | Daily deep analysis · writing research | Investment committee memo · pre-position deep dive |
- First install / empty
.cache/_global→ auto-switches to lite (saves cold-start time) - Network preflight 3+ domains unreachable → auto lite (prevents hanging)
- Manual
--depthalways overrides auto-detection
| Question | Recommended |
|---|---|
| "Can I buy this stock?" | medium (default) |
| "Give me a verdict in 15 minutes" | lite |
| "Prepping for investment committee tomorrow" | deep (includes Bull-Bear debate + bottom-up segmental) |
| "I typed an ETF code — system asked me to pick a holding" | lite (quick verdict on component) |
| "Codex environment / first install" | Don't worry — auto lite |
| Command | Implicit depth |
|---|---|
/stock-deep-analyzer:quick-scan 600519 |
lite |
/stock-deep-analyzer:panel-only 600519 |
lite |
/stock-deep-analyzer:analyze-stock 600519 |
medium (default) |
/stock-deep-analyzer:ic-memo 600519 |
deep |
/stock-deep-analyzer:initiate 600519 |
deep |
Not template phrases. Each investor has their own quantified rule set (242 rules total) + their own real quoted voice + their own authentic decision profile (time horizon / position sizing / what-would-change-my-mind).
| Group | Style | Representatives |
|---|---|---|
| A | Classic Value | Buffett · Graham · Munger · Fisher · Templeton · Klarman |
| B | Growth | Lynch · O'Neil · Thiel · Cathie Wood · Andreessen · Gurley · Naval · Gerstner · Chamath |
| C | Macro / Hedge | Soros · Dalio · Howard Marks · Druckenmiller · Julian Robertson · Burry · Chanos |
| D | Technical | Livermore · Minervini · Darvas · Gann |
| E | China Value | Duan Yongping (段永平) · Zhang Kun · Zhu Shaoxing · Xie Zhiyu · Feng Liu · Deng Xiaofeng · Zhang Lei (高瓴) |
| F | A-Share Day Traders (游资) | Zhao Laoge · Zhang Mengzhu · Foshan Shadowless Kick · 股海贼王 (distilled from real trade records) |
| G | Quant | Simons · Thorp · David Shaw · Cliff Asness |
| H | AI Bottleneck Hunters | Jensen Huang · Musk · Sam Altman · Saylor |
| I | Serenity | AI supply-chain chokepoint / bottleneck hunter |
Every verdict cites the specific rule it hit. And each investor answers three questions in their own voice:
| Investor | Time Horizon | What Would Change My Mind |
|---|---|---|
| Buffett | 10+ years / forever | ROE below 12% for 2 consecutive years · CEO change + strategic pivot |
| Zhao Laoge (赵老哥) | T+2 to T+5 | Leader breaks the limit-up · volume doesn't confirm |
| Simons | Avg holding < 2 days | Signal Sharpe drops below 0.5 · factor decay |
| Lynch | Until the story plays out, typically 3-5 years | PEG > 2 · inventory growing faster than revenue |
| Soros | One reflexivity cycle, weeks to months, flip anytime | Market stops validating my narrative |
Their quotes are sourced from real public materials — Berkshire annual letters, Oaktree memos, Principles, Margin of Safety, Lost Tree Club speeches, XueQiu / Zhihu columns — each citation links to the original source.
Ported from anthropics/financial-services-plugins, adapted with A-share / H-share parameters.
Valuation (6): DCF · Comps · 3-Statement · LBO · Merger Model · Unit Economics
Research (7): Initiating Coverage · Earnings Analysis · Catalyst Calendar · Thesis Tracker · Morning Note · Quant Screen · Sector Overview
Decision (6): IC Memo · Porter 5 Forces + BCG · DD Checklist · Value Creation Plan · Portfolio Rebalance · Trap Detection (unique to this plugin)
Tier-1 (5): AI Readiness · Earnings Preview · Model Update · Returns Attribution · Rebalance
All screenshots from a real analysis of Crystal Optech (002273.SZ).
Some sources need login to avoid being sampled out. All are opt-in — defaults work without any login, just with limited data.
| Source | What It Unlocks | How to Enable |
|---|---|---|
XueQiu (cubes_search) |
Dim 19 · real-money portfolios holding this stock + their returns | export UZI_XQ_LOGIN=1 && python -m lib.xueqiu_browser login (one-time browser prompt; cookies persisted to ~/.uzi-skill/playwright-xueqiu/). Or use flag: python run.py BABA --enable-xueqiu-login. |
If you don't enable, the dim transparently reports "⚠️ XueQiu login required, 0 cubes shown" — no silent data holes.
Q: How long does it take? A: 5-8 minutes per stock. Most time is data fetching. Modeling itself is <1 second.
Q: Do I need paid data sources?
A: No. All free (akshare / yfinance / DuckDuckGo / CNInfo / HKEXNews / Eastmoney / XueQiu backend). Zero API keys required. Optional MX_APIKEY (mx妙想 API) for enhanced A-share indicators — it's free too.
Q: Does it work for US / HK stocks?
A: Yes. /stock-deep-analyzer:analyze-stock AAPL, /stock-deep-analyzer:analyze-stock BABA, /stock-deep-analyzer:analyze-stock 00700.HK. HK now has 4-layer kline fallback (Eastmoney → Sina → yfinance → Yahoo Chart v8) since v2.13.7.
Q: Can I use English company names?
A: Best: use ticker codes (BABA / 00700.HK / 600519.SH). Name-resolution works for Chinese names (贵州茅台 → 600519.SH); for English names prefer the ticker.
Q: Does the 66-investor panel quote real investors?
A: Yes. The quotes-knowledge-base.md contains real published quotes from 45+ investors (22 Western, 23 Chinese), each with source URLs (Berkshire letters, Oaktree memos, books, interviews). Agents are instructed to mimic each investor's voice using these real quotes, not fabricate a "Buffett-style" line.
Q: Is this investment advice? A: No. This is a research tool, not a fortune teller. The 52 investor opinions are rule-engine simulations, not the real people's views. Don't bet the farm on Claude's Buffett impression.
Q: I'm behind the Great Firewall, will data sources work?
A: Most do. akshare / yfinance / Eastmoney / XueQiu all work from mainland China. Some Western sources (Bloomberg / Reuters) aren't used. DuckDuckGo web search occasionally rate-limits — see docs/NETWORK-TROUBLESHOOTING.md if the 3_macro / 13_policy / 15_events dims report empty.
Q: I'm outside China, will Chinese data sources work?
A: Yes. akshare / Eastmoney / XueQiu / CNInfo / HKEXNews all serve international IPs. No VPN needed. The mx妙想 API (A-share indicators) requires the free MX_APIKEY env var.
Q: How do I know the report I'm about to read is reliable?
A: As of v2.9, self-review is mechanically enforced. 13 automated checks run before HTML generation; if any critical check fails, the report physically cannot be shipped. Check .cache/<ticker>/_review_issues.json for any warnings, each with a suggested_fix. Every time a new BUG is fixed, a matching check is added — so the same class of bug will be auto-caught next run, no user feedback needed.
Q: Does the plugin auto-notify me about new versions?
A: Yes, since v2.14.0. Every CLI run or agent session silently polls api.github.com/.../releases/latest; if a newer tag is out, you get a 3-option prompt (yes / skip-this-version / no) with the release notes summary. "Skip" suppresses the prompt only for that specific tag — once a newer version drops, you'll be asked again. Disable with export UZI_NO_UPDATE_CHECK=1 (recommended for CI / Codex). Cached 6h to stay under GitHub's 60-req/h unauthenticated limit.
Q: I ran analyses on earlier versions — were those reports correct?
A: If you analyzed "industrial metals / machine tools / industrial machinery" stocks (like Yunnan Aluminum / 云铝股份 000807.SZ) before 2026-04-17, the 7_industry dim was misclassified as "agricultural food processing" (BUG#R10). Clear the cache and re-run:
rm -rf skills/deep-analysis/scripts/.cache/<ticker>/raw_data.json
python run.py <ticker> --no-resumev3.0–v3.2 pipeline refactor (2026-04-23) · Two-file legacy monolith split into a pipeline architecture:
run_real_test.py: 2105 → 735 lines (-65%) · pure functions moved tolib/pipeline/score_fns.pyassemble_report.py: 2964 → 587 lines (-80%) · split into 5lib/report/*submodulespython run.py <ticker>now defaults topipeline.run_pipeline·UZI_LEGACY=1falls back- All v2.x public APIs preserved via
re-export· 332 pytest pass · zero behavioral diff See CODEX.md / AGENTS.md for v3.2 repo layout details.
user says "/analyze-stock BABA"
↓
┌──────────────────────────────────────────────┐
│ Task 1 · Stage1 — parallel data fetch │
│ 22 fetchers × 20+ sources │
│ (akshare / yfinance / DDG / mx / cninfo …) │
└──────────────────────────────────────────────┘
↓ raw_data.json
┌──────────────────────────────────────────────┐
│ Task 2 · Rule engine scoring │
│ 22 dims → dimensions.json │
│ 52 investors × 180 rules → panel.json │
└──────────────────────────────────────────────┘
↓ HARD-GATE (agent takes over)
┌──────────────────────────────────────────────┐
│ Task 3 · Agent analysis │
│ reads quotes-knowledge-base.md │
│ writes agent_analysis.json │
│ (dim_commentary · panel_insights · │
│ great_divide · narrative_override …) │
└──────────────────────────────────────────────┘
↓ stage2 merge
┌──────────────────────────────────────────────┐
│ Task 4 · Synthesis · style weighting │
│ 7+1 stock style × 7 investor-school matrix │
│ → synthesis.json │
└──────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ 🛡 v2.9 · Mechanical self-review gate │
│ lib/self_review.py — 13 auto checks │
│ critical > 0 → RuntimeError (BLOCK HTML) │
│ agent must fix issues → re-review → pass │
└──────────────────────────────────────────────┘
↓ only when passed
┌──────────────────────────────────────────────┐
│ Task 5 · Report assembly │
│ → full-report.html (single file, offline) │
│ → share-card.png · war-report.png │
└──────────────────────────────────────────────┘
Previous versions had soft "HARD-GATE-FINAL-CHECK" — agents could skip, forget, or do half of it. BUG#R10 (a Chinese aluminum producer classified as "agricultural food processing") was caught only after reports were already sent to users. Soft gates aren't enough — v2.9 enforces mechanically.
lib/self_review.py runs 13 automated checks before any HTML can be generated. Each check corresponds to a historical BUG:
| severity | check | catches |
|---|---|---|
| 🔴 critical | industry mapping sanity | BUG#R10 collision (工业金属 → 农副食品加工) |
| 🔴 critical | all dims present | wave2 timeout dropped 12_capital_flow |
| 🔴 critical | HK kline has data | BUG#R8 Hong Kong kline no fallback |
| 🔴 critical | HK financials populated | BUG#R7 empty stub |
| 🔴 critical | panel non-empty, scores sane | panel engine glitches |
| 🔴 critical | coverage_pct ≥ 60% | data integrity floor |
| 🔴 critical | no "[PLACEHOLDER]" strings | template leak |
| 🔴 critical | agent_analysis.json exists & reviewed | agent skipped |
| 🟡 warning | DCF / Comps not all zero | valuation pipeline check |
| 🟡 warning | metal stocks have materials data | v2.8.x coverage gap |
| 🟡 warning | no fabricated narratives (e.g. "Apple supply chain" without evidence) | hallucination guard |
assemble_report::assemble() runs review_all(ticker) automatically. If critical_count > 0, it raises RuntimeError — physically impossible to ship a bad report. Agent must:
loop:
1. python review_stage_output.py <ticker>
2. read .cache/<ticker>/_review_issues.json
3. for each critical: execute suggested_fix (backfill, refetch, override)
4. re-run review
5. only when critical_count == 0 → HTML generation proceeds
Every time a new BUG is fixed, a matching check_* rule is added to self_review. The same bug class will be automatically caught on the next run, without needing user feedback.
Note: star-history.com caches server-side for 24h, so the chart may lag during fast-growth days. For the true current count, see the shields.io badge above — or click the chart to open the live star-history.com page (that triggers a backend refresh).
This tool generates analysis reports using AI models on public data. All scores, recommendations, and simulated commentary are algorithm outputs and do not represent any real investor's actual views (even if a quote is real, the scoring around it is simulated). Not investment advice. Past performance is not indicative of future results. Charlie Munger still lost money on Alibaba, and he actually read the 10-Q. Invest at your own risk.
Linux.do — "Linux.do is all you need to learn AI." Thanks for the testing community.
MIT License · Made by FloatFu-true · O.o








