{"id":50434728,"url":"https://github.com/l3lackcurtains/trading-ops","last_synced_at":"2026-05-31T16:30:58.354Z","repository":{"id":355226639,"uuid":"1226990646","full_name":"l3lackcurtains/trading-ops","owner":"l3lackcurtains","description":"📈 Framework-driven trading workspace in Claude Code — one slash command scans stocks, crypto, FX, indices \u0026 commodities with structured verdicts and audit trails 🤖","archived":false,"fork":false,"pushed_at":"2026-05-02T15:26:41.000Z","size":244,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-02T15:27:47.315Z","etag":null,"topics":["ai","algorithmic-trading","claude-code","crypto","forex","stocks","technical-analysis","trading"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/l3lackcurtains.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-02T04:14:35.000Z","updated_at":"2026-05-02T15:26:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/l3lackcurtains/trading-ops","commit_stats":null,"previous_names":["l3lackcurtains/trading-ops"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/l3lackcurtains/trading-ops","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l3lackcurtains%2Ftrading-ops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l3lackcurtains%2Ftrading-ops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l3lackcurtains%2Ftrading-ops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l3lackcurtains%2Ftrading-ops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/l3lackcurtains","download_url":"https://codeload.github.com/l3lackcurtains/trading-ops/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/l3lackcurtains%2Ftrading-ops/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33739860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","algorithmic-trading","claude-code","crypto","forex","stocks","technical-analysis","trading"],"created_at":"2026-05-31T16:30:57.018Z","updated_at":"2026-05-31T16:30:58.342Z","avatar_url":"https://github.com/l3lackcurtains.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/trading-ops-logo.png\" alt=\"trading-ops\" width=\"200\" /\u003e\n\u003c/p\u003e\n\nA systematic trading workspace that runs inside [Claude Code](https://claude.ai/code). One command scans any asset — stock, crypto, index, FX, commodity — and produces a dated, framework-aligned analysis with structured verdicts, ASCII price ladders, and trade tables. Everything saves as local Markdown: auditable, greppable, version-controlled, and yours.\n\nIt is intentionally lean. The framework handles research and structured verdicts — execution, alerts, and integrations are left to you. That boundary is deliberate: your trading decisions should stay yours.\n\nThe base layer works out of the box. But Claude Code is MCP-native, so the stack is open:\n\n```\n+ broker MCP       → place orders directly from a verdict (Alpaca, CCXT / Weex / Binance)\n+ Chrome MCP       → auto-pull TradingView charts into every scan\n+ Hermes           → run scans 24/7 on a $5 VPS, push alerts to Telegram or Discord\n+ Playwright MCP   → scrape any page without an API — positions, portals, flow data\n+ Slack MCP        → post verdict deltas to a channel the moment a rescan flips\n```\n\nEvery integration is additive. The research framework stays the anchor; MCPs handle execution and delivery. Add as many or as few as you need.\n\n```\n/scan AAPL        → 6-pillar fundamentals + Volume Profile + VWAP + trade plan\n/scan BTCUSDT     → F\u0026G + ETF flows + perp funding/OI + liquidation heatmap\n/scan SPX         → gamma exposure + VIX term structure + AAII + breadth\n/scan EURUSD      → CFTC COT + retail sentiment + rate differentials\n/scan-macro       → regime quadrant (Goldilocks / Reflation / Stagflation / Risk-Off)\n/discover         → Finviz screener anchored to current macro regime\n```\n\n---\n\n## Demo\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/demo.gif\" alt=\"trading-ops — live scan running in Claude Code\" /\u003e\n\u003c/p\u003e\n\n---\n\n## What you get\n\n**Structured verdicts — no prose triggers.** Every scan ends with a verb (`LONG` / `SHORT` / `WAIT` / `SKIP` / ...), an ASCII price ladder with every level marked, and a trade table with Entry / Stop / T1 / T2 / T3 / R:R / Sizing / Time-stop:\n\n```\n              BTCUSDT  -  2026-04-29  -  spot $76,335\n              ==========================================\n\n              UPSIDE  (bull resolution path)\n   $84,000   ===   [T2]  heatmap cluster (forced-cover magnet)\n   $80,000   ===   [T1]  heatmap density + May 30 max pain\n   $79,500         --\u003e   LONG entry  (Swing-B)\n   $79,200   ===    ^^   trigger: daily close ≥ + green vector\n   $78,200   ###         supply zone bottom (3-wk rejection)\n   - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\u003e\u003e $76,335   ***   CURRENT   ***\n   $75,500   ===   [t]   Day target / counter-trend entry\n   - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n              DOWNSIDE  (bear resolution path)\n   $73,800         --\u003e   SHORT entry  (Swing-A)\n   $66,000   ===   [T3]  long-dated max pain (Sept/Dec OPEX)\n```\n\n**Three horizons per name.** Positional (weeks–months), Swing (3–15 days), Day (intraday). Different verdict per horizon — positional auto-reject is compatible with a tradeable swing.\n\n**Audit trail built in.** Every scan is dated and archived. Rescans delta-compare against prior snapshots (`Δ since last scan`) and classify prior triggers as `fired-correct / fired-stopped / invalidated / stale`.\n\n**Mostly no API keys required.** Nine Python scripts pre-compute data locally (Yahoo Finance, SEC EDGAR, CoinGecko, alternative.me, Binance, mempool.space, Google News RSS). Optional free keys for FRED macroeconomics and Finnhub analyst data upgrade the output further.\n\n---\n\n## Prerequisites\n\n- **[Claude Code](https://claude.ai/code)** — the CLI that runs the slash commands\n- **Python 3.10+** — for the data pre-compute scripts\n- **Free TradingView account** (optional) — for chart screenshots via chrome-devtools MCP\n\nNo paid data subscriptions required at any tier.\n\n---\n\n## Installation\n\n```bash\ngit clone https://github.com/YOUR_USERNAME/trading-ops.git\ncd trading-ops\n\npython3 -m venv .venv\nsource .venv/bin/activate          # Windows: .venv\\Scripts\\activate\npip install -r requirements.txt\n```\n\nOr with [uv](https://github.com/astral-sh/uv) (faster installs, no activation needed):\n\n```bash\ngit clone https://github.com/YOUR_USERNAME/trading-ops.git\ncd trading-ops\n\nuv venv\nuv pip install -r requirements.txt\n```\n\nScripts can then be run directly without activating the venv:\n\n```bash\nuv run python scripts/fetch_quote.py AAPL\nuv run python scripts/fetch_ohlc.py BTCUSDT\n```\n\nOr with npm (installs venv, dependencies, and the pre-commit hook in one step):\n\n```bash\nnpm run setup\n```\n\nThen open the folder in Claude Code:\n\n```bash\nclaude .\n```\n\nThe slash commands are immediately available. Start with:\n\n```\n/scan-macro\n```\n\n---\n\n## Optional API keys\n\nSet these as environment variables (e.g. in `~/.bashrc` or a `.env`):\n\n| Variable | Source | What it unlocks |\n|---|---|---|\n| `FRED_API_KEY` | [fredaccount.stlouisfed.org/apikeys](https://fredaccount.stlouisfed.org/apikeys) (free) | Full macro data via `fetch_macro.py` — replaces ~6 WebFetches per `/scan-macro` |\n| `FINNHUB_TOKEN` | [finnhub.io/register](https://finnhub.io/register) (free, 60 req/min) | Analyst price targets, recommendations, earnings AMC/BMO timing |\n| `SEC_USER_AGENT` | Any string: `\"Name \u003cemail\u003e\"` | SEC EDGAR fair-access policy for `fetch_sec.py` — Form 4 insider data + ROIC from XBRL |\n\nEverything works without keys. The keys are upgrades.\n\n---\n\n## Quick start (first 5 minutes)\n\n**1. Set the macro regime.**\n```\n/scan-macro\n```\nPulls rates, curve, CPI, PCE, NFP, DXY, VIX. Places the market in one of four quadrants (Goldilocks / Reflation / Stagflation / Risk-Off). Saves to `scanned/MACRO/current.md`. Run this first — the regime gates every downstream verdict.\n\n**2. Scan a ticker.**\n```\n/scan AAPL\n```\nAuto-detects asset class (stock → 6-pillar + Volume Profile + VWAP + ChartExchange flow). Saves to `scanned/stocks/AAPL/current.md`. For crypto, FX, indices, or commodities — same command, different symbol.\n\n**3. Find new names.**\n```\n/discover\n```\nParses your intent into Finviz filters, anchors to the current regime, saves a candidate list to `scanned/SCREENS/`. Then `/scan \u003cTICKER\u003e` on anything promising.\n\n**4. Rescan when things move.**\n```\n/rescan AAPL\n```\nRotates the prior snapshot to `archive/`, pulls fresh data, marks the TL;DR with `Δ` if the verdict changed.\n\n---\n\n## All commands\n\n| Command | What it does |\n|---|---|\n| `/scan-macro` | Top-down regime read. Sets the quadrant for all downstream scans. |\n| `/scan [SYMBOL]` | Universal scan — auto-detects stock / crypto / index / FX / commodity. No args = regenerate `scanned/INDEX.md`. |\n| `/rescan SYMBOL\\|macro` | Full refresh — rotate archive, pull fresh data, mark deltas. |\n| `/scan-flow SYMBOL` | Partial: refresh asset-class flow \u0026 positioning only (COT / ETF / gamma). |\n| `/scan-fundamentals TICKER` | Partial: refresh 6-pillar scorecard only (stocks). Run after new 10-Q / 13F. |\n| `/scan-earnings TICKER` | Partial: earnings setup 8-point checklist. Run 4–6 weeks pre-print. |\n| `/discover [intent]` | Finviz screener. Natural language: `/discover cheap semis with ROI \u003e 20`. |\n| `/ingest source` | Add new framework knowledge to `docs/`. PDF / URL / inline text. |\n| `/calibrate [scope]` | Audit `guide/` against `docs/` for drift. |\n\n### Asset-class auto-detection\n\n| Symbol shape | Routed as | Extra data |\n|---|---|---|\n| 1–5 letter US ticker | Stock | 6-pillar + ChartExchange + earnings |\n| ends in `USDT`/`USD` | Crypto | F\u0026G + ETF + perp funding/OI + max pain + heatmap |\n| `SPX` / `NDX` / `SPY` / `QQQ` | Index | Gamma + VIX structure + AAII + breadth + COT |\n| 6-letter pair (`EURUSD`) | FX | CFTC COT + retail sentiment + rate diffs |\n| `CL` / `GC` / `USO` / `GLD` | Commodity | COT + EIA/USDA + curve + seasonality |\n\nOverride ambiguous cases: `/scan MSTR --type=crypto`\n\n---\n\n## Folder layout\n\n```\ntrading-ops/\n├── docs/                    ← framework knowledge base (read-only)\n│   ├── macro.md             ← 4-regime model, key indicators, news-trading playbook\n│   ├── long-term-investing.md  ← 6-pillar fundamentals, moat types, 10-K reading\n│   ├── positioning.md       ← squeeze tier, dealer gamma, CFTC COT\n│   ├── volume-profile.md    ← POC / VAH / VAL / HVN / LVN, profile shapes\n│   └── vwap.md              ← session / weekly / monthly / quarterly / anchored VWAP\n├── guide/                   ← scan protocol (read-only during scans)\n│   ├── scan-rules.md        ← index into guide/scan/\n│   └── scan/                ← per-concern protocol files\n├── .claude/commands/        ← slash command definitions\n├── scripts/                 ← Python data-fetch utilities\n├── scanned/                 ← living analyses — your trading desk\n│   ├── INDEX.md             ← auto-generated coverage navigator\n│   ├── MACRO/               ← regime tracker\n│   ├── stocks/\u003cTICKER\u003e/     ← per-stock coverage (current.md + archive/)\n│   ├── crypto/\u003cSYMBOL\u003e/\n│   ├── indices/\u003cSYMBOL\u003e/\n│   ├── fx/\u003cPAIR\u003e/\n│   └── commodities/\u003cSYMBOL\u003e/\n└── requirements.txt\n```\n\n`docs/` and `guide/` are read-only during scans — the framework is enforced, not improvised. `/ingest` is the only command that writes to `docs/`. `/calibrate` audits `guide/` for drift against the knowledge base.\n\n---\n\n## Python scripts\n\nThe scripts replace WebFetches with local pre-computation. All keyless by default; optional keys shown in parentheses:\n\n| Script | What it pre-computes |\n|---|---|\n| `fetch_quote.py TICKER` | Yahoo Finance quote — price, valuation, profitability, growth, balance sheet, short interest, analyst consensus. Includes Pillar-1 numeric auto-reject check. |\n| `fetch_ohlc.py TICKER` | Multi-timeframe OHLCV + EMAs (20/50/200) + ATR + RSI + VWAP family (session/weekly/monthly/quarterly/anchored, ±σ bands) + Volume Profile (POC/VAH/VAL/HVN/LVN + ASCII histogram). |\n| `fetch_sec.py TICKER` | SEC EDGAR Form 4 insider transactions, cluster detection, ROIC from XBRL company facts. Requires `SEC_USER_AGENT`. |\n| `fetch_max_pain.py TICKER` | Options max pain across next N OPEX dates from yfinance options chain. |\n| `fetch_macro.py` | FRED macro gauges + Treasury yield curve. Requires `FRED_API_KEY`. |\n| `fetch_crypto.py SYMBOL` | CoinGecko + alternative.me F\u0026G + Binance klines + mempool.space + DeFiLlama. |\n| `fetch_news.py SYMBOL` | Google News RSS (keyless) + Finviz widget + optional Finnhub analyst data (`FINNHUB_TOKEN`). |\n| `regen_index.py` | Regenerate `scanned/INDEX.md` from every `current.md`. |\n| `prune_archive.py [--apply]` | Retention policy — keep latest per month, drop \u003e12 months. Dry-run by default. |\n| `validate_links.py` | Project-wide markdown link audit. Exits non-zero on broken links. |\n| `validate_tiers.py` | Lint coverage tier syntax across all `current.md` files. |\n\nRun any script with `--help` for full options. Use `.venv/bin/python scripts/\u003cscript\u003e.py` if the venv is not activated.\n\n---\n\n## Coverage tiers\n\nEvery scan tags one tier per horizon (Pos / Swing / Day). `INDEX.md` rolls them up:\n\n| Tier | Meaning |\n|---|---|\n| **T** — Top Pick | Full conviction, deploy on next trigger |\n| **W** — Watchlist | Live trigger spec ready, act when conditions hit |\n| **B** — Bench | Followed but no near-term trigger |\n| **S** — Skip | Auto-reject or hostile setup |\n| **X** — Dropped | Removed from coverage |\n\nA name's verdict can differ by horizon — positional S is compatible with a swing W around a catalyst.\n\n---\n\n## The framework (in `docs/`)\n\nAll scans draw from four documents in `docs/`. They are read-only during scans — the framework is the anchor.\n\n- **`macro.md`** — Four growth × inflation quadrants (Goldilocks / Reflation / Stagflation / Risk-Off), key indicators, FOMC/CPI/NFP news-trading playbook, bubble indicators.\n- **`long-term-investing.md`** — 6-pillar scorecard (Quality / Growth / Valuation / Balance Sheet / Capital Allocation / Smart Money), moat types, how to read a 10-K, capital allocation discipline.\n- **`volume-profile.md`** — POC / VAH / VAL / HVN / LVN, profile shapes (D / P / b / B / multi-modal), naked POCs as forward targets. The backbone of the technical read.\n- **`vwap.md`** — Session / weekly / monthly / quarterly / anchored VWAP, ±1σ / ±2σ bands, reclaim / lose patterns. The second leg of the technical core.\n\nAdd new knowledge via `/ingest`. The command shows a write plan and waits for consent before touching `docs/`.\n\n---\n\n## Extending the framework\n\n**New framework knowledge** (new indicator, new macro model, new positioning concept):\n```\n/ingest input/new-paper.pdf\n/ingest \"Add dealer delta positioning section to macro.md\"\n```\n\n**Protocol improvements** (better source priority, new data source, fixed filter code): handled by the self-improvement loop — Claude surfaces suggestions at the end of every scan and waits for your consent before editing `guide/` or `.claude/commands/`.\n\n**New asset class or data source**: add a `guide/scan/\u003cclass\u003e-flow.md` file following the pattern of the existing flow docs, then run `/calibrate` to sync.\n\n---\n\n## Extending with MCPs\n\nClaude Code is MCP-native. Any MCP server you add to `~/.claude/claude.json` (global) or `.claude/settings.json` (project) is immediately available inside every slash command and freeform session. The possibilities are essentially unbounded — here are the ones that slot most naturally into this workspace.\n\n### Broker integration\n\nWire up order execution so Claude can place, size, and cancel orders directly from a scan verdict.\n\n**Alpaca** (stocks, commission-free):\n```json\n// ~/.claude/claude.json → mcpServers\n\"alpaca\": {\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@alpacahq/alpaca-mcp\"],\n  \"env\": {\n    \"ALPACA_API_KEY\": \"your-key\",\n    \"ALPACA_API_SECRET\": \"your-secret\",\n    \"ALPACA_BASE_URL\": \"https://paper-api.alpaca.markets\"\n  }\n}\n```\n\nAfter adding it, `/scan AAPL` ends with a trade table — then you ask Claude: *\"Place the Swing-B entry as a limit order, 50% size.\"* Claude calls the broker MCP, confirms fill, logs it.\n\n**Weex / Binance** (crypto perpetuals and spot):\n\nCrypto exchanges expose REST + WebSocket APIs with HMAC-signed requests. Wire them up through any HTTP MCP that handles auth signing, or use a thin community wrapper:\n\n```json\n\"weex\": {\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"mcp-server-ccxt\"],\n  \"env\": {\n    \"EXCHANGE\": \"weex\",\n    \"API_KEY\": \"your-key\",\n    \"API_SECRET\": \"your-secret\"\n  }\n}\n```\n\n[CCXT](https://github.com/ccxt/ccxt) covers 100+ exchanges under a unified interface — swap `\"weex\"` for `\"binance\"`, `\"bybit\"`, `\"okx\"`, or any other supported exchange without changing anything else.\n\nOther brokers with community MCPs: Interactive Brokers, Tradovate. Search `mcp \u003cbroker name\u003e` on GitHub or the MCP registry.\n\n### TradingView charts via Chrome DevTools MCP\n\nThe Chrome DevTools MCP is listed in Prerequisites because chart screenshots plug directly into scan output — Claude opens TradingView, navigates to the symbol, screenshots the chart, and embeds it in `scanned/stocks/\u003cTICKER\u003e/charts/`.\n\n```json\n\"chrome-devtools\": {\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@modelcontextprotocol/server-chrome-devtools\"],\n  \"env\": { \"CHROME_PATH\": \"/usr/bin/google-chrome\" }\n}\n```\n\nThen from a scan: *\"Pull a daily chart for NVDA with 20/50/200 EMAs and save it.\"* Claude navigates TradingView, applies the layout, screenshots, saves. No manual steps.\n\nYou can extend this further — monitor an open TradingView alert panel and have Claude notify you when a level fires, or read DOM-level order book data from exchange web UIs.\n\n### Browser automation MCP\n\nA Playwright or Puppeteer MCP opens the rest of the web to the scan pipeline — pages that don't have APIs, paywalled data sources, broker web portals.\n\n```json\n\"playwright\": {\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@executeautomation/playwright-mcp-server\"]\n}\n```\n\nExample use: scrape a brokerage account's positions page, reconcile against open scan verdicts, flag anything that drifted outside its stop.\n\n### Notification MCP (Slack / Discord / Telegram)\n\nGet alerted when a rescan flips a verdict from W → T or fires a trigger.\n\n```json\n\"slack\": {\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@modelcontextprotocol/server-slack\"],\n  \"env\": { \"SLACK_BOT_TOKEN\": \"xoxb-...\" }\n}\n```\n\nAfter a `/rescan AAPL`, if the verdict changed: *\"Post the delta summary to #trading-alerts.\"*\n\n### The pattern\n\nEvery MCP extends what Claude can *do* inside this workspace — but the research framework, verdicts, and levels stay anchored to `docs/` and `guide/`. MCPs handle the last mile (execute, alert, visualize) while the framework handles the thinking. Add as many or as few as you need.\n\n---\n\n## npm shortcuts\n\nA `package.json` is included for common maintenance tasks. No Node dependencies — just script aliases.\n\n| Command | What it does |\n|---|---|\n| `npm run setup` | Create venv, install Python deps, install pre-commit hook |\n| `npm run hook` | Install pre-commit hook only |\n| `npm run validate` | Run link audit + tier syntax linter |\n| `npm run index` | Regenerate `scanned/INDEX.md` |\n| `npm run prune` | Dry-run archive retention policy |\n| `npm run prune:apply` | Apply retention policy (deletes old snapshots) |\n\n---\n\n## Automating with Claude routines\n\nClaude Code has a `/schedule` command that runs any slash command as a recurring background agent — no cron setup, no server. Useful for keeping the workspace fresh without manual effort.\n\n```\n/schedule \"run /scan-macro every Monday at 8am ET\"\n/schedule \"run /rescan BTCUSDT every day at 6am ET\"\n/schedule \"run /discover every Sunday at 7pm ET\"\n```\n\nEach routine runs independently, saves output to the normal `scanned/` paths, and respects the same framework rules as a manual scan. You can list, pause, or delete routines with `/schedule list` and `/schedule delete`.\n\n**Practical setups:**\n\n- **Weekly regime refresh** — schedule `/scan-macro` Monday premarket. Every downstream scan that week reads a fresh regime.\n- **Watchlist maintenance** — schedule `/rescan` on your open positions daily. The delta markers (`Δ`) flag anything that moved.\n- **Screen rotation** — schedule `/discover` weekly on Sunday. Monday morning you have a fresh candidate list anchored to the new regime.\n- **Earnings pipeline** — schedule `/scan-earnings TICKER` a month out from print date. The checklist is waiting when you need it.\n\nRoutines don't replace judgment — they make sure the data is there when you sit down to make a decision.\n\n### Server-side automation with Hermes\n\nClaude routines require the Claude Code desktop app to be running. If you want the same workflows running 24/7 on a VPS — and delivered to your phone via Telegram, Discord, or Slack — [Hermes](https://github.com/nousresearch/hermes-agent) is the natural complement.\n\nHermes is an open-source autonomous agent framework (Nous Research) with a built-in cron scheduler, MCP support, and messaging-platform bridges. It runs on a $5 VPS and supports 200+ models.\n\n**Install:**\n```bash\ncurl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash\nsource ~/.bashrc\nhermes setup          # configure model + messaging platform\n```\n\n**Schedule the same workflows:**\n```bash\n# weekly macro refresh — Monday 8am\nhermes cron add \"0 8 * * 1\" \"claude --print '/scan-macro'\"\n\n# daily watchlist rescan — 6am weekdays\nhermes cron add \"0 6 * * 1-5\" \"claude --print '/rescan BTCUSDT'\"\n\n# weekly screen — Sunday 7pm\nhermes cron add \"0 19 * * 0\" \"claude --print '/discover'\"\n```\n\nResults save to `scanned/` exactly as they would from a manual run. Hermes forwards a summary to your configured Telegram or Discord channel — you wake up to a fresh regime read and any verdict deltas, no laptop required.\n\n**With MCP:** If you wire this workspace's tools into Hermes as an MCP server, Hermes can also trigger scans conversationally — ask it from your phone and get the full scan output back in the chat.\n\n---\n\n## Pre-commit validation\n\nA git hook runs `validate_links.py` and `validate_tiers.py` on every staged markdown commit. Install with:\n\n```bash\nnpm run hook\n```\n\n---\n\n## Rules in four bullets\n\n1. **`docs/` is read-only.** `/ingest` is the only writer. Never modify during a scan.\n2. **Read before you scan.** Every command loads `current.md`, recent archives, and `MACRO/current.md` first.\n3. **Cite numbers, not vibes.** Every claim that drives a verdict gets a markdown link. ROIC -38.6% beats \"ROIC is poor.\"\n4. **Action verdicts are structured, not prose.** Verbs from a fixed list, ASCII ladder for levels, trade table for triggers / stops / targets / R:R / sizing.\n\n---\n\n## License\n\nMIT — do whatever you want with it, including adding your own framework docs and protocols.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fl3lackcurtains%2Ftrading-ops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fl3lackcurtains%2Ftrading-ops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fl3lackcurtains%2Ftrading-ops/lists"}