Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
Scan and monitor momentum stock signals and alerts
Translation pending
AI summary · website content
FinancePython · JavaScriptGitHub @jambioneOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗This repository contains the dashboard, signal scanner, indicator library, and optional Alpaca execution helpers used to run the Brasfield momentum workflow locally or on a server.
Quick links:
dashboard.py (FastAPI + WebSocket)signal_engine.pysignals.pyalpaca_trader.pyswing_screener.pyrs_screener.py (+ rs_core.py, rs_cache.py, rs_fetch.py)config.py, config/bot_config.json, config/secrets.example.jsonDocs (see docs/)
docs/ONBOARDING.mddocs/RELATIVE_STRENGTH.mddocs/TICKER_RECOGNITION_SUMMARY.md,
docs/TICKER_RECOGNITION_IMPROVEMENTS.md, docs/CODX_FIX_SUMMARY.mdQuickstart (local)
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp config/secrets.example.json config/secrets.json
# edit config/secrets.json (do NOT commit this file)
python dashboard.py
Then open http://localhost:8888 in your browser.
Security & secrets
secrets.json MUST NOT be committed. This repo already includes
.gitignore entry for secrets.json. If you accidentally committed
keys, rotate them immediately.secrets.example.json as the template for required keys.Recommended next steps
pip install pre-commit && pre-commit install.github/workflows/)Configuration
bot_config.json or use environment variables. See config.py for
default keys and SAFE_CONFIG_KEYS that can be changed from the dashboard.Discord alert source (OCR — macOS)
discord_ocr.swift → discord_ocr (compiled Swift binary) and
discord_source.py (polls the binary, parses alert lines, POSTs new mentions).bash scripts/build_ocr.shconfig/bot_config.json: "discord_ocr_enabled": truestart_all.py launches it automatically (logs prefixed [discord]).TradingView webhook (second signal source)
scripts/brasfield_squeeze_alert.pine) fires
a webhook to /api/tradingview/webhook when a squeeze releases on the chart.tv_webhook_secret in config/bot_config.json and point the TV alert at
https://trading.jbrasfield.com/api/tradingview/webhook?secret=<your_secret>.docs/ONBOARDING.md §6 for the full setup walkthrough.Tests & CI
tests/ and enable CI. A secret-scan workflow
and a pre-commit config are included to prevent accidental key commits.If you want, I can update this README with deployment or Docker instructions.
Pinned-fill exit replay (no re-arm):
.venv/bin/python tools/sim_fill_replay.py --tape ai_reports/tapes/YYYY-MM-DD \
--bars-cache ai_reports/fill_replay/bars.json --no-fetch \
--overlay give_r=0.35
Entry+exit A/B on a packed tape (drop fills that fail NEW arm provenance,
then replay exits). Does not write bot_config.json:
.venv/bin/python tools/sim_tape_ab.py --day 2026-09-01 \
--tape ai_reports/tapes/2026-09-01 --no-fetch \
--bars-cache ai_reports/fill_replay/bars.json \
--a 'rest+give=0.2' --b 'stream+rt_macd+give=0.35'
Pack a day on the mini after the close: tools/desk_tape.py pack --day YYYY-MM-DD.