256
stars
24
commits
TypeScript
primary language
Aug 20, 2026
updated
Quant is an open-source desktop market terminal for tracking ETFs and stocks. It combines a reorderable watchlist, holdings-driven news, earnings context, annotated charts, macro overlays, causal setup-specific signal validation, an authoritative 1D Signal Desk, local probabilistic forecasts, an evidence-backed decision journal, and a verified Quant AI harness.
The core promise is simple: useful market context without paid API lock-in. Quant runs with public market data sources and deterministic signal analysis, can connect to a private llama.cpp server, or interface with an optional OpenAI, Gemini, Grok, or Claude account. No cloud LLM API key is required for the default experience.
Quant is built for rapid, disciplined market scanning and evidence-backed decision making:
Alt + Arrow), and remove ETFs and stocks in a persistent desktop watchlist.🟢 Buy Candidates, 🔴 Short Candidates, Cup bases, MA alignments, 52W highs, VCP contractions, volume surges, and relative strength leaders.BUY CANDIDATE, SHORT CANDIDATE, WAIT, and NO TRADE decisions with transparent no-trade blocker explanations.quant-signal-outcomes-v1.json) that resolves observed signals against subsequent daily bars.Quant v2.1.0 introduces Quant Signal Engine V2, completely overhauling the legacy generic rule score and unrelated breakout backtest with a causal, setup-specific, execution-aware, and self-validating signal system.
┌──────────────────────────────────────────────────────────────────────────────────┐
│ QUANT SIGNAL ENGINE V2 │
├─────────────────────────┬────────────────────────────┬───────────────────────────┤
│ 1D Signal Desk │ Historical Replay │ Forward Outcome Store │
│ • Setup Quality /100 │ • Lookahead-Free Replay │ • Persistent Local JSON │
│ • Honest Decision Badges│ • 5 bps Slippage Modeling │ • Deduplicated Logging │
│ • No-Trade Blockers │ • Gap Invalidation & Stopp│ • 10-Bar Forward Resolve │
│ • Balanced 6-Factor Grp│ • 95% Bootstrap Expectancy│ • Wilson Win Rate CI │
└─────────────────────────┴────────────────────────────┴───────────────────────────┘
🟢 Buy Candidates and 🔴 Short Candidates with live Setup Quality scores (quality 82/100) and candidate badges.gap-invalidated, gap-beyond-target, rr-invalidated), conservative same-bar stop priority, and 10-bar timeout exits.mulberry32 PRNG bootstrap 95% CI on expectancy $R$ and 95% Wilson score CI on win rate.quant-signal-outcomes-v1.json and evaluates trade resolution over subsequent daily bars.New:
Click the preview to watch the 12-second demo:
SAMPLE fallback; no new API key is required.gemma-4-e4b-it llama.cpp runtime.See CHANGELOG.md for the full release notes.
There are two practical ways to try Quant.
Download the platform archive from the GitHub Releases page, then extract it.
macOS:
open Quant-v2.0.0-mac-arm64/Quant.app
Windows PowerShell:
.\Quant-v2.0.0-win-x64\Quant.exe
The source repository contains no packaged binaries. Release ZIPs are published as GitHub Release assets, keeping ordinary clones small and avoiding Git LFS downloads.
If macOS blocks the unsigned app, open System Settings and allow the app after the first blocked launch. The app is ad-hoc signed for local use but not Apple-notarized.
Requirements:
macOS or Linux shell:
git clone --recurse-submodules https://github.com/eisenjimmy/Quant.git
cd Quant
npm start quant
Windows PowerShell:
git clone --recurse-submodules https://github.com/eisenjimmy/Quant.git
cd Quant
npm start quant
npm start quant and npm start run the same self-healing startup:
The core terminal still launches if forecast setup is unavailable and prints
one actionable warning. Use npm start -- --skip-forecast to intentionally
skip Python setup, or npm start -- --refresh to recheck all dependencies.
Startup updates dependencies from the committed lockfiles; it never runs
git pull or changes the checked-out source branch.
The onboarding wizard helps a new user choose a starter watchlist, configure local llama.cpp or an optional cloud provider, test the connection, and understand the basic reading flow.

The main screen keeps the app dense and practical: watchlist on the left, holdings-driven news in the center, and earnings context on the right.

The Market Pulse tab turns the most useful ideas from dense institutional terminals into one ordered workflow: committed market regime → source evidence → cross-asset relationships → shock sensitivity. Its score is deterministic and decomposable, every asset preserves live/sample provenance, and the scenario output is labeled as relative sensitivity rather than a return forecast.
The current monitor uses SPY, QQQ, IWM, TLT, GLD, and USO alongside public FRED labor/rate series and Yahoo VIX data. The regime engine keeps separate raw and committed states, requiring two completed sessions of agreement before a transition. The correlation matrix aligns the latest 90 daily return observations, while the scenario analyzer lets users stress rates, oil, and volatility without implying broker execution or options-flow coverage that Quant does not possess.
The regime model is an independent Quant implementation conceptually informed by the ARDS-X methodology in Dennis Kim's vibe-investing repository. Quant does not copy ARDS-X confidence claims, and its evidence-strength score is explicitly not a calibrated probability or return forecast.
The Signal Board turns daily candles into a compact scanner view. Quant runs deterministic pattern rules across the selected universe, ranks matching symbols, and labels each row with signal tags such as Cup, MA alignment, Near high, VCP, MACD, and RS strong.

Today the scanner covers the app's bundled U.S. stock directory plus optional watchlist/ETF modes. The API boundary is intentionally separated from the UI so a production bulk end-of-day feed can replace the bundled universe when full-market coverage is required.
Opening a symbol brings up the full chart workspace: candlesticks, volume, pivots, risk levels, deterministic signal scoring, evidence provenance, valuation context, earnings context, and the local Decision Journal. The workspace keeps the current canvas visible while ranges load, preserves each inspector tab's state, and exposes Fit/Latest keyboard navigation for quick recovery after zooming or panning.
Price studies include MA20, MA50, MA200, and a proportional log scale. Macro context is deliberately presented as one selectable lens on an independent mini-scale so unlike units never distort the equity price axis. The inspector can collapse into a full-width chart without discarding an in-progress AI memo or journal entry.

Open any ticker, select Forecast, and choose Run Forecast. Quant runs Kronos-mini locally, validates the 30 sampled paths, and displays the median plus sampled P10–P90 range on the chart.
Quant detects swing highs and swing lows, numbers the key points, and groups headlines published around each swing. The goal is to make price movement explainable: a user can click through the swing list and compare chart pivots against the news available near that date.

Quant can place one macro lens in an independent chart band. This is useful when a setup depends on rates, labor data, inflation, oil, volatility, or broad risk appetite. Restricting the chart to one macro unit at a time keeps the comparison legible without changing the equity price scale.

Available chart overlays:
| Overlay | Why It Matters |
|---|---|
| Jobs | Frames economic momentum and sector rotation risk |
| Unemployment | Helps identify labor-cycle stress or late-cycle cooling |
| CPI | Connects inflation pressure to rates, margins, and multiples |
| 10Y yield | Acts as a discount-rate anchor for equity and ETF valuation |
| Oil | Affects energy, transport, inflation, and consumer-margin pressure |
| VIX | Shows market fear, expected volatility, and stop-width regime |
| Risk | Draws entry, stop, target, and position sizing context |
Quant AI is a dedicated chart tab. It locks a numbered evidence ledger from the current symbol, signal evaluation, risk plan, pivot-linked news, earnings, valuation, and active macro overlays. A clean analyst context writes a provisional memo, an isolated verifier independently audits the same evidence, and a bounded orchestrator reconciles both into the final cited response. The UI exposes the stages, timing, evidence quality, validation checks, and fallbacks.

Quant AI does not require a paid cloud model provider. Open the Settings tab—or use the same setup during onboarding—to choose one active inference provider for the analyst, isolated verifier, and final orchestrator.
Available modes and providers:
| Provider | Default endpoint | Default model | Credential |
|---|---|---|---|
| Deterministic fallback | None | Rules engine | None |
| Local llama.cpp | http://127.0.0.1:8080/v1 | gemma-4-e4b-it | None |
| OpenAI | https://api.openai.com/v1 | gpt-5.4-mini | OpenAI API key |
| Google Gemini | https://generativelanguage.googleapis.com/v1beta/openai | gemini-3.5-flash | Gemini API key |
| xAI Grok | https://api.x.ai/v1 | grok-4.3 | xAI API key |
| Anthropic Claude | https://api.anthropic.com/v1 | claude-sonnet-4-6 | Anthropic API key |
Start a llama.cpp OpenAI-compatible server:
llama-server -m /path/to/model.gguf --host 127.0.0.1 --port 8080
Quant uses:
GET /healthPOST /v1/chat/completionsExample local setup:
export QUANT_LLM_ENABLED=1
export QUANT_LLM_PROVIDER=local
export QUANT_LLM_BASE_URL=http://127.0.0.1:8080/v1
export QUANT_LLM_MODEL=gemma-4-e4b-it
npm start
Windows PowerShell:
$env:QUANT_LLM_ENABLED="1"
$env:QUANT_LLM_PROVIDER="local"
$env:QUANT_LLM_BASE_URL="http://127.0.0.1:8080/v1"
$env:QUANT_LLM_MODEL="gemma-4-e4b-it"
npm start
Cloud API keys are optional. Quant encrypts saved keys using Electron safeStorage, backed by the operating system's credential protection. Keys stay in the Electron main process, are never returned to the UI after saving, and are sent only to the configured provider endpoint. If secure encryption is unavailable, Quant refuses to save the key in plaintext.
The Test connection action sends a minimal completion to verify the current endpoint, key, and model before the configuration is used by the harness.
| Area | Capability |
|---|---|
| Watchlist | Add ETFs or stocks, see prices and movers, right-click to delete, and drag or use Alt+Arrow to persist a custom order |
| ETF holdings | Expand ETF holdings so news and earnings cover underlying companies |
| News | Pull public finance headlines and group them by selected market universe |
| Swing news | Group headlines around each detected chart swing high or swing low |
| Earnings | Show upcoming earnings for watched names and ETF holdings |
| Market Pulse | Five-state regime with two-session hysteresis, evidence provenance, decline attribution, six-asset monitor, correlations, and scenarios |
| Charts | Candlesticks, volume, MA20/50/200, log scale, stable range transitions, Fit/Latest navigation, collapsible inspector, pivots, support/resistance, risk overlay |
| Macro overlays | Jobs, unemployment, CPI, 10Y yield, oil, VIX |
| Signal Board | End-of-day scan for cup bases, moving-average order, highs, VCP, volume, MACD, rebounds, and relative strength |
| Signal Desk | Deterministic setup classification, quality score, blockers, risk plan, numbered evidence provenance |
| Forecast | On-demand local Kronos-mini sampling, 24 trading-hour horizon, ETA/cancellation, chart ranges, immutable history, and observed-close comparison |
| Decision Journal | Local thesis, catalyst, invalidation, lifecycle state, and immutable signal snapshot |
| Quant AI | Local/cloud provider selection, verified analyst, isolated verifier, bounded orchestrator, citations, and deterministic fallback |
| Local persistence | Ordered watchlist, decision journal, saved forecasts, overlay preferences, Quant AI insights, LLM settings, OS-encrypted provider credentials |
| Release builds | macOS and Windows ZIPs published on GitHub Releases |
The image below is generated artwork for the README. It is not a literal app screenshot; the real screenshots above show the actual running UI.

Quant uses free public endpoints and bundled fallback data:
No API key is required for the default experience.
Important limitations:
SAMPLE badges mean bundled fallback data is being shown instead of live data.Quant/
src/
main/
main.ts Electron lifecycle, window setup, IPC handlers
preload.ts Secure typed bridge exposed as window.quant
services/
chart.ts Historical chart data loading
earnings.ts Earnings calendar data
forecastData.ts Dedicated hourly history validation and shaping
forecastStore.ts Immutable forecast records and overlay preferences
forecastOrchestrator.ts Kronos worker orchestration and record creation
kronosWorker.ts Lazy local Python/native-sidecar lifecycle client
holdings.ts ETF holdings lookup
insightStore.ts Saved Quant AI insight records
journalStore.ts Transactional local Decision Journal persistence
llmProvider.ts OpenAI-compatible and Claude request adapters
llmSettings.ts Provider settings and encrypted credential persistence
macro.ts Jobs, unemployment, CPI, 10Y, oil, VIX overlays
news.ts Market news aggregation
pivotNews.ts News grouped around chart pivots
quantAi.ts Analyst, verifier, and orchestrator harness
quotes.ts Watchlist quote data
signalScanner.ts End-of-day technical signal scanner
valuation.ts Valuation snapshot and formula estimates
data/
etf-holdings.json Offline holdings fallback
symbol-directory.json Offline symbol search fallback
renderer/
App.tsx App shell
store.tsx Watchlist, quotes, holdings, modal state
components/
OnboardingWizard.tsx First-run setup wizard
ChartModal.tsx Main chart workspace
MarketPulse.tsx Regime, cross-asset correlation, and scenario workspace
SignalBoard.tsx Multi-symbol end-of-day signal scanner
NewsFeed.tsx Holdings-driven news panel
Watchlist.tsx Watchlist and movers panel
chart/
ChartCanvas.tsx Lightweight Charts rendering
ForecastPanel.tsx Forecast execution, history, comparison, and controls
ForecastBandPrimitive.ts P10–P90 chart primitive
QuantAgentPanel.tsx Verified Quant AI harness and evidence trace UI
QuantDecisionPanel.tsx Evidence-Backed Signal Desk and Decision Journal
useMacroOverlays.ts Macro overlay data hook
styles/ App, chart, watchlist, news, earnings, analysis CSS
shared/
harness.ts Immutable numbered evidence-ledger builder
ipc.ts IPC channel names
forecast.ts Forecast contracts, validation, and progress rules
forecastWorker.ts Versioned worker protocol
marketPulse.ts Deterministic regime, correlation, and scenario calculations
types.ts Shared API and market data contracts
quant.ts Deterministic signal engine
signals.ts Multi-symbol pattern detector
forecast-engine/
worker.py NDJSON sidecar entry point
kronos_adapter.py Pinned Kronos model/tokenizer adapter
path_runner.py Seeded path generation and bounded validation
metrics.py Percentile aggregation and forecast metrics
scripts/
build.mjs esbuild bundle script
package-release.mjs Runnable macOS/Windows release folder and archive builder
check-forecast-release.mjs Unified forecast release gate
setup-forecast.mjs Pinned Python environment setup
test-quant.mjs Quant integration and regression tests
docs/
assets/
screenshots/ Real app screenshots used in this README
showcase/ Generated public repo visuals
Quant uses a standard Electron split:
| Layer | Path | Responsibility |
|---|---|---|
| Main process | src/main | Fetches remote data, owns persistent stores, handles IPC, opens external URLs |
| Preload bridge | src/main/preload.ts | Exposes a typed, narrow window.quant API to the renderer |
| Shared types | src/shared | IPC contracts, market data models, deterministic signal engine |
| Renderer | src/renderer | React UI, chart rendering, app state, onboarding, agent UI |
| Forecast worker | forecast-engine | Local Kronos inference, path validation, aggregation, and protocol-safe progress |
| Build scripts | scripts | Build, tests, smoke screenshots, release packaging |
The renderer does not directly call remote market endpoints. It asks the Electron main process through the preload bridge. That keeps network access, filesystem writes, local LLM calls, and external link opening in the main process.
| Command | Purpose |
|---|---|
npm run build | Bundle Electron main, preload, renderer, and static data into dist/ |
npm run typecheck | Run TypeScript type checking without emitting files |
npm run test:quant | Run deterministic signal-engine tests |
npm run test:start | Test one-command startup planning without installing or launching |
npm run check:forecast | Run forecast TypeScript, integration, resilience, Python, packaging, build, and browser-harness checks |
npm run setup:forecast | Create the local Python environment and verify the pinned Kronos source |
npm run build:forecast-sidecar | Build and health-check the native forecast sidecar for the current supported host |
npm start or npm start quant | Install missing/changed dependencies, prepare forecasts, build, and launch Quant |
npm start -- --skip-forecast | Launch the core terminal without preparing Python forecast support |
npm start -- --refresh | Reinstall/recheck dependencies before launching |
npm run smoke | Build, launch in smoke mode, and write dist/smoke.png |
npm run smoke:modal | Build, launch with the SPY chart modal open |
npm run package:mac | Build a runnable macOS app folder and ZIP locally in release/ |
npm run package:win | Build a runnable Windows app folder and ZIP locally in release/ |
npm run package:all | Build both local release folders and ZIP archives |
Kronos Forecast is experimental and runs only after Run Forecast is pressed. Opening Quant, selecting a ticker, or opening a chart does not start Python, load Kronos, fetch forecast history, or download model files.
For development:
npm run setup:forecast
npm run typecheck
npm run test:quant
For the complete host release gate, install PyInstaller, run
npm run build:forecast-sidecar on a supported native host, then run
npm run check:forecast. The gate launches the real frozen worker for a health
exchange and drives the actual built renderer in headless Chrome. Set
CHROME_PATH if Chrome is not installed in its standard location.
The first real forecast downloads the immutable
NeoQuasar/Kronos-mini and NeoQuasar/Kronos-Tokenizer-2k snapshots. Their
safetensor weights total about 32 MB. Quant verifies the pinned revision, file
size, and SHA-256 before loading them; model weights are cached outside the app
and are not included in release ZIPs.
Runtime device behavior:
Quant includes a lightweight release packager at scripts/package-release.mjs. It does not require electron-builder.
The packager:
scripts/build.mjs..release-cache/ if the local runtime is missing.resources/app.dist/ payload and native forecast sidecar.THIRD_PARTY_NOTICES.md.release/ directory.Build each sidecar on its native target host. PyInstaller does not cross-compile:
# Apple Silicon macOS
.forecast-venv/bin/python -m pip install -r forecast-engine/requirements-packaging.txt
npm run build:forecast-sidecar -- --platform=darwin --arch=arm64
npm run package:mac
# 64-bit Windows
.\.forecast-venv\Scripts\python.exe -m pip install -r forecast-engine\requirements-packaging.txt
npm run build:forecast-sidecar -- --platform=win32 --arch=x64
npm run package:win
The generated sidecars live under ignored sidecars/darwin-arm64 and
sidecars/win32-x64 folders. A packaging job may consume a sidecar artifact
built on the other native host.
Build both release folders:
npm run package:all
Outputs:
release/Quant-v2.1.0-mac-arm64/Quant.app
release/Quant-v2.1.0-mac-arm64.zip
release/Quant-v2.1.0-win-x64/Quant.exe
release/Quant-v2.1.0-win-x64.zip
The version is embedded in both the release folder and archive name so a new package never silently replaces the previous release.
Upload the ZIP archives as GitHub Release assets. Do not distribute Quant.exe alone because it depends on adjacent Electron runtime files.
Local macOS packages receive only ad-hoc signing. Public macOS distribution still requires a Developer ID signature and notarization. Windows packages are not code-signed by this script and require a separate signing step before public distribution.
On machines where global node/npm is unavailable but a working Electron runtime exists, the scripts can be run through Electron's Node mode:
ELECTRON_RUN_AS_NODE=1 /path/to/Electron.app/Contents/MacOS/Electron scripts/package-release.mjs --platform=darwin,win32
npm start opens no window in VS Code on WindowsSome VS Code terminals set ELECTRON_RUN_AS_NODE, which can make Electron behave like Node instead of launching a window.
PowerShell:
Remove-Item Env:ELECTRON_RUN_AS_NODE -ErrorAction SilentlyContinue
npm run build
& ".\node_modules\electron\dist\electron.exe" .
Check the local model server:
curl http://127.0.0.1:8080/health
Then confirm the environment variables are set in the same shell that launches Quant.
To reopen onboarding:
./node_modules/.bin/electron . --onboarding
To reset saved LLM preferences, remove llm-settings.json from Electron's userData directory and launch Quant again.
Original code by David Wong, username DavidWProject.
See CONTRIBUTING.md.
See SECURITY.md.
MIT. See LICENSE.
Quant is for research, education, and personal market monitoring. It is not investment advice, a broker, an execution system, or a source of guaranteed real-time market data.
23 commits
1 commits
TypeScript
61.6%
JavaScript
19.0%
CSS
10.6%
Python
8.8%
256
stars
24
commits
TypeScript
primary language
Aug 20, 2026
updated
Quant is an open-source desktop market terminal for tracking ETFs and stocks. It combines a reorderable watchlist, holdings-driven news, earnings context, annotated charts, macro overlays, causal setup-specific signal validation, an authoritative 1D Signal Desk, local probabilistic forecasts, an evidence-backed decision journal, and a verified Quant AI harness.
The core promise is simple: useful market context without paid API lock-in. Quant runs with public market data sources and deterministic signal analysis, can connect to a private llama.cpp server, or interface with an optional OpenAI, Gemini, Grok, or Claude account. No cloud LLM API key is required for the default experience.
Quant is built for rapid, disciplined market scanning and evidence-backed decision making:
Alt + Arrow), and remove ETFs and stocks in a persistent desktop watchlist.🟢 Buy Candidates, 🔴 Short Candidates, Cup bases, MA alignments, 52W highs, VCP contractions, volume surges, and relative strength leaders.BUY CANDIDATE, SHORT CANDIDATE, WAIT, and NO TRADE decisions with transparent no-trade blocker explanations.quant-signal-outcomes-v1.json) that resolves observed signals against subsequent daily bars.Quant v2.1.0 introduces Quant Signal Engine V2, completely overhauling the legacy generic rule score and unrelated breakout backtest with a causal, setup-specific, execution-aware, and self-validating signal system.
┌──────────────────────────────────────────────────────────────────────────────────┐
│ QUANT SIGNAL ENGINE V2 │
├─────────────────────────┬────────────────────────────┬───────────────────────────┤
│ 1D Signal Desk │ Historical Replay │ Forward Outcome Store │
│ • Setup Quality /100 │ • Lookahead-Free Replay │ • Persistent Local JSON │
│ • Honest Decision Badges│ • 5 bps Slippage Modeling │ • Deduplicated Logging │
│ • No-Trade Blockers │ • Gap Invalidation & Stopp│ • 10-Bar Forward Resolve │
│ • Balanced 6-Factor Grp│ • 95% Bootstrap Expectancy│ • Wilson Win Rate CI │
└─────────────────────────┴────────────────────────────┴───────────────────────────┘
🟢 Buy Candidates and 🔴 Short Candidates with live Setup Quality scores (quality 82/100) and candidate badges.gap-invalidated, gap-beyond-target, rr-invalidated), conservative same-bar stop priority, and 10-bar timeout exits.mulberry32 PRNG bootstrap 95% CI on expectancy $R$ and 95% Wilson score CI on win rate.quant-signal-outcomes-v1.json and evaluates trade resolution over subsequent daily bars.New:
Click the preview to watch the 12-second demo:
SAMPLE fallback; no new API key is required.gemma-4-e4b-it llama.cpp runtime.See CHANGELOG.md for the full release notes.
There are two practical ways to try Quant.
Download the platform archive from the GitHub Releases page, then extract it.
macOS:
open Quant-v2.0.0-mac-arm64/Quant.app
Windows PowerShell:
.\Quant-v2.0.0-win-x64\Quant.exe
The source repository contains no packaged binaries. Release ZIPs are published as GitHub Release assets, keeping ordinary clones small and avoiding Git LFS downloads.
If macOS blocks the unsigned app, open System Settings and allow the app after the first blocked launch. The app is ad-hoc signed for local use but not Apple-notarized.
Requirements:
macOS or Linux shell:
git clone --recurse-submodules https://github.com/eisenjimmy/Quant.git
cd Quant
npm start quant
Windows PowerShell:
git clone --recurse-submodules https://github.com/eisenjimmy/Quant.git
cd Quant
npm start quant
npm start quant and npm start run the same self-healing startup:
The core terminal still launches if forecast setup is unavailable and prints
one actionable warning. Use npm start -- --skip-forecast to intentionally
skip Python setup, or npm start -- --refresh to recheck all dependencies.
Startup updates dependencies from the committed lockfiles; it never runs
git pull or changes the checked-out source branch.
The onboarding wizard helps a new user choose a starter watchlist, configure local llama.cpp or an optional cloud provider, test the connection, and understand the basic reading flow.

The main screen keeps the app dense and practical: watchlist on the left, holdings-driven news in the center, and earnings context on the right.

The Market Pulse tab turns the most useful ideas from dense institutional terminals into one ordered workflow: committed market regime → source evidence → cross-asset relationships → shock sensitivity. Its score is deterministic and decomposable, every asset preserves live/sample provenance, and the scenario output is labeled as relative sensitivity rather than a return forecast.
The current monitor uses SPY, QQQ, IWM, TLT, GLD, and USO alongside public FRED labor/rate series and Yahoo VIX data. The regime engine keeps separate raw and committed states, requiring two completed sessions of agreement before a transition. The correlation matrix aligns the latest 90 daily return observations, while the scenario analyzer lets users stress rates, oil, and volatility without implying broker execution or options-flow coverage that Quant does not possess.
The regime model is an independent Quant implementation conceptually informed by the ARDS-X methodology in Dennis Kim's vibe-investing repository. Quant does not copy ARDS-X confidence claims, and its evidence-strength score is explicitly not a calibrated probability or return forecast.
The Signal Board turns daily candles into a compact scanner view. Quant runs deterministic pattern rules across the selected universe, ranks matching symbols, and labels each row with signal tags such as Cup, MA alignment, Near high, VCP, MACD, and RS strong.

Today the scanner covers the app's bundled U.S. stock directory plus optional watchlist/ETF modes. The API boundary is intentionally separated from the UI so a production bulk end-of-day feed can replace the bundled universe when full-market coverage is required.
Opening a symbol brings up the full chart workspace: candlesticks, volume, pivots, risk levels, deterministic signal scoring, evidence provenance, valuation context, earnings context, and the local Decision Journal. The workspace keeps the current canvas visible while ranges load, preserves each inspector tab's state, and exposes Fit/Latest keyboard navigation for quick recovery after zooming or panning.
Price studies include MA20, MA50, MA200, and a proportional log scale. Macro context is deliberately presented as one selectable lens on an independent mini-scale so unlike units never distort the equity price axis. The inspector can collapse into a full-width chart without discarding an in-progress AI memo or journal entry.

Open any ticker, select Forecast, and choose Run Forecast. Quant runs Kronos-mini locally, validates the 30 sampled paths, and displays the median plus sampled P10–P90 range on the chart.
Quant detects swing highs and swing lows, numbers the key points, and groups headlines published around each swing. The goal is to make price movement explainable: a user can click through the swing list and compare chart pivots against the news available near that date.

Quant can place one macro lens in an independent chart band. This is useful when a setup depends on rates, labor data, inflation, oil, volatility, or broad risk appetite. Restricting the chart to one macro unit at a time keeps the comparison legible without changing the equity price scale.

Available chart overlays:
| Overlay | Why It Matters |
|---|---|
| Jobs | Frames economic momentum and sector rotation risk |
| Unemployment | Helps identify labor-cycle stress or late-cycle cooling |
| CPI | Connects inflation pressure to rates, margins, and multiples |
| 10Y yield | Acts as a discount-rate anchor for equity and ETF valuation |
| Oil | Affects energy, transport, inflation, and consumer-margin pressure |
| VIX | Shows market fear, expected volatility, and stop-width regime |
| Risk | Draws entry, stop, target, and position sizing context |
Quant AI is a dedicated chart tab. It locks a numbered evidence ledger from the current symbol, signal evaluation, risk plan, pivot-linked news, earnings, valuation, and active macro overlays. A clean analyst context writes a provisional memo, an isolated verifier independently audits the same evidence, and a bounded orchestrator reconciles both into the final cited response. The UI exposes the stages, timing, evidence quality, validation checks, and fallbacks.

Quant AI does not require a paid cloud model provider. Open the Settings tab—or use the same setup during onboarding—to choose one active inference provider for the analyst, isolated verifier, and final orchestrator.
Available modes and providers:
| Provider | Default endpoint | Default model | Credential |
|---|---|---|---|
| Deterministic fallback | None | Rules engine | None |
| Local llama.cpp | http://127.0.0.1:8080/v1 | gemma-4-e4b-it | None |
| OpenAI | https://api.openai.com/v1 | gpt-5.4-mini | OpenAI API key |
| Google Gemini | https://generativelanguage.googleapis.com/v1beta/openai | gemini-3.5-flash | Gemini API key |
| xAI Grok | https://api.x.ai/v1 | grok-4.3 | xAI API key |
| Anthropic Claude | https://api.anthropic.com/v1 | claude-sonnet-4-6 | Anthropic API key |
Start a llama.cpp OpenAI-compatible server:
llama-server -m /path/to/model.gguf --host 127.0.0.1 --port 8080
Quant uses:
GET /healthPOST /v1/chat/completionsExample local setup:
export QUANT_LLM_ENABLED=1
export QUANT_LLM_PROVIDER=local
export QUANT_LLM_BASE_URL=http://127.0.0.1:8080/v1
export QUANT_LLM_MODEL=gemma-4-e4b-it
npm start
Windows PowerShell:
$env:QUANT_LLM_ENABLED="1"
$env:QUANT_LLM_PROVIDER="local"
$env:QUANT_LLM_BASE_URL="http://127.0.0.1:8080/v1"
$env:QUANT_LLM_MODEL="gemma-4-e4b-it"
npm start
Cloud API keys are optional. Quant encrypts saved keys using Electron safeStorage, backed by the operating system's credential protection. Keys stay in the Electron main process, are never returned to the UI after saving, and are sent only to the configured provider endpoint. If secure encryption is unavailable, Quant refuses to save the key in plaintext.
The Test connection action sends a minimal completion to verify the current endpoint, key, and model before the configuration is used by the harness.
| Area | Capability |
|---|---|
| Watchlist | Add ETFs or stocks, see prices and movers, right-click to delete, and drag or use Alt+Arrow to persist a custom order |
| ETF holdings | Expand ETF holdings so news and earnings cover underlying companies |
| News | Pull public finance headlines and group them by selected market universe |
| Swing news | Group headlines around each detected chart swing high or swing low |
| Earnings | Show upcoming earnings for watched names and ETF holdings |
| Market Pulse | Five-state regime with two-session hysteresis, evidence provenance, decline attribution, six-asset monitor, correlations, and scenarios |
| Charts | Candlesticks, volume, MA20/50/200, log scale, stable range transitions, Fit/Latest navigation, collapsible inspector, pivots, support/resistance, risk overlay |
| Macro overlays | Jobs, unemployment, CPI, 10Y yield, oil, VIX |
| Signal Board | End-of-day scan for cup bases, moving-average order, highs, VCP, volume, MACD, rebounds, and relative strength |
| Signal Desk | Deterministic setup classification, quality score, blockers, risk plan, numbered evidence provenance |
| Forecast | On-demand local Kronos-mini sampling, 24 trading-hour horizon, ETA/cancellation, chart ranges, immutable history, and observed-close comparison |
| Decision Journal | Local thesis, catalyst, invalidation, lifecycle state, and immutable signal snapshot |
| Quant AI | Local/cloud provider selection, verified analyst, isolated verifier, bounded orchestrator, citations, and deterministic fallback |
| Local persistence | Ordered watchlist, decision journal, saved forecasts, overlay preferences, Quant AI insights, LLM settings, OS-encrypted provider credentials |
| Release builds | macOS and Windows ZIPs published on GitHub Releases |
The image below is generated artwork for the README. It is not a literal app screenshot; the real screenshots above show the actual running UI.

Quant uses free public endpoints and bundled fallback data:
No API key is required for the default experience.
Important limitations:
SAMPLE badges mean bundled fallback data is being shown instead of live data.Quant/
src/
main/
main.ts Electron lifecycle, window setup, IPC handlers
preload.ts Secure typed bridge exposed as window.quant
services/
chart.ts Historical chart data loading
earnings.ts Earnings calendar data
forecastData.ts Dedicated hourly history validation and shaping
forecastStore.ts Immutable forecast records and overlay preferences
forecastOrchestrator.ts Kronos worker orchestration and record creation
kronosWorker.ts Lazy local Python/native-sidecar lifecycle client
holdings.ts ETF holdings lookup
insightStore.ts Saved Quant AI insight records
journalStore.ts Transactional local Decision Journal persistence
llmProvider.ts OpenAI-compatible and Claude request adapters
llmSettings.ts Provider settings and encrypted credential persistence
macro.ts Jobs, unemployment, CPI, 10Y, oil, VIX overlays
news.ts Market news aggregation
pivotNews.ts News grouped around chart pivots
quantAi.ts Analyst, verifier, and orchestrator harness
quotes.ts Watchlist quote data
signalScanner.ts End-of-day technical signal scanner
valuation.ts Valuation snapshot and formula estimates
data/
etf-holdings.json Offline holdings fallback
symbol-directory.json Offline symbol search fallback
renderer/
App.tsx App shell
store.tsx Watchlist, quotes, holdings, modal state
components/
OnboardingWizard.tsx First-run setup wizard
ChartModal.tsx Main chart workspace
MarketPulse.tsx Regime, cross-asset correlation, and scenario workspace
SignalBoard.tsx Multi-symbol end-of-day signal scanner
NewsFeed.tsx Holdings-driven news panel
Watchlist.tsx Watchlist and movers panel
chart/
ChartCanvas.tsx Lightweight Charts rendering
ForecastPanel.tsx Forecast execution, history, comparison, and controls
ForecastBandPrimitive.ts P10–P90 chart primitive
QuantAgentPanel.tsx Verified Quant AI harness and evidence trace UI
QuantDecisionPanel.tsx Evidence-Backed Signal Desk and Decision Journal
useMacroOverlays.ts Macro overlay data hook
styles/ App, chart, watchlist, news, earnings, analysis CSS
shared/
harness.ts Immutable numbered evidence-ledger builder
ipc.ts IPC channel names
forecast.ts Forecast contracts, validation, and progress rules
forecastWorker.ts Versioned worker protocol
marketPulse.ts Deterministic regime, correlation, and scenario calculations
types.ts Shared API and market data contracts
quant.ts Deterministic signal engine
signals.ts Multi-symbol pattern detector
forecast-engine/
worker.py NDJSON sidecar entry point
kronos_adapter.py Pinned Kronos model/tokenizer adapter
path_runner.py Seeded path generation and bounded validation
metrics.py Percentile aggregation and forecast metrics
scripts/
build.mjs esbuild bundle script
package-release.mjs Runnable macOS/Windows release folder and archive builder
check-forecast-release.mjs Unified forecast release gate
setup-forecast.mjs Pinned Python environment setup
test-quant.mjs Quant integration and regression tests
docs/
assets/
screenshots/ Real app screenshots used in this README
showcase/ Generated public repo visuals
Quant uses a standard Electron split:
| Layer | Path | Responsibility |
|---|---|---|
| Main process | src/main | Fetches remote data, owns persistent stores, handles IPC, opens external URLs |
| Preload bridge | src/main/preload.ts | Exposes a typed, narrow window.quant API to the renderer |
| Shared types | src/shared | IPC contracts, market data models, deterministic signal engine |
| Renderer | src/renderer | React UI, chart rendering, app state, onboarding, agent UI |
| Forecast worker | forecast-engine | Local Kronos inference, path validation, aggregation, and protocol-safe progress |
| Build scripts | scripts | Build, tests, smoke screenshots, release packaging |
The renderer does not directly call remote market endpoints. It asks the Electron main process through the preload bridge. That keeps network access, filesystem writes, local LLM calls, and external link opening in the main process.
| Command | Purpose |
|---|---|
npm run build | Bundle Electron main, preload, renderer, and static data into dist/ |
npm run typecheck | Run TypeScript type checking without emitting files |
npm run test:quant | Run deterministic signal-engine tests |
npm run test:start | Test one-command startup planning without installing or launching |
npm run check:forecast | Run forecast TypeScript, integration, resilience, Python, packaging, build, and browser-harness checks |
npm run setup:forecast | Create the local Python environment and verify the pinned Kronos source |
npm run build:forecast-sidecar | Build and health-check the native forecast sidecar for the current supported host |
npm start or npm start quant | Install missing/changed dependencies, prepare forecasts, build, and launch Quant |
npm start -- --skip-forecast | Launch the core terminal without preparing Python forecast support |
npm start -- --refresh | Reinstall/recheck dependencies before launching |
npm run smoke | Build, launch in smoke mode, and write dist/smoke.png |
npm run smoke:modal | Build, launch with the SPY chart modal open |
npm run package:mac | Build a runnable macOS app folder and ZIP locally in release/ |
npm run package:win | Build a runnable Windows app folder and ZIP locally in release/ |
npm run package:all | Build both local release folders and ZIP archives |
Kronos Forecast is experimental and runs only after Run Forecast is pressed. Opening Quant, selecting a ticker, or opening a chart does not start Python, load Kronos, fetch forecast history, or download model files.
For development:
npm run setup:forecast
npm run typecheck
npm run test:quant
For the complete host release gate, install PyInstaller, run
npm run build:forecast-sidecar on a supported native host, then run
npm run check:forecast. The gate launches the real frozen worker for a health
exchange and drives the actual built renderer in headless Chrome. Set
CHROME_PATH if Chrome is not installed in its standard location.
The first real forecast downloads the immutable
NeoQuasar/Kronos-mini and NeoQuasar/Kronos-Tokenizer-2k snapshots. Their
safetensor weights total about 32 MB. Quant verifies the pinned revision, file
size, and SHA-256 before loading them; model weights are cached outside the app
and are not included in release ZIPs.
Runtime device behavior:
Quant includes a lightweight release packager at scripts/package-release.mjs. It does not require electron-builder.
The packager:
scripts/build.mjs..release-cache/ if the local runtime is missing.resources/app.dist/ payload and native forecast sidecar.THIRD_PARTY_NOTICES.md.release/ directory.Build each sidecar on its native target host. PyInstaller does not cross-compile:
# Apple Silicon macOS
.forecast-venv/bin/python -m pip install -r forecast-engine/requirements-packaging.txt
npm run build:forecast-sidecar -- --platform=darwin --arch=arm64
npm run package:mac
# 64-bit Windows
.\.forecast-venv\Scripts\python.exe -m pip install -r forecast-engine\requirements-packaging.txt
npm run build:forecast-sidecar -- --platform=win32 --arch=x64
npm run package:win
The generated sidecars live under ignored sidecars/darwin-arm64 and
sidecars/win32-x64 folders. A packaging job may consume a sidecar artifact
built on the other native host.
Build both release folders:
npm run package:all
Outputs:
release/Quant-v2.1.0-mac-arm64/Quant.app
release/Quant-v2.1.0-mac-arm64.zip
release/Quant-v2.1.0-win-x64/Quant.exe
release/Quant-v2.1.0-win-x64.zip
The version is embedded in both the release folder and archive name so a new package never silently replaces the previous release.
Upload the ZIP archives as GitHub Release assets. Do not distribute Quant.exe alone because it depends on adjacent Electron runtime files.
Local macOS packages receive only ad-hoc signing. Public macOS distribution still requires a Developer ID signature and notarization. Windows packages are not code-signed by this script and require a separate signing step before public distribution.
On machines where global node/npm is unavailable but a working Electron runtime exists, the scripts can be run through Electron's Node mode:
ELECTRON_RUN_AS_NODE=1 /path/to/Electron.app/Contents/MacOS/Electron scripts/package-release.mjs --platform=darwin,win32
npm start opens no window in VS Code on WindowsSome VS Code terminals set ELECTRON_RUN_AS_NODE, which can make Electron behave like Node instead of launching a window.
PowerShell:
Remove-Item Env:ELECTRON_RUN_AS_NODE -ErrorAction SilentlyContinue
npm run build
& ".\node_modules\electron\dist\electron.exe" .
Check the local model server:
curl http://127.0.0.1:8080/health
Then confirm the environment variables are set in the same shell that launches Quant.
To reopen onboarding:
./node_modules/.bin/electron . --onboarding
To reset saved LLM preferences, remove llm-settings.json from Electron's userData directory and launch Quant again.
Original code by David Wong, username DavidWProject.
See CONTRIBUTING.md.
See SECURITY.md.
MIT. See LICENSE.
Quant is for research, education, and personal market monitoring. It is not investment advice, a broker, an execution system, or a source of guaranteed real-time market data.
23 commits
1 commits
TypeScript
61.6%
JavaScript
19.0%
CSS
10.6%
Python
8.8%