This is / isn’t
| This is | This isn’t |
|---|---|
| Claim ledger + Discord buzzer | A trading bot / broker |
| BYO Discord + BYO sources you subscribe to | A Macro Charts reseller |
| Multi-ingest into one inbox → guards → arms | Auto-arming from charts without numbers |
| Most-recent-wins mind | A generic TradingView ping clone |
Use only content you have the right to use. Do not redistribute paid newsletter text. Levels arm only when a number appears in that issue’s text. Alerts are not trade instructions.
Install
Clone from GitHub, pinning release v0.1.1.
git clone --branch v0.1.1 --depth 1 https://github.com/cemini23/GuruWatcher cd GuruWatcher
macOS / Linux
python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt # Or: pip install -e .
Windows (PowerShell)
py -3 -m venv .venv .\.venv\Scripts\Activate.ps1 pip install -r requirements.txt # If Activate.ps1 is blocked: # Set-ExecutionPolicy -Scope Process Bypass
Optional: Docker Desktop (macOS/Windows) or native Docker (Linux) — see step 7 for the full pipeline.
First-hour checklist
-
Init portable data dir
python3 -m guru_watcher init --wizard --data-dir ./gw-data # interactive; --wizard --yes = headless export GURU_WATCHER_DATA="$(pwd)/gw-data" python3 -m guru_watcher status
Windows:
python -m guru_watcher init --wizard --data-dir .\gw-datathen$env:GURU_WATCHER_DATA = "$(Get-Location)\gw-data". Createsconfig.yaml,.env.example,sources/,inbox/,state/.statusshows data dir + config, webhook yes/no only (never the URL), watch counts, ingest age, and dry-run-safe / live-ready mode. -
Set webhook (or stay dry-run)
cp "$GURU_WATCHER_DATA/.env.example" "$GURU_WATCHER_DATA/.env" # Edit .env — only when you want live Discord: # GURU_WATCHER_DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
CLI reads the webhook from
$GURU_WATCHER_DATA/.env. Or:bash scripts/setup_discord_webhook.sh 'https://…'. Never commit.env. -
Add / edit a source — edit
gw-data/config.yamlorgw-data/sources/example.yamlfor symbols and bands you have rights to use. -
Ingest once
mkdir -p "$GURU_WATCHER_DATA/drop" # Drop a .md/.txt issue you own rights to into drop/ python3 -m guru_watcher ingest-run --adapter file_drop --data-dir "$GURU_WATCHER_DATA" --path drop --once
-
Extract + dry-run check
python3 -m guru_watcher ingest-issue --inbox "$GURU_WATCHER_DATA/inbox" --guru example --dry-run python3 -m guru_watcher check --dry-run
First-hour host smoke (no webhook / Docker / network):
bash scripts/smoke_host_oneshot.sh(Windows:smoke_host_oneshot.ps1).
Cold-user demo pack (synthetic sample, proves ≥1 armed watch):bash demos/first-hour/run.sh(Windows:demos\first-hour\run.ps1). -
Optional Docker — one-command pipeline
export GURU_WATCHER_HOST_DATA="$(pwd)/gw-data" export GURU_WATCHER_MODE=dry-run docker compose up --build
Default
loop-pipeline: ingest → reconcile → check. One-shot:docker compose run --rm guruwatcher pipeline. Live:GURU_WATCHER_MODE=live+ webhook (fail closed). Prebuilt:ghcr.io/cemini23/guruwatcher:v0.1.1(or:latest).
Scheduling
ingest-run is a single pass — schedule it yourself. Docker loop-pipeline covers the full spine on an interval, and serve does the same without Docker.
Non-Docker loop — serve
python3 -m guru_watcher serve --data-dir "$GURU_WATCHER_DATA" --interval 900 python3 -m guru_watcher serve --once --data-dir "$GURU_WATCHER_DATA" # single pass
Runs ingest → reconcile → check on an interval. Dry-run default; --mode live requires a webhook and fails closed.
Linux / macOS cron
*/15 * * * * cd /path/to/GuruWatcher && GURU_WATCHER_DATA="$HOME/gw-data" .venv/bin/python -m guru_watcher ingest-run --adapter file_drop --data-dir "$HOME/gw-data" --path drop --once */5 * * * * cd /path/to/GuruWatcher && GURU_WATCHER_DATA="$HOME/gw-data" .venv/bin/python -m guru_watcher check --dry-run
Windows Task Scheduler
$py = "$env:USERPROFILE\GuruWatcher\.venv\Scripts\python.exe" $data = "$env:USERPROFILE\gw-data" $cmd = "& '$py' -m guru_watcher check --dry-run" $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -Command $cmd" $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 5) Register-ScheduledTask -TaskName "GuruWatcherCheck" -Action $action -Trigger $trigger
No Docker? Linux templates in systemd/toolkit/ run the same pipeline via a venv.
Support
- Primary: GitHub Issues
- Secondary:
[email protected] - No Discord invite is published until a real community space exists.
Platform matrix
docs/PLATFORM.md: pip/venv CLI on Linux/macOS/Windows; Docker pipeline on Linux + Docker Desktop; CI smoke on Linux (host+docker), macOS (pytest), Windows (host ps1). No native GUI.
Safety
Alert-only BYO sources No orders
- Never places trades
- Do not commit webhook URLs or API keys
- Not investment advice · not a broker · not redistributing paid newsletters