🔓 unclaimed — this page was auto-generated from GitHub. Are you the creator?
Claim this page →
Vibe-Trading
"Vibe-Trading: Your Personal Trading Agent"
git clone https://github.com/HKUDS/Vibe-Trading
English | 中文 | 日本語 | 한국어 | العربية
Vibe-Trading: Your Personal Trading Agent
One Command to Empower Your Agent with Comprehensive Trading Capabilities
Website · Docs · News · Features · Shadow Account · Demo · Quick Start · Examples · API / MCP · Roadmap · Contributing
📰 News
- 2026-06-23 🛡️ Local API CSRF hardening: a malicious web page can no longer drive unsafe cross-site requests (POST/PUT/DELETE) against the loopback API — CORS blocks reading the response but not the side effect, so loopback dev-mode trust now applies the existing cross-site guard to unsafe methods before honoring it. Safe methods and local CLI / non-browser uploads are unaffected (#293, thanks @Hinotoi-agent).
- 2026-06-22 🔧 Live-authorize OAuth fix + Alpha Zoo headline fix:
connector authorizenow holds the OAuth handshake open through a multi-minute broker sign-in (tunable viaVIBE_LIVE_AUTHORIZE_TIMEOUT_SECONDS) and no longer spawns a competing callback server on retry, so the token actually persists (#281, closes #259, thanks @Robin1987China). The Alpha Zoo page no longer prints its alpha count twice (#287, closes #286, thanks @digger-yu). Scheduled research also picked up end-to-end usage docs (#288). - 2026-06-21 ⏰ Scheduled-research executor + Reports library + post-backtest attribution: scheduled research now runs end to end — a default-off background executor (
VIBE_TRADING_ENABLE_SCHEDULER) fires due interval/cron jobs through the session runtime (#278, thanks @mvanhorn, closing #254). A new/reportsRun Library page lists, searches, and filters report-worthy runs with links into Run Detail + Compare (#224, thanks @LemonCANDY42). And after every backtest the agent now runs layered attribution — trade-level winners/losers, beta regression, market-regime analysis, and a Monte Carlo permutation test, gated by data availability and routing (#280, thanks @shadowinlife).
Earlier news
-
2026-06-20 🔬 Research Autopilot loop closes (Phase 3) + loader OHLC integrity guard + 4 academic alphas: Research Autopilot now runs hypothesis → signal-engine → backtest end to end —
scaffold_signal_enginewrites a contract-correct engine andlink_autopilot_backtestfeeds run metrics back to the hypothesis (68 tools) (#267). A structural OHLC sanity check drops dirty bars (high < low, non-positive prices, bad bracketing) centrally at the loader boundary, guarding every data source (#274, thanks @Shizoqua). And the academic alpha family grows 6 → 10 — Jegadeesh reversal, George-Hwang 52-week-high, Amihud illiquidity, Harvey-Siddique skew (456 factors) (#277, thanks @Robin1987China). -
2026-06-19 🚀 v0.1.10 — Global data layer: market-data sources grow 10 → 18 (free Eastmoney / Sina / Stooq / Yahoo + key-gated Finnhub / Alpha Vantage / Tiingo / FMP, ban-risk fallback) plus 18 read-only data tools (fund flow, dragon-tiger, northbound, margin, block trades, SEC EDGAR + XBRL, financials, options chains, full-market screening…) across A-share / US / HK, all over MCP. Also bundles everything since 0.1.9 — 10 broker connectors,
alpha compare, the provider-reliability overhaul, and the opt-in data cache.pip install -U vibe-trading-ai -
2026-06-18 🔬 Research Autopilot Phase 1 + a local Data Bridge loader, + a Discord security notice: new
run_research_autopilot+generate_backtest_configwire Hypothesis → Research Goal → backtest end to end (now 50 tools), and alocalloader reads OHLCV straight from your own CSV / Parquet / DuckDB files (#260, #252, thanks @Robin1987China), alongside DeepSeekDSMLtool-call parsing and an identifier-containment hardening wave. ⚠️ Security: the old community Discord invite now points to a server we don't control running a fake Collab.Land wallet-"verification" phishing scam — removed everywhere; the only official Discord is the HKUDS server (discord.gg/6TdQnT5xcF), and we'll never ask you to connect a wallet. -
2026-06-17 🧩 Install compatibility + Opus/Kimi provider fixes: Baseline
pip install vibe-trading-aino longer pulls the optionalpyharmonics/tadependency chain; harmonic detection now lives behindvibe-trading-ai[harmonic]while the bundled detector remains available (#250, closes #249). The agent loop also avoids assistant-prefill handoff messages rejected by Opus 4.8+, and Kimi/Moonshot can override the clientUser-AgentwithMOONSHOT_USER_AGENT(#248, closes #246 and #204); follow-up tests now directly cover background-result and auto-compact handoff paths (#251). -
2026-06-16 🛡️ Security/API hardening + GLM/Zhipu alias: Settings writes require auth when configured (#245); API shell-capable tools require explicit
VIBE_TRADING_ENABLE_SHELL_TOOLS=1opt-in (#243); local shutdown requires auth when an API key is configured (#241); and untrusted loopback-looking hosts are rejected instead of treated as local (#242). Runtime edges also got cleaned up: Web chat syncs completed attempts (#236), run cards emit strict JSON for non-finite metrics (#238), malformedRSSHUB_TIMEOUT_S/RSSHUB_FETCH_BUDGET_Sfalls back safely (#240), and ddgs retry fallback is regression-covered (#239). GLM/Zhipu is now a first-class provider alias with model-name inference (#247, closes #237). -
2026-06-15 🧭 Web-search resilience + Web UI run-continuity fixes:
web_searchno longer fails when a single engine is rate-limited — it now queries several free, no-key engines in order (DuckDuckGo, Google, Bing, Brave, Mojeek, Yahoo) with retry/backoff, treats "no results" as an empty answer rather than an error, and returns an actionable message instead of a bare ❌ when every engine is throttled (override the engine list withVIBE_TRADING_SEARCH_BACKENDS) (#232, closes #231, thanks @Ethan-sun01). In the Web UI, switching pages during a run no longer freezes it — the chat re-subscribes to the live stream and replays missed progress on return (#234) — and the Stop button now takes effect mid-stream and between tools instead of only at iteration boundaries (#235), closing both halves of #229 (thanks @kalkinj). The baostock loader also accepts nativesh.601398/sz.000001codes alongside tushare-style601398.SH(#230, thanks @bhlt). -
2026-06-14 📊 Per-run token usage + progressive Run Detail charts: Every agent run now persists provider-reported token usage as a run-scoped
llm_usage.json— provider/model, aggregate totals, and per-iteration counts — surfaced additively on/runs/{id}, so a finished run's token cost stays auditable after the live stream is gone (provider-reported only; no prompt/content capture, no price estimation) (#223, thanks @LemonCANDY42). The Run Detail page no longer loads every symbol's candlesticks up front: the default/runs/{id}response is unchanged, but the UI now renders the run summary first and loads each symbol's chart on demand through opt-in?chart_payload=summary/?chart_symbol=modes, with per-symbol loading state and a load-all-with-progress control (#225, thanks @LemonCANDY42). Two loader fixes close the cycle: yfinance's exclusiveendboundary no longer drops the final requested trading day — the download now passesend + 1 daywhile cache keys keep the original range (#226, thanks @gyx09212214-prog) — and a malformedCCXT_TIMEOUT_MS/OKX_TIMEOUT_Svalue now warns and falls back to its default instead of raising at import and blocking startup (#227, thanks @gyx09212214-prog). -
2026-06-13 ↩️ Resume a past session by ID from the CLI: The interactive CLI now prints the session-id on exit, with a copy-paste
vibe-trading resume <session-id>hint — so locating the trace for a finished run no longer means guessing which folder underagent/sessions/is newest by timestamp. The newvibe-trading resume <session-id>subcommand reopens that exact session and replays its recent turns into the loop; an unknown id fails fast instead of silently starting a blank session (#218, thanks @zwrong). -
2026-06-12 🩺 Provider reliability overhaul — DeepSeek hangs, Kimi access, streaming liveness: A cluster of provider reports — DeepSeek runs stuck on "Agent is working…" (#208, thanks @XYWOX),
reached max iterationsmasking empty model responses (#203, thanks @mojianliang), the UI never recovering after a stall (#195, thanks @mafia23), and Kimi rejecting the client (#204, thanks @liao497) — shared one root: every OpenAI-compatible provider ran through a single shim that applied DeepSeek/Kimi/Gemini quirks globally and silently swallowed stream failures. Provider-specific behavior now lives in an explicit capability layer — reasoning capture/replay, Gemini thought signatures, the KimiUser-Agent, OpenRouter's reasoning body are each gated to their own provider instead of cross-contaminating. Reasoning-only streams show a live "Reasoning…" indicator instead of dead air; a stream failure raises a contextualprovider_stream_errorwith one automatic retry for transient resets (deterministic 4xx fail fast) instead of silently falling back to a slow non-streaming call; an empty model response is reported asempty_model_responseinstead of "max iterations"; SSE heartbeats no longer break reconnect replay; and a stuck read-only tool times out instead of hiding behind heartbeats forever. A newvibe-trading provider doctorprints a redacted provider/model/package/proxy snapshot for one-command triage of environment-side hangs. DeepSeek users can opt into the official native adapter withpip install "vibe-trading-ai[deepseek]", and kimi-k2.x'stemperature=1requirement is applied automatically — the Kimi path is verified end-to-end against the live API (tool calls + strict multi-turn reasoning replay onkimi-k2.6). -
2026-06-11 🐝 Swarm workers now pull market data through the loader layer: An investment-committee run on NVDA exposed a chain of gaps — workers wrote ad-hoc yfinance scripts, trusted a malformed latest bar (volume present, OHLC empty), leaked
NaNinto non-strict JSON, and a context-free continuation prompt re-routed to the wrong preset (#198, thanks @BillDin for an exceptional diagnosis plus both fixes). Swarm workers now get a localget_market_datatool backed by the same normalized loader registry as MCP — strict JSON, non-finite floats serialize asnull— wired into every market-data preset (21 workers across 13 presets) with a prompt policy that steers OHLCV work tool-first (#199);run_swarmtakes an explicitpreset_nameand refuses ambiguous continuation fragments instead of silently falling back toequity_research_team(#200). Grounding got smarter too: a bare US ticker likeNVDAin a swarm prompt is promoted toNVDA.US(stopword-guarded), so workers start from authoritative pre-fetched prices. The tool joins the main agent registry as well — 48 tools now. Also: your Docker data now survives updates — persistent memory, the session search index, user-created skills, shadow accounts and broker config live in named volumes, sodocker compose up --buildno longer wipes them (#197, thanks @FlyerJ). -
2026-06-10 🐳 Docker reaches a host-side Ollama out of the box: Inside the container
localhostis the container itself, so the shippedOLLAMA_BASE_URL=http://localhost:11434failed the LLM preflight for every Dockerized Ollama setup.docker-compose.ymlnow defaults tohttp://host.docker.internal:11434(exportOLLAMA_BASE_URLto point elsewhere) and adds thehost-gatewayextra_hostsmapping so the same file works on Linux as well as Docker Desktop (#196, thanks @ShahNewazKhan). -
2026-06-09 🔑 Clearer error when the Web UI is opened from another machine: Reaching the chat from a non-loopback client (another machine, a VM host, a phone on your LAN) without
API_AUTH_KEYset returned403on every sensitive endpoint — sending a message, listing sessions, live status — but the chat only showed a generic "Failed to send message, please retry." The send path now surfaces the real reason — "Remote API access requires an API key. Add it in Settings, or run the backend on localhost for local-only use." — and the README's web-UI setup spells out the localhost-vs-LAN rule plus the three fixes (browse vialocalhoston the same machine; setAPI_AUTH_KEYand enter it once in Settings; orVIBE_TRADING_TRUST_DOCKER_LOOPBACK=1for Docker Desktop's host gateway) (#191, thanks @mafia23). -
2026-06-08 🔧 Gemini 3.x multi-turn tool-calling fix: This completes the Gemini 3.x thinking-model fix. The 6/05 round-trip (#176) only covered in-memory history, but the real agent loop replays history as OpenAI-format dicts where LangChain dropped the per-tool-call
thought_signaturebefore the request was built — so multi-turn tool calling still 400'd withmissing thought_signature. It is now re-attached at the single_convert_inputchokepoint bothinvokeandstreampass through (parallel calls, where only the first of N is signed, included) (#184, thanks @ngoanpv). -
2026-06-07 🐝 Live swarm status in the chat timeline: When the agent launches a multi-agent swarm (investment committee, quant desk, risk committee, …), the chat now renders an inline status card that streams each worker's state — waiting / running / done / failed / blocked / retrying — in real time, the same per-agent visibility the standalone swarm dashboard already had. Runtime events are bridged into the session SSE stream without changing the existing
/swarm/runsAPI, and a finished card rehydrates from the finalrun_swarmresult on reconnect or history replay (#188, thanks @BillDin). Preset routing also got sharper: an explicitly named preset (e.g.investment_committee, with or without underscores) now wins over keyword scoring, and the bareIVderivatives keyword no longer false-matches inside ordinary words like "given" (#189, thanks @BillDin). -
2026-06-06 ⚖️ Alpha compare — head-to-head across CLI, Web UI, REST & agent: A new
alpha comparebenches a hand-picked shortlist of Alpha Zoo alphas against each other on a universe and period, then ranks them by IC mean/std, IR, IC-positive ratio or sample count — each with its gap to the leader. Unlike a full-zoo bench it evaluates only the alphas you name (a newrun_bench(only=…)subset filter), so comparing three alphas no longer scores all 191 in their zoo. One shared core powers every surface:vibe-trading alpha compare <id1> <id2> … --sort ir(CLI), a Compare view in the Alpha Zoo Web UI (tick alphas in the catalogue → one-click compare with a streamed ranking table),POST /alpha/compare+ SSE (REST), and a read-onlyalpha_compareagent tool (47 tools now). -
2026-06-05 🇮🇳 Dhan + Shoonya connectors (India) — 10 brokers total: The connector-first trading layer adds Dhan and Shoonya for the Indian market (NSE/BSE equities + F&O), bringing the roster to ten brokers. Both are paper + read-only — like Longbridge, their APIs expose no runtime paper/live discriminator, so their
place_order/cancel_orderhard-refuse any non-paper config at the first line (the rule: a broker with no structural paper/live guard is capped at paper + read-only) (#181, closes #174). This cycle also fixes Gemini 2.5 / 3.x thinking models: their per-tool-callthoughtSignaturenow round-trips through the OpenAI-compatible path, so multi-turn function calling no longer fails withINVALID_ARGUMENT(#176, closes #170, thanks @mvanhorn & @jliu6789). Chinese docstrings landed on all 452 Alpha Zoo factors (#180, thanks @LeeCQiang), and a frontend test suite (197 vitest tests) plus backend auth / path-traversal / CORS security tests joined CI (#175, thanks @sambazhu). -
2026-06-04 🗃️ Opt-in local data cache for all 7 data sources: A new
VIBE_TRADING_DATA_CACHEswitch lets every backtest loader — tushare, okx, ccxt, akshare, mootdx, yfinance, futu — cache settled historical bars under~/.vibe-trading/cache(user home, never the repo), so repeated and long-horizon / cross-market backtests skip the network and avoid provider rate limits. Off by default. Batch and connection loaders (yfinance, futu) skip the bulk download / FutuOpenD connection entirely on a full cache hit, a staleness guard never caches a range ending today (its last bar is still forming), and cached frames round-trip byte-identical to freshly fetched ones (#177, thanks @mvanhorn). A new contributor guide for AI / automation-assisted PRs also landed, mapping safe local checks and high-risk broker/MCP/credential surfaces (#173). -
2026-06-03 🧹 Community triage + trace correlation: Tool-call trace entries now carry the originating
call_id, so atool_resultcan be matched back to itstool_callwhen replaying a run trace — arg previews stay truncated to keep trace files small (#168, thanks @zwrong). Source comments no longer point at an internal-only docs path that external contributors couldn't find (#166, thanks @jaleelpersonal). Also clarified that thelangchain-communityresolver warning on install is a harmless leftover-package notice, not a failure (#167), and scoped Gemini 2.5/3.0thoughtSignatureround-tripping for function calls as ahelp wantedtask with a full fix plan (#170, thanks @jliu6789). -
2026-06-02 🔌 Six new broker connectors (Tiger / Longbridge / Alpaca / OKX / Binance / Futu): The connector-first trading layer gains a direct-SDK transport alongside IBKR (local) and Robinhood (MCP). Each connector exposes read-only account / positions / orders / quote / history plus paper-account order placement — test your strategies across these broker paper accounts. Five of them (Tiger, Alpaca, OKX, Binance, Futu) also support bounded, mandate-gated order placement behind the same safety model as Robinhood: a user-committed mandate (symbol universe / order size / exposure / leverage / daily cap), a filesystem kill switch, a fail-closed pre-trade gate, and a full audit ledger. Longbridge is paper + read-only only (its API exposes no runtime paper/live discriminator). Every paper/live distinction is a structural per-broker guard — account-id format, host separation, demo flag, or trade environment. New
trading_place_order/trading_cancel_ordertools; HK and A-share asset classes added to the mandate universe. Experimental / use at your own risk. -
2026-06-01 🚀 v0.1.9 released (
pip install -U vibe-trading-ai): Rolls up everything since 0.1.8. Connector-first broker profiles (IBKR local read-only TWS / IB Gateway + Robinhood Agentic Trading behind OAuth, a committed mandate, order guard, audit ledger, and instant halt). Research Goal runtime across CLI / REST / MCP / Web. A swarm pass — live reconcile + MCP keepalive, operator-configured worker MCP tools, a strict alpha-bench random control, and a newretry_runto relaunch failed/stale runs (36 MCP tools now). Theagent/cli/package refactor with a refreshed terminal UI, themootdxno-token A-share loader, and a robustness pass across backtest / agent loop / sessions.--versionnow always matches the installed package, fixing the 0.1.8 drift (#156). -
2026-05-31 🔌 Connector-first broker architecture (IBKR + Robinhood): Trading access now starts from a selectable connector profile instead of separate broker/live entry points.
vibe-trading connector list/use/check/account/positions/orders/quote/historyand the MCPtrading_*tools share the same selected profile, where paper/live is an attribute of the connector. IBKR can be used immediately through a local read-only TWS / IB Gateway profile, while the official IBKR remote MCP path is seeded as an OAuthmcp.readprobe until stable read tool names are available. Robinhood Agentic Trading remains the bounded live MCP connector behind OAuth, a committed mandate, order guard, audit ledger, and instant halt. -
2026-05-30 🧰 Robustness pass — backtest, agent loop, sessions: LLM-generated signal engines now pass pre-flight interface validation before instantiation, catching circular self-imports, a missing
generate(), non-defaulted__init__args, and wrong return types with actionable JSON errors instead of raw tracebacks (#149); a follow-up routes source-level AST validation errors through the same clean JSON envelope. The agent loop no longer burns all 50 iterations into afailedstatus with no output — it mirrors the swarm worker's wrap-up nudge at 80% of the iteration budget and drops tool definitions on the last iteration to force a final text answer (#148), guarded to fire only mid-run so it never displaces research-goal context. Session message writes nowflush + fsynceach append so expensive AI responses survive a mid-write crash, and the read path skips corrupted JSONL lines (logging the first 200 chars for recovery) instead of 500-ing the whole/messagesendpoint (#147). The Web composer also fixes IME Enter handling so a composition-confirming Enter no longer submits mid-word (#146). -
2026-05-29 🔐 Robinhood Agentic Trading support (opt-in, bounded autonomy): Adds support for Robinhood Agentic Trading (remote MCP, OAuth). Off and read-only by default; the agent acts only inside a user-committed mandate (symbols / order size / exposure / leverage / daily cap), with a filesystem-level instant kill switch, preemptive flatten, mandate auto-expiry, a full audit ledger, and a persistent autonomous runner. No custody, no venue — the broker holds funds and executes; we only relay intent. Experimental / use at your own risk.
-
2026-05-28 🧪 Swarm safety + strict alpha gate + worker MCP: Swarm DAG blocks downstream tasks when upstream fails (#145). New
run_bench_strict()adds a same-universe random control + OOS split to catch factors that just track market beta (#143, thanks @Soli22de). Swarm workers can call operator-configured external MCP servers, with trust boundary pinned (#142, thanks @shadowinlife). -
2026-05-27 📊 mootdx A-share data source + output polish: New
mootdxloader speaks the native 通达信 TCP protocol for A-share OHLCV (no auth, no IP rate-limit, daily + intraday with 25-page walk-back pagination), slotting between tushare and akshare in the fallback chain (#107). CCXT loader now readsHTTP_PROXY/HTTPS_PROXY/ALL_PROXYso Binance/OKX public data works from restricted networks (#126, thanks @ruok808). Final-answer rendering also dropped the ugly full-width---horizontal separators on CLI and Web: the system prompt now nudges the agent toward markdown tables and##headings, the CLI renderer strips standalone HRs as defense-in-depth, and the chat bubble hides any<hr>that slips through (#139, thanks @sdwxm188). -
2026-05-26 ✅ Research Goal lifecycle closure: Goal mode now behaves like a real task runner: Web UI goal creation creates or binds the session and immediately sends the kickoff turn; active goals can be continued, edited, cancelled, and completed across Web/API/CLI/MCP; and the agent advances from the current goal snapshot (criteria, evidence, claims, open items) instead of only the original prompt. Covered-but-still-active goals now enter an audit/status update instead of stopping silently, with regression coverage across backend, CLI, MCP, and frontend events.
-
2026-05-25 🧼 Cleaner chat UI + composer workflow: The Web UI keeps chat focused on the next action: upload, swarm, and research-goal modes now live behind the composer
+menu instead of floating panels. Active context appears above the input as compact chips, and goal details expand inline only when needed. The UI also drops the old custom i18n layer in favor of direct English copy, gates Full Report cards to report-worthy runs, and hardens local dev startup/status reporting for reliable browser smoke tests. -
2026-05-24 🎯 Research Goal runtime: Added a session-scoped Research Goal layer across backend, CLI, API/MCP, SSE, and Web UI. Goals persist claims, acceptance criteria, evidence rows, budgets, and completion policy; agent tools can create goals and attach evidence;
/goalgives the CLI a direct entry point; REST/MCP expose goal snapshots and evidence writes; SSE keeps chat clients fresh. Follow-up audit fixes locked down verified evidence, blocked live-trading risk tiers through agent tools, wired CLI-created goals into later turns, cleaned goal ledgers on session deletion, enabled replay-all, and fixed cross-session frontend races. -
2026-05-23 🖥️ Interactive CLI refresh: The terminal front door now opens with a larger Vibe-Trading banner, a cleaner prompt divider, prior-turn recap, post-run timing, and a Claude Code-style activity rail for live agent work. Tool calls, web/data fetches, shell-style actions, Markdown answers, and pipe tables render in a more readable transcript, while piped or non-TTY runs keep plain-text output for automation. Generated CLI screenshots are now treated as local artifacts instead of committed docs files, keeping the repository lighter.
-
2026-05-22 🧭 Swarm recovery + MCP keepalive: Swarm status now reconciles from live task files on every read, so API/MCP/SSE/list views recover crashed or stale runs instead of showing permanent
runningsnapshots.run_swarmsends MCP progress heartbeats while it polls, with a fixed first frame ofswarm_started run_id=<id>for clients that reconnect after transport drops; workers now heartbeat through LLM streaming, grounding fetches, and tool execution. The stale-run reaper uses per-run thresholds and derives terminal status from task states,SwarmToolno longer cancels a still-running team just because its wait budget elapsed, and MCP clients can callreap_stale_runs()for explicit cleanup. Today's DX pass also refreshed provider default models and aligned CI syntax checks with the newagent/cli/package. 22 new regressions cover hydration, terminal recovery, stale reaping, keepalive cadence, env parsing, and heartbeat wiring; the full swarm/MCP suite is at 169 passed, 4 skipped. -
2026-05-21 🧱 CLI package refactor:
agent/cli.py(3216 LOC) split into theagent/cli/package — interactive front door, slash router, Rich components, plus a_legacy.pyshim that preserves every subcommand and re-exports every public symbol socli.cmd_*/cli._INIT_ENV_PATH/cli.Confirmkeep working. New FastAPI middleware serves the SPA shell when a browser opens/runs/{id}or/correlationdirectly; same narrowing landed in the Vite dev proxy. Version unified viacli/_version.py(no more drift between--versionand the banner),python -m clirestored via__main__.py, and the chat-gate narrowed sochat --help/chat extrareach legacy argparse instead of being swallowed by the REPL. -
2026-05-20 🔬 Hypothesis Registry CLI: Closes the CLI side of the Hypothesis Registry shipped backend-only on 2026-05-16.
vibe-trading hypothesis listprints a Rich table or JSON (--statusfilter,--limit);show <id>renders a detail panel including linked run cards;invalidate <id> --note "..."flips status torejectedwhile preserving prior invalidation notes when--noteis omitted. Honors the existingVIBE_TRADING_HYPOTHESES_PATHenv override and adds a per-invocation--path. 22 new tests cover wiring, JSON output, status filter, limit, missing-id errors, and note persistence. -
2026-05-19 ✨ Live tool feedback + graceful cancel: Long-running tools (backtests, large PDFs, swarm workers) no longer look frozen. Each tool call now emits a 3-second heartbeat plus structured per-stage progress —
run_backtestshows phase markers (validate/simulate/finalize),read_documentticks per page on PDF or per sheet on Excel,read_urlmarksfetch/parse. The CLI Rich Live dashboard renders a Unicode spinner, ASCII progress bar, ETA, and stacks up to 3 parallel tools keyed by name; the frontend chat ships a newToolProgressIndicatorwith rAF-coalesced renders, ARIArole="status"+ hidden native<progress>for screen readers, and a determinateProgressRingSVG when total is known. FirstCtrl+Cduring a CLI run now callsagent.cancel()for graceful exit (current step finishes, trace closes cleanly); a second within 2s force-quits. Reusable primitives extracted along the way:ProgressBar.tsxandlib/tools.ts(shared tool-name i18n). -
2026-05-18 🧹 Cleanup pass + three latent bug fixes:
CompositeEngineno longer misroutes bare Chinese-futures codes likeRB2410toGlobalFuturesEngine—_is_china_futuresmoved into a shared_market_hooksmodule with a case-normalized product table and a non-CN exchange guard, plus 9 new regression cases. Session FTS5 indexes now persist timestamps so cross-session search can sort by date; the same path also fixed a re-upsert that was wall-clocking every session'sstarted_at. The Vite dev-mode proxy gained the missing/alphaentry so the AlphaZoo page resolves onnpm run dev.tests/test_e2e_harness_v2.py(real-LLM e2e suite) is now gated behindVIBE_TRADING_RUN_LIVE_E2E=1so CI no longer changes shape based on env-key presence. Ruffper-file-ignoresadded for the factor zoo (3783 → 0 F401 noise), frontend tsconfig enablesnoUnusedLocals/noUnusedParametersas regression guards, and 76 unusedvw = vwap(...)boilerplate lines were dropped fromgtja191alphas. Net -918 LOC. -
2026-05-17 🧬 Alpha Zoo v1 (0.1.8): 452 pre-built quant alphas across 4 zoos —
qlib158(Microsoft Qlib, Apache-2 attribution),alpha101(Kakushadze 101 Formulaic Alphas, paper rewrite from arXiv:1601.00991),gtja191(Guotai Junan 2014 short-horizon factor report), andacademic(Fama-French 5 + Carhart price-based proxies). One-line CLI to bench any zoo on your universe:vibe-trading alpha bench --zoo gtja191 --universe csi300 --period 2018-2025. Ships with AST purity gate, lookahead-guard test,pytest-socketnetwork kill-switch, per-zoo LICENSE.md, and a Developer Certificate of Origin (DCO) workflow for community PRs. Auto-rendered Alpha Library at vibetrading.wiki/alpha-library/ + research-lab post Which of the 191 GTJA alphas still work in 2026?. -
2026-05-16 🧪 Research spine update: Added a backend Hypothesis Registry with
create_hypothesis,update_hypothesis,link_backtest, andsearch_hypotheses; external-content readers now attach warning-onlysecurity_warnings; and Shadow Account scanning now uses deterministic OHLCV feature evaluation instead of the old calendar-phase stub. -
2026-05-15 🪪 The run detail page now surfaces the Trust Layer run card alongside metrics and artifacts, completing the UI side of the
run_card.jsonwork landed on 2026-05-12.PersistentMemory.add()was also hardened on length, empty/whitespace-only names, and C0/C1 control bytes from the #108/#109/#110 triage (#112, thanks @Teerapat-Vatpitak). -
2026-05-14 🌐 the public wiki is now live at vibetrading.wiki with docs, tutorials, Research Lab, and Alpha Library sections deployed through Cloudflare Pages. Persistent memory is also inspectable from the CLI via
vibe-trading memory list/show/search/forget(#102, thanks @Teerapat-Vatpitak), and memory tokenization/slugs now support Thai, Arabic, Hebrew, and Cyrillic text (#104). -
2026-05-13 🧭 Swarm runs now ground workers with fetched market data and cleaner persisted reports (#93, #84).
-
2026-05-12 🧾 Backtests now emit
run_card.jsonandrun_card.mdalongside artifacts for reproducible research runs. -
2026-05-11 🧭 Memory slugs, swarm accounting, and CLI preflight: Persistent memory now preserves CJK characters when generating file slugs, preventing silent filename collisions for Chinese/Japanese/Korean notes (#95, thanks @voidborne-d). Swarm run totals now prefer provider-reported token usage with the existing estimate fallback (#94, thanks @Teerapat-Vatpitak), and the CLI run UI gained a startup preflight check for common environment issues (#96, thanks @ykykj).
-
2026-05-10 🧱 Regression guardrails + run metadata: Memory recall now treats underscores as token boundaries, so snake_case saved memories such as
mcp_wiring_testmatch natural-language queries like "mcp wiring" (#87, thanks @hp083625). The MCP server has a subprocess smoke test covering initialize →tools/list→tools/callto guard the first-call deadlock path (#86), while low-risk hardening landed for Windows path-sensitive tests, API best-effort exception handling, backtestrun_dirallowed-root validation, and SwarmRun provider/model metadata (#88, #90, #91, #92, thanks @Teerapat-Vatpitak). -
2026-05-09 🛡️ API path hardening + MCP server stability: API run/session routes now validate path IDs before lookup, rejecting malformed newline-containing parameters and pinning the behavior in the auth/security regression suite (#80, thanks @SJoon99). The MCP server now pre-warms the tool registry on the main thread before serving
tools/call, avoiding a first-call deadlock in lazy tool discovery (#85, thanks @Teerapat-Vatpitak). The Vite dev proxy also honorsVITE_API_URLfor non-default backend targets (#82, thanks @voidborne-d). -
2026-05-08 🧾 Tushare statement fields in filters: A-share daily backtests can now request PIT-safe financial statement fields through
fundamental_fields, so signal engines can screen onincome_total_revenue,income_n_income,balancesheet_total_hldr_eqy_exc_min_int,fina_indicator_roe, and similar table-prefixed columns after their announcement/disclosure dates (#76, thanks @mrbob-git). Follow-up hardening makes explicit statement-field requests fail fast if Tushare enrichment cannot run, instead of silently falling back to raw price bars (#77). -
2026-05-07 📈 Tushare fundamentals + community triage: Added a point-in-time
TushareFundamentalProvidercontract for fundamental research workflows, with regression coverage for the projectTUSHARE_TOKENenvironment path (#74). Community triage also clarified that Vibe-Trading keeps rapid iteration focused on one UI language for now, avoids adding redundant search dependencies while DuckDuckGo-backedweb_searchis already bundled, and treats unofficial hosted deployments as untrusted places for API keys or data-source tokens. -
2026-05-06 🚀 v0.1.7 released (Release notes,
pip install -U vibe-trading-ai): Security-boundary hardening is now published on PyPI and ClawHub, covering safer API/read/upload/file/URL/generated-code/shell-tool/Docker defaults while keeping localhost CLI/Web UI workflows low-friction. This cycle also includes Web UI Settings, correlation heatmap, OpenAI Codex OAuth, A-share pre-ST filtering, interactive CLI UX, swarm preset inspection, dividend analysis, dev workflow polish, and audited frontend build-dependency floors. Thanks to the 0.1.7 contributors and to lemi9090 (S2W) for coordinated security validation. -
2026-05-05 🛡️ Security boundary follow-up: Completes the remaining security-boundary hardening around explicit CORS origins, Settings credential indicators, web URL reading, and Shadow Account code generation, with regression tests added for each path. Normal localhost CLI/Web UI workflows stay the same; remote deployments should continue using
API_AUTH_KEYand explicit trusted origins. -
2026-05-04 🖥️ Interactive CLI UX + CI cleanup: Interactive mode now has a live bottom status bar showing provider/model, session duration, last-run latency, and cumulative tool-call stats, plus prompt history navigation and cursor editing with arrow keys via
prompt_toolkit(#69). The CLI still falls back to Rich prompts whenprompt_toolkitor a TTY is unavailable. CI path expectations were also aligned with the hardened file-import sandbox and cross-platform/tmpresolution, returning main to green (bb67dc7). -
2026-05-03 🛡️ Security hardening patch: Tightens default API authentication for non-local deployments, protects sensitive run/session/swarm reads, restricts upload and local file-reading boundaries, gates shell-capable tools by entry point, validates generated strategy loading before import, and runs the Docker image as a non-root user with a localhost-only published port by default. Local CLI and localhost Web UI workflows remain low-friction; remote API/Web deployments should set
API_AUTH_KEY. -
2026-05-02 🧭 Dividend analysis + sharper roadmap: Added the
dividend-analysisskill for income stocks, payout sustainability, dividend growth, shareholder yield, ex-dividend mechanics, and yield-trap checks, pinned by bundled-skill regression tests. The public roadmap now focuses on upcoming work: Research Autopilot, Data Bridge, Options Lab, Portfolio Studio, Alpha Zoo, Research Delivery, Trust Layer, and Community sharing. -
2026-05-01 🔥 Correlation heatmap + OpenAI Codex OAuth + A-share pre-ST filter: New correlation dashboard/API computes rolling return correlations and renders an ECharts heatmap for portfolio and symbol analysis (#64). OpenAI Codex provider support now uses ChatGPT OAuth via
vibe-trading provider login openai-codex, with Settings metadata and adapter regression tests (#65). Added and hardened theashare-pre-st-filterskill for A-share ST/*ST risk screening, including Sina penalty relevance filtering so securities-account mentions do not inflate E2 counts (#63). -
2026-04-30 ⚙️ Web UI Settings + validation CLI hardening: New Settings page for LLM provider/model, base URL, reasoning effort, and data source credentials, backed by local/auth-protected settings APIs and data-driven provider metadata (#57). Also hardens
python -m backtest.validation <run_dir>so missing, blank, malformed, non-existent, and non-directory inputs fail with clear operator-facing messages before validation starts (#60). -
2026-04-28 🚀 v0.1.6 released (
pip install -U vibe-trading-ai): Fixesvibe-trading --swarm-presetsreturning empty afterpip install/uv tool install(#55) — preset YAMLs now bundled inside thesrc.swarmpackage and pinned by a 6-test regression suite. Plus AKShare loader correctly routes ETFs (510300.SH) and forex (USDCNH) to the right endpoints with hardened registry fallback. Rolls up everything since v0.1.5: benchmark comparison panel,/uploadstreaming + size limits, Futu loader (HK + A-share), vnpy export skill, security hardening, frontend lazy loading (688KB → 262KB). -
2026-04-27 📊 Benchmark panel + upload safety: Backtest output now ships a benchmark comparison panel (ticker / benchmark return / excess return / information ratio) with yfinance-backed resolution for SPY, CSI 300, etc. (#48). Plus
/uploadstreams the request body in 1 MB chunks and aborts pastMAX_UPLOAD_SIZE, bounding memory under oversized/malformed clients (#53) — pinned by a 4-case regression suite. -
2026-04-22 🛡️ Hardening + new integrations: Path containment enforced in
safe_path+ journal/shadow tool sandbox,MANIFEST.inships.env.example/ tests / Docker files in sdist, route-level lazy loading shrinks frontend initial bundle 688KB → 262KB. Plus Futu data loader for HK & A-share equities (#47) and vnpy CtaTemplate export skill (#46). -
2026-04-21 🛡️ Workspace + docs: Relative
run_dirnormalized to active run dir (#43). README usage examples (#45). -
2026-04-20 🔌 Reasoning + Swarm:
reasoning_contentpreserved across allChatOpenAIpaths — Kimi / DeepSeek / Qwen thinking work end-to-end (#39). Swarm streaming + clean Ctrl+C (#42). -
2026-04-19 📦 v0.1.5: Published to PyPI & ClawHub.
python-multipartCVE floor bump, 5 new MCP tools wired (analyze_trade_journal+ 4 shadow-account tools),pattern_recognition→patternregistry fix, Docker dep parity, SKILL manifest synced (22 MCP tools / 71 skills). -
2026-04-18 👥 Shadow Account: Extract your strategy rules from a broker journal → backtest the shadow across markets → 8-section HTML/PDF report showing exactly how much you leave on the table (rule violations, early exits, missed signals, counterfactual trades). 4 new tools, 1 skill, 32 tools total. Trade Journal + Shadow Account samples now live in the web UI welcome screen.
-
2026-04-17 📊 Trade Journal Analyzer + Universal File Reader: Upload broker exports (同花顺/东财/富途/generic CSV) → auto trading profile (holding days, win rate, PnL ratio, drawdown) + 4 bias diagnostics (disposition effect, overtrading, chasing momentum, anchoring).
read_documentnow dispatches PDF, Word, Excel, PowerPoint, images (OCR), and 40+ text formats behind one unified call. -
2026-04-16 🧠 Agent Harness: Persistent cross-session memory, FTS5 session search, self-evolving skills (full CRUD), 5-layer context compression, read/write tool batching. 27 tools, 107 new tests.
-
2026-04-15 🤖 Z.ai + MiniMax: Z.ai provider (#35), MiniMax temperature fix + model update (#33). 13 providers.
-
2026-04-14 🔧 MCP Stability: Fixed backtest tool
Connection closederror on stdio transport (#32).
// compatibility
| Platforms | cli, api, desktop, web, mobile |
|---|---|
| Operating systems | — |
| AI compatibility | claude |
| License | MIT |
| Pricing | open-source |
| Language | Python |
// faq
What is Vibe-Trading?
"Vibe-Trading: Your Personal Trading Agent". It is open-source on GitHub.
Is Vibe-Trading free to use?
Vibe-Trading is open-source under the MIT license, so it is free to use.
What category does Vibe-Trading belong to?
Vibe-Trading is listed under finance in the Claudeers registry of Claude-compatible tools.
// embed badge
[](https://claudeers.com/vibe-trading)
// retro hit counter
[](https://claudeers.com/vibe-trading)
// reviews
// guestbook
// related in Finance & Trading
An AI SKILL that provide design intelligence for building professional UI/UX multiple platforms
TradingAgents: Multi-Agents LLM Financial Trading Framework
"AI-Trader: 100% Fully-Automated Agent-Native Trading"
Performant financial charts built with HTML5 canvas
// built by
1 of its contributors also build on official projects — claude-agent-sdk-python
→ see how Vibe-Trading connects across the ecosystem