Primary question: Does your team need an LLM-orchestrated finance agent that can generate, backtest, and route trading signals across multiple markets from one CLI or REST surface?
RepoDaily adoption score
RepoDaily rates this as 91/100 (strong) for adoption: evidence, installation path, production risk, differentiation, license clarity, and AI/agent fit are scored from the article sources and adoption notes.
5 source(s) across 3 source category/categories, plus a RepoDaily-specific evidence module when available.
6 workflow step(s), 5 next-action step(s), and 8 command/install signal(s) were detected.
Trending momentum is +682 stars, with maintenance/release/issue signals counted when present.
Risk is marked medium, with 6 security note(s) and 4 explicit skip condition(s).
3 opportunity lens item(s), 4 alternative(s), and 4 type-specific section(s) support differentiation.
License source or license wording is present.
6 AI/agent-related signal(s) were detected in the article text and metadata.
Project overview
Vibe-Trading (package name vibe-trading-ai, version 0.1.10, MIT license) is a Python ≥3.11 natural-language finance research agent from HKUDS. The project bundles a LangChain/LangGraph agent loop, a backtesting engine, 452 pre-built quant alphas ported from four established alpha zoos, a FastAPI server on port 8899, and a multi-stage Dockerfile with a Node.js-compiled frontend. It is not a thin wrapper — the CHANGELOG documents a 3216-LOC CLI refactor into the agent/cli/ package, 36 MCP tools, swarm orchestration with DAG-based task dependency management, and connector profiles for Interactive Brokers and Robinhood.
The project's core premise is that a user can describe a trading or research goal in natural language and the agent will decompose it into a pipeline: fetch OHLCV data from one of five market-data loaders (yfinance, tushare, akshare, mootdx/BaoStock TCP, or CCXT for crypto), generate or select a signal engine, backtest it with a mandatory random control in strict alpha-bench mode, and optionally route the result to a broker connector or a messaging channel. The Research Goal runtime added in v0.1.9 formalizes this as long-running, auditable checklists with budget tracking and evidence collection.
From an infrastructure standpoint, Vibe-Trading runs as a single container with named Docker volumes for runs, sessions, swarm state, and user-level configuration (persistent memory, sessions.db, shadow accounts, hypothesis registry, broker connector config). The Dockerfile runs as a non-root user named vibe, exposes a health check at /health, and compiles a WeasyPrint-capable environment for PDF report generation. docker-compose.yml binds port 8899 to 127.0.0.1 by default and configures Ollama access via host.docker.internal for local LLM inference.
Why it is trending now
- 682 period stars on 2026-07-02 at trending rank 8, driven by the v0.1.9 release that added connector-first broker profiles, Research Goal runtime, and swarm retry_run — 36 MCP tools total
- 452 pre-built quant alphas across four zoos (qlib158 with 154 alphas ported from Microsoft Qlib Alpha158 under Apache-2.0, alpha101 with 101 alphas, plus two more), with lookahead enforcement at the operator level
- Connector profiles for IBKR (local read-only TWS/IB Gateway) and Robinhood (bounded OAuth-gated connector with order guard, audit ledger, and instant halt switch) give the agent a real execution surface
- Multi-channel deployment is first-class: 15+ optional channel extras cover Telegram, Discord, Slack, DingTalk, Feishu, Matrix, WeCom, WeChat, WhatsApp, MS Teams, QQ, and MoChat
- CVE-2026-28277 patch by bumping langgraph demonstrates active maintenance responsiveness on the security front
Problem it solves
- Most AI trading prototypes stop at 'generate a signal' — they lack backtesting rigor, broker connectivity, and the operational plumbing (audit logs, halt switches, session persistence) needed for anything beyond a demo
- Quant researchers spend significant time wiring data loaders, factor libraries, and backtest harnesses together; Vibe-Trading ships a registry that AST-extracts metadata from each alpha module without importing it, rejecting ±inf and >95% NaN outputs
- LLM-generated signal engines are error-prone; v0.1.9 added pre-flight validation with clean JSON errors and strict alpha-bench mode with a mandatory random control to catch spurious alpha
- Cross-market analysis is tedious — crypto-vs-equity pairs have mismatched timestamps; v0.1.9 normalizes timestamps for correlation, and the mootdx loader adds native TDX TCP access for A-shares without requiring a token
How it works
- Install via pip (vibe-trading-ai on PyPI, Python ≥3.11) or run the multi-stage Dockerfile, which compiles a Node.js frontend and installs Python deps including WeasyPrint native libs (Pango, HarfBuzz, Cairo) for PDF report rendering
- Configure market data: the fallback chain covers yfinance, tushare, akshare, mootdx (native TDX TCP, no token), and CCXT (with proxy env support for restricted networks, fix #126)
- Select a connector profile via `vibe-trading connector list/use/check` — IBKR starts as a local read-only TWS/IB Gateway profile; the official IBKR remote MCP path is seeded as an OAuth mcp.read probe; Robinhood Agentic Trading operates behind OAuth with a committed mandate, order guard, audit ledger, and instant halt switch
- Define a Research Goal via the /goal CLI command or REST/MCP endpoints (start_research_goal, get_research_goal, add_goal_evidence, update_research_goal_status) with auditable checklist criteria and budgets
- Run swarm orchestration: the agent decomposes tasks into a DAG, blocks downstream tasks when upstream fails (#145), sends MCP progress heartbeats, and supports retry_run via POST /swarm/runs/{id}/retry or the MCP retry_run tool
- Generate reports: WeasyPrint renders PDF exports from HTML/CSS/Jinja2 templates in shadow_account/templates/; the Full Report link renders whenever a runId exists (#150)
Docker Deployment and Runtime Configuration
The Dockerfile uses a two-stage build: Stage 1 compiles the frontend with node:20-slim (npm ci --ignore-scripts, then npm run build); Stage 2 uses python:3.11-slim and installs build-essential plus WeasyPrint runtime libraries (libpango, libharfbuzz, libfontconfig, libcairo, libgdk-pixbuf, fonts-dejavu-core). Without these libraries, the lazy `from weasyprint import HTML` in reporter.py fails and PDF rendering silently downgrades to HTML-only.
The runtime runs as a non-root user named vibe (created via useradd with /usr/sbin/nologin shell). Named Docker volumes persist five directories: agent/runs, agent/sessions, agent/.swarm/runs, agent/uploads, and /home/vibe/.vibe-trading (persistent memory, sessions.db cross-session search index, user-created skills, shadow accounts, hypothesis registry, broker connector config, agent.json). docker-compose.yml comment references issue #197: without the vibe-home volume, a rebuild/recreate wipes all user-level state.
docker-compose.yml binds the API server to 127.0.0.1:8899 (not 0.0.0.0) and sets VIBE_TRADING_TRUST_DOCKER_LOOPBACK=1. Ollama access defaults to http://host.docker.internal:11434 via extra_hosts mapping (requires Docker Engine ≥20.10). The health check hits http://localhost:8899/health every 30s with a 5s timeout and 3 retries. The frontend dev server (optional profile) runs on 127.0.0.1:5899.
Broker Connectors, Market Data Loaders, and MCP Tooling
- Broker connectors: IBKR (local read-only TWS/IB Gateway immediately usable; remote IBKR MCP seeded as OAuth mcp.read probe until stable read tool names ship) and Robinhood (OAuth, committed mandate, order guard, audit ledger, instant halt switch)
- Market data fallback chain: yfinance → tushare → akshare → mootdx (native TDX TCP, no token) → CCXT (crypto, reads proxy env per #126); optional baostock extra for BaoStock TCP bypassing eastmoney CDN IP blocks
- 36 MCP tools as of v0.1.9, including trading_* tools bound to the selected connector profile, start_research_goal / get_research_goal / add_goal_evidence / update_research_goal_status, run_swarm with MCP progress heartbeats, and retry_run
- Operator-configured external MCP tools in swarm workers (#142) and remote MCP transports for the built-in agent allow extending the tool surface at deploy time
- Channel integrations (15+ optional extras): telegram, discord, slack, dingtalk, feishu, matrix (with E2E via matrix-nio), wecom, weixin, whatsapp (neonize), msteams, qq, napcat, mochat, plus a meta 'channels' extra bundling the most common ones
CLI Entry Points and Key Commands
- Two console_scripts: `vibe-trading` (cli:main) and `vibe-trading-mcp` (mcp_server:main)
- CLI refactored from a 3216-LOC single file into the agent/cli/ package with a refreshed interactive terminal UI (figlet banner + activity rail) and a single cli/_version.py version source
- Connector subcommands: `vibe-trading connector list/use/check/account/positions/orders/quote/history` — all share the selected profile, with paper/live as a property under the connector
- Research Goal: `/goal` CLI command plus REST + MCP endpoints for start/get/add_evidence/update_status
- Hypothesis Registry CLI: `list / show / invalidate` for managing research hypotheses
- SSE idle timeout is configurable via VIBE_TRADING_SSE_TIMEOUT environment variable (#157); --version derives from package metadata with pyproject.toml fallback, no hardcoded constant (#156)
Adoption Checklist: What to Verify Before Connecting a Live Broker
- Confirm Python ≥3.11 (classifiers list 3.11 and 3.12; Development Status is 4 - Beta)
- Verify the connector profile is set to paper mode before any live mandate; Robinhood live requires a committed mandate and the order guard is active
- Test the instant halt switch path before relying on it — the CHANGELOG describes it as a bounded connector safeguard
- Check that the vibe-home Docker volume is mounted if running in Docker; without it, issue #197 documents that broker connector config and agent.json are lost on rebuild
- Validate PDF report rendering by confirming WeasyPrint native libs are present (the Dockerfile installs them; bare-metal installs must do so manually) or reports silently fall back to HTML-only
- Review strict alpha-bench mode with mandatory random control (#143) — this is the project's primary defense against spurious alpha from LLM-generated signal engines
- If using Ollama for local inference, set OLLAMA_BASE_URL explicitly when Ollama is not on the host at port 11434
Who should pay attention?
Good fit if
- Quant researchers who want 452 pre-built alphas with lookahead enforcement and operator-level sanity checks (rejects ±inf and >95% NaN) without building their own factor framework
- Active traders running IBKR TWS or IB Gateway who want a local, read-only agent surface before committing to live execution
- Teams building multi-market research pipelines (A-shares via mootdx/baostock, US equities via yfinance, crypto via CCXT) with timestamp-normalized cross-market correlation
- Developers who need MCP-compatible tooling — the 36 MCP tools and operator-configured external MCP tools in swarm workers make Vibe-Trading composable with other MCP-aware agents
Skip for now if
- Traders who need ultra-low-latency execution (sub-millisecond order routing) — this is an LLM-orchestrated research agent, not a co-located execution engine
- Teams that require a stable, documented public API contract — the project is at 0.1.x with Development Status 4 - Beta, and the IBKR remote MCP path is explicitly seeded as an OAuth mcp.read probe until stable read tool names ship
- Organizations with strict compliance requirements that prohibit audit-ledger-based trade logging or that need SOC 2 / regulated custody integrations not present in the current connector set
- Anyone who needs a turnkey SaaS — Vibe-Trading is a self-hosted agent requiring LLM API keys or a local Ollama instance
Risks and cautions
The project ships meaningful operational guardrails (order guard, audit ledger, halt switch, paper/live profile separation) but is at version 0.1.x with a Beta development status and an IBKR remote MCP path explicitly marked as unstable.
- Version 0.1.10 with classifiers set to Development Status :: 4 - Beta — breaking changes are possible before 1.0
- IBKR remote MCP path is seeded as an OAuth mcp.read probe 'until stable read tool names ship' — the remote execution surface is not yet final
- LLM-generated signal engines require the strict alpha-bench mode with mandatory random control (#143) to be meaningful; without it, spurious alpha is a real risk
- Robinhood connector uses a 'committed mandate' model — once a live mandate is committed, the order guard and halt switch are the primary safeguards, and misconfiguration can result in real trades
- Session persistence uses JSONL files with flush + fsync writes that skip corrupted lines on read (#147) — data durability depends on the vibe-home Docker volume being correctly mounted
- CVE-2026-28277 patched by bumping langgraph (v0.1.9 changelog entry under Changed)
- Docker runtime runs as non-root user vibe with /usr/sbin/nologin shell; port bound to 127.0.0.1 by default in docker-compose.yml
- Robinhood connector: bounded behind OAuth, with a committed mandate, an order guard, an audit ledger, and an instant halt switch
- IBKR: starts as a local read-only TWS/IB Gateway profile; remote path is OAuth mcp.read probe only until stable read tools ship
- Pre-flight validation for LLM-generated signal engines with clean JSON errors (#149) prevents malformed engine definitions from reaching the backtester
- Health check endpoint at /health allows orchestrators to detect agent process failures
Alternatives to compare
| Approach | When to use | Trade-off |
|---|---|---|
Microsoft Qlib | When you need a mature, production-oriented quant research platform focused on alpha mining and model training rather than LLM-orchestrated natural-language interaction | Free, open-source (MIT) |
Freqtrade | When your focus is crypto-only strategy development with a mature backtesting and live trading loop, without the multi-market data loaders or alpha zoo | Free, open-source (GPL-3.0) |
NautilusTrader | When you need a high-performance, event-driven algorithmic trading platform with institutional-grade execution and no LLM orchestration layer | Free, open-source (LGPL-3.0) |
OpenBB Terminal | When you want a comprehensive financial data terminal for analysis across asset classes without the agent loop or broker execution surface | Free, open-source (AGPL-3.0); OpenBB Pro is commercial |
What this trend reveals
Build a Custom Alpha Factor on the Registry
The agent/src/factors/ registry AST-extracts metadata from each alpha module without importing it, enforces lookahead at the operator level (delta(d>=1)), and rejects ±inf and >95% NaN outputs. A developer can add a custom factor YAML/Python module and have it auto-registered, backtested against the 452-alpha zoo, and validated via strict alpha-bench mode with a mandatory random control.
Clone the repo, place a factor module under agent/src/factors/zoo/, run `vibe-trading` CLI to confirm the registry discovers it, and backtest with alpha-bench mode enabled to verify the random control rejects spurious results.
Create a Channel Bot for Trade Alerts
With 15+ optional channel extras (telegram, discord, slack, feishu, matrix with E2E, whatsapp via neonize, and more), a team can wire the agent's Research Goal completion or swarm task results to a messaging channel. The Research Goal runtime emits evidence updates via add_goal_evidence, which can be forwarded to a channel bot.
Install the telegram extra (python-telegram-bot>=21.0), configure a bot token in agent/.env, define a Research Goal with checklist criteria, and verify that goal status changes produce channel messages.
Extend Swarm Workers with External MCP Tools
v0.1.9 added operator-configured external MCP tools in swarm workers (#142) and remote MCP transports for the built-in agent. This means a team can expose internal tools (custom data APIs, risk calculators, compliance checks) as MCP endpoints and have swarm tasks call them during multi-step research pipelines.
Define an MCP server endpoint, configure it as an operator-provided external tool in the swarm worker config, trigger a swarm run via POST /swarm/runs, and confirm the worker invokes the external tool during task execution.
RepoDaily verdict
Vibe-Trading is one of the most complete open-source LLM-driven finance agents available: 452 pre-built alphas with lookahead enforcement, 36 MCP tools, swarm orchestration with DAG dependencies, broker connectors with operational guardrails, and a production-grade Docker deployment. The main caveats are its 0.1.x version, the explicitly unstable IBKR remote MCP path, and the fact that LLM-generated signal engines require strict alpha-bench mode to be trustworthy. For quant researchers and technically capable traders who want a self-hosted alternative to SaaS trading agents, it is worth a serious evaluation in paper mode before any live mandate.