Build your own

Hermes Bot Auto-Trader, explained like a normal person.

This is the recipe behind the live Hermes trading experiment: Claude MCP gives the bot broker tools, Hermes schedules and supervises the work, deterministic code enforces the rules, and a public dashboard shows what happened.

First, the blunt version

An auto-trader is not magic. It is a very fast intern with a brokerage login. If you give it vague freedom, it can do vague damage.

The safe design is simple: the AI can think, but code must enforce the rules before money moves.

We built this like a restaurant kitchen:

The brain
Claude Opus through Claude MCP
The boss
Hermes Agent, cron jobs, files, logs, alerts
The safety layer
Hard caps, broker readback, kill switch, dry-run first

What we actually built

The Farzad setup has four big pieces.

1
Alpha Radar finds ideas.
It scans the market for liquid US stocks with fresh catalysts, news, volume, sentiment, and a clean risk map. It does not trade. It only creates a candidate list.
2
The live planner decides whether anything is worth trading.
Claude gets broker data through MCP: account, positions, orders, quotes, fundamentals, history, earnings, and tradability. It can propose a buy, sell, or no trade.
3
The validator blocks dumb or illegal moves.
Before a real order, code checks the rulebook: no options, no margin, no crypto, no penny stocks, no illiquid names, no OTC, no leveraged or inverse ETFs, no oversized positions, no missing stop, no missing target, no low-quality setup.
4
Only then can execution happen.
The bot reviews the exact order with the broker, places it with an idempotency reference, reads broker state back, journals the fill, posts a public explanation, refreshes the dashboard, and deploys the site.

What Claude MCP means

MCP is a tool adapter. Think of it like giving Claude a set of labeled buttons it can press instead of asking it to guess from a webpage.

In this case, the broker MCP tools are buttons like:

The important trick: planning tools and execution tools are separated. Claude can research with read-only tools first. It only gets order tools inside the narrow execution step.

The minimum parts you need

The safety rules that matter

If you skip this section, you should not build one. Seriously.

How the schedule works

The live setup runs often during market hours, but not as one giant chatbot sitting there yelling all day.

Copy-paste prompt for your own Hermes

Give this to your Hermes Agent. Replace the bracketed parts with your own broker, account size, and risk rules.

Build me a bounded Hermes Bot Auto-Trader using Claude MCP broker tools.

Goal:
Create a safe, auditable auto-trading stack that starts in dry-run mode, then can be enabled for tiny live trading only after I explicitly approve it.

My broker:
[Robinhood, Alpaca, Interactive Brokers, Schwab, or other]

My account:
- Use only this dedicated test account: [account name or ID]
- Starting capital cap: [$ amount]
- Max I am willing to lose: [$ amount]
- Instruments allowed: [cash equities only is strongly recommended]
- Instruments banned: options, margin, crypto, OTC, penny stocks, illiquid stocks, leveraged ETFs, inverse ETFs

Use Claude MCP:
1. Check whether Claude CLI is installed.
2. Check whether a broker MCP server is configured.
3. Confirm the available MCP tools.
4. Separate tools into read-only tools and execution tools.
5. Never use execution tools during research or planning.

Build these files:
1. autonomy_config.json
   - enabled=false by default
   - account cap
   - max daily orders
   - max position size
   - min price
   - min average volume
   - allowed and banned instruments
   - kill switch path

2. trade_journal.jsonl
   - every trade has symbol, entry, quantity, dollar basis, stop, target, horizon, confidence, thesis, status

3. order_ledger.jsonl
   - every proposed, rejected, placed, filled, or failed order is recorded

4. alpha_radar.py
   - finds possible trades from live market/news/search data
   - writes candidates only
   - never places orders

5. autotrader.py
   - reads account, positions, orders, quotes, fundamentals, history, earnings, and tradability through MCP
   - asks Claude for a JSON plan
   - validates every proposed order with deterministic code
   - rejects anything outside the config
   - reviews the exact order with broker MCP
   - places only the exact reviewed order if live mode is enabled
   - reads broker state back after placing
   - journals only confirmed fills

6. public_dashboard.py
   - creates a static HTML/JSON dashboard
   - excludes account numbers, broker order IDs, secrets, local paths, raw prompts, and private logs

7. deploy script
   - deploys the dashboard to Vercel or another static host
   - stays silent on success
   - alerts on failure

8. cron jobs
   - premarket scan
   - market-hours Alpha Radar refresh
   - market-hours autotrader every 5 minutes
   - post-close read-only review
   - dashboard refresh and deploy

Hard safety requirements:
- Start in dry-run mode.
- Ask me before enabling live mode.
- No order without a stop, target, horizon, thesis, confidence score, and risk/reward estimate.
- No order unless broker tradability is verified.
- No order unless liquidity rules pass.
- No order unless buying power and position limits pass.
- No order unless broker review returns clean enough.
- Use idempotency references so the same order is not accidentally placed twice.
- Add a kill switch file that immediately stops live trading.
- Print only on trade, blocker, auth failure, or system failure.
- After building, run a dry-run test and show me the exact output.

Important:
Do not place real orders during setup. Do not claim anything works until you have run it and verified the files, cron jobs, dry-run output, and dashboard locally.

What to ask before going live

If any answer is fuzzy, do not go live. Keep it in dry-run.

What Vercel does in this setup

Vercel is just the public display case. It does not trade. It hosts the static dashboard.

The bot writes a clean public JSON file, then deploys the static website. If Vercel fails, trading can still run, but the public page may be stale until deploy works again.

For this site, the public dashboard is deployed at farzad.money.