Command Reference
Every EdgeProof command, what it does, and its flags. Run edgeproof --help for a short version, or edgeproof <command> --help where supported.
Global
| Command | Description |
|---|---|
edgeproof --version |
Print the installed version and exit |
edgeproof --help |
List available commands |
Setup and health
`edgeproof configure`
Interactive first-time setup wizard for the paper-first Alpaca path: probes your LLM, Alpaca paper account, and Discord source, then writes a .env (0600 permissions) to ~/.config/edgeproof/ (the EdgeProof home; override with EDGEPROOF_HOME). Never asks for a license key. Other brokers are configured afterwards via edgeproof broker setup|auth (see Configuration). See Install.
`edgeproof broker setup `
Configure and authorize a live-only broker: robinhood, or schwab (early access, see
Configuration).
robinhood: asks you to confirm that every order is real money, runs the browser authorization (seebroker auth robinhoodbelow for what to expect), then lists the accounts Robinhood shows EdgeProof with whether each can trade. You pick one, and only then does it writeBROKER,ROBINHOOD_ACCOUNT_NUMBERandROBINHOOD_LIVE_ONLY_ACKNOWLEDGEDto.env. If you stop partway,.envis left as it was.schwab(early access): collects your app credentials, writes them to.env(0600), and runs the authorization flow.
Kept separate from edgeproof configure on purpose: that wizard sets up paper
trading, and neither broker has a paper environment. This command states that up front
and defaults to declining.
`edgeproof broker auth `
Authorize or re-authorize a broker that uses OAuth.
schwab(early access): needed after Schwab's 7-day refresh token expires, which it does regardless of activity and cannot be renewed programmatically.tastytrade(early access): paste the refresh token from your OAuth client in the tastytrade dashboard. EdgeProof validates it against the environment matchingTASTYTRADE_PAPER_TRADEbefore storing anything: cert and live tokens are separate, and a token from the wrong environment is rejected up front rather than mid-session.robinhood: re-authorize after the grant expires.broker setup robinhoodruns this for you the first time. Opens a local callback listener on 127.0.0.1 (port 18712, or ephemeral if taken), prints a URL to approve, and captures the grant automatically.What to expect: agentic trading runs in a separate Agentic account that Robinhood prompts you to open (and fund) during this authorization: there is no settings toggle to flip beforehand. Desktop browser only; mobile cannot complete it. When you run
broker setup robinhood, pick the Agentic account from the list, not your main account. Your main account shows as not usable because agentic trading is off there.If the browser just signs you into robinhood.com with no agentic-account prompt, Robinhood rejected the request. Retry once (older EdgeProof builds could poison retries by re-using a client registration bound to a previous port; current builds re-register automatically). If it still happens, Robinhood may be limiting the beta to specific agent platforms. Nothing on your side fixes that.
`edgeproof broker verify`
Exercise the configured broker against its paper environment end to end: connect,
read the account, read positions, resolve an option contract, quote it, and list orders.
Add --place-order to also submit one contract at an unfillable price and cancel it,
proving order submission without risking a fill. --underlying=<SYM> changes the ticker
(default SPY).
It refuses to run against live, and refuses live-only brokers (Schwab, Robinhood) outright. Nothing is contacted in either case. Two deliberate exceptions:
--live-order-test=I-ACCEPT-A-REAL-ORDER (the exact phrase, typed in full) runs the
order round-trip on a live-only broker: one BUY limit for 1 contract at $0.01
(priced so it cannot plausibly fill), then cancelled, with the cancellation confirmed by
re-polling rather than trusted. It requires the broker's live-only acknowledgement to
already be set, never sells, and uses a day order so even a failed cancel expires at the
close. This is the only way to prove order submission on a broker with no paper
environment.
--read-only is the exception, and the only way to exercise a live-only broker. It
inspects the account (balances, positions, quotes, orders) and cannot place
anything: the broker is wrapped so placeOptionOrder, closePosition and
cancelOrder throw before any request is made. That is a structural guarantee rather
than a flag, which is why it is allowed against a real account. It cannot be combined
with --place-order.
Read the output rather than just the exit code. The cost basis and IV lines are printed for manual comparison against the broker's own UI: a per-share vs per-contract mix-up is internally consistent and passes every automated check while being 100× wrong.
IV n/a is not automatically a bug. Snapshot greeks are intermittent on some feeds
(Alpaca's indicative feed returns them only sometimes), so the same contract can report
a sane IV on one run and n/a on the next. Re-run before concluding the adapter maps it
wrong, and treat a consistently null IV, or one that is off by 100x, as the real
signal.
`edgeproof doctor`
Run all system health checks and print a report. Exit code 0 = all pass, 1 = warnings, 2 = failures. A fresh unconfigured machine shows config.load: fail until you run init.
| Flag | Effect |
|---|---|
--json |
Emit the report as JSON (schema version 1) instead of text. Useful for scripting. |
edgeproof doctor
edgeproof doctor --json > report.json
Running the supervisor
`edgeproof start`
Start all trading roles under the supervisor: monitor, positions, ledger, and (in bot mode) discord. Runs a preflight health check first (shows the same ✔/▲/✖ checklist as edgeproof doctor) and refuses to start if any check fails.
| Flag | Effect |
|---|---|
--skip-preflight |
Start without running preflight checks. Prints a warning. Use only when you have already verified health with doctor. |
`edgeproof status`
Show live supervisor status: which roles are running, their PIDs, and the current halt state.
`edgeproof stop`
Stop the supervisor and all roles gracefully. Handles stale PID files, so it is safe to run even after a crash.
Risk controls
`edgeproof halt`
Pause new trade entries within one monitor cycle. Open positions continue to be managed and exits still fire. No restart needed.
| Flag | Effect |
|---|---|
--reason "<text>" |
Record a reason for the halt, shown in status and logs. |
edgeproof halt --reason "stepping away for lunch"
`edgeproof resume`
Resume trade entries after a halt.
`edgeproof flatten`
Place market orders to close all open positions, then halt entries. Use this before going offline for an extended period. This sells real positions in live mode.
Licensing
`edgeproof license activate `
Activate a live-trading license. The key looks like EP-XXXX-XXXX-XXXX-XXXX. Stores a signed token locally; the key is masked in all output.
`edgeproof license status`
Show your plan, days until expiry, and last refresh time.
`edgeproof license refresh`
Force a token refresh from edgeproof.net instead of waiting for the automatic daily refresh. Useful right after renewing. See Licensing.
Telemetry
`edgeproof telemetry`
Show whether operational telemetry is on, and where it would be sent. Off unless you opted in during edgeproof configure; turn it on or off any time with edgeproof configure set EDGEPROOF_TELEMETRY true|false.
`edgeproof telemetry --show`
Print the exact payload: version, OS, uptime, open-position count, install id and license key. Nothing else is ever sent: no symbols, prices, quantities, P&L, credentials, or anything from your channels. Works whether or not telemetry is enabled, so you can look before deciding.
When enabled, a running monitor reports once a day. It is fire-and-forget: a failed report is dropped silently and never affects trading.
Dashboard
`edgeproof dashboard`
Serve the local ledger dashboard at http://127.0.0.1:3030. Bound to localhost only. The dashboard has two panels:
- Open Positions: live view of current holdings (entry price, current price, unrealized P/L). Polls
positions-snapshot.jsonwritten by the positions role and refreshes every 5 seconds. Shows streaming vs. polling mode. - Signal Source Tournament: realized P&L leaderboard ranked by source. Fills in as trades close.
| Flag | Effect |
|---|---|
--port <n> |
Serve on a different port. Also settable with LEDGER_PORT. |
edgeproof dashboard --port 3999
Environment flags
Some behavior is controlled by environment variables rather than flags:
| Variable | Effect |
|---|---|
EDGEPROOF_NO_UPDATE_CHECK=1 |
Disable the daily version check |
LEDGER_PORT |
Default dashboard port |
EDGEPROOF_WORKER_BASE_URL |
Override the license server (testing) |
See the full Config reference for every variable.
Exit codes
| Code | Meaning |
|---|---|
0 |
Success, or all health checks passed |
1 |
Warnings present (doctor), or a handled error |
2 |
Health-check failures (doctor, or preflight before start) |
Note: flags such as --once, --dry-run, and --bypass-trading-hours exist on the internal role processes the supervisor spawns. They are for development and testing, not part of the supported user-facing surface.