v0.1.8
HKUDS/Vibe-Tradingv0.1.8May 17, 2026by warren618
AI Summary
A major content release launching the Alpha Zoo v1 with 452 pre-built alphas across four libraries, along with MCP client integration and a public wiki.
Key Highlights
- Alpha Zoo v1 containing 452 pre-built quantitative alphas.
- One-line CLI for alpha listing, showing, and benchmarking.
- Web UI at /alpha-zoo with SSE-streamed progress.
- Agent integration via AlphaZooTool and AlphaBenchTool.
- Safety floor with AST purity and lookahead sentinel tests.
New Features
- Alpha Zoo: qlib158, alpha101, gtja191, and academic zoos.
- CLI tools: alpha list, show, bench, compare, export-manifest.
- Web UI: Browse, Detail, and Bench views.
- Agent tools: AlphaZooTool and AlphaBenchTool.
- MCP client integration (stdio v1).
- Trust Layer run card in Web UI.
- Hypothesis Registry MVP backend.
Full Release Notes
## ๐งฌ v0.1.8 โ Alpha Zoo v1 + research workflow polish
`v0.1.8` is a major content release for Vibe-Trading. The headline is the **Alpha Zoo**: 452 pre-built quantitative alphas across four bundled libraries โ `qlib158`, `alpha101`, `gtja191`, and `academic` โ with a one-line CLI to bench any zoo on your universe, agent integration via two new tools, four new REST routes with SSE-streamed progress, and a browse/detail/bench Web UI at `/alpha-zoo`. The release also lands the long-running MCP client integration, a Trust Layer run card in the Web UI, the public wiki launch at [vibetrading.wiki](https://vibetrading.wiki/), the Hypothesis Registry MVP, and a substantial security + hardening pass driven by community PRs.
This release is available on **PyPI**, **ClawHub**, and GitHub Releases.
```bash
pip install -U vibe-trading-ai
# or
uv tool install --reinstall vibe-trading-ai
```
## Highlights
### ๐งฌ Alpha Zoo โ 452 pre-built quant alphas across 4 zoos
Cross-sectional formulaic alphas with metadata, lookahead-banned at the operator layer, registry-validated, and reachable from CLI, agent, REST API, and Web UI:
- **qlib158** โ 154 alphas. Apache-2.0 port of Microsoft Qlib's `Alpha158` feature handler, with the upstream commit SHA pinned in every adapted module's header and the upstream NOTICE bundled.
- **alpha101** โ 101 alphas. Implementation of Kakushadze (2015) "101 Formulaic Alphas" (arXiv:1601.00991), written from the paper appendix. 19 industry-neutral alphas flag `requires_sector=True` and skip cleanly on universes without sector tags.
- **gtja191** โ 191 alphas. Implementation of Guotai Junan Securities' 2014 *"191 Short-period Trading Alpha Factors"* research report. Operator-mapping decisions (SMA / WMA / REGBETA / HIGHDAY interpretations) documented per alpha.
- **academic** โ 6 factors. Fama-French 5 + Carhart momentum, shipped as honest **price-based proxies** (the canonical FF series need book-to-market / profitability / investment growth fundamentals we don't bundle). The nicknames carry a `[PRICE PROXY]` prefix; Kenneth French's data library is referenced for users who need the canonical monthly returns.
Each alpha carries a `__alpha_meta__` dict (formula LaTeX, theme, universe, columns_required, warmup, decay horizon, notes) validated by a pydantic `extra="forbid"` schema.
### ๐ฅ๏ธ One-line CLI
```bash
vibe-trading alpha list --zoo gtja191 --theme momentum --limit 10
vibe-trading alpha show gtja191_171
vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025 --top 20
vibe-trading alpha compare --all
vibe-trading alpha export-manifest --out wiki/alpha-library/manifest.json
```
`bench` drives a Rich progress bar with live alpha-id + ETA banner, returns proper exit codes on failure, and silences scipy `ConstantInputWarning` noise. All five subcommands honour TTY hints and a `--json` mode for scripting.
### ๐ Web UI at `/alpha-zoo` + 4 REST routes with SSE
Three views in the React Web UI: **Browse** (4 zoo cards, filter bar, paginated table), **Detail** (formula, metadata, source code), **Bench** (form โ SSE-streamed progress โ Alive/Reversed/Dead stat cards + Top-5-by-IR + Most-Reversed tables + by-theme bar chart). Auto-Vite route at `/alpha-zoo`, nav entry in the Layout.
```
GET /alpha/list?zoo=&theme=&universe=&limit=
GET /alpha/{alpha_id}
POST /alpha/bench (body: {zoo, universe, period, top}) โ 202 + job_id
GET /alpha/bench/{job_id}/stream (SSE: progress / result / done / error)
```
Background bench jobs run via `asyncio.to_thread` with a 2-concurrent-job semaphore (429 on saturation), in-memory state with 1-hour TTL, 15-second heartbeat comment frames to keep proxies from closing idle streams, and sanitised error messages so unexpected exceptions don't leak server-side paths.
### ๐ค Agent integration
Two new auto-discovered tools (`AlphaZooTool`, `AlphaBenchTool`) plus a panel-style `ZooSignalEngine.from_zoo(...)` factory in the multi-factor skill that composes one or more alphas into a long-short signal compatible with the existing backtest engines. The legacy per-symbol `example_signal_engine.py` is preserved for backward compatibility.
### ๐ก๏ธ Safety floor
Quality gates that fire on every PR and `vibe-trading alpha bench` run:
- **AST purity gate** (`test_alpha_purity.py`) โ scans every `zoo/**/*.py` module, allows only `pandas`, `numpy`, `scipy.*`, `src.factors.base`, `__future__`, `typing`, `math`, `dataclasses` imports; bans `os` / `sys` / `subprocess` / `socket` / `urllib` / `requests` / `httpx` / `pathlib` / `Path` / `open` / `eval` / `exec` / `compile` / `__import__` plus `breakpoint` / `input` / `globals` / `locals` / `vars` / `__class__` / `__subclasses__` / `__mro__` / `__globals__` / `__builtins__`, plus dunder-string `getattr` access (including BinOp-concatenated dunders).
- **Lookahead sentinel test** (`test_lookahead.py`) โ 300-row synthetic panel; corrupt rows past the probe; assert factor at probe unchanged within 1e-9.
- **`pytest-socket` integration** โ factors test suite runs network-disabled.
- **CI grep gates** (`tools/ci_grep_gates.sh`) โ rejects `yaml.load(` without `safe_load`, the trademarked-name string in shipped artifacts, and any per-stock-code data leak in `wiki/**/*.{json,csv,html}`.
### ๐ก MCP client integration (stdio v1)
The agent can now load tools from external MCP servers via `~/.vibe-trading/agent.json`, opt-in per session via `ALLOW_SESSION_MCP_SERVERS=1`. Stdio transport only in v1; HTTP/SSE deferred. Tool-name collisions get a deterministic hash suffix; remote-tool failures normalise to error payloads instead of bubbling. Big thank-you to **@shadowinlife** (#83) for the end-to-end implementation and the security-conscious defaults.
### ๐ชช Trust Layer run card in Web UI
The run detail page now renders `run_card.json` alongside metrics and artifacts, completing the UI half of the trust-layer work that landed earlier.
### ๐ง Hypothesis Registry (backend MVP)
`create_hypothesis` / `update_hypothesis` / `link_backtest` / `search_hypotheses` give research hypotheses a durable lifecycle, links to run cards, and invalidation notes. UI integration to follow.
### ๐ฌ Memory, swarm, and tooling hardening
A focused PR cycle from **@Teerapat-Vatpitak** strengthened the lower-level surfaces this release leans on:
- `PersistentMemory.add()` hardened against length overflow, empty / whitespace-only names, and C0/C1 control bytes (#112)
- Swarm error surfacing + output contract, Windows-safe store, path redaction (#119)
- MCP unresolved-symbol, finite options validation, row cap (#120)
- Bounded CCXT + OKX fetch with timeout / retry / budget (#121)
- `read_url` Jina dependency disclosure + cache opt-out (#122)
- API path-ID validation for run/session routes (#80, via **@SJoon99**)
Plus **@hp083625** taught memory recall to treat underscores as token boundaries (#87) so `mcp_wiring_test` matches "mcp wiring", **@voidborne-d** kept the Vite dev proxy honoring `VITE_API_URL` and fixed CJK slug preservation (#82, #95), and **@ykykj** added the CLI startup preflight (#96).
### ๐ Public wiki at `vibetrading.wiki`
The wiki ships its own Alpha Library renderer (`wiki/scripts/build_alpha_library.py`) that reads the manifest JSON and emits 452 per-alpha pages + 4 per-zoo overview pages, each with `script-src 'none'` CSP. The research-lab gains its first long-form post: ["Which of the 191 GTJA alphas still work in 2026?"](https://vibetrading.wiki/research-lab/posts/alpha-191-in-2026.html) โ aggregate IC, theme survival rates, and the top alphas that survive eight years of out-of-sample data on CSI 300 (2018-2025), with a survivorship-bias caveat.
## Install / upgrade
| Channel | Command |
|---|---|
| **PyPI** | `pip install -U vibe-trading-ai` |
| **uv tool** | `uv tool install --reinstall vibe-trading-ai` |
| **ClawHub** (Claude Desktop / OpenClaw / MCP clients) | `clawhub install vibe-trading` or update the installed skill |
| **Docker** | `docker compose pull && docker compose up -d` |
Remote API/Web deployments should set `API_AUTH_KEY` and explicit trusted CORS origins. Local CLI and localhost Web UI workflows remain low-friction.
## By the numbers
- 66 non-merge commits since `v0.1.6`'s successor branch (since `v0.1.7`)
- **452 pre-built quant alphas** across 4 zoos
- 75 bundled finance skills (+ the `alpha-zoo` skill folder)
- **31 default agent tools** (was 29; +`alpha_zoo_tool`, +`alpha_bench_tool`)
- 29 swarm presets
- 6 data sources with auto-fallback: tushare, yfinance, okx, akshare, ccxt, futu
- 7 backtest engines + composite cross-market engine + options portfolio
- 22 MCP tools (alpha tools to be MCP-wrapped in `0.1.9`)
- **969 tests passing** + 1 documented skip (`alpha101_096` NaN-cascade on synthetic panel)
## ๐ Credits
This release stands on the shoulders of giants. Heavy emphasis because the Alpha Zoo borrows mathematical content from decades of public research.
### Code contributors this cycle
- **@warren618** / Haozhe Wu โ Alpha Zoo framework + 4 zoos, CLI, Web UI, REST + SSE API, bench runner, safety floor, wiki + research-lab post, multi-language READMEs, integration, release.
- **@shadowinlife** โ MCP client integration (stdio, v1) (#83)
- **@Teerapat-Vatpitak** โ `PersistentMemory.add()` hardening (#112), swarm error surfacing + Windows-safe store + redaction (#119), MCP unresolved-symbol + options validation (#120), bounded CCXT + OKX fetch (#121), `read_url` Jina disclosure (#122)
- **@SJoon99** โ API path-ID validation hardening (#80)
- **@hp083625** โ memory recall underscore tokenization (#87)
- **@voidborne-d** โ CJK slug preservation in memory (#95), Vite dev proxy `VITE_API_URL` (#82)
- **@ykykj** โ CLI startup preflight (#96)
- **@mrbob-git** โ Tushare statement-field filtering (#76, #77)
- **@Teerapat-Vatpitak** (also) โ `extend tokenizer + slug regex to Thai/Arabic/Hebrew/Cyrillic` (#104)
### Open-source software cited / bundled
- **Microsoft Qlib team** ([microsoft/qlib](https://github.com/microsoft/qlib)) โ the `qlib158` zoo is an Apache-2.0 port of the `Alpha158` feature handler. Commit-pinned in every adapted module's header; upstream NOTICE bundled at `agent/src/factors/zoo/qlib158/NOTICE`.
- **Menooker / KunQuant** ([Menooker/KunQuant](https://github.com/Menooker/KunQuant)) โ Apache-2.0 reference implementations of the 101 formulaic alphas, used **only for numerical cross-validation** on a sample of alphas at the ยฑ1% level. No code was copied; we wrote from the paper appendix and compared outputs.
- **Kenneth R. French Data Library** ([mba.tuck.dartmouth.edu/.../ken.french/data_library.html](https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html)) โ the canonical Fama-French monthly returns; users who need the real series should pull from there. Our `academic` zoo ships honest price-based proxies, not the real series.
### Academic / research sources cited
- **Zura Kakushadze (2015)** โ *"101 Formulaic Alphas"*, arXiv:[1601.00991](https://arxiv.org/abs/1601.00991). Implemented in the `alpha101` zoo. Display name throughout the codebase is "Kakushadze 101 Formulaic Alphas"; the trademarked alternative is intentionally absent (CI gate enforced).
- **ๅฝๆณฐๅๅฎ่ฏๅธ (Guotai Junan Securities), 2014** โ *"191 ไธช็ญๅจๆไบคๆๅ alpha ๅ ๅญ"* research report. Implemented in the `gtja191` zoo.
- **William F. Sharpe (1964)** โ *"Capital Asset Prices: A Theory of Market Equilibrium under Conditions of Risk"*. Market factor baseline.
- **Eugene F. Fama & Kenneth R. French (1993)** โ *"Common Risk Factors in the Returns on Stocks and Bonds"*. SMB, HML baselines.
- **Eugene F. Fama & Kenneth R. French (2015)** โ *"A Five-Factor Asset Pricing Model"*. RMW, CMA baselines.
- **Mark M. Carhart (1997)** โ *"On Persistence in Mutual Fund Performance"*. Carhart momentum baseline.
- **Kewei Hou, Chen Xue, Lu Zhang (2015)** โ *"Digesting Anomalies: An Investment Approach"*. Q-factor framing.
The bundled formulas are reproduced as **mathematical content** (formulas are not subject to copyright); paper prose, tables, and figures are **not** reproduced in this repository. Each zoo has its own `LICENSE.md` documenting this stance.
### Lab + community
- **HKUDS** (HKU Data Intelligence Lab) โ research direction, infrastructure, and the broader Vibe-Trading platform this builds on.
- Everyone who filed issues, reviewed PRs, and stress-tested the framework in the pre-release cycle. Community PRs from the v0.1.7 cycle whose hardening still underpins the safer defaults this release ships against: **lemi9090 (S2W)** for the coordinated security validation.
## Caveats / Known limitations
- **`btc-usdt` universe is single-asset.** Cross-sectional IC needs โฅ2 instruments, so `alpha101_btc` returns alive/reversed/dead = 0/0/0 by construction. A curated `crypto-majors` multi-symbol basket is planned for 0.2.
- **SP500 universe uses today's constituent list** as a proxy for point-in-time index membership, introducing survivorship bias. Documented in `bench_summary.json["meta"]` and in the wiki blog caveat section. Point-in-time constituent source is a 0.2 follow-up.
- **MCP server does not yet expose `alpha_zoo` / `alpha_bench` tools.** The Python agent layer, REST API, CLI, and Web UI all expose them; MCP wrap-up planned for 0.1.9.
- **19 industry-neutral alpha101 alphas** (#48, 56, 58, 59, 63, 67, 69, 70, 76, 79, 80, 82, 87, 89, 90, 91, 93, 97, 100) need a sector tag. Tushare provides this; yfinance does not, so SP500 benches skip these 19. Cross-zoo SP500 follow-up will plug a sector data source.
- **`docs/` is gitignored, internal planning only.** Do not push contents of `docs/` to public branches.
## Changelog
**Full changes**: https://github.com/HKUDS/Vibe-Trading/compare/v0.1.7...v0.1.8
<details>
<summary><b>Notable commits since v0.1.7</b> (66 non-merge)</summary>
- `5237ce3` chore: move tweet draft out of public wiki โ Haozhe Wu
- `78bc1e5` chore(0.1.8): version, CHANGELOG, packaging, News across 5 READMEs, SKILL.md โ Haozhe Wu
- `7912b77` feat(wiki): Alpha Library auto-render + Alpha 191 in 2026 blog โ Haozhe Wu
- `9854035` feat(alpha-zoo): bench runner + CLI + Web UI + 4 REST routes โ Haozhe Wu
- `81e2a53` feat(factors): port 452 alphas across 4 zoos โ Haozhe Wu
- `7d678aa` feat(factors): Alpha Zoo framework โ registry, operators, safety gates โ Haozhe Wu
- `8d3ae19` refactor(loaders): extract bounded retry/budget pattern into base.py โ Haozhe Wu
- `0a254c0` fix(swarm): surface errors, output contract, Windows-safe store, redact paths (#119) โ Teerapat-Vatpitak
- `cdf343d` fix(mcp): unresolved symbols, finite options validation, row cap (#120) โ Teerapat-Vatpitak
- `e155087` fix(loaders): bound ccxt + okx fetch (timeout, retry, budget) (#121) โ Teerapat-Vatpitak
- `199f77a` feat: add security scanner and hypothesis registry โ Haozhe Wu
- `1b547d2` fix(tools): disclose read_url Jina dependency + cache opt-out (#122) โ Teerapat-Vatpitak
- `d20b590` fix(loop): populate reason field on AgentLoop cancelled / max-iter exits (#116) โ Haozhe Wu
- `f1c7a50` feat(swarm): universal data-citation discipline in worker prompt (#115) โ Haozhe Wu
- `2c70ef5` feat(agent): add MCP client integration (stdio, v1) (#83) โ shadowinlife
- `14b160e` feat(run-card): surface trust layer card in web UI โ Haozhe Wu
- `379fb0c` feat(memory): harden PersistentMemory.add() for control bytes, length, empty names (#112) โ Teerapat-Vatpitak
- `4e72ca1` ci: deploy wiki to Cloudflare Pages โ Haozhe Wu
- `f85f3b8` fix(memory): extend tokenizer + slug regex to Thai/Arabic/Hebrew/Cyrillic (#104) โ Teerapat-Vatpitak
- `892cd16` feat(cli): add memory introspection commands โ Haozhe Wu
- ... and 46 more โ see the compare link above for the full list.
</details>
## Validation before publishing
- **Tests**: `969 passed, 1 skipped` (`pytest agent/tests/factors/`); `pytest-socket` enabled.
- **CI grep gates** (`tools/ci_grep_gates.sh`): all 3 pass โ no `yaml.load(` misuse, no trademarked-name leak, no per-stock-code data in `wiki/**`.
- **AST purity gate** clean across all 452 alpha modules.
- **Lookahead sentinel test** clean on all 452 alphas (1 documented skip for NaN-cascade on synthetic panel; not a real lookahead violation).
- **Wheel sanity**: `dist/vibe_trading_ai-0.1.8-py3-none-any.whl` (1.7 MB) contains 452 alpha `.py` files, 4 per-zoo `LICENSE.md`, the upstream Qlib `NOTICE`, all framework modules (`base`, `registry`, `bench_runner`, `factor_analysis_core`, `cli_handlers`), both new tools, the `alpha_routes` API module, and all CLI / API entry points. No critical files missing.
- **Frontend**: `npx tsc --noEmit` clean.
- **Multi-language READMEs**: English / ไธญๆ / ๆฅๆฌ่ช / ํ๊ตญ์ด / ุงูุนุฑุจูุฉ all updated with consistent 0.1.8 numbers, route table, and Alpha Zoo capability section.
- **PyPI** `vibe-trading-ai==0.1.8` published.
- **ClawHub** `vibe-trading@0.1.8` published (`k9709z89sf9j7rzyhz3c96r4p986xf68`).