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:
- Claude is the chef who reads the market and proposes the dish.
- MCP broker tools are the pantry and cash register.
- Hermes cron jobs are the kitchen schedule.
- Validator code is the manager who says, "No, you are not serving that."
- The order ledger and dashboard are the receipt book.
What we actually built
The Farzad setup has four big pieces.
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.
Claude gets broker data through MCP: account, positions, orders, quotes, fundamentals, history, earnings, and tradability. It can propose a buy, sell, or no trade.
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.
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:
- Get my account and buying power.
- Get my current stock positions.
- Get current quotes and price history.
- Check if a ticker is tradable.
- Review an order before sending it.
- Place the exact order, only after the validator allows it.
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
- Hermes Agent, with terminal, file, cron, skills, and browser or web tools enabled.
- Claude Code or Claude CLI, because this build used Claude MCP broker tools.
- A broker MCP server, ours used Robinhood tools. Your broker needs read tools and, if you want live trading, order tools.
- A tiny test account, money you can afford to lose. Start dry-run. Then paper trade. Then maybe use tiny live money.
- A rule file, so the bot knows the exact trading limits.
- A kill switch file, so creating one file shuts live trading off instantly.
- A journal, because without a journal the bot learns vibes, not results.
- A deployment target, Vercel is easiest for a static public dashboard.
The safety rules that matter
If you skip this section, you should not build one. Seriously.
- Start with dry-run mode. No real orders.
- Force every buy to have a stop, target, horizon, confidence score, and reason.
- Give the bot a max account cap and max position size.
- Ban options, margin, crypto, OTC, penny stocks, illiquid names, leveraged ETFs, and inverse ETFs unless you deeply know what you are doing.
- Use broker readback after every order. Do not trust that an order filled until the broker says it filled.
- Keep a ledger of every proposed, rejected, placed, and filled order.
- Make the bot print only when something matters: trade, blocker, auth failure, or system failure.
- Have a kill switch that does not require logging into the broker.
How the schedule works
The live setup runs often during market hours, but not as one giant chatbot sitting there yelling all day.
- Premarket: scan for candidates before the open.
- Market hours: refresh Alpha Radar and run the autotrader every few minutes.
- After fills: update the journal, X post, dashboard JSON, and Vercel site immediately.
- Post-close: run a read-only review. This is where the bot grades what happened and prepares for tomorrow.
- Outside market hours: no regular-hours orders. The bot can research and review, but the order guard blocks live trading.
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
- Can it trade only the dedicated account?
- Can I shut it off with one file?
- Can it accidentally place the same order twice?
- Does it have a daily order limit?
- Does every buy have a stop and target?
- Does it know when the market is closed?
- Does the broker confirm the fill before the journal updates?
- Can I audit every decision after the fact?
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.