数据分析
- 作者仓库星标 0
- 作者更新于 实时读取
- 作者仓库 bread-n-butter
- 领域
- 数据
- 兼容 Agent
-
- Claude Code
- Cursor
- Cline
- Codex
- Windsurf
- Gemini CLI
- +20
- 信任分
- 88 / 100 · 社区维护
- 作者 / 版本 / 许可
- @wzh-labs · 未声明 license
- Token 消耗评级
- 中等消耗
- 接入复杂程度
- 需简单配置
- 是否需要外部 API Key
- 不需要
- 兼容的系统
- 未声明(默认跨平台)
- 底层运行要求
- 无特殊要求
- 文件与系统权限
-
- 只读
- 允许写入 / 修改
- Shell 执行
- 网络行为
- 允许外网请求
- 安装命令数
- 26 条
档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。
---
name: 10x-analysis
description: Build (or refresh) a structured hypothesis on whether a specific company can grow 5x and 10x in…
category: 数据
runtime: 无特殊运行时
---
# 10x-analysis 输出预览
## PART A: 任务判断
- 适用问题:表格、CSV、数据集、指标或分析流程。
- 输入要求:目标材料、限制条件、期望输出和验收方式。
- 证据边界:围绕“Inputs / Prerequisite: brief.md must exist / Storage layout”读取原文规则,不把推断写成作者承诺。
## PART B: 执行结果
- **01** 任务判断:确认你的需求是否属于表格、CSV、数据集、指标或分析流程,并标出输入、限制和预期结果。
- **02** 执行计划:优先按“Inputs / Prerequisite: brief.md must exist / Storage layout”拆成步骤,说明每一步会读取什么、修改什么、产出什么。
- **03** 交付结果:给出可复制的命令、文件改动、检查清单或内容草稿,并说明如何继续迭代。
- **04** 风险边界:结合 读取文件、写入/修改文件、执行终端命令、会按任务需要访问外部网络、通常不需要额外 API Key 给出执行前确认项。
## Running Rules
- 读取文件、写入/修改文件、执行终端命令;会按任务需要访问外部网络;通常不需要额外 API Key。
- 先小样例验证,再放大到真实任务。
- 交付时同时给结果、检查口径和下一步迭代建议。 原文出现了 `/research-public-company`、`/research-private-company`、`/markets`、`/events`、`/series` 这类斜杠命令;如果你的 Agent 支持命令触发,优先用命令开场,再补充目标和边界。
告诉 Agent 目标文件或材料、期望结果、不可改范围、是否允许联网或执行命令。本 Skill 的权限画像是:读取文件、写入/修改文件、执行终端命令。
先用一个小任务确认它会围绕“Inputs / Prerequisite: brief.md must exist / Storage layout”工作;涉及文件或命令时,先看 diff、日志、预览或测试结果。
检查最终产物是否包含明确结果、必要证据和下一步动作;如果输出泛泛而谈,就补充输入、边界和验收标准后重跑。
---
name: 10x-analysis
description: Build (or refresh) a structured hypothesis on whether a specific company can grow 5x and 10x in…
category: 数据
source: wzh-labs/bread-n-butter
---
# 10x-analysis
## 什么时候使用
- 把数据处理方向的常用动作沉淀成 Agent 可调用的技能 适合处理表格、CSV、指标、数据集、分析和可视化报告,核心价值是把输入、判断、执行、验证和交付边界固定下来,避免 Agent 泛泛回答。 把任务拆成可执行、可检查、可继续迭代的步…
- 面向表格、CSV、数据集、指标或分析流程,优先处理能明确输入、步骤和验收标准的工作。
## 需要提供什么
- 目标材料、目录范围、期望结果和不可改动内容。
- 是否允许联网、执行命令、读写文件或调用外部服务。
## 执行规则
- 围绕「Inputs / Prerequisite: brief.md must exist / Storage layout」组织步骤,不把推断写成作者事实。
- 读取文件、写入/修改文件、执行终端命令;会按任务需要访问外部网络;通常不需要额外 API Key。
- 先跑小样例,确认结果可检查后再扩大任务范围。
## 输出要求
- 给出最终产物、关键证据、验证方式和下一步动作。
- 信息不足时标记 unknown,不编造命令、平台或依赖。 作者原文负责流程事实;仓库文件负责来源和命令;流狐只补充适用场景、限制和质量判断。
skill "10x-analysis" {
输入层 -> 用户目标 + 目标文件 + 禁止范围 + 验收标准
上下文层 -> Inputs / Prerequisite: brief.md must exist / Storage layout
规则层 -> SKILL.md 触发条件 / 执行顺序 / 输出格式
运行层 -> 无特殊运行时 | 读取文件、写入/修改文件、执行终端命令 | 会按任务需要访问外部网络
安全层 -> 通常不需要额外 API Key + 小任务验证 + diff / 日志复核
输出层 -> 可复制结果 + 检查清单 + 下一步迭代
} 10x Analysis
Goal: produce a falsifiable thesis on whether a company can 5x and 10x its valuation in 5 years, with named factors, weighted scores, tracked KPIs, catalyst events, and two probability percentages (5x and 10x) drawn from the same rubric — OR, on re-run, refresh that thesis against current data and report on-track / off-track / ahead per metric. Optimize for auditability: every factor score, every KPI target, and every probability change must be traceable to a source.
A 10x in 5 years implies a ~58% CAGR; a 5x in 5 years implies a ~38% CAGR. Base rates are brutal — across all U.S. public companies, roughly 1–3% achieve a 10x in any rolling 5-year window, and roughly 5–10% achieve a 5x. Lean skeptical: most 10x theses should land below 15% probability, and most 5x theses below 35%. A 50%+ 10x probability or 80%+ 5x probability requires extraordinary evidence.
Inputs
Required (one of):
- Ticker symbol for a public company —
$CRCL,NVDA,MSFT(strip the$prefix; normalize to uppercase) - Company name for a private company — resolved to the slug used under
~/knowledge/private-companies/
Resolution: if the user provides a ticker, look first under ~/knowledge/public-companies/<TICKER>/. If they provide a name, search both public-companies/ and private-companies/. If both directories exist for the same name (rare), prefer the public one and note the duplicate.
Prerequisite: brief.md must exist
This skill builds on brief.md. If it does not exist for the resolved company, stop and instruct the user:
"No
brief.mdfound at<expected_path>. Run/research-public-company $TICKER(or/research-private-company <name>) first, then re-run/10x-analysis."
Do not attempt to re-do research from scratch. Trust brief.md as the source of truth for facts; this skill's job is interpretation and tracking, not data collection. (You may still do small targeted web searches to fill specific gaps the brief omits — current valuation if stale, peer comps, new analyst views — but never to re-derive the whole brief.)
Storage layout
Findings live next to brief.md in the same company directory. One 10x/ subfolder per ticker / slug.
Public company:
~/knowledge/public-companies/<TICKER>/
brief.md # produced by research-public-company
10x/
thesis.md # current canonical thesis: YAML frontmatter + narrative
tracker.json # machine-readable KPI + catalyst tracker
changelog.md # append-only delta log, newest on top
snapshots/
YYYY-MM-DD.md # frozen point-in-time copies of thesis.md
Private company:
~/knowledge/private-companies/<slug>/
brief.md # produced by research-private-company
10x/
thesis.md
tracker.json
changelog.md
snapshots/
YYYY-MM-DD.md
If 10x/thesis.md exists, run in delta mode. Otherwise run in initial mode. Always check with ls before deciding.
Anchor date and anchor valuation
The anchor is the point in time the 5-year clock starts from. It is fixed at the first run and never updated by re-runs (re-runs track progress against the anchor).
- Public company: anchor date = the date of the most recent earnings call covered in
brief.md's frontmatter (financials.latest_quarterperiod). Anchor valuation = the market cap reported on that earnings date (or the closest available trading day). Pull this frombrief.mdfrontmatter (market_cap_usd,price_date) and verify with a quick web search if the brief is stale. - Private company: anchor date = the close date of the most recent funding round in
brief.md's frontmatter (funding.last_round.date). Anchor valuation = the post-money valuation of that round. If the post-money is not disclosed in the brief, use the most-recently-reported secondary-market or tender-offer valuation and label it(reported, unverified).
Record both in the frontmatter as anchor_date and anchor_valuation_usd. The 5-year targets are anchor_valuation_usd * 5 (5x target) and anchor_valuation_usd * 10 (10x target); both share the same target date of anchor_date + 5 years.
Modes
Initial mode (first time)
- Read
brief.mdand any transcripts undertranscripts/(public) or sources cited in the brief (private). Note: do not re-read SEC filings end-to-end unless a specific question requires it — use the brief's distilled facts. - Establish
anchor_dateandanchor_valuation_usd(see above). Computetarget_5x_valuation_usd = anchor_valuation_usd * 5,target_10x_valuation_usd = anchor_valuation_usd * 10, andtarget_date = anchor_date + 5 years. - Do targeted web research to fill gaps (recent market sizing, peer comps, base-rate data, recent catalysts not in brief).
- Score the 7 rubric factors (see Rubric below). Each factor gets a 1–5 score, confidence (low/med/high), and a one-sentence justification with at least one cited source. The same rubric drives both the 5x and 10x probability — do not score twice.
- Evaluate the pattern match (see Pattern match below). Determine
trade_trigger.firedand the status of all 4 leading indicators. Cite sources for each. This is a separate check from the rubric — do not roll it into the probability calculation. - Compute both probabilities —
prob_5xandprob_10x— using their respective base-rate tables and the shared factor multipliers (see Probability calculation). - Build the KPI tracker — 5–10 measurable metrics with current value, 1-year target, 3-year target, and 5-year target. These must be metrics the company actually publishes or that are derivable from public data.
- Build the catalyst events list — 3–7 named events with expected dates that, if hit (or missed), materially shift the thesis.
- For each catalyst, search Polymarket and Kalshi for a matching prediction market. Capture the market URL, question text, current price, volume, and
matchclassification (direct/proxy/none) in the catalyst'sprediction_markets[]block. Persist URLs intracker.jsonundercatalyst_marketsso they survive future runs. See Prediction market cross-reference below for endpoints and matching rules. - Write
thesis.md(frontmatter + narrative; format below). - Write
tracker.json(machine-readable; see tracker.json schema). - Copy
thesis.mdto10x/snapshots/<today>.md. - Create
10x/changelog.mdwith one entry:## <today>\n- Initial thesis. Probability: 5x <pct5>% / 10x <pct10>%. Anchor: <date>, $<anchor>B. Targets by <target_date>: 5x $<target5>B, 10x $<target10>B.<br/>Trade-trigger: fired/not-fired. Leading indicators: N/4 firing. - Commit and push (see Git workflow).
- Output the full thesis to the user.
Delta mode (re-running)
- Load existing
thesis.mdfrontmatter,tracker.json, and the latest snapshot. - Do not update the anchor — it is fixed. Re-runs compare current state against the anchor.
- Targeted refresh:
- Current valuation (market cap for public; latest secondary / round / press-reported markup for private).
- Latest values for each tracked KPI.
- Status of each catalyst event (hit, missed, deferred, still pending).
- Material new sources: earnings call since last run, new product launch, M&A, regulatory action, competitor move, macro regime change.
- Prediction-market refresh: for every catalyst, re-pull the linked Polymarket / Kalshi markets from
tracker.json.catalyst_marketsand refresh price, volume, and resolution status. Also re-search both venues for any new markets that have opened since the last run (catalysts can become tradable mid-thesis). If a market resolved YES/NO since the last run, propagate the resolution to the catalyst'sstatus(only when the market's question matches the catalyst — not just the topic). Never delete a previously-linked URL; mark itresolvedordelistedand keep it.
- Re-score every rubric factor. Note whether each factor moved up, down, or stayed flat vs. the previous run, and why (with a citation).
- Re-evaluate the pattern match. Check whether
trade_trigger.firedshould flip (look for new PO / MSA announcements since the last run that meet the criteria — named anchor, binding contract, ≥10% forward-revenue share). Re-evaluate each of the 4 leading indicators against the latest financials. Atrade_trigger.fired: false → truetransition is the single most important event in the thesis's lifecycle — surface it explicitly in the changelog. - Recompute both probabilities (5x and 10x).
- Mark each KPI as one of:
ahead(>10% above the linear-interpolation pace to target),on_track(within ±10% of pace),off_track(>10% below pace),n/a(no current reading available). Use the time elapsed sinceanchor_datefor the linear interpolation. KPI targets are anchored to the 10x thesis — do not duplicate KPI tracking for the 5x case (the same metrics tell the story). - Update
thesis.md(frontmatter values, factor scores, pattern-match block, KPI current values, catalyst statuses, narrative for materially-changed sections). Do not rewrite untouched sections. - Overwrite
tracker.jsonwith new current values, statuses, and timestamps. - Freeze a new
10x/snapshots/<today>.md. - Prepend a dated entry to
10x/changelog.mdwith:- Probability: 5x prev% → new% (Δ) and 10x prev% → new% (Δ).
- Trade-trigger flip if any (e.g. "Trade-trigger: not-fired → FIRED. Oracle 2.8 GW MSA signed 2026-08-12, ~$3.4B over 5 years, ~22% of FY2027E revenue [n].").
- Leading indicator status changes (e.g. "Backlog vs. revenue: partial → firing. RPO +84% YoY vs. revenue +18% YoY in Q2 2026.").
- Factors that moved (e.g. "Moat: 3 → 4 (Coinbase renewal terms favorable)").
- KPI status changes (e.g. "USDC circulation: on_track → off_track").
- Catalyst events fired or missed since last run.
- One-line thesis summary if it materially changed.
- Commit and push.
- Output only the changelog entry plus the new 5x and 10x probabilities, the on/off-track scorecard, the pattern-match status (trade-trigger fired? indicators firing count?), and the thesis path. Do not re-output the full thesis.
Empty delta: if nothing material changed (no new earnings call, no catalyst fired, no KPI moved more than ±5%, no rubric factor moved, no catalyst's blended implied_probability_pct moved more than ±10pp, no new prediction market was linked, trade_trigger.fired did not flip, and no leading indicator status changed), output one line: "No material changes since YYYY-MM-DD. Probability holds at 5x
A trade_trigger.fired: false → true transition is always material — emit the changelog entry and commit even if every other field is flat.
Rubric (7 factors)
Each factor is scored 1–5 with a confidence label and one-sentence justification with at least one citation from brief.md's sources, or a new source if needed. Weights sum to 100.
| # | Factor | Weight | What 5 looks like | What 1 looks like |
|---|---|---|---|---|
| 1 | Market size & TAM expansion path | 20 | TAM today is >100x anchor valuation, AND there's a credible path for TAM itself to grow over the period. | TAM is <3x anchor, OR TAM is shrinking. |
| 2 | Secular / macro tailwind | 15 | The company sits on a structural, multi-decade adoption curve (AI compute, electrification, demographic, regulatory unlock) with rare counter-cyclical risk. | The company depends on a transient macro condition (cyclical demand, single regulatory window, rate cycle) that's about to reverse. |
| 3 | Competitive moat & market-share trajectory | 15 | Multi-layer moats (network effects + IP + switching costs + scale), share trending up over the past 8 quarters. | Commoditized product with eroding share. |
| 4 | Product velocity & TAM-expanding launches | 15 | New SKUs / products in market or imminent that themselves open materially larger TAMs (e.g. platform → multi-product). | Single-product business with stalled roadmap. |
| 5 | Execution & management track record | 10 | Founder-CEO with prior wins, multi-quarter pattern of beating guidance and shipping on schedule, low key-person risk. | Executive turnover, missed guidance, repeated delays. |
| 6 | Unit economics & capital efficiency | 15 | Positive FCF or clear path to it, gross margins stable/expanding, dilution low, can self-fund growth. | Burning cash with no clear path to FCF, dilution heavy, dependent on capital markets. |
| 7 | Tail risk: regulatory / political / structural | 10 | Regulation is a tailwind or settled in the company's favor; minimal political exposure. | Active investigation, pending legislation that could halve revenue, geopolitical or sanctions exposure. |
Scoring discipline:
- A 3 is neutral — not the default. Most factors at 3 means you don't have a 10x story.
- Confidence labels (
low/med/high) capture how sure you are of the score, not the score itself. Low confidence on a 5 is still a 5 — but it widens the probability bands. - Each factor's justification must cite at least one source. Reuse
brief.md's sources where possible; otherwise add the new URL tosources.jsonlunder the brief's directory (NOT a separate ledger).
Pattern match (trade-trigger + leading indicators)
Independent of the 7-factor rubric, every thesis must answer two empirical questions drawn from cross-stock pattern studies under ~/knowledge/patterns/ (see be-10x-pattern.md for the anchor case — BE's 18.6x run from June 2025 to May 2026). These questions don't replace the rubric — they're a separate, falsifiable check that surfaces the single most load-bearing signal and four leading indicators, regardless of how the 7 factors scored.
The rubric tells you whether the story is good. The pattern match tells you whether the trade has actually triggered. A high-scoring rubric with no trade-trigger means "watchlist"; a high-scoring rubric WITH a trade-trigger means "the move may already be underway."
The trade-trigger question
Has a named hyperscaler, sovereign, DoD prime, or comparable anchor customer signed a PO (not LOI, not MOU) for ≥10% of forward 12-month revenue in the last 2 quarters?
This is the single observation that converted BE from a $17 stock into a $316 stock (Oracle 2.8 GW MSA → AEP $2.65B → Brookfield $5B → Nebius $2.6B). It is the difference between "interesting story" and "trade now." Most stocks that 10x in <24 months pass through this gate first.
Capture as trade_trigger in the frontmatter:
fired: true | false— has the gate been crossed?customer: <name>— null iffired: falsecontract_type: PO | MSA | binding-supply-agreement | LOI | MOU | press-release-onlycontract_value_usd:— null if not disclosedforward_revenue_share_pct:— contract value / forward 12-month revenue × 100announcement_date: YYYY-MM-DD— null iffired: falsesource_note:— one sentence + citation
Decision impact:
- If
fired: trueand the company scores ≥3.5 weighted average on the rubric: surface explicitly in the narrative Confidence notes — the setup is mature. - If
fired: falseregardless of rubric score: surface explicitly that the trade-trigger has not fired and name what specifically would trigger it. The thesis is a watchlist item, not a setup. Don't lower the probability mechanically — the rubric already prices forward odds — but the user reads the trade-trigger as the timing signal, not the whether signal.
LOI / MOU / press-release-only never count as fired: true. Reasoning: every 2021 BE-clean-energy round-trip was driven by non-binding announcements. The discipline is binding-contract-or-nothing.
The four leading indicators
These are observable signals that, in BE's case, led the 18x move by 12–18 months. They are not predictive in isolation — but together they tighten or loosen confidence in the rubric score. Capture each in the frontmatter as leading_indicators[] with status: firing | partial | not-firing | n/a.
| # | Indicator | What "firing" looks like | What "not firing" looks like |
|---|---|---|---|
| 1 | Backlog (or RPO) growing ≥2x faster than revenue | Backlog up 50%+ YoY while revenue up 10–20%. Forward visibility decoupling from current print. | Backlog flat or growing at same rate as revenue. |
| 2 | GAAP (not just non-GAAP) gross margin inflecting upward 2+ quarters in a row | GAAP GM expanded ≥300 bps cumulative over the last 4 quarters, with management attributing to volume/utilization (not pricing or mix accident). | GAAP GM flat, declining, or only adjusted/non-GAAP GM expanding. |
| 3 | FCF turning from deep negative to positive (or significantly less negative) in the same window as revenue acceleration | FCF crossed zero (or improved by >50% YoY) in the most recent fiscal year AND revenue growth re-accelerated in the same window. | FCF still deeply negative without trend, or improving only via cost cuts without revenue acceleration. |
| 4 | Customer concentration shifting toward a new buyer class | Top-customer mix has visibly tilted (in the 10-K customer-concentration disclosure or analyst-day deck) toward a structurally larger / faster-growing buyer (hyperscalers, sovereigns, AI-native cos), not just the legacy customer base. | Customer mix is stable or concentrating toward the same buyer class. |
Decision impact: count how many of the 4 are firing. Document the count in leading_indicators_firing_count (0–4). This number does not feed the probability calculation directly, but the narrative Confidence notes must address any factor that scored ≥4 in the rubric while ≤1 indicator is firing — that's a soft fragility flag (the story is good on paper but the empirical machinery isn't yet showing up in the financials).
Where this came from
The trade-trigger gate and the four indicators were extracted from a single anchor case study (BE 18x pattern, Section 4 — 10-factor checklist). They are deliberately conservative: BE itself scored 19/20 on the full checklist before the trade-trigger fired, so passing this 5-question subset is necessary but not sufficient. Treat it as a sanity filter, not a buy signal.
If the user is searching for new candidates rather than evaluating one they've already picked, use the separate find-next-10x skill — that's where the full screening template lives. This skill assumes you already have a ticker in hand.
Probability calculation
Use a base-rate-anchored, multiplicative model. Run the same calculation twice — once with the 5x base rates, once with the 10x base rates — using the same factor scores and multipliers. The output is prob_5x and prob_10x.
Step 1 — Base rate. Pick the closest bucket. Use the 5x column for the 5x probability and the 10x column for the 10x probability:
| Company profile | 5-year 5x base rate | 5-year 10x base rate |
|---|---|---|
| Mega cap (>$500B), mature sector | 1.0% | 0.3% |
| Large cap ($50B–$500B), growth sector | 4.0% | 1.0% |
| Mid cap ($10B–$50B), growth sector | 10.0% | 2.5% |
| Small cap ($1B–$10B), growth sector | 18.0% | 5.0% |
| Micro cap (<$1B), growth sector | 25.0% | 7.5% |
| Late-stage private (Series E+, >$5B post) | 12.0% | 3.0% |
| Mid-stage private (Series B–D, $500M–$5B post) | 20.0% | 6.0% |
| Early-stage private (Seed–A, <$500M post) | 28.0% | 10.0% |
These are rough heuristics drawn from historical CRSP / Cambridge Associates / Pitchbook data and are deliberately conservative. 5x base rates are empirically ~3–4× the corresponding 10x base rates across most buckets — driven by the gap between a 38% and 58% required CAGR. Cite a source when adjusting the bucket boundary or rate; otherwise use these defaults.
Step 2 — Factor multipliers. For each rubric factor, apply a multiplier based on the score. The same multipliers apply to both the 5x and 10x calculation — the factors that make a company more likely to 10x also make it more likely to 5x.
| Score | Multiplier |
|---|---|
| 5 | 1.6× |
| 4 | 1.25× |
| 3 | 1.0× |
| 2 | 0.7× |
| 1 | 0.4× |
Apply each multiplier weighted by the factor's weight share (multiplier ^ (weight / 100)) so that low-weight factors don't dominate. Compound across all 7 factors.
for target in (5x, 10x):
prob[target] = base_rate[target]
for each factor f:
prob[target] *= multiplier(f.score) ** (f.weight / 100)
Step 3 — Confidence band. Compute each calculation a second time with every low confidence factor pushed one step toward neutral (5 → 4, 1 → 2, etc.). That gives the low-confidence-adjusted probability for each target. Report prob_5x_point / prob_5x_band_low and prob_10x_point / prob_10x_band_low. If point and low-band differ by more than 1.5× on either target, flag that the thesis is fragile.
Step 4 — Floor, ceiling, and consistency.
- Cap 10x at 80% and 5x at 95% (neither is a sure thing, but 5x has higher ceilings).
- Floor at 0.3% on both (don't claim 0% — surprises happen).
- Round to one decimal place.
- Consistency check:
prob_5xmust be ≥prob_10x. If the calculated 5x is lower, something is wrong with the bucket assignment — re-check before reporting. If they come out equal at the cap, note it.
Step 5 — Sanity check. Compare against historical comparable trajectories for both multiples (e.g. "what fraction of stablecoin issuers, payment networks, or post-IPO fintechs of similar size 5x'd or 10x'd in 5 years?"). If either number is >2× outside that band, either add an explicit override note or revise.
Prediction market cross-reference (catalysts only)
For every catalyst in the thesis, look for a live prediction market on Polymarket and Kalshi that priced the same (or closest proxy) question. A prediction-market price is external, real-money, real-time, and forms a useful independent check on your own catalyst probability. This is decision-support — never overwrite your factor scores or probabilities with market prices, but flag any catalyst where the market disagrees with your status/materiality materially.
Both APIs are public — no auth, no key — so call them directly with curl via Bash.
Polymarket (Gamma API)
Base URL: https://gamma-api.polymarket.com (docs)
Search markets by free text. Filter to active, non-closed markets, sort by volume desc, take the top match:
curl -sG "https://gamma-api.polymarket.com/markets" \
--data-urlencode "active=true" \
--data-urlencode "closed=false" \
--data-urlencode "limit=10" \
--data-urlencode "order=volumeNum" \
--data-urlencode "ascending=false" \
--data-urlencode "q=<catalyst keywords>"
Each market in the response includes id, slug, question, outcomePrices (a JSON-encoded string array like "[\"0.62\", \"0.38\"]" for YES/NO), volumeNum (USD), endDate, and closed. The YES price is outcomePrices[0] (parse the JSON string), which is the market-implied probability of YES (0–1). Construct the market URL as https://polymarket.com/event/<slug>.
Kalshi (trade-api v2)
Base URL: https://api.elections.kalshi.com/trade-api/v2 (also reachable as https://external-api.kalshi.com/trade-api/v2) (docs)
Kalshi's /markets endpoint doesn't take a free-text q — search via /events or /series for the topic, then list the markets under matching events. A quick approach:
# 1) Search events (Kalshi groups markets under events; pagination via cursor)
curl -sG "https://api.elections.kalshi.com/trade-api/v2/events" \
--data-urlencode "status=open" \
--data-urlencode "limit=200"
# Filter the response client-side for events whose title/sub_title matches the catalyst keywords.
# 2) For a matching event, list its markets
curl -sG "https://api.elections.kalshi.com/trade-api/v2/markets" \
--data-urlencode "event_ticker=<EVENT_TICKER>" \
--data-urlencode "status=open"
Each market includes ticker, event_ticker, title, subtitle, yes_bid / yes_ask / last_price (in cents, 0–100 — divide by 100 for probability), volume, volume_24h, open_interest, and close_time. Mid-price = (yes_bid + yes_ask) / 2 / 100. If only last_price is non-zero, fall back to that. Market URL: https://kalshi.com/markets/<series_ticker>/<event_ticker> (use kalshi.com/markets/<event_ticker>/<market_ticker> when needed — verify the link resolves).
Matching catalysts to markets
For each catalyst, derive 2–4 keyword variants from the label and ticker (e.g. Arc mainnet → ["Arc mainnet", "Circle Arc", "CRCL Arc launch"]) and query both venues. For every candidate market, classify the fit:
- direct — the market resolves on exactly the catalyst (same event, same deadline ±1 quarter). Use this price.
- proxy — the market resolves on a related but not identical question (broader topic, different deadline, adjacent metric). Record it, but discount the signal in the narrative.
- none — no usable market exists. Record
nulland move on.
Pick at most one Polymarket and one Kalshi market per catalyst. Prefer direct > proxy, then higher volume > lower volume, then closer expiry > farther expiry. If volume is below $5,000 lifetime (Polymarket) or $1,000 24h (Kalshi), flag the price as low_liquidity: true — thin markets are noisy.
Implied probability and blending
For each catalyst, compute:
polymarket_implied_pct= YES outcome price × 100 (when a direct or proxy market exists).kalshi_implied_pct= mid-price × 100 (or last-price × 100 if no two-sided quote).implied_probability_pct= simple average of the two when both exist and are non-stale; otherwise whichever exists; otherwisenull.
A market is stale if its last trade or last update is older than 14 days, or if it's flagged low_liquidity. Stale markets are recorded but excluded from the blended average — note this explicitly.
Disagreement check
If implied_probability_pct differs from your internal read of the catalyst (materiality: high + status: pending ≈ you think this is a coin-flip-or-better) by more than 25 percentage points, surface it in the narrative under Confidence notes. Two patterns to watch for:
- Market << your view: the crowd doesn't think the catalyst will hit. Sanity-check your assumed timeline; consider downgrading factor 4 (product velocity) or factor 5 (execution).
- Market >> your view: the crowd thinks it's nearly priced in. Consider whether your probability already double-counts it.
Never silently overwrite your factor scores with market prices. The prediction market is a check, not the source.
Delta mode
On re-run, re-pull every catalyst's markets (the linked market may have closed/resolved; new markets may have opened). If a previously-linked market has resolved YES, mark the catalyst status: hit only if the resolution matches the catalyst (not just the broader topic). If resolved NO, mark missed. Record the price delta vs. last run as implied_probability_delta_pp (percentage points).
thesis.md frontmatter schema
---
ticker_or_slug: CRCL # uppercase ticker for public, kebab-case slug for private
company_type: public # public | private
name: Circle Internet Group, Inc.
first_analyzed: 2026-05-21
last_analyzed: 2026-05-21
anchor:
date: 2026-03-31 # for public: end of latest reported quarter
valuation_usd: 28000000000 # market cap at anchor (public) or post-money (private)
source_note: "Q1 2026 earnings call 2026-05-11; Morningstar close 2026-05-20 used as proxy for end-quarter market cap"
target:
date: 2031-03-31 # anchor + 5 years
valuation_5x_usd: 140000000000 # 5x anchor
valuation_10x_usd: 280000000000 # 10x anchor
implied_cagr_5x_pct: 38.0
implied_cagr_10x_pct: 58.5
current:
date: 2026-05-21
valuation_usd: 27750000000
pace_5x_pct: -2.2 # (current - anchor) / (target_5x - anchor) as % progress; computed each run
pace_10x_pct: -1.0 # (current - anchor) / (target_10x - anchor) as % progress; computed each run
probability:
prob_5x_point_pct: 14.5 # 5x probability after rubric + 5x base rate
prob_5x_band_low_pct: 9.8 # low-confidence-adjusted 5x
prob_10x_point_pct: 4.2 # 10x probability after rubric + 10x base rate
prob_10x_band_low_pct: 2.8 # low-confidence-adjusted 10x
base_rate_bucket: "Mid cap, growth sector"
base_rate_5x_pct: 10.0
base_rate_10x_pct: 2.5
# Pattern-match gate — independent of rubric, derived from cross-stock
# pattern studies in ~/knowledge/patterns/. Used as a *timing* signal,
# not a probability adjustment.
trade_trigger:
fired: false # true | false
customer: null # named anchor customer; null if not fired
contract_type: null # PO | MSA | binding-supply-agreement | LOI | MOU | press-release-only
contract_value_usd: null
forward_revenue_share_pct: null # contract value / forward 12mo revenue × 100
announcement_date: null
source_note: null # one sentence + [n] citation
leading_indicators:
- id: backlog_vs_revenue
label: Backlog (or RPO) growing ≥2x faster than revenue
status: not-firing # firing | partial | not-firing | n/a
note: "RPO +12% YoY vs. revenue +14% YoY in Q1 2026 — pacing similarly."
- id: gaap_gross_margin_inflection
label: GAAP gross margin inflecting upward 2+ quarters in a row
status: partial
note: "GAAP GM expanded 220 bps over 4 quarters; below the 300 bps threshold."
- id: fcf_turn
label: FCF turning positive (or significantly less negative) alongside revenue acceleration
status: not-firing
note: "FCF still −$X; no acceleration yet."
- id: customer_concentration_shift
label: Customer concentration shifting toward a new buyer class
status: n/a
note: "10-K customer-concentration disclosure not yet available for FY2025."
leading_indicators_firing_count: 0 # 0–4
factors:
- id: market_size
name: Market size & TAM expansion path
weight: 20
score: 4
confidence: med
rationale: "Stablecoin TAM projected $3.7T by 2030 vs. ~$320B today; Circle's USDC at ~25% share gives ~$925B addressable supply at 10x macro, well over 10x current market cap when grossed up to revenue."
sources: [3, 8]
- id: secular_tailwind
name: Secular / macro tailwind
weight: 15
score: 3
confidence: low
rationale: "GENIUS Act + AI-agent settlement are real tailwinds, but ~94% of revenue tied to short-rate cycle — net neutral over a 5-year window with Fed easing."
sources: [8, 14]
# ... 5 more factors
kpis:
- id: usdc_circulation_usd
label: USDC in circulation
current_value: 77000000000
current_as_of: 2026-03-31
target_1y: 110000000000
target_3y: 250000000000
target_5y: 500000000000
units: USD
source_note: "Q1 2026 earnings; long-term consistent with mgmt 40% CAGR guidance"
status: on_track # ahead | on_track | off_track | n/a (set on each run)
# ... 4-9 more KPIs
catalysts:
- id: arc_mainnet_launch
label: Arc mainnet launch
expected_window: 2026-Q3
direction: bull
materiality: high
status: pending # pending | hit | missed | deferred
note: "Per Q1 2026 call: mainnet expected summer 2026."
# Linked prediction markets (persist these URLs across runs — they are the
# back-pointer for spot-checking the crowd's view of this catalyst over time).
# Omit the entries if no market exists; never delete a previously-linked URL,
# only mark it stale / resolved.
prediction_markets:
- source: polymarket
market_id: "arc-mainnet-launch-by-2026"
market_url: "https://polymarket.com/event/arc-mainnet-launch-by-2026"
question: "Will Circle's Arc mainnet launch by Sep 30, 2026?"
match: direct # direct | proxy
yes_price: 0.62 # 0–1, market-implied probability of YES
volume_usd_lifetime: 145000
end_date: 2026-09-30
last_seen: 2026-05-21
low_liquidity: false
stale: false
- source: kalshi
market_ticker: "KXCIRCLEARC-26SEP30"
market_url: "https://kalshi.com/markets/kxcirclearc/kxcirclearc-26sep30"
question: "Circle Arc mainnet live on or before 2026-09-30?"
match: proxy
yes_bid: 0.55
yes_ask: 0.61
yes_mid: 0.58
last_price: 0.58
volume_24h: 1800
close_time: 2026-09-30T23:59:00Z
last_seen: 2026-05-21
low_liquidity: false
stale: false
implied_probability_pct: 60.0 # blended avg of non-stale markets; null if no market
implied_probability_source: "polymarket+kalshi blended"
# ... 2-6 more catalysts
# Source IDs reference brief.md's sources.jsonl + any new URLs added here.
---
tracker.json schema
A compact, machine-readable mirror of the frontmatter for quick programmatic re-read in delta mode.
{
"ticker_or_slug": "CRCL",
"company_type": "public",
"anchor": { "date": "2026-03-31", "valuation_usd": 28000000000 },
"target": {
"date": "2031-03-31",
"valuation_5x_usd": 140000000000,
"valuation_10x_usd": 280000000000,
"implied_cagr_5x_pct": 38.0,
"implied_cagr_10x_pct": 58.5
},
"catalyst_markets": {
"arc_mainnet_launch": [
{
"source": "polymarket",
"market_url": "https://polymarket.com/event/arc-mainnet-launch-by-2026",
"question": "Will Circle's Arc mainnet launch by Sep 30, 2026?",
"first_linked": "2026-05-21",
"match": "direct"
},
{
"source": "kalshi",
"market_url": "https://kalshi.com/markets/kxcirclearc/kxcirclearc-26sep30",
"question": "Circle Arc mainnet live on or before 2026-09-30?",
"first_linked": "2026-05-21",
"match": "proxy"
}
]
},
"runs": [
{
"date": "2026-05-21",
"current_valuation_usd": 27750000000,
"prob_5x_point_pct": 14.5,
"prob_5x_band_low_pct": 9.8,
"prob_10x_point_pct": 4.2,
"prob_10x_band_low_pct": 2.8,
"factor_scores": { "market_size": 4, "secular_tailwind": 3, "moat": 4, "product_velocity": 4, "execution": 3, "unit_economics": 2, "tail_risk": 2 },
"kpi_status": { "usdc_circulation_usd": "on_track", "cpn_volume_usd": "ahead", "rldc_margin_pct": "off_track" },
"catalysts_fired": [],
"catalysts_missed": [],
"catalyst_implied_pct": { "arc_mainnet_launch": 60.0 },
"trade_trigger_fired": false,
"leading_indicators_firing_count": 0,
"leading_indicators_status": {
"backlog_vs_revenue": "not-firing",
"gaap_gross_margin_inflection": "partial",
"fcf_turn": "not-firing",
"customer_concentration_shift": "n/a"
},
"summary": "Initial thesis."
}
]
}
runs[] is append-only — every analysis run adds a new entry. This is what lets the delta mode compute deltas. The trade_trigger_fired and leading_indicators_* fields are captured per-run so the delta mode can detect the moment the trigger fires (the most important event in the thesis's life) and the moment any indicator flips.
catalyst_markets is the durable back-pointer to the prediction markets you found — keyed by catalyst id, with one entry per (source, market_url) pair, plus the date you first linked it. Treat this as append-only too: never delete a previously-linked URL. If a market resolves or delists, mark it on the entry (resolved_date, resolved_outcome, delisted: true) but keep the URL so it's still browsable from the snapshot history. Each runs[] entry records the current implied probability per catalyst in catalyst_implied_pct for delta tracking.
thesis.md narrative body
After the frontmatter:
# 10x thesis — <Company Name> (<TICKER or slug>)
**Anchor:** <anchor_date> at $<anchor_valuation>B market cap (public) / post-money (private).
**Targets by <target_date>:** 5x → $<target_5x>B (CAGR <cagr_5x>%) · 10x → $<target_10x>B (CAGR <cagr_10x>%).
**Current:** $<current_valuation>B as of <current_date> (5x pace <pace_5x>%, 10x pace <pace_10x>%).
**Probability by <target_date>:** **5x: <prob_5x>%** (band: <band_5x_low>%) · **10x: <prob_10x>%** (band: <band_10x_low>%).
## One-paragraph thesis
A single dense paragraph stating the cleanest version of the bull case — what must be true for the company to 10x (the 5x case is the same story with less of it). No hedging language; no marketing adjectives. State the load-bearing assumption explicitly.
## Factor scorecard
| # | Factor | Weight | Score | Confidence | One-line rationale |
|---|---|---:|---:|---|---|
| 1 | Market size & TAM expansion | 20 | 4 | med | … |
| 2 | Secular tailwind | 15 | 3 | low | … |
| … | … | … | … | … | … |
## Pattern match — trade-trigger + leading indicators
Independent check against the cross-stock pattern in [`patterns/be-10x-pattern.md`](../../patterns/be-10x-pattern.md). Surfaces the *timing* signal separately from the rubric.
**Trade-trigger:** `fired` / `not fired`. One sentence on the named anchor customer, contract type, value, forward-revenue share, announcement date, and citation. If `not fired`, name what specifically would trigger it (e.g. "would fire if Oracle / AWS / Azure signs a multi-GW PO covering ≥10% of FY2027E revenue").
**Leading indicators:**
| # | Indicator | Status | One-line note |
|---|---|---|---|
| 1 | Backlog (or RPO) ≥2x revenue growth rate | firing / partial / not-firing / n/a | … |
| 2 | GAAP gross margin inflecting upward 2+ qtrs | … | … |
| 3 | FCF turn alongside revenue acceleration | … | … |
| 4 | Customer concentration shifting to new buyer class | … | … |
**Firing count:** N/4. If any rubric factor scores ≥4 while ≤1 indicator is firing, note the fragility here.
## What has to be true
3–5 bullets. Concrete, falsifiable. Not "execute well" — instead "USDC supply must reach $500B by 2031 (vs. $77B today)" or "Arc must capture >$50B TVL within 24 months of mainnet launch."
## KPIs to track
Table of the KPIs from frontmatter, with current value, 1y/3y/5y targets, current status, and a one-line interpretation per row.
## Catalysts to watch
Table of catalyst events from frontmatter, with expected window, direction (bull/bear), materiality, current status, the **market-implied probability** if a Polymarket or Kalshi market exists, and a one-line note. Render the linked prediction markets as clickable URLs in a sub-row or footnote — the goal is that the reader can jump from this table to the live market in one click and see the latest price themselves. Example:
| # | Catalyst | Window | Dir | Materiality | Status | Implied % | Note | Markets |
|---|---|---|---|---|---|---:|---|---|
| 1 | Arc mainnet launch | 2026-Q3 | bull | high | pending | 60% | Mgmt guided summer 2026 | [Polymarket](https://polymarket.com/event/arc-mainnet-launch-by-2026) · [Kalshi](https://kalshi.com/markets/kxcirclearc/kxcirclearc-26sep30) |
| 2 | … | … | … | … | … | — | No usable market | none |
When `match: proxy`, suffix the link with `(proxy)`. When a market is stale or low-liquidity, suffix with `(stale)` or `(thin)`. When no market exists, write `none` so the reader knows you looked and didn't find one — don't leave the cell blank.
## What kills the thesis
3–5 concrete failure modes. Specific enough to be falsifiable — not "competition increases" but "Tether USAT captures >40% share of GENIUS-compliant USD stablecoin issuance by end of 2027, locking USDC out of new bank-issued / Treasury-issued distribution".
## Base rates and analogues
- Bucket assignment with both base rates (5x and 10x) — justify the bucket.
- 2–4 historical analogues (companies of similar profile at a similar inflection point) and what fraction 5x'd vs. 10x'd. Cite the data.
## Probability derivation
Show **both** calculations side by side: 5x base rate and 10x base rate, the shared factor multipliers, and the two final numbers. Make this reproducible.
## Confidence notes
- Which factor scores are most fragile and why.
- What single piece of new information would shift the probability most.
- Open questions the brief.md couldn't answer.
## Sources
Numbered list referencing source IDs used. Reuse `brief.md`'s sources where possible; new URLs added during this analysis should also be appended to the brief's `sources.jsonl` with today's date in `cited_in`.
Changelog entry (delta mode)
Prepend to 10x/changelog.md:
## <YYYY-MM-DD>
- **Probability — 5x:** <prev_5x>% → <new_5x>% (Δ <signed_5x>%). Band: <prev_5x_low>% → <new_5x_low>%.
- **Probability — 10x:** <prev_10x>% → <new_10x>% (Δ <signed_10x>%). Band: <prev_10x_low>% → <new_10x_low>%.
- **Valuation:** $<prev>B → $<curr>B. Pace vs targets: 5x <pace_5x>%, 10x <pace_10x>% (<status: ahead/on_track/behind>).
- **Trade-trigger:** <fired this run? prev → curr — if newly fired, name customer + contract type + value + forward-revenue share + citation. If still not fired, omit unless near-miss worth flagging>.
- **Leading indicators:** <each indicator that flipped, prev_status → curr_status, with one-line cause>. Firing count: <prev>/4 → <curr>/4. Drop unchanged.
- **Factor moves:** <list each factor that changed score, with prev → curr and one-line cause>. Drop unchanged factors.
- **KPI status changes:** <KPI: prev_status → curr_status, with current value>. Drop unchanged.
- **Catalysts fired:** <list>. **Catalysts missed:** <list>. **Catalysts newly pending:** <list>.
- **Prediction-market moves:** for each catalyst with a linked market, `<catalyst_id>: <prev_implied>% → <new_implied>% (Δ <signed>pp)`. Note new markets linked this run and any markets that resolved.
- **New material info:** 1–3 bullets summarizing what new earnings / events / sources drove the changes, with citations.
- **Thesis-killer check:** any of the "what kills the thesis" conditions tripped? List or "none".
- **Sources added:** N new URLs — describe what they say.
If no change is material, see Empty delta above — emit one line and do not write files.
Git workflow
Run from $KNOWLEDGE_ROOT (default ~/knowledge):
git add <public-companies|private-companies>/<TICKER or slug>/10x/
git commit -m "<message>"
git push
Commit message format:
- Initial mode:
10x($TICKER): initial thesis — 5x <pct5>% / 10x <pct10>%(e.g.10x($CRCL): initial thesis — 5x 14.5% / 10x 4.2%). - Delta mode:
10x($TICKER): <YYYY-MM-DD> — 5x <prev5>%→<new5>% / 10x <prev10>%→<new10>% (<one-line driver>)(e.g.10x($CRCL): 2026-08-12 — 5x 14.5%→17.2% / 10x 4.2%→5.1% (Q2 beat, Arc mainnet on track)).
Rules:
- Stage explicitly —
git add .../10x/. Nevergit add -Aorgit add .. If you added new URLs to the parentsources.jsonl, stage that file explicitly too. - No commit on empty delta.
- One commit per company per run.
- If
git pushfails (no upstream, network, conflict), report it and stop. The local commit remains on disk. - Never run destructive git operations.
Style rules
- Cite every non-trivial claim with the same
[n]convention asbrief.md, referencing the brief'ssources.jsonlIDs where possible. - Be brutally explicit about the load-bearing assumption. The reader should be able to find the one sentence that, if wrong, collapses the thesis.
- No marketing language. Strip "transformative", "revolutionary", "best-in-class" etc. State what would actually happen.
- No fabrication. If you can't source a market-size or peer comp, say so and either lower confidence or drop the claim.
- Numbers carry units and dates. Never "$77B" alone — always "$77B at Q1 2026 quarter-end".
- Falsifiability over comprehensiveness. Each tracked KPI must have a numeric target that can be checked next quarter. "Grow market share" is not a KPI; "USDC share of stablecoin transaction volume ≥65% in Visa Onchain Analytics" is.
What to skip
- Don't re-explain what the company does —
brief.mdalready covers it. The thesis assumes the reader has read the brief. - Don't summarize the rubric in prose; the table IS the summary.
- Don't include a "conclusion" — the two probabilities (5x and 10x) are the conclusion.
- Don't run when
brief.mdis missing. Stop and instruct the user. - Don't update the anchor on re-runs. Ever. The whole point is to track progress against a fixed starting line.
- Don't bundle the probability with a buy/sell recommendation. This is a probability analysis, not investment advice.
先判断是否适合
作者设计意图
作者的方法与取舍
边界和复核