Model or dataset
simonlin1212/vibe-astock avatar
simonlin1212/vibe-astock

Vibe AStock: a local A-share short-term review dashboard where the metrics are computed, not generated

A 股短线复盘看板:涨停池·连板梯队·龙虎榜·板块资金一屏看完,赚钱效应/晋级率/梯队断层/情绪周期等派生指标纯计算直出(不经过 AI),AI 只把数据串成能读的盘面研判。全本地运行,可用 Claude/Codex 订阅免 API key。| A-share short-term daily-review dashboard: derived sentiment metrics computed locally, AI only writes the narrative. No API key needed.

391 stars119 forksPythonApache-2.0

At a glance

What is it?
Vibe AStock is a self-hosted Python and React workbench for A-share limit-up pools, promotion rates and dragon-tiger lists, with derived sentiment metrics calculated in code and an AI layer that only writes the narrative. It installs from a release tarball and runs on 127.0.0.1:8910.
Who is it for?
Adopt Vibe AStock if you already keep a written A-share review process and want the arithmetic (promotion rates, ladder gaps, breadth, limit-up structure) done by code on your own machine, with an AI layer that is explicitly kept away from the numbers.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Vibe AStock actually solves for A-share short-term reviewers

The repetitive part of A-share short-term review is not the reading, it is the bookkeeping. Yesterday's limit-up pool has to be fixed as a sample, each member checked against today's quotes, promotion and break rates recomputed, sector money flow pulled, the dragon-tiger list cross-referenced, and only then does anyone get to the interesting question of what it all means. Vibe AStock puts that loop into one local web page: 盯盘 for the live session, 复盘 for the dated review, 资讯雷达 for news and event probabilities, 个股研究 for single-name work including a bull-versus-bear debate, 回测 for historical rules, and 我的股票 for positions and a trade journal.

The design decision that separates it from most AI-finance dashboards is stated plainly in the README: quotes and statistics do not depend on AI generation. The derived indicators are computed by the program; the model is used to explain the material, compare viewpoints and list what still needs verification. That matters because a language model asked to compute a promotion rate across a fixed sample will do it approximately and inconsistently, and you cannot audit the result. Here the number comes from code and the prose is constrained by citation checks.

The intended user is someone who already does short-term A-share review by hand or in a spreadsheet, is comfortable running a local service, and wants the sample definition and the coverage gaps made explicit rather than smoothed over.

How the data flows: fixed samples, a deterministic engine, and an AI layer kept in its lane

The review flow is a pipeline with a human in the middle. You pick a target trading day; the backend pulls each data category separately, with a per-category wait ceiling of 90 seconds bounded by the remaining budget for the whole run, and cleans up the process on timeout or cancellation. AI generation time is counted separately from data fetch time, which is a useful admission: the slow part of a review is usually the model, not the quotes.

The 昨日梯队 module freezes the previous trading day's limit-up sample and lets you filter to all, second board and above, or third board and above. Members that fell back today or have missing quotes stay in the list. That is the right call. A ladder that silently drops its broken members will always look stronger than it was, and the README explicitly frames the module as a way to see continuation, breaks and coverage gaps together.

盘中核验 is the second half of the loop: it compares the observation conditions written into a review against the snapshots that were actually valid during the session. The README draws a boundary worth repeating: snapshots are polled, not tick data, so not every intraday move is captured, and a missed historical intraday point cannot be reconstructed from the current quote. The backtest module follows the same shape: input conditions, AI organizes them into an executable scope, the user confirms, a deterministic engine computes, and a report is archived locally. Zero fills are shown as zero fills, and unsupported conditions are listed as limitations rather than replaced with a simulation.

Installing Vibe AStock and generating your first review

The README points at the v1.1.0 release page for the source archive; there is no package-manager install. You need Python 3.10 or newer (3.12 recommended) and Node.js 22 or newer with npm, and the first environment preparation needs network access to download dependencies.

On macOS or Linux, from the repository root, three scripts do the work. setup prepares the environment, doctor checks it, and start launches the local server and opens the browser.

bash
sh scripts/setup
sh scripts/doctor
sh scripts/start

The default address is http://127.0.0.1:8910 and the server listens on the loopback interface only. If the port is taken, the README gives a port override.

bash
sh scripts/start --port 8911

Windows 10 and 11 have a parallel path through the manage script. The README's own commands use the py launcher and the virtual environment's interpreter directly.

powershell
py -3 -X utf8 scripts/manage.py setup
.venv\Scripts\python.exe -X utf8 scripts/manage.py doctor
.venv\Scripts\python.exe -X utf8 scripts/manage.py start

Once the page is open, go to the AI settings entry at the bottom of the sidebar and complete a login or enter your own API configuration, then save it after a successful connection test. Viewing quotes and existing records does not require generating an AI report first, and starting the service does not automatically generate a review. Then pick a trading day in 复盘 and generate. The page distinguishes the date you selected, the trading day of the current report and the generation time, so an older report is never presented as a new one. Failed generation keeps the previous draft.

If you want the data directories on another disk, the README shows the environment variables to set before launching on Windows.

powershell
$env:ASTOCK_DATA_HOME = 'D:\VibeAStock\reviews-and-journal'
$env:ASTOCK_AGENT_HOME = 'D:\VibeAStock\agent'
$env:VR_DATA_DIR = 'D:\VibeAStock\market-data'

The dependency that fails quietly, and the one that is optional

The requirements file carries an unusually specific warning, and it is the most practically useful paragraph in the repository. The sector money-flow endpoint needs a JavaScript engine to de-obfuscate a script, and the package must be the renamed mini-racer, not the older py_mini_racer. Both install into the same py_mini_racer/ directory and overwrite each other; the old package's Python code against the new package's binary fails with dlsym(mr_eval_context): symbol not found. The visible symptom is not an error page. The sector money-flow and money-rotation blocks come back with HTTP 200 and an empty sectors list, so the dashboard looks fine and is silently missing a whole category. Anyone who has already installed the old package is told to uninstall and force-reinstall.

That is a real failure mode, and the README's habit of naming it is consistent with the rest of the documentation. The Agent-Reach external tool for theme corroboration is the opposite case: it is optional, and the environment template states that without it the theme analyst falls back to limit-up reason strings alone and says so in the report.

There are other boundaries. The local web page still needs network access to fetch data, and when you use a remote AI provider, your question, the selected material and the necessary context are sent to that provider. "Saved locally" is not the same as "computed offline", and the README says so directly. Coverage is also uneven: the public limit-up reason channel may not cover every market or historical date, and when a data source returns at most 500 rows the interface marks the coverage as partial.

Where Vibe AStock is the wrong tool

It is not a trading terminal. The real-time feed is built from quote snapshots collected by polling, and the README states that snapshots are not tick-by-tick trade data and cannot guarantee capturing every intraday move. If your process depends on order-book depth or sub-second prints, this is the wrong layer.

It is not a signal service. The README is explicit that the sentiment tier is an analytical framework, not an objective fact, and that no single indicator can be used to derive a trading conclusion. The bull-versus-bear debate deliberately does not force a winner and does not give participation bias, entry or exit levels, or position sizing. If you want the tool to tell you what to buy, the product is designed to refuse.

It is not a backtest oracle. The historical statistics inside 复盘 are grouped observations over a sample list assembled after the fact, and the README names the selection bias and warns that sample statistics are not realizable returns. The separate backtest module is the one that checks explicit rules, and it discloses market rules, data range, fees, fills and the reasons for non-fills, including zero-fill runs. Historical performance is not a guarantee of future results, and old Hong Kong reports missing current market-rule fields should be rerun rather than treated as validated under the new rules.

Finally, it is not a zero-maintenance deployment. It needs a local Python and Node environment, a running service, and working data sources. Overnight, at lunch break, or with stale quotes, the README says the data cannot stand in for a valid intraday snapshot.

How it differs from TradingAgents-style multi-agent frameworks

The requirements file credits the orchestration engine as borrowed from TradingAgents-astock, so the comparison is fair to make. A multi-agent trading framework typically treats the model as the analyst: agents with different personas read the data, argue, and produce a decision or a recommendation, and the numbers in the final text are whatever the model wrote down.

Vibe AStock inverts the responsibility split. The deterministic layer owns the arithmetic on a fixed, disclosed sample; the AI layer owns the explanation and is constrained by citation and numeric checks, plus a research constraint applied to every web AI source. The README is careful about what that buys: the checks reduce out-of-bounds answers and miscitations but do not constitute a complete semantic correctness guarantee. That is a more honest claim than most, and it is also the reason the tool is less exciting than a framework that ends with a verdict.

If your goal is an automated pipeline that ends in a decision, a multi-agent framework is closer to that shape, and you should accept that its numbers are model output. If your goal is to do your own review faster and with auditable arithmetic, the split here is the point.

Licence, storage layout and the real upgrade cost

The project is Apache-2.0, which permits commercial use and modification with the usual attribution and notice requirements; the repository ships a LICENSE file at the top level. That is a permissive licence, and nothing here constitutes legal advice, so read the file itself if you plan to redistribute a modified version.

The upgrade cost is not the code, it is the data. Local state is spread across several locations that are not migrated by a single switch: agent sessions, tasks, the evidence ledger and product login under ~/.vibe-astock-agent/ (overridable with ASTOCK_AGENT_HOME); reviews, versions, trade journal and raw archive under ~/.duanxian-agents/, including reviews/, journal/ and archive/ (overridable with ASTOCK_DATA_HOME); market data and intraday caches under the agent home's market-data/ (overridable with VR_DATA_DIR); research reports under myreports/ inside that market data directory (VR_REPORTS_DIR); and watchlists, research notes, interface state and API configuration in the current browser site's local storage. Changing ASTOCK_AGENT_HOME does not move your trade journal, market data or browser data. The README states this explicitly, which is more than most self-hosted projects do, but it means a backup has to cover the directories you actually use plus the records the page can export.

The upgrade procedure itself is short: stop the service, back up, update the source, then rerun setup and doctor. Old reports are kept as they were and do not retroactively gain new verification conclusions after an upgrade. Startup logs live in .local/startup.log, and the README warns to check them for personal information before sharing.

Editorial conclusion

Adopt Vibe AStock if you already keep a written A-share review process and want the arithmetic (promotion rates, ladder gaps, breadth, limit-up structure) done by code on your own machine, with an AI layer that is explicitly kept away from the numbers. Skip it if you want a live tick-by-tick trading terminal, if you cannot keep a local Python and Node environment running, or if you expect the AI to hand you buy and sell levels: the README states the product is required not to output investment decisions, buy or sell advice or position instructions. Before trusting a single report, run the setup and doctor scripts, complete a connection test in the AI settings page, generate one review for a date you already know, and check the data-coverage notes against your own source for that day.

Frequently asked questions

Does Vibe AStock require an API key?

No. The README lists Codex and Claude subscription sign-in as supported entry points, plus WorkBuddy / CodeBuddy through a local CLI login, so a subscription can be used instead of a metered API key. API providers such as DeepSeek, MiMo and others are also supported if you prefer to supply your own key and endpoint.

Can I run Vibe AStock without AI at all?

You can view quotes and existing records without generating an AI report, and starting the service does not automatically generate a review. The derived metrics such as breadth, promotion rates and ladder structure are computed by the program rather than the model, so the numbers do not depend on an AI call.

Where does Vibe AStock store my data?

Reviews, versions, trade journal and raw archive default to ~/.duanxian-agents/, while agent sessions, tasks and the evidence ledger default to ~/.vibe-astock-agent/. Market data and research reports sit under the agent home's market-data/ directory, and watchlists, research notes and API configuration live in the browser site's local storage.

What is the default port for the Vibe AStock web interface?

The default address is http://127.0.0.1:8910 and the service listens only on the loopback interface. If the port is occupied, the README shows starting with a port override such as sh scripts/start --port 8911.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. README
  4. Releases
  5. simonlin1212/vibe-astock on GitHub
Community notes

Community notes