Table of Contents

IdiotProof MCP tools

270 tools, one per Hub operation. Each forwards to the running Hub; money tools return a confirmation code for Live actions instead of executing them. Times are US Eastern.

Tool Operation Risk
account_activities account activities read
account_buying_power account buying-power read
account_calendar account calendar read
account_clock account clock read
account_config account config read
account_config_set account config set write
account_history account history read
account_pdt account pdt read
account_summary account summary read
agent_catalog agent catalog read
alpaca_raw alpaca raw write
assets_bonds assets bonds read
assets_list assets list read
assets_show assets show read
audit_list audit list read
audit_search audit search read
audit_tail audit tail read
backtest_conditions backtest conditions read
backtest_run backtest run read
catalyst_backfill catalyst backfill read
catalyst_intake_status catalyst intake-status read
catalyst_list catalyst list read
catalyst_score catalyst score read
catalyst_show catalyst show read
corporate_actions_list corporate-actions list read
corporate_actions_show corporate-actions show read
crypto_bars crypto bars read
crypto_buy crypto buy money
crypto_fee_estimate crypto fee-estimate read
crypto_latest crypto latest read
crypto_orderbook crypto orderbook read
crypto_positions crypto positions read
crypto_quotes crypto quotes read
crypto_sell crypto sell money
crypto_snapshot crypto snapshot read
crypto_trades crypto trades read
crypto_transfers crypto transfers read
crypto_wallets crypto wallets read
crypto_whitelist crypto whitelist read
crypto_whitelist_add crypto whitelist-add money
crypto_whitelist_remove crypto whitelist-remove write
crypto_withdraw crypto withdraw money
dataset_export dataset export write
diary_export diary export write
diary_list diary list read
diary_pnl diary pnl read
diary_show diary show read
diary_stats diary stats read
docs_dsl docs dsl read
docs_explain docs explain read
docs_law docs law read
docs_search docs search read
docs_section docs section read
docs_story docs story read
docs_ticket docs ticket read
dsl_format dsl format read
dsl_glossary dsl glossary read
dsl_parse dsl parse read
dsl_validate dsl validate read
dsl_verbs dsl verbs read
evidence_calibration evidence calibration read
evidence_conformal evidence conformal read
evidence_events evidence events read
evidence_flow evidence flow read
evidence_graph evidence graph read
evidence_hawkes evidence hawkes read
evidence_kalman evidence kalman read
evidence_label evidence label read
evidence_pools evidence pools read
evidence_regime evidence regime read
evidence_search evidence search read
evidence_similar evidence similar read
evidence_sizing evidence sizing read
evidence_survival evidence survival read
evidence_tails evidence tails read
evidence_topology evidence topology read
evidence_walkforward evidence walkforward read
gapper_apply_tuned gapper apply-tuned write
gapper_arm gapper arm money
gapper_auto_candidates gapper auto candidates read
gapper_auto_disable gapper auto disable write
gapper_auto_enable gapper auto enable write
gapper_auto_status gapper auto status read
gapper_backtest_day gapper backtest-day read
gapper_be_bex_status gapper be-bex status read
gapper_caps gapper caps read
gapper_disarm gapper disarm write
gapper_formation gapper formation read
gapper_formation_disable gapper formation disable write
gapper_formation_enable gapper formation enable write
gapper_formation_status gapper formation status read
gapper_formation_universe gapper formation universe read
gapper_from_transcript gapper from-transcript read
gapper_list gapper list read
gapper_premarket_fade gapper premarket-fade read
gapper_profile_show gapper profile show read
gapper_profiles gapper profiles read
gapper_tune gapper tune write
hub_install_service hub install-service destructive
hub_ping hub ping read
hub_uninstall_service hub uninstall-service destructive
indicators_compute indicators compute read
indicators_snapshot indicators snapshot read
keys_migrate_to_vault keys migrate-to-vault destructive
keys_opt_in keys opt-in write
keys_probe keys probe read
keys_set keys set write
keys_status keys status read
ledger_list ledger list read
llm_keys llm keys read
llm_panel llm panel read
llm_threshold llm threshold write
llm_vote llm vote read
llm_voting_disable llm voting disable write
llm_voting_enable llm voting enable write
market_auctions market auctions read
market_bars market bars read
market_bond_prices market bond-prices read
market_candlesticks market candlesticks read
market_chart market chart read
market_conditions market conditions read
market_exchanges market exchanges read
market_feed_status market feed status read
market_feed_switch market feed switch write
market_fx market fx read
market_latest market latest read
market_logo market logo write
market_meta market meta read
market_most_actives market most-actives read
market_movers market movers read
market_news market news read
market_prev_close market prev-close read
market_quote market quote read
market_quotes market quotes read
market_scan_universe market scan-universe read
market_snapshot market snapshot read
market_stream_status market stream status read
market_trades market trades read
market_watch market watch read
monitor_heartbeat monitor heartbeat read
monitor_lease monitor lease read
monitor_pause monitor pause write
monitor_resume monitor resume money
monitor_status monitor status read
monitor_tail monitor tail read
monitor_tick_once monitor tick-once read
options_bars options bars read
options_buy options buy money
options_chain options chain read
options_close options close money
options_conditions options conditions read
options_contract options contract read
options_contracts options contracts read
options_do_not_exercise options do-not-exercise money
options_exchanges options exchanges read
options_exercise options exercise money
options_glossary options glossary read
options_greeks options greeks read
options_iv options iv read
options_latest options latest read
options_level options level read
options_positions options positions read
options_quote options quote read
options_sell options sell money
options_signals options signals read
options_snapshot options snapshot read
options_spread options spread money
options_trades options trades read
options_value options value read
orders_bracket orders bracket money
orders_cancel orders cancel money
orders_cancel_all orders cancel-all money
orders_history orders history read
orders_list orders list read
orders_oco orders oco money
orders_oto orders oto money
orders_place orders place money
orders_replace orders replace money
orders_show orders show read
orders_stream orders stream read
positions_close positions close money
positions_close_all positions close-all money
positions_list positions list read
positions_reconcile positions reconcile read
positions_show positions show read
prefs_get prefs get read
prefs_set prefs set write
replay_all replay all write
replay_compare replay compare read
replay_families replay families read
replay_list replay list read
replay_live replay live write
replay_regen replay regen write
replay_run replay run write
replay_show replay show read
research_analyze research analyze write
research_backfill research backfill write
research_claim research claim read
research_claims research claims read
research_gappers_build_universe research gappers build-universe read
research_gappers_catalysts research gappers catalysts read
research_gappers_label research gappers label read
research_gappers_pull research gappers pull read
research_gappers_snapshot research gappers snapshot read
research_gappers_status research gappers status read
research_index_events research index-events read
research_insiders research insiders read
research_macro research macro read
research_scan research scan write
research_score research score read
research_similar research similar read
research_ticker research ticker read
research_universe_list research universe list read
research_universe_refresh research universe refresh write
risk_check risk check read
risk_kill_switch risk kill-switch write
risk_set risk set write
risk_show risk show read
risk_status risk status read
scan_movers scan movers write
settings_get settings get read
settings_list settings list read
settings_set settings set write
strategy_activate strategy activate money
strategy_bulk strategy bulk money
strategy_clone strategy clone write
strategy_create strategy create write
strategy_deactivate strategy deactivate write
strategy_delete strategy delete destructive
strategy_diff strategy diff read
strategy_explain strategy explain read
strategy_export strategy export read
strategy_fires strategy fires read
strategy_from_text strategy from-text write
strategy_from_watchlist strategy from-watchlist write
strategy_history strategy history read
strategy_import strategy import write
strategy_list strategy list read
strategy_mode strategy mode money
strategy_progress strategy progress read
strategy_quarantine strategy quarantine read
strategy_rename strategy rename write
strategy_resync_canon strategy resync-canon write
strategy_samples strategy samples read
strategy_set strategy set money
strategy_show strategy show read
strategy_stamp strategy stamp read
strategy_step strategy step write
strategy_validate strategy validate read
trade_buy trade buy money
trade_confirm trade confirm money
trade_cover trade cover money
trade_flatten trade flatten money
trade_notional trade notional money
trade_pending trade pending read
trade_preview trade preview read
trade_sell trade sell money
trade_short trade short money
users_create users create write
users_list users list read
watchlist_add watchlist add write
watchlist_list watchlist list read
watchlist_remove watchlist remove write
watchlists_add watchlists add write
watchlists_create watchlists create write
watchlists_delete watchlists delete destructive
watchlists_list watchlists list read
watchlists_remove watchlists remove write
watchlists_rename watchlists rename write
watchlists_show watchlists show read

account_activities

Account activity log: fills, dividends, fees, deposits, interest, option expirations/assignments (newest first, ET).

CLI equivalent: idiotproof account activities [--since ] [--until ] [--type <string[]>] [--limit ] [--mode <all|paper|live>] Examples: idiotproof account activities idiotproof account activities --since 2026-10-01 --type FILL --mode paper idiotproof account activities --type DIV,FEE,INT

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Account activity log: fills, dividends, fees, deposits, interest, option expirations/assignments (newest first, ET).",
  "properties": {
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date to include, yyyy-MM-dd (default: 7 days ago)."
    },
    "until": {
      "type": "string",
      "format": "date",
      "description": "Last ET date to include, yyyy-MM-dd (default: today)."
    },
    "type": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Activity types, comma-separated: FILL, DIV, FEE, CSD (deposit), CSW (withdrawal), JNLC, INT, OPEXP, OPASN, ... (default: all)."
    },
    "limit": {
      "type": "integer",
      "description": "Most rows per account, newest first (default 100, max 1000).",
      "default": 100
    },
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

account_buying_power

Buying power by kind (overall, Reg T, day-trading, non-marginable, options), cash and margin multiplier.

CLI equivalent: idiotproof account buying-power [--mode <all|paper|live>] Examples: idiotproof account buying-power idiotproof account buying-power --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Buying power by kind (overall, Reg T, day-trading, non-marginable, options), cash and margin multiplier.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

account_calendar

Trading days with premarket, regular and after-hours times (ET); early closes and holidays called out.

CLI equivalent: idiotproof account calendar [--from ] [--to ] [--mode <sandbox|paper|live>] Examples: idiotproof account calendar idiotproof account calendar --from 2026-11-20 --to 2026-12-31

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Trading days with premarket, regular and after-hours times (ET); early closes and holidays called out.",
  "properties": {
    "from": {
      "type": "string",
      "format": "date",
      "description": "First date, yyyy-MM-dd (default today ET)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last date, yyyy-MM-dd (default 14 days after --from)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Which Alpaca account\u0027s keys ask: paper or live (default paper; the calendar is the same).",
      "default": "paper"
    }
  },
  "additionalProperties": false
}

account_clock

Is the market open now, and when it next opens and closes (ET), from Alpaca's clock.

CLI equivalent: idiotproof account clock [--mode <sandbox|paper|live>] Examples: idiotproof account clock

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Is the market open now, and when it next opens and closes (ET), from Alpaca\u0027s clock.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Which Alpaca account\u0027s keys ask: paper or live (default paper; the clock is the same).",
      "default": "paper"
    }
  },
  "additionalProperties": false
}

account_config

Alpaca account settings side by side: DTBP/PDT checks, shorting, fractional, margin cap, options level, trade suspension.

CLI equivalent: idiotproof account config [--mode <all|paper|live>] Examples: idiotproof account config idiotproof account config --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Alpaca account settings side by side: DTBP/PDT checks, shorting, fractional, margin cap, options level, trade suspension.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

account_config_set

Change one Alpaca account setting (Live needs a confirmation code).

CLI equivalent: idiotproof account config set [--mode <sandbox|paper|live>] Examples: idiotproof account config set no_shorting true idiotproof account config set max_margin_multiplier 1 --mode live

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Change one Alpaca account setting (Live needs a confirmation code).",
  "properties": {
    "setting": {
      "type": "string",
      "description": "dtbp_check, pdt_check, trade_confirm_email, suspend_trade, no_shorting, fractional_trading, max_margin_multiplier, max_options_trading_level or ptp_no_exception_entry.",
      "default": ""
    },
    "value": {
      "type": "string",
      "description": "The new value (see \u0060account config\u0060 for each setting\u0027s meaning).",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "paper or live (default paper; live needs a confirmation code).",
      "default": "paper"
    }
  },
  "additionalProperties": false,
  "required": [
    "setting",
    "value"
  ]
}

account_history

Equity over time as a Braille line chart, with the true P&L (deposits excluded) for 1D to all-time windows.

CLI equivalent: idiotproof account history [--period ] [--timeframe ] [--extended] [--mode <sandbox|paper|live>] [--width ] [--height ] Examples: idiotproof account history idiotproof account history --period 1D --timeframe 5Min --extended idiotproof account history --period 1A --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Equity over time as a Braille line chart, with the true P\u0026L (deposits excluded) for 1D to all-time windows.",
  "properties": {
    "period": {
      "type": "string",
      "description": "Window: \u003Cn\u003ED, \u003Cn\u003EW, \u003Cn\u003EM or \u003Cn\u003EA (years), or all (default 1M).",
      "default": "1M"
    },
    "timeframe": {
      "type": "string",
      "description": "Point spacing: 1Min, 5Min, 15Min, 1H or 1D (default: Alpaca\u0027s choice for the period)."
    },
    "extended": {
      "type": "boolean",
      "description": "Include premarket and after-hours in intraday history (default regular hours only).",
      "default": false
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "paper or live (default paper).",
      "default": "paper"
    },
    "width": {
      "type": "integer",
      "description": "Chart width in characters (default: the terminal\u0027s, else 118)."
    },
    "height": {
      "type": "integer",
      "description": "Chart rows (default 16).",
      "default": 16
    }
  },
  "additionalProperties": false
}

account_pdt

Pattern-day-trader standing: day trades in the last 5 business days, PDT flag, equity vs the $25k floor, trades left.

CLI equivalent: idiotproof account pdt [--mode <all|paper|live>] Examples: idiotproof account pdt idiotproof account pdt --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Pattern-day-trader standing: day trades in the last 5 business days, PDT flag, equity vs the $25k floor, trades left.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

account_summary

Equity, cash, buying power and today's true P&L (deposits excluded) for your Alpaca paper and live accounts.

CLI equivalent: idiotproof account summary [--mode <all|paper|live>] Examples: idiotproof account summary idiotproof account summary --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Equity, cash, buying power and today\u0027s true P\u0026L (deposits excluded) for your Alpaca paper and live accounts.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

agent_catalog

List every operation with its parameters, risk and input schema.

CLI equivalent: idiotproof agent catalog [--operation ] Examples: idiotproof agent catalog idiotproof agent catalog --json idiotproof agent catalog --operation "hub ping"

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "List every operation with its parameters, risk and input schema.",
  "properties": {
    "operation": {
      "type": "string",
      "description": "Only this operation, by name (\u0022strategy list\u0022) or tool name (strategy_list)."
    }
  },
  "additionalProperties": false
}

alpaca_raw

Any Alpaca endpoint (escape hatch): GET/POST/PATCH/PUT/DELETE a Trading API path, or GET a Market Data path with --data; order, position and wallet mutations are refused (use the gated operations).

CLI equivalent: idiotproof alpaca raw [--body ] [--data] [--mode <sandbox|paper|live>] Examples: idiotproof alpaca raw GET /v2/account idiotproof alpaca raw GET /v2/assets/AAPL --mode live idiotproof alpaca raw GET /v2/stocks/AAPL/snapshot --data

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Any Alpaca endpoint (escape hatch): GET/POST/PATCH/PUT/DELETE a Trading API path, or GET a Market Data path with --data; order, position and wallet mutations are refused (use the gated operations).",
  "properties": {
    "method": {
      "type": "string",
      "description": "GET, POST, PATCH, PUT or DELETE.",
      "default": ""
    },
    "path": {
      "type": "string",
      "description": "The Alpaca path with any query string, e.g. /v2/account or /v2/assets?status=active.",
      "default": ""
    },
    "body": {
      "type": "string",
      "description": "JSON request body for POST/PATCH/PUT (use \u0027-\u0027 to read it from stdin)."
    },
    "data": {
      "type": "boolean",
      "description": "Call the Market Data API (data.alpaca.markets, GET only) instead of the Trading API.",
      "default": false
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Trading API account: paper (default) or live. Live mutations need a confirmation code.",
      "default": "paper"
    }
  },
  "additionalProperties": false,
  "required": [
    "method",
    "path"
  ]
}

assets_bonds

Alpaca fixed income assets: US Treasuries or US corporate bonds with coupon, maturity, last close and yield.

CLI equivalent: idiotproof assets bonds [--type <treasuries|corporates>] [--subtype ] [--bond-status ] [--cusips <string[]>] [--isins <string[]>] [--search ] [--limit ] [--mode <paper|live>] Examples: idiotproof assets bonds --subtype bill --limit 20 idiotproof assets bonds --type corporates --search AAPL

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Alpaca fixed income assets: US Treasuries or US corporate bonds with coupon, maturity, last close and yield.",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "treasuries",
        "corporates"
      ],
      "description": "treasuries (default) or corporates.",
      "default": "treasuries"
    },
    "subtype": {
      "type": "string",
      "description": "Treasury subtype filter (bill, note, bond, strips, tips, floating_rate)."
    },
    "bond_status": {
      "type": "string",
      "description": "Bond status filter (outstanding, matured, pre_issuance)."
    },
    "cusips": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Only these CUSIPs, comma separated."
    },
    "isins": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Only these ISINs, comma separated."
    },
    "search": {
      "type": "string",
      "description": "Keep bonds whose description, issuer, ticker, CUSIP or ISIN contains this text."
    },
    "limit": {
      "type": "integer",
      "description": "Rows to show (default 50; sorted by maturity).",
      "default": 50
    },
    "mode": {
      "type": "string",
      "enum": [
        "paper",
        "live"
      ],
      "description": "Alpaca account to ask: paper (default) or live.",
      "default": "paper"
    }
  },
  "additionalProperties": false
}

assets_list

Alpaca's tradable universe (/v2/assets) filtered by class, exchange, status and attributes, with totals.

Alpaca returns 10k+ assets; this shows the first --limit matches (sorted by symbol) and how many matched in all.

CLI equivalent: idiotproof assets list [--class <us-equity|us-option|crypto>] [--exchange ] [--status <active|inactive|all>] [--attributes <string[]>] [--search ] [--tradable] [--shortable] [--limit ] [--mode <paper|live>] Examples: idiotproof assets list --class us_equity --exchange NASDAQ --search APP idiotproof assets list --class crypto --limit 100 idiotproof assets list --attributes has_options --shortable

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Alpaca\u0027s tradable universe (/v2/assets) filtered by class, exchange, status and attributes, with totals.",
  "properties": {
    "class": {
      "type": "string",
      "enum": [
        "us-equity",
        "us-option",
        "crypto"
      ],
      "description": "us_equity, us_option or crypto (default: every class)."
    },
    "exchange": {
      "type": "string",
      "description": "Only this exchange (NASDAQ, NYSE, ARCA, AMEX, BATS, OTC, CRYPTO...)."
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "inactive",
        "all"
      ],
      "description": "active, inactive or all (default active).",
      "default": "active"
    },
    "attributes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Alpaca attribute filter, comma separated (ptp_no_exception, ptp_with_exception, ipo, has_options, options_late_close, fractional_eh_enabled...)."
    },
    "search": {
      "type": "string",
      "description": "Keep assets whose symbol starts with, or name contains, this text."
    },
    "tradable": {
      "type": "boolean",
      "description": "Only assets tradable at Alpaca.",
      "default": false
    },
    "shortable": {
      "type": "boolean",
      "description": "Only shortable assets.",
      "default": false
    },
    "limit": {
      "type": "integer",
      "description": "Rows to show (default 50; the totals line counts them all).",
      "default": 50
    },
    "mode": {
      "type": "string",
      "enum": [
        "paper",
        "live"
      ],
      "description": "Alpaca account to ask: paper (default) or live.",
      "default": "paper"
    }
  },
  "additionalProperties": false
}

assets_show

One Alpaca asset: tradable, shortable, easy-to-borrow, marginable, fractionable and margin requirements.

CLI equivalent: idiotproof assets show [--mode <paper|live>] Examples: idiotproof assets show AAPL idiotproof assets show BTC/USD

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "One Alpaca asset: tradable, shortable, easy-to-borrow, marginable, fractionable and margin requirements.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, crypto pair (BTC/USD) or Alpaca asset id.",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "paper",
        "live"
      ],
      "description": "Alpaca account to ask: paper (default) or live.",
      "default": "paper"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

audit_list

The audit trail, newest first: signals, entries/exits, rejections, risk blocks, system events (ET).

CLI equivalent: idiotproof audit list [--since ] [--kind <string[]>] [--system] [--limit ] Examples: idiotproof audit list idiotproof audit list --since 2026-10-30 --kind signal-fire,entry,exit idiotproof audit list --kind order-rejected --no-system --limit 200

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The audit trail, newest first: signals, entries/exits, rejections, risk blocks, system events (ET).",
  "properties": {
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date to include, yyyy-MM-dd (default: everything kept)."
    },
    "kind": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Only these categories, comma-separated: signal-fire, entry, exit, order-rejected, risk, broker, system, ..."
    },
    "system": {
      "type": "boolean",
      "description": "Include system-wide rows that belong to no user (default on; --no-system for only yours).",
      "default": true
    },
    "limit": {
      "type": "integer",
      "description": "Most rows, newest first, 1-1000 (default 50).",
      "default": 50
    }
  },
  "additionalProperties": false
}

Find audit rows whose message or payload contains text: a symbol, order id, strategy title.

CLI equivalent: idiotproof audit search [--since ] [--kind <string[]>] [--system] [--limit ] Examples: idiotproof audit search NVDA idiotproof audit search "insufficient buying power" --since 2026-10-01

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Find audit rows whose message or payload contains text: a symbol, order id, strategy title.",
  "properties": {
    "text": {
      "type": "string",
      "description": "Text to find in the message or the structured payload (case-insensitive).",
      "default": ""
    },
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date to include, yyyy-MM-dd (default: everything kept)."
    },
    "kind": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Only these categories, comma-separated: signal-fire, entry, exit, order-rejected, risk, broker, system, ..."
    },
    "system": {
      "type": "boolean",
      "description": "Include system-wide rows that belong to no user (default on; --no-system for only yours).",
      "default": true
    },
    "limit": {
      "type": "integer",
      "description": "Most rows, newest first, 1-1000 (default 50).",
      "default": 50
    }
  },
  "additionalProperties": false,
  "required": [
    "text"
  ]
}

audit_tail

The latest audit rows, oldest first; --follow streams new ones as they land (Ctrl+C stops; MCP/--json get a bounded window: --seconds, --max).

CLI equivalent: idiotproof audit tail [--lines ] [--follow] [--seconds ] [--max ] [--kind <string[]>] [--system] Examples: idiotproof audit tail idiotproof audit tail --follow --seconds 60 --kind signal-fire,entry,exit

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The latest audit rows, oldest first; --follow streams new ones as they land (Ctrl\u002BC stops; MCP/--json get a bounded window: --seconds, --max).",
  "properties": {
    "lines": {
      "type": "integer",
      "description": "How many of the latest rows to start with, 0-500 (default 20).",
      "default": 20
    },
    "follow": {
      "type": "boolean",
      "description": "Keep watching for new rows: in a terminal until Ctrl\u002BC (or --seconds/--max); for MCP and --json for --seconds (default 30) or --max (default 200) new rows.",
      "default": false
    },
    "seconds": {
      "type": "integer",
      "description": "With --follow: how long to watch, 1-300 (default 30 for MCP/--json; a terminal streams until Ctrl\u002BC)."
    },
    "max": {
      "type": "integer",
      "description": "With --follow: stop after this many new rows, 1-1000 (default 200 for MCP/--json; none in a terminal)."
    },
    "kind": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Only these categories, comma-separated."
    },
    "system": {
      "type": "boolean",
      "description": "Include system-wide rows (default on; --no-system for only yours).",
      "default": true
    }
  },
  "additionalProperties": false
}

backtest_conditions

A backtest day's per-candle condition table: each entry condition's truth per bar, fires, entries and time in position.

CLI equivalent: idiotproof backtest conditions [--date ] [--all] Examples: idiotproof backtest conditions bt-1a2b3c4d idiotproof backtest conditions bt-1a2b3c4d --date 2026-10-29 --all

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "A backtest day\u0027s per-candle condition table: each entry condition\u0027s truth per bar, fires, entries and time in position.",
  "properties": {
    "run": {
      "type": "string",
      "description": "The run id \u0060backtest run\u0060 printed (bt-xxxxxxxx).",
      "default": ""
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Which day of the run (default its first day with bars)."
    },
    "all": {
      "type": "boolean",
      "description": "Every candle, not just the ones where a condition changed, fired or traded.",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "run"
  ]
}

backtest_run

Backtest a saved strategy or a script over a range of ET days with StrategyBacktester: triggers, trades and P&L per day (saved for backtest conditions).

CLI equivalent: idiotproof backtest run [] [--script ] [--from ] [--to ] [--qty ] [--days ] Examples: idiotproof backtest run NVDA --from 2026-10-26 --to 2026-10-30 idiotproof backtest run --script "Ticker("INTC").IsAboveVwap().StopLoss(2).TakeProfit(4)" --from 2026-10-29 idiotproof backtest run NVDA --from 2026-10-20 --days 7

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Backtest a saved strategy or a script over a range of ET days with StrategyBacktester: triggers, trades and P\u0026L per day (saved for backtest conditions).",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "A saved strategy: id, id prefix, stamp id or symbol (or use --script)."
    },
    "script": {
      "type": "string",
      "description": "Backtest this IdiotScript, canonical JSON or stamp instead of a saved strategy (\u0060-\u0060 reads stdin)."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET trading day (yyyy-MM-dd); default the last completed trading day."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET trading day (yyyy-MM-dd); default --from."
    },
    "qty": {
      "type": "integer",
      "description": "Share count when the strategy doesn\u0027t pin one (default 100).",
      "default": 100
    },
    "days": {
      "type": "integer",
      "description": "Replay this many trading days from --from as ONE continuous run, so a sequenced strategy\u0027s hand-off between steps (and its Within deadline) crosses the day boundaries. Not with --to."
    }
  },
  "additionalProperties": false
}

catalyst_backfill

Fill catalyst events for past dates from Alpaca news (paged) and EDGAR full-text search, through the same pre-classifier and scorer as live intake; rows are marked backfilled.

Writes research rows only (no strategy, order or setting changes). Needs an owner for the Alpaca keys. EDGAR calls are rate-limited (120 ms apart), so wide ranges take minutes.

CLI equivalent: idiotproof catalyst backfill --symbols --from [--to ] [--llm-budget ] [--edgar] Examples: idiotproof catalyst backfill --symbols ABCD,EFGH --from 2026-10-01 --to 2026-10-31 idiotproof catalyst backfill --symbols ABCD --from 2026-11-01 --llm-budget 20

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Fill catalyst events for past dates from Alpaca news (paged) and EDGAR full-text search, through the same pre-classifier and scorer as live intake; rows are marked backfilled.",
  "properties": {
    "symbols": {
      "type": "string",
      "description": "Comma-separated symbols to backfill.",
      "default": ""
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First day (ET, yyyy-MM-dd).",
      "default": "0001-01-01"
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last day (ET, yyyy-MM-dd); default today."
    },
    "llm_budget": {
      "type": "integer",
      "description": "At most this many new rows get a Haiku classification (default 0: none).",
      "default": 0
    },
    "edgar": {
      "type": "boolean",
      "description": "Also search EDGAR filings (default on; --no-edgar for news only).",
      "default": true
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols",
    "from"
  ]
}

catalyst_intake_status

Whether the catalyst intake is enabled, who owns it, whether this Hub leads, the news stream's health, the last message ET, EDGAR polling and today's counts.

CLI equivalent: idiotproof catalyst intake-status Examples: idiotproof catalyst intake-status

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Whether the catalyst intake is enabled, who owns it, whether this Hub leads, the news stream\u0027s health, the last message ET, EDGAR polling and today\u0027s counts.",
  "properties": {},
  "additionalProperties": false
}

catalyst_list

Catalyst events the intake recorded (news and EDGAR filings): published ET, receive lag, symbol, pre-class, direction, score, source, headline.

CLI equivalent: idiotproof catalyst list [--symbol ] [--since ] [--limit ] Examples: idiotproof catalyst list --since today idiotproof catalyst list --symbol ABCD --since 3d

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Catalyst events the intake recorded (news and EDGAR filings): published ET, receive lag, symbol, pre-class, direction, score, source, headline.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Only events naming this symbol."
    },
    "since": {
      "type": "string",
      "description": "Window start: today, yesterday, 6h, 3d, or a date (ET). Default 24h."
    },
    "limit": {
      "type": "integer",
      "description": "Most recent N events (default 50, max 500).",
      "default": 50
    }
  },
  "additionalProperties": false
}

catalyst_score

The latest catalyst event for a symbol and its score breakdown as of now (type prior × magnitude × source + novelty, decayed by age).

CLI equivalent: idiotproof catalyst score Examples: idiotproof catalyst score ABCD

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The latest catalyst event for a symbol and its score breakdown as of now (type prior \u00D7 magnitude \u00D7 source \u002B novelty, decayed by age).",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "The symbol whose latest catalyst to score.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

catalyst_show

Every field of one catalyst event, with its score broken down as of now.

CLI equivalent: idiotproof catalyst show Examples: idiotproof catalyst show 0190abcd

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Every field of one catalyst event, with its score broken down as of now.",
  "properties": {
    "id": {
      "type": "string",
      "description": "The event id (or an id prefix of 6\u002B hex characters).",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "id"
  ]
}

corporate_actions_list

Splits, dividends, mergers, spinoffs and name changes from Alpaca (Market Data or Trading API announcements) over a date window.

CLI equivalent: idiotproof corporate-actions list [--types <string[]>] [--symbol <string[]>] [--since ] [--until ] [--source <data|announcements>] [--limit ] [--mode <paper|live>] Examples: idiotproof corporate-actions list --symbol AAPL,MSFT --types cash_dividend idiotproof corporate-actions list --types forward_split,reverse_split --since 2026-10-01 --until 2026-11-30 idiotproof corporate-actions list --source announcements --types split --symbol NVDA

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Splits, dividends, mergers, spinoffs and name changes from Alpaca (Market Data or Trading API announcements) over a date window.",
  "properties": {
    "types": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Types, comma separated. data: forward_split, reverse_split, unit_split, cash_dividend, stock_dividend, spin_off, cash_merger, stock_merger, stock_and_cash_merger, redemption, name_change, worthless_removal, rights_distribution. announcements: dividend, merger, spinoff, split."
    },
    "symbol": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Only these symbols, comma separated."
    },
    "since": {
      "type": "string",
      "format": "date",
      "description": "First date (default 30 days ago, ET)."
    },
    "until": {
      "type": "string",
      "format": "date",
      "description": "Last date (default 30 days ahead, ET)."
    },
    "source": {
      "type": "string",
      "enum": [
        "data",
        "announcements"
      ],
      "description": "data (Market Data, default) or announcements (Trading API, max 90-day window).",
      "default": "data"
    },
    "limit": {
      "type": "integer",
      "description": "Rows to show (default 100; the totals line counts them all).",
      "default": 100
    },
    "mode": {
      "type": "string",
      "enum": [
        "paper",
        "live"
      ],
      "description": "Alpaca account for --source announcements: paper (default) or live.",
      "default": "paper"
    }
  },
  "additionalProperties": false
}

corporate_actions_show

Every field of one Alpaca corporate action, looked up in Market Data and then Trading API announcements.

CLI equivalent: idiotproof corporate-actions show [--mode <paper|live>] Examples: idiotproof corporate-actions show 6a4e1c55-1f0e-4c8e-9a1b-2b1fbd7a4f10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Every field of one Alpaca corporate action, looked up in Market Data and then Trading API announcements.",
  "properties": {
    "id": {
      "type": "string",
      "description": "Corporate action id (from corporate-actions list).",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "paper",
        "live"
      ],
      "description": "Alpaca account for the announcements lookup: paper (default) or live.",
      "default": "paper"
    }
  },
  "additionalProperties": false,
  "required": [
    "id"
  ]
}

crypto_bars

OHLCV bars for a crypto pair from Alpaca's US crypto feed (times in ET).

CLI equivalent: idiotproof crypto bars [--timeframe ] [--hours ] [--limit ] Examples: idiotproof crypto bars BTC/USD idiotproof crypto bars ETH/USD --timeframe 5Min --hours 2

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "OHLCV bars for a crypto pair from Alpaca\u0027s US crypto feed (times in ET).",
  "properties": {
    "pair": {
      "type": "string",
      "description": "Crypto pair, e.g. BTC/USD.",
      "default": ""
    },
    "timeframe": {
      "type": "string",
      "description": "Bar size in Alpaca\u0027s form: 1Min, 5Min, 15Min, 1Hour, 4Hour, 1Day, 1Week (default 1Hour).",
      "default": "1Hour"
    },
    "hours": {
      "type": "integer",
      "description": "How far back to look, in hours (default 24).",
      "default": 24
    },
    "limit": {
      "type": "integer",
      "description": "Show at most this many bars, the most recent (default 48).",
      "default": 48
    }
  },
  "additionalProperties": false,
  "required": [
    "pair"
  ]
}

crypto_buy

Buy a crypto pair (fractional, GTC/IOC) through the TransactionGateway. Paper by default; live needs a confirmation code.

CLI equivalent: idiotproof crypto buy [] [--notional ] [--limit ] [--trigger ] [--stop ] [--target ] [--tif ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof crypto buy BTC/USD 0.001 --limit 70000 --stop 66500 idiotproof crypto buy ETH/USD --notional 250 --stop 2300 --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Buy a crypto pair (fractional, GTC/IOC) through the TransactionGateway. Paper by default; live needs a confirmation code.",
  "properties": {
    "pair": {
      "type": "string",
      "description": "Crypto pair, e.g. BTC/USD.",
      "default": ""
    },
    "qty": {
      "type": "number",
      "description": "Coin quantity, fractional allowed (0.0015). Leave out and pass --notional to size by dollars."
    },
    "notional": {
      "type": "number",
      "description": "Size by dollar amount instead of coin quantity."
    },
    "limit": {
      "type": "number",
      "description": "Limit price. Without it the order is a market order."
    },
    "trigger": {
      "type": "number",
      "description": "Stop trigger price: with --limit it makes a stop-limit order."
    },
    "stop": {
      "type": "number",
      "description": "Protective stop price for a buy; the Risk Guardian refuses entries without one."
    },
    "target": {
      "type": "number",
      "description": "Take-profit price (for the reward:risk check)."
    },
    "tif": {
      "type": "string",
      "description": "Time in force: gtc (default) or ioc.",
      "default": "gtc"
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "paper (default) or live (needs a confirmation code). Sandbox does not simulate crypto.",
      "default": "paper"
    },
    "note": {
      "type": "string",
      "description": "Why: kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "pair"
  ]
}

crypto_fee_estimate

Alpaca's network fee estimate for sending a coin to an address (read-only, nothing is sent).

CLI equivalent: idiotproof crypto fee-estimate [--from ] [--mode <sandbox|paper|live>] Examples: idiotproof crypto fee-estimate BTC 0.01 bc1qexampleaddress --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Alpaca\u0027s network fee estimate for sending a coin to an address (read-only, nothing is sent).",
  "properties": {
    "asset": {
      "type": "string",
      "description": "Coin to send, e.g. BTC.",
      "default": ""
    },
    "amount": {
      "type": "number",
      "description": "Amount of the coin to send.",
      "default": 0
    },
    "to": {
      "type": "string",
      "description": "Destination address.",
      "default": ""
    },
    "from": {
      "type": "string",
      "description": "Source address (default: your Alpaca wallet)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "paper or live (default paper).",
      "default": "paper"
    }
  },
  "additionalProperties": false,
  "required": [
    "asset",
    "amount",
    "to"
  ]
}

crypto_latest

The latest trade, quote and minute bar for a crypto pair.

CLI equivalent: idiotproof crypto latest Examples: idiotproof crypto latest BTC/USD

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The latest trade, quote and minute bar for a crypto pair.",
  "properties": {
    "pair": {
      "type": "string",
      "description": "Crypto pair, e.g. BTC/USD (BTC-USD and BTCUSD work too).",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "pair"
  ]
}

crypto_orderbook

The latest order book for a crypto pair: bids and asks side by side.

CLI equivalent: idiotproof crypto orderbook [--depth ] Examples: idiotproof crypto orderbook BTC/USD idiotproof crypto orderbook ETH/USD --depth 20

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The latest order book for a crypto pair: bids and asks side by side.",
  "properties": {
    "pair": {
      "type": "string",
      "description": "Crypto pair, e.g. BTC/USD.",
      "default": ""
    },
    "depth": {
      "type": "integer",
      "description": "Price levels per side (default 10).",
      "default": 10
    }
  },
  "additionalProperties": false,
  "required": [
    "pair"
  ]
}

crypto_positions

Your crypto holdings in the Alpaca paper and live accounts: quantity, cost, price, unrealized P&L.

CLI equivalent: idiotproof crypto positions [--mode <all|paper|live>] Examples: idiotproof crypto positions idiotproof crypto positions --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Your crypto holdings in the Alpaca paper and live accounts: quantity, cost, price, unrealized P\u0026L.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

crypto_quotes

Recent best bid/ask quotes for a crypto pair, with the spread.

CLI equivalent: idiotproof crypto quotes [--minutes ] [--limit ] Examples: idiotproof crypto quotes BTC/USD

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Recent best bid/ask quotes for a crypto pair, with the spread.",
  "properties": {
    "pair": {
      "type": "string",
      "description": "Crypto pair, e.g. BTC/USD.",
      "default": ""
    },
    "minutes": {
      "type": "integer",
      "description": "How far back to look, in minutes (default 5).",
      "default": 5
    },
    "limit": {
      "type": "integer",
      "description": "Show at most this many, the most recent (default 30).",
      "default": 30
    }
  },
  "additionalProperties": false,
  "required": [
    "pair"
  ]
}

crypto_sell

Sell crypto you hold (crypto is long-only). Exits always clear the gates; live needs a confirmation code.

CLI equivalent: idiotproof crypto sell [] [--notional ] [--limit ] [--trigger ] [--stop ] [--target ] [--tif ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof crypto sell BTC/USD 0.001 idiotproof crypto sell ETH/USD --notional 100 --limit 2600 --tif ioc --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Sell crypto you hold (crypto is long-only). Exits always clear the gates; live needs a confirmation code.",
  "properties": {
    "pair": {
      "type": "string",
      "description": "Crypto pair, e.g. BTC/USD.",
      "default": ""
    },
    "qty": {
      "type": "number",
      "description": "Coin quantity, fractional allowed (0.0015). Leave out and pass --notional to size by dollars."
    },
    "notional": {
      "type": "number",
      "description": "Size by dollar amount instead of coin quantity."
    },
    "limit": {
      "type": "number",
      "description": "Limit price. Without it the order is a market order."
    },
    "trigger": {
      "type": "number",
      "description": "Stop trigger price: with --limit it makes a stop-limit order."
    },
    "stop": {
      "type": "number",
      "description": "Protective stop price for a buy; the Risk Guardian refuses entries without one."
    },
    "target": {
      "type": "number",
      "description": "Take-profit price (for the reward:risk check)."
    },
    "tif": {
      "type": "string",
      "description": "Time in force: gtc (default) or ioc.",
      "default": "gtc"
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "paper (default) or live (needs a confirmation code). Sandbox does not simulate crypto.",
      "default": "paper"
    },
    "note": {
      "type": "string",
      "description": "Why: kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "pair"
  ]
}

crypto_snapshot

Snapshot of a crypto pair: latest trade and quote, minute bar, today's and the prior daily bar.

CLI equivalent: idiotproof crypto snapshot Examples: idiotproof crypto snapshot BTC/USD

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Snapshot of a crypto pair: latest trade and quote, minute bar, today\u0027s and the prior daily bar.",
  "properties": {
    "pair": {
      "type": "string",
      "description": "Crypto pair, e.g. BTC/USD (BTC-USD and BTCUSD work too).",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "pair"
  ]
}

crypto_trades

Recent trade prints for a crypto pair (price, size, taker side).

CLI equivalent: idiotproof crypto trades [--minutes ] [--limit ] Examples: idiotproof crypto trades BTC/USD idiotproof crypto trades SOL/USD --minutes 30 --limit 100

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Recent trade prints for a crypto pair (price, size, taker side).",
  "properties": {
    "pair": {
      "type": "string",
      "description": "Crypto pair, e.g. BTC/USD.",
      "default": ""
    },
    "minutes": {
      "type": "integer",
      "description": "How far back to look, in minutes (default 5).",
      "default": 5
    },
    "limit": {
      "type": "integer",
      "description": "Show at most this many, the most recent (default 30).",
      "default": 30
    }
  },
  "additionalProperties": false,
  "required": [
    "pair"
  ]
}

crypto_transfers

Crypto deposits and withdrawals on your Alpaca accounts: status, amount, fees, addresses (ET).

CLI equivalent: idiotproof crypto transfers [--id ] [--mode <all|paper|live>] Examples: idiotproof crypto transfers idiotproof crypto transfers --mode live --id 6b1f0c0e-4b8a-4a4e-9b55-0d7c1f2a3b4c

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Crypto deposits and withdrawals on your Alpaca accounts: status, amount, fees, addresses (ET).",
  "properties": {
    "id": {
      "type": "string",
      "description": "Show one transfer by its id."
    },
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

crypto_wallets

Your Alpaca crypto deposit wallets (address per coin) on paper and live; fails closed when funding is not enabled.

CLI equivalent: idiotproof crypto wallets [--asset ] [--network ] [--mode <all|paper|live>] Examples: idiotproof crypto wallets idiotproof crypto wallets --asset USDC --network ethereum --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Your Alpaca crypto deposit wallets (address per coin) on paper and live; fails closed when funding is not enabled.",
  "properties": {
    "asset": {
      "type": "string",
      "description": "Only this coin\u0027s deposit wallet, e.g. BTC (default: every wallet Alpaca returns)."
    },
    "network": {
      "type": "string",
      "description": "Chain for multi-chain coins, e.g. ethereum or solana."
    },
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all). Crypto funding is usually live-only.",
      "default": "all"
    }
  },
  "additionalProperties": false
}

crypto_whitelist

Addresses your Alpaca accounts may withdraw crypto to, with their approval status.

CLI equivalent: idiotproof crypto whitelist [--mode <all|paper|live>] Examples: idiotproof crypto whitelist

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Addresses your Alpaca accounts may withdraw crypto to, with their approval status.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

crypto_whitelist_add

Ask Alpaca to whitelist a withdrawal address. Always previews and needs a confirmation code.

CLI equivalent: idiotproof crypto whitelist-add

[--mode <sandbox|paper|live>] Examples: idiotproof crypto whitelist-add BTC bc1qexampleaddress --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Ask Alpaca to whitelist a withdrawal address. Always previews and needs a confirmation code.",
  "properties": {
    "asset": {
      "type": "string",
      "description": "Coin the address receives, e.g. BTC.",
      "default": ""
    },
    "address": {
      "type": "string",
      "description": "Address to allow withdrawals to.",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "paper or live (default paper). Always needs a confirmation code.",
      "default": "paper"
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "asset",
    "address"
  ]
}

crypto_whitelist_remove

Remove a whitelisted withdrawal address. Always previews and needs a confirmation code.

CLI equivalent: idiotproof crypto whitelist-remove [--mode <sandbox|paper|live>] Examples: idiotproof crypto whitelist-remove 2a9c7f3e-11aa-4bcd-9e01-6f0b2c3d4e5f --mode live

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Remove a whitelisted withdrawal address. Always previews and needs a confirmation code.",
  "properties": {
    "id": {
      "type": "string",
      "description": "Whitelist entry id (from \u0060idiotproof crypto whitelist\u0060).",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "paper or live (default paper). Always needs a confirmation code.",
      "default": "paper"
    }
  },
  "additionalProperties": false,
  "required": [
    "id"
  ]
}

crypto_withdraw

Send coins from your Alpaca account to a whitelisted address. Always previews and needs a confirmation code.

CLI equivalent: idiotproof crypto withdraw

[--mode <sandbox|paper|live>] [--note ] Examples: idiotproof crypto withdraw BTC 0.01 bc1qexampleaddress --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Send coins from your Alpaca account to a whitelisted address. Always previews and needs a confirmation code.",
  "properties": {
    "asset": {
      "type": "string",
      "description": "Coin to withdraw, e.g. BTC.",
      "default": ""
    },
    "amount": {
      "type": "number",
      "description": "Amount of the coin to send.",
      "default": 0
    },
    "address": {
      "type": "string",
      "description": "Destination address (must be on your whitelist).",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "paper or live (default paper). Always needs a confirmation code.",
      "default": "paper"
    },
    "note": {
      "type": "string",
      "description": "Why: kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "asset",
    "amount",
    "address"
  ]
}

dataset_export

Export the replay feature store as ML-ready CSVs (trades.csv, bars.csv, manifest.json), backfilling older runs first.

CLI equivalent: idiotproof dataset export [--out ] Examples: idiotproof dataset export idiotproof dataset export --out C:\data\idiotproof

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Export the replay feature store as ML-ready CSVs (trades.csv, bars.csv, manifest.json), backfilling older runs first.",
  "properties": {
    "out": {
      "type": "string",
      "description": "Folder to write trades.csv, bars.csv and manifest.json (default the mindattic.com dataset folder)."
    }
  },
  "additionalProperties": false
}

diary_export

Export your trade diary to a CSV file (ET times, P&L, risk plan, R), or print it with --csv -.

CLI equivalent: idiotproof diary export --csv [--overwrite] [--since ] [--until ] [--mode <sandbox|paper|live>] [--symbol ] [--strategy ] Examples: idiotproof diary export --csv C:/Users/me/Documents/diary.csv idiotproof diary export --csv - --mode live --since 2026-01-01

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Export your trade diary to a CSV file (ET times, P\u0026L, risk plan, R), or print it with --csv -.",
  "properties": {
    "csv": {
      "type": "string",
      "description": "Absolute path of the CSV file to write on the Hub\u0027s machine, or - to return the CSV text.",
      "default": ""
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace the file if it already exists.",
      "default": false
    },
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date of entry, yyyy-MM-dd (default: everything)."
    },
    "until": {
      "type": "string",
      "format": "date",
      "description": "Last ET date of entry, yyyy-MM-dd (default: today)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Only trades in this mode: sandbox, paper or live."
    },
    "symbol": {
      "type": "string",
      "description": "Only this symbol."
    },
    "strategy": {
      "type": "string",
      "description": "Only this strategy: an id prefix or part of its title at trade time."
    }
  },
  "additionalProperties": false,
  "required": [
    "csv"
  ]
}

diary_list

Your trade diary, newest first: entry/exit, mode, size, exit reason and realized P&L.

CLI equivalent: idiotproof diary list [--status ] [--limit ] [--since ] [--until ] [--mode <sandbox|paper|live>] [--symbol ] [--strategy ] Examples: idiotproof diary list idiotproof diary list --since 2026-10-01 --mode paper --symbol NVDA idiotproof diary list --status open

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Your trade diary, newest first: entry/exit, mode, size, exit reason and realized P\u0026L.",
  "properties": {
    "status": {
      "type": "string",
      "description": "Only this lifecycle state: open, closed, notfilled or orphaned."
    },
    "limit": {
      "type": "integer",
      "description": "Most trades to show, newest entry first, 1-5000 (default 50).",
      "default": 50
    },
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date of entry, yyyy-MM-dd (default: everything)."
    },
    "until": {
      "type": "string",
      "format": "date",
      "description": "Last ET date of entry, yyyy-MM-dd (default: today)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Only trades in this mode: sandbox, paper or live."
    },
    "symbol": {
      "type": "string",
      "description": "Only this symbol."
    },
    "strategy": {
      "type": "string",
      "description": "Only this strategy: an id prefix or part of its title at trade time."
    }
  },
  "additionalProperties": false
}

diary_pnl

Realized P&L from closed trades per day, week or month (ET), optionally by strategy or symbol.

CLI equivalent: idiotproof diary pnl [--day] [--week] [--month] [--by <strategy|symbol>] [--since ] [--until ] [--mode <sandbox|paper|live>] [--symbol ] [--strategy ] Examples: idiotproof diary pnl idiotproof diary pnl --week --by strategy idiotproof diary pnl --month --mode live --since 2026-01-01

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Realized P\u0026L from closed trades per day, week or month (ET), optionally by strategy or symbol.",
  "properties": {
    "day": {
      "type": "boolean",
      "description": "One row per ET trading day (the default).",
      "default": false
    },
    "week": {
      "type": "boolean",
      "description": "One row per week (Monday-Sunday, ET).",
      "default": false
    },
    "month": {
      "type": "boolean",
      "description": "One row per calendar month (ET).",
      "default": false
    },
    "by": {
      "type": "string",
      "enum": [
        "strategy",
        "symbol"
      ],
      "description": "Also split each period by strategy or symbol."
    },
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date of entry, yyyy-MM-dd (default: everything)."
    },
    "until": {
      "type": "string",
      "format": "date",
      "description": "Last ET date of entry, yyyy-MM-dd (default: today)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Only trades in this mode: sandbox, paper or live."
    },
    "symbol": {
      "type": "string",
      "description": "Only this symbol."
    },
    "strategy": {
      "type": "string",
      "description": "Only this strategy: an id prefix or part of its title at trade time."
    }
  },
  "additionalProperties": false
}

diary_show

One diary trade in full: entry, exit, order ids, the risk plan that managed it, P&L and R.

CLI equivalent: idiotproof diary show Examples: idiotproof diary show 0193a7c2

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "One diary trade in full: entry, exit, order ids, the risk plan that managed it, P\u0026L and R.",
  "properties": {
    "trade": {
      "type": "string",
      "description": "Diary trade id, or the 8-character prefix \u0060diary list\u0060 shows.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "trade"
  ]
}

diary_stats

Trading performance from the diary: win rate, expectancy, profit factor, avg R, MFE/MAE, drawdown.

CLI equivalent: idiotproof diary stats [--by <strategy|symbol>] [--since ] [--until ] [--mode <sandbox|paper|live>] [--symbol ] [--strategy ] Examples: idiotproof diary stats idiotproof diary stats --mode paper --since 2026-10-01 idiotproof diary stats --by strategy

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Trading performance from the diary: win rate, expectancy, profit factor, avg R, MFE/MAE, drawdown.",
  "properties": {
    "by": {
      "type": "string",
      "enum": [
        "strategy",
        "symbol"
      ],
      "description": "Also break the numbers down per strategy or per symbol."
    },
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date of entry, yyyy-MM-dd (default: everything)."
    },
    "until": {
      "type": "string",
      "format": "date",
      "description": "Last ET date of entry, yyyy-MM-dd (default: today)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Only trades in this mode: sandbox, paper or live."
    },
    "symbol": {
      "type": "string",
      "description": "Only this symbol."
    },
    "strategy": {
      "type": "string",
      "description": "Only this strategy: an id prefix or part of its title at trade time."
    }
  },
  "additionalProperties": false
}

docs_dsl

Explain one IdiotScript verb: phase, signatures, meaning, doc comment, an example from its real signature, and uses.

CLI equivalent: idiotproof docs dsl Examples: idiotproof docs dsl StopLoss idiotproof docs dsl IsAboveVwap --json

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Explain one IdiotScript verb: phase, signatures, meaning, doc comment, an example from its real signature, and uses.",
  "properties": {
    "verb": {
      "type": "string",
      "description": "An IdiotScript verb or alias: StopLoss, IsAboveVwap, OnReclaim, RequireAdxAbove, ...",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "verb"
  ]
}

docs_explain

Explain a type or member: its doc comment, where it is declared (path:line), its members and its callers.

Callers are found by text (every line naming it as a whole word, comments and the declaration skipped), so overloads and same-named members elsewhere also show.

CLI equivalent: idiotproof docs explain [--callers ] Examples: idiotproof docs explain TransactionGateway idiotproof docs explain TransactionGateway.SubmitAsync --callers 5 idiotproof docs explain T:IdiotProof.Core.Trading.OrderIntent --json

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Explain a type or member: its doc comment, where it is declared (path:line), its members and its callers.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "A type or member: TransactionGateway, TransactionGateway.SubmitAsync, a full name, or an XML doc id (T:..., M:...).",
      "default": ""
    },
    "callers": {
      "type": "integer",
      "description": "Most lines that mention it to list (default 15; 0 for none).",
      "default": 15
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

docs_law

Show one BIBLE law (IP-LAW-n) in full, or list every law.

CLI equivalent: idiotproof docs law [] Examples: idiotproof docs law 3 idiotproof docs law

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Show one BIBLE law (IP-LAW-n) in full, or list every law.",
  "properties": {
    "n": {
      "type": "string",
      "description": "The law: 3, LAW-3 or IP-LAW-3. Leave out to list every law."
    }
  },
  "additionalProperties": false
}

Search everything IdiotProof knows about itself: BIBLE, docs, stories, tickets, code docs and catalogs.

Results are ranked: an exact id first, then entries holding every word (title and id hits weigh most). Follow up with docs law, docs section, docs story, docs ticket or docs explain.

CLI equivalent: idiotproof docs search ... [--kind <section|law|doc|story|ticket|symbol|catalog>] [--limit ] [--refresh] Examples: idiotproof docs search transaction gateway idiotproof docs search "peak giveback" --kind story idiotproof docs search IP-LAW-9 --json

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Search everything IdiotProof knows about itself: BIBLE, docs, stories, tickets, code docs and catalogs.",
  "properties": {
    "text": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "What to look for: words, a phrase, or an id like IP-LAW-3, IP-US-K1, IP-T259, \u00A74, TransactionGateway."
    },
    "kind": {
      "type": "string",
      "enum": [
        "section",
        "law",
        "doc",
        "story",
        "ticket",
        "symbol",
        "catalog"
      ],
      "description": "Only one kind: section, law, doc, story, ticket, symbol or catalog."
    },
    "limit": {
      "type": "integer",
      "description": "Most results to show (default 15).",
      "default": 15
    },
    "refresh": {
      "type": "boolean",
      "description": "Re-read the docs, code and tickets first (the index otherwise refreshes every 30 minutes).",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "text"
  ]
}

docs_section

Show one BIBLE section (IP-§n, subsections included), or the table of contents.

CLI equivalent: idiotproof docs section [

] Examples: idiotproof docs section 4 idiotproof docs section 4.4 idiotproof docs section

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Show one BIBLE section (IP-\u00A7n, subsections included), or the table of contents.",
  "properties": {
    "section": {
      "type": "string",
      "description": "The BIBLE section: 4, \u00A74, 4.4 or IP-\u00A74. Leave out to list the sections."
    }
  },
  "additionalProperties": false
}

docs_story

Show one user story (IP-US-*) with its status and proving tests, or list an epic's stories.

CLI equivalent: idiotproof docs story [] [--epic ] [--status ] Examples: idiotproof docs story K1 idiotproof docs story --epic W idiotproof docs story --status planned

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Show one user story (IP-US-*) with its status and proving tests, or list an epic\u0027s stories.",
  "properties": {
    "id": {
      "type": "string",
      "description": "The story: K1, US-K1 or IP-US-K1. Leave out and pass --epic or --status to list stories."
    },
    "epic": {
      "type": "string",
      "description": "List the stories of one epic by letter (K, W, ...)."
    },
    "status": {
      "type": "string",
      "description": "List only stories with this status: done, partial or planned."
    }
  },
  "additionalProperties": false
}

docs_ticket

Show one ticket: status, description, requires / required-by, the commits that name it, and its history.

CLI equivalent: idiotproof docs ticket [--history] Examples: idiotproof docs ticket IP-T259 idiotproof docs ticket 266 --history

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Show one ticket: status, description, requires / required-by, the commits that name it, and its history.",
  "properties": {
    "id": {
      "type": "string",
      "description": "The ticket: IP-T259, T259 or 259.",
      "default": ""
    },
    "history": {
      "type": "boolean",
      "description": "Also list every recorded change (status, priority, approval, links) with its ET time.",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "id"
  ]
}

dsl_format

Render canonical strategy JSON (or a stamp) as IdiotScript text, checking it parses back to the same strategy.

CLI equivalent: idiotproof dsl format Examples: idiotproof dsl format -

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Render canonical strategy JSON (or a stamp) as IdiotScript text, checking it parses back to the same strategy.",
  "properties": {
    "text": {
      "type": "string",
      "description": "IdiotScript, canonical JSON or a stamp; \u0060-\u0060 reads it from stdin.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "text"
  ]
}

dsl_glossary

Plain-English meaning of IdiotScript verbs: every entry, or one verb (aliases resolve).

CLI equivalent: idiotproof dsl glossary [] Examples: idiotproof dsl glossary idiotproof dsl glossary IsAboveVwap

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Plain-English meaning of IdiotScript verbs: every entry, or one verb (aliases resolve).",
  "properties": {
    "verb": {
      "type": "string",
      "description": "A verb name or alias (IsAboveVwap, StopLoss, RequireAdxAbove, ...); omit to list every entry."
    }
  },
  "additionalProperties": false
}

dsl_parse

Parse IdiotScript (or JSON or a stamp) into the canonical strategy JSON the Monitor evaluates; nothing is saved.

CLI equivalent: idiotproof dsl parse Examples: idiotproof dsl parse "Ticker("NVDA").IsAboveVwap().Long().StopLoss(2).TakeProfit(5)" idiotproof dsl parse -

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Parse IdiotScript (or JSON or a stamp) into the canonical strategy JSON the Monitor evaluates; nothing is saved.",
  "properties": {
    "text": {
      "type": "string",
      "description": "IdiotScript, canonical JSON or a stamp; \u0060-\u0060 reads it from stdin.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "text"
  ]
}

dsl_validate

Validate IdiotScript/JSON against the phase rules and the gates, failing closed with every reason (nothing is saved).

CLI equivalent: idiotproof dsl validate Examples: idiotproof dsl validate "Ticker("NVDA").IsAboveVwap().Long().StopLoss(2).TakeProfit(5)" idiotproof dsl validate -

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Validate IdiotScript/JSON against the phase rules and the gates, failing closed with every reason (nothing is saved).",
  "properties": {
    "text": {
      "type": "string",
      "description": "IdiotScript, canonical JSON or a stamp; \u0060-\u0060 reads it from stdin.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "text"
  ]
}

dsl_verbs

The IdiotScript verb catalog by phase, reflected from the code that compiles it (IP-LAW-4).

CLI equivalent: idiotproof dsl verbs [--phase ] Examples: idiotproof dsl verbs idiotproof dsl verbs --phase risk idiotproof dsl verbs --phase conditions

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The IdiotScript verb catalog by phase, reflected from the code that compiles it (IP-LAW-4).",
  "properties": {
    "phase": {
      "type": "string",
      "description": "Only one phase: setup, filters, entry, order, risk, exit, or conditions (the static If/ElseIf catalog)."
    }
  },
  "additionalProperties": false
}

evidence_calibration

Learned-vs-realized calibration per template: predicted probability buckets vs realized win rate, Brier score against the base-rate baseline, sample counts.

CLI equivalent: idiotproof evidence calibration [--source ] [--buckets ] Examples: idiotproof evidence calibration idiotproof evidence calibration --source exhaustion --buckets 4

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Learned-vs-realized calibration per template: predicted probability buckets vs realized win rate, Brier score against the base-rate baseline, sample counts.",
  "properties": {
    "source": {
      "type": "string",
      "description": "exhaustion, adaptation or all (default).",
      "default": "all"
    },
    "buckets": {
      "type": "integer",
      "description": "Probability buckets across 0..1 (default 5).",
      "default": 5
    }
  },
  "additionalProperties": false
}

evidence_conformal

Split and adaptive conformal intervals around analog or Kalman forward-return forecasts: coverage vs nominal per month, and an abstain-unless-the-interval-excludes-zero rule scored with day-clustered significance.

CLI equivalent: idiotproof evidence conformal ... [--from ] [--to ] [--model <analog|kalman>] [--alpha ] [--gamma ] [--horizon ] [--window ] [--train-days ] [--warmup-days ] [--min-similarity ] [--entry <next-open|close>] Examples: idiotproof evidence conformal SNDL MULN --from 2026-08-03 --to 2026-10-30 idiotproof evidence conformal SNDL --model kalman --alpha 0.2 --horizon 10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Split and adaptive conformal intervals around analog or Kalman forward-return forecasts: coverage vs nominal per month, and an abstain-unless-the-interval-excludes-zero rule scored with day-clustered significance.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. SNDL MULN."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 40 days before --to)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: yesterday ET)."
    },
    "model": {
      "type": "string",
      "enum": [
        "analog",
        "kalman"
      ],
      "description": "analog: the mean forward return of LSH look-alike windows from prior sessions. kalman: the local-trend filter\u0027s slope \u00D7 horizon, fitted on the warm-up sessions.",
      "default": "analog"
    },
    "alpha": {
      "type": "number",
      "description": "Miss rate the intervals target (default 0.1 = 90% intervals).",
      "default": 0.1
    },
    "gamma": {
      "type": "number",
      "description": "Adaptive conformal learning rate (default 0.005).",
      "default": 0.005
    },
    "horizon": {
      "type": "integer",
      "description": "Minute bars ahead (default 15).",
      "default": 15
    },
    "window": {
      "type": "integer",
      "description": "Bars per pattern window / filter burn-in (default 30).",
      "default": 30
    },
    "train_days": {
      "type": "integer",
      "description": "Analog: prior sessions searched for look-alikes (default 20).",
      "default": 20
    },
    "warmup_days": {
      "type": "integer",
      "description": "Sessions before the first forecast; kalman fits its noise variances on them (default 5).",
      "default": 5
    },
    "min_similarity": {
      "type": "number",
      "description": "Analog: least cosine similarity of a look-alike (default 0.8).",
      "default": 0.8
    },
    "entry": {
      "type": "string",
      "enum": [
        "next-open",
        "close"
      ],
      "description": "next-open (default: fill at the next bar\u0027s open, immune to bid-ask bounce) or close (fill at the signal bar\u0027s close; a diagnostic).",
      "default": "next-open"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

evidence_events

Event study of Research claims: market-model abnormal returns and CARs per claim type/sentiment/insider code, with Patell, BMP and placebo-bootstrap significance.

CLI equivalent: idiotproof evidence events [--from ] [--to ] [--type ] [--windows ] [--estimation ] [--gap ] [--min-events ] [--bootstrap ] [--seed ] [--benchmark ] [--max-daily-move ] Examples: idiotproof evidence events idiotproof evidence events --type Insider --windows 0:1,0:5 --from 2026-05-01

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Event study of Research claims: market-model abnormal returns and CARs per claim type/sentiment/insider code, with Patell, BMP and placebo-bootstrap significance.",
  "properties": {
    "from": {
      "type": "string",
      "format": "date",
      "description": "First claim article day (yyyy-MM-dd, default: 180 days before --to)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last claim article day (yyyy-MM-dd, default: today ET)."
    },
    "type": {
      "type": "string",
      "description": "Only this claim type (Earnings, Contract, Insider, MA, Guidance, Regulatory, News, IndexEvent)."
    },
    "windows": {
      "type": "string",
      "description": "Event windows in trading days, start:end, comma-separated (default -1:1,0:1,0:5).",
      "default": "-1:1,0:1,0:5"
    },
    "estimation": {
      "type": "integer",
      "description": "Estimation-window length in trading days (default 120).",
      "default": 120
    },
    "gap": {
      "type": "integer",
      "description": "Trading days between the estimation window and the event window (default 10).",
      "default": 10
    },
    "min_events": {
      "type": "integer",
      "description": "Fewest valid events a group needs to be reported (default 5).",
      "default": 5
    },
    "bootstrap": {
      "type": "integer",
      "description": "Placebo bootstrap draws (default 1000; 0 skips it).",
      "default": 1000
    },
    "seed": {
      "type": "integer",
      "description": "Bootstrap seed (default 1337).",
      "default": 1337
    },
    "benchmark": {
      "type": "string",
      "description": "Market benchmark symbol (default SPY).",
      "default": "SPY"
    },
    "max_daily_move": {
      "type": "number",
      "description": "Drop events whose windows hold a daily return above this (default 2.0 = \u002B200%, or below -66.7%). Bars are split-adjusted from Alpaca corporate actions; this guard catches splits the feed missed.",
      "default": 2
    }
  },
  "additionalProperties": false
}

evidence_flow

Order-flow evidence: imbalance, VPIN, Kyle's lambda and absorption bucketed against forward returns, scored on held-out sessions.

CLI equivalent: idiotproof evidence flow [--from ] [--to ] [--horizon ] [--bins ] [--signing <tick|lee-ready|bulk>] [--train ] [--vpin-window ] [--lambda-window ] Examples: idiotproof evidence flow SNDL --from 2026-10-20 --to 2026-10-31 idiotproof evidence flow MULN --signing bulk --horizon 10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Order-flow evidence: imbalance, VPIN, Kyle\u0027s lambda and absorption bucketed against forward returns, scored on held-out sessions.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. SNDL.",
      "default": ""
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 10 days before --to)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: yesterday ET)."
    },
    "horizon": {
      "type": "integer",
      "description": "Minute bars ahead to measure (default 5).",
      "default": 5
    },
    "bins": {
      "type": "integer",
      "description": "Quantile buckets per metric (default 5).",
      "default": 5
    },
    "signing": {
      "type": "string",
      "enum": [
        "tick",
        "lee-ready",
        "bulk"
      ],
      "description": "tick (default: tick rule on trades), lee-ready (trades vs quote midpoint; fetches quotes) or bulk (bar-only bulk classification).",
      "default": "tick"
    },
    "train": {
      "type": "number",
      "description": "Share of sessions used to learn bucket edges (default 0.67); the rest is the held-out test.",
      "default": 0.67
    },
    "vpin_window": {
      "type": "integer",
      "description": "VPIN buckets averaged (default 50).",
      "default": 50
    },
    "lambda_window": {
      "type": "integer",
      "description": "Bars per Kyle\u0027s lambda regression (default 30).",
      "default": 30
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

evidence_graph

Correlation graph across symbols (lag 0 or 1) and the hop-decayed influence of a shock at a source symbol.

CLI equivalent: idiotproof evidence graph ... [--source ] [--lag ] [--edge <correlation|te>] [--alpha ] [--clean <none|rmt>] [--min-corr ] [--beta ] [--from ] [--to ] [--timeframe <minute|day>] [--session <rth|all>] Examples: idiotproof evidence graph SNDL TLRY CGC ACB --source TLRY idiotproof evidence graph SPY IWM MULN --lag 1 --source SPY

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Correlation graph across symbols (lag 0 or 1) and the hop-decayed influence of a shock at a source symbol.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Two or more tickers, e.g. SNDL TLRY CGC ACB."
    },
    "source": {
      "type": "string",
      "description": "Symbol whose shock is propagated (default: the first symbol)."
    },
    "lag": {
      "type": "integer",
      "description": "0 = moves together (default); 1 = the source\u0027s bar predicts the other\u0027s next bar.",
      "default": 0
    },
    "edge": {
      "type": "string",
      "enum": [
        "correlation",
        "te"
      ],
      "description": "correlation (default) or te: transfer entropy beating shuffled surrogates (directional, implies --lag 1).",
      "default": "correlation"
    },
    "alpha": {
      "type": "number",
      "description": "With --edge te, the surrogate-test significance an edge must reach (default 0.05).",
      "default": 0.05
    },
    "clean": {
      "type": "string",
      "enum": [
        "none",
        "rmt"
      ],
      "description": "none (default) or rmt: keep only correlation the data can tell from chance (lag 0: Marchenko-Pastur eigenvalue clipping; lag 1: the 2.5/sqrt(T) noise floor). Correlation edges only; --edge te already tests each edge against shuffled surrogates.",
      "default": "none"
    },
    "min_corr": {
      "type": "number",
      "description": "Least |correlation| that makes an edge (default 0.2).",
      "default": 0.2
    },
    "beta": {
      "type": "number",
      "description": "Per-hop decay of influence, 0-1 exclusive (default 0.5).",
      "default": 0.5
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 5 days before --to for minute, 120 for day)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: today ET)."
    },
    "timeframe": {
      "type": "string",
      "enum": [
        "minute",
        "day"
      ],
      "description": "minute (default) or day.",
      "default": "minute"
    },
    "session": {
      "type": "string",
      "enum": [
        "rth",
        "all"
      ],
      "description": "rth (default) or all.",
      "default": "rth"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

evidence_hawkes

Hawkes self-exciting fit of trade arrivals (branching ratio = endogenous share) and a momentum-ignition detector scored against forward returns on held-out sessions.

CLI equivalent: idiotproof evidence hawkes [--from ] [--to ] [--horizon ] [--bins ] [--train ] [--window ] [--spike ] [--branching ] Examples: idiotproof evidence hawkes SNDL --from 2026-10-20 --to 2026-10-31 idiotproof evidence hawkes MULN --window 5 --spike 4 --branching 0.8

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Hawkes self-exciting fit of trade arrivals (branching ratio = endogenous share) and a momentum-ignition detector scored against forward returns on held-out sessions.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. SNDL.",
      "default": ""
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 10 days before --to)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: yesterday ET)."
    },
    "horizon": {
      "type": "integer",
      "description": "Minute bars ahead to measure (default 5).",
      "default": 5
    },
    "bins": {
      "type": "integer",
      "description": "Quantile buckets for the continuous features (default 5).",
      "default": 5
    },
    "train": {
      "type": "number",
      "description": "Share of scored sessions used to learn bucket edges (default 0.67); the rest is the held-out test.",
      "default": 0.67
    },
    "window": {
      "type": "integer",
      "description": "Trailing minutes the detector looks at (default 10).",
      "default": 10
    },
    "spike": {
      "type": "number",
      "description": "Trade-rate multiple of the prior session\u0027s baseline that counts as a spike (default 3).",
      "default": 3
    },
    "branching": {
      "type": "number",
      "description": "Rolling branching ratio that counts as self-exciting (default 0.7).",
      "default": 0.7
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

evidence_kalman

Kalman trend slope, innovation z and leader pair-residual z bucketed against forward returns, fitted on training sessions and tested on held-out ones.

CLI equivalent: idiotproof evidence kalman ... [--leader ] [--from ] [--to ] [--horizon ] [--bins ] [--train ] [--entry <next-open|close>] Examples: idiotproof evidence kalman SNDL --from 2026-09-01 --to 2026-10-30 idiotproof evidence kalman MULN SNDL --leader IWM --horizon 10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Kalman trend slope, innovation z and leader pair-residual z bucketed against forward returns, fitted on training sessions and tested on held-out ones.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. SNDL MULN."
    },
    "leader": {
      "type": "string",
      "description": "Leader for the pair-residual feature (dynamic hedge ratio), e.g. SPY or IWM. Omit to skip it."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 20 days before --to)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: yesterday ET)."
    },
    "horizon": {
      "type": "integer",
      "description": "Minute bars ahead to measure (default 5).",
      "default": 5
    },
    "bins": {
      "type": "integer",
      "description": "Quantile buckets per feature (default 5).",
      "default": 5
    },
    "train": {
      "type": "number",
      "description": "Share of sessions used to fit the filter and learn bucket edges (default 0.67); the rest is the held-out test.",
      "default": 0.67
    },
    "entry": {
      "type": "string",
      "enum": [
        "next-open",
        "close"
      ],
      "description": "next-open (default: enter at the next bar\u0027s open, immune to bid-ask bounce) or close (enter at the signal bar\u0027s close).",
      "default": "next-open"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

evidence_label

Forward-return distribution for a symbol (up/down/flat rates, quantiles, excursions): the base rate a pattern must beat.

CLI equivalent: idiotproof evidence label [--from ] [--to ] [--horizon ] [--entry <next-open|close>] [--timeframe <minute|day>] [--dead-band ] [--session <rth|all>] Examples: idiotproof evidence label SNDL --from 2026-10-01 --to 2026-10-31 --horizon 10 idiotproof evidence label AAPL --timeframe day --from 2026-01-02 --horizon 5

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Forward-return distribution for a symbol (up/down/flat rates, quantiles, excursions): the base rate a pattern must beat.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. SNDL.",
      "default": ""
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 20 days before --to)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: yesterday ET)."
    },
    "horizon": {
      "type": "integer",
      "description": "Bars ahead to measure (default 5).",
      "default": 5
    },
    "entry": {
      "type": "string",
      "enum": [
        "next-open",
        "close"
      ],
      "description": "next-open (default: fill at the next bar\u0027s open, immune to bid-ask bounce) or close (fill at the signal bar\u0027s close; a diagnostic).",
      "default": "next-open"
    },
    "timeframe": {
      "type": "string",
      "enum": [
        "minute",
        "day"
      ],
      "description": "minute (default) or day.",
      "default": "minute"
    },
    "dead_band": {
      "type": "number",
      "description": "Absolute return counted as flat, as a fraction (default 0.001).",
      "default": 0.001
    },
    "session": {
      "type": "string",
      "enum": [
        "rth",
        "all"
      ],
      "description": "rth (default) or all.",
      "default": "rth"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

evidence_pools

Stop-pool raid rates: how often price raided each pool kind (round numbers, prior-day/premarket/opening-range levels, VWAP bands) and reversed vs broke through, per side and price tier.

CLI equivalent: idiotproof evidence pools ... [--from ] [--to ] [--horizon ] [--proximity ] [--min-samples ] Examples: idiotproof evidence pools SNDL MULN idiotproof evidence pools SNDL --from 2026-09-01 --to 2026-10-30 --min-samples 20

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Stop-pool raid rates: how often price raided each pool kind (round numbers, prior-day/premarket/opening-range levels, VWAP bands) and reversed vs broke through, per side and price tier.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. SNDL MULN."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 20 days before --to)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: today ET)."
    },
    "horizon": {
      "type": "integer",
      "description": "Bars after an approach that decide raid / break / reject (default 10).",
      "default": 10
    },
    "proximity": {
      "type": "number",
      "description": "How close counts as reaching a pool, in ATRs of the bar before (default 0.25).",
      "default": 0.25
    },
    "min_samples": {
      "type": "integer",
      "description": "Hide rows with fewer approaches than this (default 1).",
      "default": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

evidence_regime

Per-symbol regime: Hurst, variance ratio (z-tested vs random walk), efficiency ratio, realized vol, lag-1 autocorrelation.

CLI equivalent: idiotproof evidence regime ... [--from ] [--to ] [--timeframe <minute|day>] [--q ] [--session <rth|all>] [--method <vr|bocpd|hmm>] [--threshold ] [--states ] [--aggregate ] Examples: idiotproof evidence regime SNDL MULN idiotproof evidence regime SPY --timeframe day --from 2026-05-01

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Per-symbol regime: Hurst, variance ratio (z-tested vs random walk), efficiency ratio, realized vol, lag-1 autocorrelation.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. SNDL MULN."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 5 days before --to for minute, 120 for day)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: today ET)."
    },
    "timeframe": {
      "type": "string",
      "enum": [
        "minute",
        "day"
      ],
      "description": "minute (default) or day.",
      "default": "minute"
    },
    "q": {
      "type": "integer",
      "description": "Variance-ratio aggregation in bars (default 4).",
      "default": 4
    },
    "session": {
      "type": "string",
      "enum": [
        "rth",
        "all"
      ],
      "description": "rth (default) or all.",
      "default": "rth"
    },
    "method": {
      "type": "string",
      "enum": [
        "vr",
        "bocpd",
        "hmm"
      ],
      "description": "vr (default: variance-ratio z-test), bocpd (Bayesian online change points) or hmm (Gaussian hidden Markov regimes, trained on earlier sessions, filtered forward on the last).",
      "default": "vr"
    },
    "threshold": {
      "type": "number",
      "description": "bocpd: probability that a regime began within the last 5 bars needed to flag a change (default 0.5).",
      "default": 0.5
    },
    "states": {
      "type": "integer",
      "description": "hmm: hidden states, 2 or 3 (default 2).",
      "default": 2
    },
    "aggregate": {
      "type": "integer",
      "description": "bocpd/hmm on minute bars: bar multiple to fit on (default: auto, the smallest of 1,2,3,5,10,15,30 minutes at which most bars move and tick rounding is under 10% of return variance; 1 = raw minutes)."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

Grid-search a strategy template with multiple-testing corrections: BH q-values, deflated Sharpe, reality check/SPA, and a held-out score for the winner.

CLI equivalent: idiotproof evidence search ... [--script ] [--grid <string[]>] [--from ] [--to ] [--holdout ] [--top ] [--resamples ] [--block ] [--seed ] [--max-configs ] [--cost ] [--shares ] Examples: idiotproof evidence search SNDL MULN --script "Ticker(X).IsAboveVwap().Long().StopLossPercent({sl}).TrailingStopLoss({trail})" --grid sl=1,2 --grid trail=1,3

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Grid-search a strategy template with multiple-testing corrections: BH q-values, deflated Sharpe, reality check/SPA, and a held-out score for the winner.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tickers to score every config on, e.g. SNDL MULN."
    },
    "script": {
      "type": "string",
      "description": "IdiotScript template with {name} placeholders, e.g. \u0022Ticker(X).IsAboveVwap().Long().StopLossPercent({sl}).TrailingStopLoss({trail})\u0022. Use percent exits: an absolute TakeProfit/StopLoss price means the same dollar level on every symbol.",
      "default": ""
    },
    "grid": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Repeatable: a placeholder and its values, e.g. --grid tp=1,2,3 --grid sl=0.5,1."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 30 days before --to)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: today ET)."
    },
    "holdout": {
      "type": "number",
      "description": "Fraction of the latest days kept out of selection and scored once on the chosen config (default 0.3).",
      "default": 0.3
    },
    "top": {
      "type": "integer",
      "description": "Configs to list (default 10).",
      "default": 10
    },
    "resamples": {
      "type": "integer",
      "description": "Reality-check bootstrap resamples (default 1000).",
      "default": 1000
    },
    "block": {
      "type": "number",
      "description": "Mean bootstrap block length in symbol-days (default 5).",
      "default": 5
    },
    "seed": {
      "type": "integer",
      "description": "Bootstrap seed (default 1337).",
      "default": 1337
    },
    "max_configs": {
      "type": "integer",
      "description": "Refuse grids larger than this (default 2000).",
      "default": 2000
    },
    "cost": {
      "type": "number",
      "description": "Flat round-trip cost per trade as a fraction. Omit it to model each symbol-day\u0027s cost from that symbol\u0027s prior sessions (Corwin-Schultz spread \u002B square-root impact for --shares)."
    },
    "shares": {
      "type": "number",
      "description": "Shares per trade for the modeled impact cost (default 1, the default order size).",
      "default": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

evidence_similar

LSH look-alikes of a symbol's latest bar window from earlier sessions, with what each did next.

CLI equivalent: idiotproof evidence similar [--date ] [--window ] [--horizon ] [--entry <next-open|close>] [--train-days ] [--k ] [--min-similarity ] [--session <rth|all>] Examples: idiotproof evidence similar SNDL idiotproof evidence similar MULN --date 2026-10-30 --window 30 --horizon 10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "LSH look-alikes of a symbol\u0027s latest bar window from earlier sessions, with what each did next.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. SNDL.",
      "default": ""
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "ET day whose latest window is matched (yyyy-MM-dd, default: today ET)."
    },
    "window": {
      "type": "integer",
      "description": "Bars per pattern window (default 20).",
      "default": 20
    },
    "horizon": {
      "type": "integer",
      "description": "Bars ahead each look-alike\u0027s outcome is measured (default 5).",
      "default": 5
    },
    "entry": {
      "type": "string",
      "enum": [
        "next-open",
        "close"
      ],
      "description": "next-open (default: fill at the next bar\u0027s open, immune to bid-ask bounce) or close (fill at the signal bar\u0027s close; a diagnostic).",
      "default": "next-open"
    },
    "train_days": {
      "type": "integer",
      "description": "Prior sessions searched for look-alikes (default 20).",
      "default": 20
    },
    "k": {
      "type": "integer",
      "description": "Look-alikes to list (default 15).",
      "default": 15
    },
    "min_similarity": {
      "type": "number",
      "description": "Least cosine similarity (default 0.8).",
      "default": 0.8
    },
    "session": {
      "type": "string",
      "enum": [
        "rth",
        "all"
      ],
      "description": "rth (default) or all.",
      "default": "rth"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

evidence_sizing

Advisory Kelly sizing (plug-in vs Beta-posterior vs conservative) from diary trades or manual counts; never changes order quantities.

The Risk Guardian and the 1-share default policy stay authoritative; this only reports what the measured edge would justify.

CLI equivalent: idiotproof evidence sizing [--strategy ] [--symbol ] [--wins ] [--losses ] [--payoff ] [--fraction ] Examples: idiotproof evidence sizing --strategy "SNDL dip-reclaim" idiotproof evidence sizing --wins 12 --losses 8 --payoff 1.3

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Advisory Kelly sizing (plug-in vs Beta-posterior vs conservative) from diary trades or manual counts; never changes order quantities.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Size from this strategy\u0027s closed trades in the diary (title, case-insensitive)."
    },
    "symbol": {
      "type": "string",
      "description": "Size from this symbol\u0027s closed trades in the diary."
    },
    "wins": {
      "type": "integer",
      "description": "Manual mode: winning trades (use with --losses and --payoff)."
    },
    "losses": {
      "type": "integer",
      "description": "Manual mode: losing trades."
    },
    "payoff": {
      "type": "number",
      "description": "Manual mode: average win / average loss."
    },
    "fraction": {
      "type": "number",
      "description": "Fraction of the posterior Kelly to recommend (default 0.5 = half Kelly).",
      "default": 0.5
    }
  },
  "additionalProperties": false
}

evidence_survival

Survival analysis of exits: Kaplan-Meier hold curves, competing-risk incidence of target vs stop vs trail, Cox hazard ratios, and an advisory sell-by from replay trades.

CLI equivalent: idiotproof evidence survival [--strategy ] [--symbol ] [--from ] [--to ] [--top ] [--min-trades ] [--checkpoints ] Examples: idiotproof evidence survival idiotproof evidence survival --strategy gapper --checkpoints 10,30,60

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Survival analysis of exits: Kaplan-Meier hold curves, competing-risk incidence of target vs stop vs trail, Cox hazard ratios, and an advisory sell-by from replay trades.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Only replay trades whose strategy/family name contains this text (case-insensitive)."
    },
    "symbol": {
      "type": "string",
      "description": "Only this symbol\u0027s replay trades."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First trade day (yyyy-MM-dd ET)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last trade day (yyyy-MM-dd ET)."
    },
    "top": {
      "type": "integer",
      "description": "Report at most this many strategies, most trades first (default 8).",
      "default": 8
    },
    "min_trades": {
      "type": "integer",
      "description": "Fewest trades a strategy needs to get its own curves (default 20).",
      "default": 20
    },
    "checkpoints": {
      "type": "string",
      "description": "Hold minutes at which to read the curves, comma-separated (default 5,15,30,60,120).",
      "default": "5,15,30,60,120"
    }
  },
  "additionalProperties": false
}

evidence_tails

Tail dependence (copulas): which symbols crash together beyond what correlation shows, and whether a crash in one predicts the next bar of the other out of sample.

CLI equivalent: idiotproof evidence tails ... [--from ] [--to ] [--timeframe <minute|day>] [--q ] [--train ] [--permutations ] [--alpha ] [--seed ] Examples: idiotproof evidence tails SNDL MULN SPY idiotproof evidence tails SOXL NVDA AMD --q 0.05 --from 2025-11-01

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Tail dependence (copulas): which symbols crash together beyond what correlation shows, and whether a crash in one predicts the next bar of the other out of sample.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Two or more tickers, e.g. SNDL MULN SPY."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 365 days before --to for day, 10 for minute)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: today ET)."
    },
    "timeframe": {
      "type": "string",
      "enum": [
        "minute",
        "day"
      ],
      "description": "day (default) or minute.",
      "default": "day"
    },
    "q": {
      "type": "number",
      "description": "Tail quantile: a \u0027crash\u0027 is a return in the bottom q (default 0.1).",
      "default": 0.1
    },
    "train": {
      "type": "number",
      "description": "Share of aligned bars used to find tail-linked pairs (default 0.67); the rest is the held-out contagion test.",
      "default": 0.67
    },
    "permutations": {
      "type": "integer",
      "description": "Permutations for the tail-independence test (default 999).",
      "default": 999
    },
    "alpha": {
      "type": "number",
      "description": "False-discovery rate for both the pair screen and the holdout test (default 0.05).",
      "default": 0.05
    },
    "seed": {
      "type": "integer",
      "description": "Permutation seed (default 1337).",
      "default": 1337
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

evidence_topology

Persistent-homology features (H0/H1 persistence, landscape norm) of delay-embedded returns, learned on earlier days and re-tested on held-out days with a session-clustered test.

CLI equivalent: idiotproof evidence topology ... [--from ] [--to ] [--window ] [--dim ] [--delay ] [--horizon ] [--buckets ] [--holdout ] [--min-samples ] [--session <rth|all>] Examples: idiotproof evidence topology SNDL MULN --from 2026-08-01 --to 2026-10-30 idiotproof evidence topology SPY --window 30 --dim 2 --delay 2 --horizon 10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Persistent-homology features (H0/H1 persistence, landscape norm) of delay-embedded returns, learned on earlier days and re-tested on held-out days with a session-clustered test.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. SNDL MULN."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day (yyyy-MM-dd, default: 30 days before --to)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day (yyyy-MM-dd, default: today ET)."
    },
    "window": {
      "type": "integer",
      "description": "Closes per topology read (default 40, max 100).",
      "default": 40
    },
    "dim": {
      "type": "integer",
      "description": "Delay-embedding dimension (default 3).",
      "default": 3
    },
    "delay": {
      "type": "integer",
      "description": "Delay-embedding lag in bars (default 1).",
      "default": 1
    },
    "horizon": {
      "type": "integer",
      "description": "Forward bars for the up/down label; reads are spaced this far apart (default 5).",
      "default": 5
    },
    "buckets": {
      "type": "integer",
      "description": "Quantile buckets per feature, learned on training days (default 4).",
      "default": 4
    },
    "holdout": {
      "type": "number",
      "description": "Fraction of the latest trading days held out (default 0.3).",
      "default": 0.3
    },
    "min_samples": {
      "type": "integer",
      "description": "Minimum training reads in a bucket before it can be picked (default 30).",
      "default": 30
    },
    "session": {
      "type": "string",
      "enum": [
        "rth",
        "all"
      ],
      "description": "rth (default) or all.",
      "default": "rth"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

evidence_walkforward

Out-of-sample walk-forward directional test (LSH analogs) with binomial p, Wilson CI, coverage and edge after costs.

Each day's model trains only on earlier sessions; calls are spaced by --horizon so outcomes never overlap. Analysis only; arms nothing.

CLI equivalent: idiotproof evidence walkforward [...] [--universe <none|penny>] --from [--to ] [--model <analog|leaders>] [--leaders ] [--edge <correlation|te>] [--clean <none|rmt>] [--leader-hops ] [--leader-min-influence ] [--window ] [--horizon ] [--train-days ] [--min-similarity ] [--min-neighbors ] [--min-agreement ] [--cost ] [--entry <next-open|close>] [--allow-mixed-feeds] [--shares ] [--volume] [--session <rth|all>] [--max-symbols-per-day ] [--max-candidates ] Examples: idiotproof evidence walkforward --universe penny --from 2026-08-03 --to 2026-10-30 idiotproof evidence walkforward SNDL --from 2026-10-01 --horizon 10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Out-of-sample walk-forward directional test (LSH analogs) with binomial p, Wilson CI, coverage and edge after costs.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tickers to test, e.g. SNDL MULN (omit when using --universe)."
    },
    "universe": {
      "type": "string",
      "enum": [
        "none",
        "penny"
      ],
      "description": "penny: each day\u0027s point-in-time under-$5 universe (prior-day close, dollar-volume floor), drawn from active AND delisted Alpaca equities.",
      "default": "none"
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET day to evaluate (yyyy-MM-dd).",
      "default": "0001-01-01"
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET day to evaluate (yyyy-MM-dd, default: yesterday ET)."
    },
    "model": {
      "type": "string",
      "enum": [
        "analog",
        "leaders"
      ],
      "description": "analog: LSH look-alike windows vote on direction. leaders: follow the influence-weighted move of the symbol\u0027s lag-1 leaders, discovered among --leaders from prior sessions only.",
      "default": "analog"
    },
    "leaders": {
      "type": "string",
      "description": "With --model leaders, the symbols leaders are discovered among (default SPY,QQQ,IWM).",
      "default": "SPY,QQQ,IWM"
    },
    "edge": {
      "type": "string",
      "enum": [
        "correlation",
        "te"
      ],
      "description": "With --model leaders, how leader edges are measured: correlation (default) or te (transfer entropy vs shuffled surrogates).",
      "default": "correlation"
    },
    "clean": {
      "type": "string",
      "enum": [
        "none",
        "rmt"
      ],
      "description": "With --model leaders and correlation edges: none (default) or rmt, keeping only lag-1 correlations above the random-matrix noise floor 2.5/sqrt(T).",
      "default": "none"
    },
    "leader_hops": {
      "type": "integer",
      "description": "With --model leaders, most links between a leader and the symbol (default 2).",
      "default": 2
    },
    "leader_min_influence": {
      "type": "number",
      "description": "With --model leaders, least |influence| a leader needs to count (default 0.05).",
      "default": 0.05
    },
    "window": {
      "type": "integer",
      "description": "Bars per pattern window (default 20).",
      "default": 20
    },
    "horizon": {
      "type": "integer",
      "description": "Bars ahead the call is scored on; calls are spaced this far apart so outcomes never overlap (default 5).",
      "default": 5
    },
    "train_days": {
      "type": "integer",
      "description": "Prior sessions each day\u0027s model trains on (default 20).",
      "default": 20
    },
    "min_similarity": {
      "type": "number",
      "description": "Least cosine similarity for a look-alike to count (default 0.8).",
      "default": 0.8
    },
    "min_neighbors": {
      "type": "integer",
      "description": "Fewest look-alikes needed to make a call (default 8).",
      "default": 8
    },
    "min_agreement": {
      "type": "number",
      "description": "Smoothed share of look-alikes that must agree to call (default 0.6).",
      "default": 0.6
    },
    "cost": {
      "type": "number",
      "description": "Flat round-trip cost per call as a fraction (e.g. 0.003). Omit it to model each symbol-day\u0027s cost from its prior sessions: Corwin-Schultz spread \u002B square-root impact for --shares."
    },
    "entry": {
      "type": "string",
      "enum": [
        "next-open",
        "close"
      ],
      "description": "next-open (default: a call fills at the next bar\u0027s open, immune to bid-ask bounce) or close (fills at the signal bar\u0027s close; a diagnostic that inflates mean-reversion edge on low-priced names).",
      "default": "next-open"
    },
    "allow_mixed_feeds": {
      "type": "boolean",
      "description": "Report a verdict even when the bars mix SIP and IEX tiers (refused by default: IEX prices and volumes are one exchange\u0027s, not the consolidated tape).",
      "default": false
    },
    "shares": {
      "type": "number",
      "description": "Shares per call for the modeled impact cost (default 1, the default order size).",
      "default": 1
    },
    "volume": {
      "type": "boolean",
      "description": "Include the volume shape in the pattern vector.",
      "default": false
    },
    "session": {
      "type": "string",
      "enum": [
        "rth",
        "all"
      ],
      "description": "rth (default) or all (adds pre/after-hours bars).",
      "default": "rth"
    },
    "max_symbols_per_day": {
      "type": "integer",
      "description": "With --universe, keep each day\u0027s most liquid N members (default 30).",
      "default": 30
    },
    "max_candidates": {
      "type": "integer",
      "description": "With --universe, most candidate symbols screened (default 4000; inactive first, then active).",
      "default": 4000
    }
  },
  "additionalProperties": false,
  "required": [
    "from"
  ]
}

gapper_apply_tuned

Save a backtest's hindsight-tuned profile as a new gapper strategy (inactive unless --arm).

CLI equivalent: idiotproof gapper apply-tuned [--arm] [--mode <sandbox|paper|live>] Examples: idiotproof gapper apply-tuned gb-1a2b3c4d idiotproof gapper apply-tuned gb-1a2b3c4d --arm

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Save a backtest\u0027s hindsight-tuned profile as a new gapper strategy (inactive unless --arm).",
  "properties": {
    "run": {
      "type": "string",
      "description": "The run id \u0060gapper backtest-day\u0060 printed (gb-xxxxxxxx).",
      "default": ""
    },
    "arm": {
      "type": "boolean",
      "description": "Arm it right away (one-per-symbol and the 3-gapper cap still apply).",
      "default": false
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Broker mode for the new gapper: paper (default) or sandbox.",
      "default": "paper"
    }
  },
  "additionalProperties": false,
  "required": [
    "run"
  ]
}

gapper_arm

Arm a gapper: activate an existing one or queue a new one from a profile, honoring one-per-symbol and the 3-gapper cap.

CLI equivalent: idiotproof gapper arm [--mode <sandbox|paper|live>] [--profile ] [--gap ] [--max-gap ] [--volume ] [--min-price ] [--max-price ] [--entry-start ] [--entry-end ] [--stop ] [--trail ] [--giveback ] [--arm-exit ] [--sell-by ] [--notional ] Examples: idiotproof gapper arm NVDA idiotproof gapper arm ABCD --profile penny-runner --stop 6 idiotproof gapper arm 0190a3f2

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Arm a gapper: activate an existing one or queue a new one from a profile, honoring one-per-symbol and the 3-gapper cap.",
  "properties": {
    "gapper": {
      "type": "string",
      "description": "A symbol (queues a new gapper when it has none) or a gapper\u0027s id, id prefix or stamp id.",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Broker mode for a newly queued gapper: paper (default) or sandbox. Live is \u0060strategy mode\u0060, confirmed.",
      "default": "paper"
    },
    "profile": {
      "type": "string",
      "description": "Gapper profile id or name to start from (default classic-gapper)."
    },
    "gap": {
      "type": "number",
      "description": "Minimum gap over the previous close, percent."
    },
    "max_gap": {
      "type": "number",
      "description": "Gap ceiling in percent (0 = no ceiling)."
    },
    "volume": {
      "type": "number",
      "description": "Premarket volume must be at least this multiple of average volume."
    },
    "min_price": {
      "type": "number",
      "description": "Lowest price that qualifies."
    },
    "max_price": {
      "type": "number",
      "description": "Highest price that qualifies."
    },
    "entry_start": {
      "type": "string",
      "description": "Entry window start, ET (HH:mm)."
    },
    "entry_end": {
      "type": "string",
      "description": "Entry window end, ET (HH:mm)."
    },
    "stop": {
      "type": "number",
      "description": "Hard stop below entry, percent."
    },
    "trail": {
      "type": "number",
      "description": "Trailing stop off the high, percent (0 = none)."
    },
    "giveback": {
      "type": "number",
      "description": "Sell once price gives back this percent of the entry-to-peak run."
    },
    "arm_exit": {
      "type": "string",
      "description": "ET time the giveback exit arms (HH:mm)."
    },
    "sell_by": {
      "type": "string",
      "description": "Hard flatten time, ET (HH:mm), before the 9:30 bell."
    },
    "notional": {
      "type": "number",
      "description": "Position size in dollars."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "gapper"
  ]
}

gapper_auto_candidates

Every ticker an auto-gapper scan screened on a day: signals, the adaptive plan it chose, and armed or why skipped.

CLI equivalent: idiotproof gapper auto candidates [--date ] Examples: idiotproof gapper auto candidates idiotproof gapper auto candidates --date 2026-10-29

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Every ticker an auto-gapper scan screened on a day: signals, the adaptive plan it chose, and armed or why skipped.",
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "ET scan day (yyyy-MM-dd); default the latest scan\u0027s day."
    }
  },
  "additionalProperties": false
}

gapper_auto_disable

Disarm every auto-armed gapper of yours that holds no position (holding ones stay armed to manage their exit).

CLI equivalent: idiotproof gapper auto disable Examples: idiotproof gapper auto disable

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Disarm every auto-armed gapper of yours that holds no position (holding ones stay armed to manage their exit).",
  "properties": {},
  "additionalProperties": false
}

gapper_auto_enable

Run the auto-gapper for you now and arm its top picks as paper gappers (paper-only; --dry-run previews).

CLI equivalent: idiotproof gapper auto enable [--dry-run] Examples: idiotproof gapper auto enable --dry-run idiotproof gapper auto enable

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Run the auto-gapper for you now and arm its top picks as paper gappers (paper-only; --dry-run previews).",
  "properties": {
    "dry_run": {
      "type": "boolean",
      "description": "Preview what would arm; writes and arms nothing.",
      "default": false
    }
  },
  "additionalProperties": false
}

gapper_auto_status

Auto-gapper settings, its recent scans (screened, qualified, armed, skipped) and your auto-armed gappers.

CLI equivalent: idiotproof gapper auto status [--last ] Examples: idiotproof gapper auto status idiotproof gapper auto status --last 20

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Auto-gapper settings, its recent scans (screened, qualified, armed, skipped) and your auto-armed gappers.",
  "properties": {
    "last": {
      "type": "integer",
      "description": "How many recent scans to show (default 7).",
      "default": 7
    }
  },
  "additionalProperties": false
}

gapper_backtest_day

Replay a gapper profile over one past day: fills, MFE/MAE, the giveback grid and a hindsight-tuned profile (saved for apply-tuned).

CLI equivalent: idiotproof gapper backtest-day [] [--profile ] [--gap ] [--max-gap ] [--volume ] [--min-price ] [--max-price ] [--entry-start ] [--entry-end ] [--stop ] [--trail ] [--giveback ] [--arm-exit ] [--sell-by ] [--notional ] Examples: idiotproof gapper backtest-day NVDA 2026-10-29 idiotproof gapper backtest-day ABCD 2026-10-29 --profile penny-runner --giveback 20

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Replay a gapper profile over one past day: fills, MFE/MAE, the giveback grid and a hindsight-tuned profile (saved for apply-tuned).",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "The ticker to replay.",
      "default": ""
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "The ET trading day (yyyy-MM-dd); default the last completed trading day."
    },
    "profile": {
      "type": "string",
      "description": "Gapper profile id or name to start from (default classic-gapper)."
    },
    "gap": {
      "type": "number",
      "description": "Minimum gap over the previous close, percent."
    },
    "max_gap": {
      "type": "number",
      "description": "Gap ceiling in percent (0 = no ceiling)."
    },
    "volume": {
      "type": "number",
      "description": "Premarket volume must be at least this multiple of average volume."
    },
    "min_price": {
      "type": "number",
      "description": "Lowest price that qualifies."
    },
    "max_price": {
      "type": "number",
      "description": "Highest price that qualifies."
    },
    "entry_start": {
      "type": "string",
      "description": "Entry window start, ET (HH:mm)."
    },
    "entry_end": {
      "type": "string",
      "description": "Entry window end, ET (HH:mm)."
    },
    "stop": {
      "type": "number",
      "description": "Hard stop below entry, percent."
    },
    "trail": {
      "type": "number",
      "description": "Trailing stop off the high, percent (0 = none)."
    },
    "giveback": {
      "type": "number",
      "description": "Sell once price gives back this percent of the entry-to-peak run."
    },
    "arm_exit": {
      "type": "string",
      "description": "ET time the giveback exit arms (HH:mm)."
    },
    "sell_by": {
      "type": "string",
      "description": "Hard flatten time, ET (HH:mm), before the 9:30 bell."
    },
    "notional": {
      "type": "number",
      "description": "Position size in dollars."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

gapper_be_bex_status

The BE/BEX decay gate: latest decay reading, threshold, and which gated BE strategies are armed or disarmed by it.

CLI equivalent: idiotproof gapper be-bex status Examples: idiotproof gapper be-bex status

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The BE/BEX decay gate: latest decay reading, threshold, and which gated BE strategies are armed or disarmed by it.",
  "properties": {},
  "additionalProperties": false
}

gapper_caps

Active-gapper counts against the caps: 3 manual gappers, one active strategy per symbol, the auto-gapper limit.

CLI equivalent: idiotproof gapper caps Examples: idiotproof gapper caps

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Active-gapper counts against the caps: 3 manual gappers, one active strategy per symbol, the auto-gapper limit.",
  "properties": {},
  "additionalProperties": false
}

gapper_disarm

Disarm a gapper so the Monitor stops evaluating it (refused while it holds a position); --remove deletes it.

CLI equivalent: idiotproof gapper disarm [--remove] Examples: idiotproof gapper disarm NVDA idiotproof gapper disarm 0190a3f2 --remove

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Disarm a gapper so the Monitor stops evaluating it (refused while it holds a position); --remove deletes it.",
  "properties": {
    "gapper": {
      "type": "string",
      "description": "The gapper\u0027s symbol, id, id prefix or stamp id.",
      "default": ""
    },
    "remove": {
      "type": "boolean",
      "description": "Also delete the gapper row (only when it holds no position).",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "gapper"
  ]
}

gapper_formation

Recent live gapper-formation snapshot rows: time ET, gap, volume ratio, 1/3/5-minute velocity, acceleration, distance to the premarket high, catalyst score/age, halted and whether the trigger rule passed.

CLI equivalent: idiotproof gapper formation [--symbol ] [--date ] [--last ] Examples: idiotproof gapper formation idiotproof gapper formation --symbol ABCD --date 2026-11-06

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Recent live gapper-formation snapshot rows: time ET, gap, volume ratio, 1/3/5-minute velocity, acceleration, distance to the premarket high, catalyst score/age, halted and whether the trigger rule passed.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Only this ticker."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "ET trading day (yyyy-MM-dd); default every day the sink holds."
    },
    "last": {
      "type": "integer",
      "description": "How many rows, newest first (default 40, max 500).",
      "default": 40
    }
  },
  "additionalProperties": false
}

gapper_formation_disable

Turn the formation recorder off (settings only; nothing to disarm — it never arms).

CLI equivalent: idiotproof gapper formation disable Examples: idiotproof gapper formation disable

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Turn the formation recorder off (settings only; nothing to disarm \u2014 it never arms).",
  "properties": {},
  "additionalProperties": false
}

gapper_formation_enable

Turn the formation recorder on for you (paper-only research rows, 03:55-09:45 ET weekdays, with the Monitor leader); never arms.

CLI equivalent: idiotproof gapper formation enable Examples: idiotproof gapper formation enable

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Turn the formation recorder on for you (paper-only research rows, 03:55-09:45 ET weekdays, with the Monitor leader); never arms.",
  "properties": {},
  "additionalProperties": false
}

gapper_formation_status

Whether the formation recorder is enabled, who owns it, whether this Hub leads, today's universe size, the stream, rows written, halted symbols, the trigger rule and the sink in use.

CLI equivalent: idiotproof gapper formation status Examples: idiotproof gapper formation status

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Whether the formation recorder is enabled, who owns it, whether this Hub leads, today\u0027s universe size, the stream, rows written, halted symbols, the trigger rule and the sink in use.",
  "properties": {},
  "additionalProperties": false
}

gapper_formation_universe

Today's formation universe: every symbol the recorder watches and why it is in (catalyst, mover, most-active, tracked), with catalyst score, gap and price.

CLI equivalent: idiotproof gapper formation universe Examples: idiotproof gapper formation universe

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Today\u0027s formation universe: every symbol the recorder watches and why it is in (catalyst, mover, most-active, tracked), with catalyst score, gap and price.",
  "properties": {},
  "additionalProperties": false
}

gapper_from_transcript

Read a transcript and propose re-validated gapper candidate cards; nothing is queued until you gapper arm one.

CLI equivalent: idiotproof gapper from-transcript Examples: idiotproof gapper from-transcript notes.txt idiotproof gapper from-transcript -

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Read a transcript and propose re-validated gapper candidate cards; nothing is queued until you \u0060gapper arm\u0060 one.",
  "properties": {
    "transcript": {
      "type": "string",
      "description": "A transcript file path, the transcript text itself, or \u0060-\u0060 to read it from stdin.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "transcript"
  ]
}

gapper_list

Your queued gappers with live state: armed, mode, position, condition progress and last exit.

CLI equivalent: idiotproof gapper list [--active] Examples: idiotproof gapper list idiotproof gapper list --active

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Your queued gappers with live state: armed, mode, position, condition progress and last exit.",
  "properties": {
    "active": {
      "type": "boolean",
      "description": "Only armed gappers.",
      "default": false
    }
  },
  "additionalProperties": false
}

gapper_premarket_fade

Premarket blow-off/fade detector: run scans the movers now (detection only), status lists today's fade alerts.

CLI equivalent: idiotproof gapper premarket-fade [] [--top ] Examples: idiotproof gapper premarket-fade idiotproof gapper premarket-fade run

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Premarket blow-off/fade detector: \u0060run\u0060 scans the movers now (detection only), \u0060status\u0060 lists today\u0027s fade alerts.",
  "properties": {
    "action": {
      "type": "string",
      "enum": [
        "status",
        "run"
      ],
      "description": "status (default): today\u0027s fade alerts; run: scan the movers for the pattern now.",
      "default": "status"
    },
    "top": {
      "type": "integer",
      "description": "Movers to screen when running (default 50, max 50).",
      "default": 50
    }
  },
  "additionalProperties": false
}

gapper_profile_show

Every dial of one gapper profile, plus the strategy it generates for a sample ticker.

CLI equivalent: idiotproof gapper profile show Examples: idiotproof gapper profile show classic-gapper idiotproof gapper profile show penny-runner

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Every dial of one gapper profile, plus the strategy it generates for a sample ticker.",
  "properties": {
    "name": {
      "type": "string",
      "description": "Profile id (classic-gapper) or name.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "name"
  ]
}

gapper_profiles

List the gapper profile catalog: the templates every gapper starts from.

CLI equivalent: idiotproof gapper profiles Examples: idiotproof gapper profiles

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "List the gapper profile catalog: the templates every gapper starts from.",
  "properties": {},
  "additionalProperties": false
}

gapper_tune

Dial a gapper profile in for one ticker and show the strategy GapperScriptFactory generates; --save stores it inactive.

CLI equivalent: idiotproof gapper tune [--save] [--mode <sandbox|paper|live>] [--profile ] [--gap ] [--max-gap ] [--volume ] [--min-price ] [--max-price ] [--entry-start ] [--entry-end ] [--stop ] [--trail ] [--giveback ] [--arm-exit ] [--sell-by ] [--notional ] Examples: idiotproof gapper tune NVDA --profile classic-gapper idiotproof gapper tune ABCD --profile penny-runner --gap 12 --stop 6 --giveback 18 --sell-by 09:25 --save

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Dial a gapper profile in for one ticker and show the strategy GapperScriptFactory generates; --save stores it inactive.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "The ticker to build the gapper for.",
      "default": ""
    },
    "save": {
      "type": "boolean",
      "description": "Save it as an inactive gapper strategy (arm it later with \u0060gapper arm\u0060).",
      "default": false
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Broker mode for a saved gapper: paper (default) or sandbox.",
      "default": "paper"
    },
    "profile": {
      "type": "string",
      "description": "Gapper profile id or name to start from (default classic-gapper)."
    },
    "gap": {
      "type": "number",
      "description": "Minimum gap over the previous close, percent."
    },
    "max_gap": {
      "type": "number",
      "description": "Gap ceiling in percent (0 = no ceiling)."
    },
    "volume": {
      "type": "number",
      "description": "Premarket volume must be at least this multiple of average volume."
    },
    "min_price": {
      "type": "number",
      "description": "Lowest price that qualifies."
    },
    "max_price": {
      "type": "number",
      "description": "Highest price that qualifies."
    },
    "entry_start": {
      "type": "string",
      "description": "Entry window start, ET (HH:mm)."
    },
    "entry_end": {
      "type": "string",
      "description": "Entry window end, ET (HH:mm)."
    },
    "stop": {
      "type": "number",
      "description": "Hard stop below entry, percent."
    },
    "trail": {
      "type": "number",
      "description": "Trailing stop off the high, percent (0 = none)."
    },
    "giveback": {
      "type": "number",
      "description": "Sell once price gives back this percent of the entry-to-peak run."
    },
    "arm_exit": {
      "type": "string",
      "description": "ET time the giveback exit arms (HH:mm)."
    },
    "sell_by": {
      "type": "string",
      "description": "Hard flatten time, ET (HH:mm), before the 9:30 bell."
    },
    "notional": {
      "type": "number",
      "description": "Position size in dollars."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

hub_install_service

Install the Hub as a Windows service that runs as you (Monitor off unless --monitor).

Runs sc.exe create/description/failure and sets the service's environment in the registry. Needs an elevated Hub; otherwise it prints the commands and points at tools\install-hub-service.ps1, which elevates itself. Grant the account 'Log on as a service' (the script does). Stop any interactive Hub first: both use port 5910.

CLI equivalent: idiotproof hub install-service [--exe ] [--account ] [--password ] [--monitor] [--start ] [--dry-run] Examples: idiotproof hub install-service --dry-run idiotproof hub install-service --password "..." --monitor

DESTRUCTIVE. If it returns confirmation-required, show the preview and call again with confirmation_code only after the user agrees. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Install the Hub as a Windows service that runs as you (Monitor off unless --monitor).",
  "properties": {
    "exe": {
      "type": "string",
      "description": "The Hub exe the service runs (default: the published C:\\Apps\\IdiotProof\\Hub\\idiotproof-hub.exe)."
    },
    "account": {
      "type": "string",
      "description": "Windows account to run as (default: you, as DOMAIN\\user or .\\user). Must be the user who owns the LocalDB database and keys."
    },
    "password": {
      "type": "string",
      "description": "That account\u0027s Windows password (required unless --dry-run; never logged)."
    },
    "monitor": {
      "type": "boolean",
      "description": "Host the trading Monitor in the service (it places real orders unattended). Off by default.",
      "default": false
    },
    "start": {
      "type": "string",
      "description": "Start type: delayed-auto (default), auto or demand.",
      "default": "delayed-auto"
    },
    "dry_run": {
      "type": "boolean",
      "description": "Show the commands without running them.",
      "default": false
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false
}

hub_ping

Check the Hub is up, show its clock in ET, and whether its DB and Monitor are healthy.

CLI equivalent: idiotproof hub ping Examples: idiotproof hub ping

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Check the Hub is up, show its clock in ET, and whether its DB and Monitor are healthy.",
  "properties": {},
  "additionalProperties": false
}

hub_uninstall_service

Stop and remove the Hub's Windows service.

sc.exe stop (graceful: the Hub drains operations, stops the Monitor and releases the leader lease), then sc.exe delete. Needs an elevated Hub; otherwise prints the commands. Run it from an interactive Hub or the script, not the service's own Hub.

CLI equivalent: idiotproof hub uninstall-service [--dry-run] Examples: idiotproof hub uninstall-service --dry-run idiotproof hub uninstall-service

DESTRUCTIVE. If it returns confirmation-required, show the preview and call again with confirmation_code only after the user agrees. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Stop and remove the Hub\u0027s Windows service.",
  "properties": {
    "dry_run": {
      "type": "boolean",
      "description": "Show the commands without running them.",
      "default": false
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false
}

indicators_compute

Compute one indicator (rsi, ema, atr, macd, vwap, adx, bollinger, ...) on a symbol's recent bars.

CLI equivalent: idiotproof indicators compute [--period ] [--timeframe ] [--bars ] [--last ] Examples: idiotproof indicators compute NVDA rsi idiotproof indicators compute INTC ema --period 21 --timeframe 5Min idiotproof indicators compute AAPL macd --timeframe 1Day --bars 300

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Compute one indicator (rsi, ema, atr, macd, vwap, adx, bollinger, ...) on a symbol\u0027s recent bars.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. NVDA.",
      "default": ""
    },
    "indicator": {
      "type": "string",
      "description": "rsi, ema, sma, atr, macd, vwap, adx, bollinger, stochastic, cci, williams-r, momentum, roc or obv.",
      "default": ""
    },
    "period": {
      "type": "integer",
      "description": "Look-back period (default per indicator: rsi 14, ema 9, sma 20, atr 14, adx 14, bollinger 20, ...). Ignored by macd, vwap and obv."
    },
    "timeframe": {
      "type": "string",
      "description": "Bar size: 1Min (default), 5Min, 15Min, 1Hour or 1Day.",
      "default": "1Min"
    },
    "bars": {
      "type": "integer",
      "description": "Bars of history to compute over, newest last (default 240, the Monitor\u0027s window).",
      "default": 240
    },
    "last": {
      "type": "integer",
      "description": "How many of the newest values to print (default 10).",
      "default": 10
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol",
    "indicator"
  ]
}

indicators_snapshot

The full indicator snapshot a strategy condition sees for a symbol: VWAP, EMAs, RSI, MACD, ADX, gap, window high/low, pivots, patterns.

CLI equivalent: idiotproof indicators snapshot [--timeframe ] [--bars ] [--ema ] Examples: idiotproof indicators snapshot NVDA idiotproof indicators snapshot INTC --ema 7,65 --timeframe 5Min

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The full indicator snapshot a strategy condition sees for a symbol: VWAP, EMAs, RSI, MACD, ADX, gap, window high/low, pivots, patterns.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. NVDA.",
      "default": ""
    },
    "timeframe": {
      "type": "string",
      "description": "Bar size: 1Min (default, what the Monitor evaluates on), 5Min, 15Min, 1Hour or 1Day.",
      "default": "1Min"
    },
    "bars": {
      "type": "integer",
      "description": "Window of bars the snapshot is built from, newest last (default 240, the Monitor\u0027s 4-hour window).",
      "default": 240
    },
    "ema": {
      "type": "string",
      "description": "Extra EMA periods to include beside 9/21/31/50/200, comma separated (e.g. 7,65)."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

keys_migrate_to_vault

Move Alpaca keys, OAuth tokens and Claude keys out of SQL into MindAttic.Vault (dry run unless --apply).

Per user and secret: copy into Vault when Vault lacks it, verify equality when both have it, then clear the SQL column. Conflicts and undecryptable values are reported and left untouched. Idempotent.

CLI equivalent: idiotproof keys migrate-to-vault [--apply] Examples: idiotproof keys migrate-to-vault idiotproof keys migrate-to-vault --apply

DESTRUCTIVE. If it returns confirmation-required, show the preview and call again with confirmation_code only after the user agrees. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Move Alpaca keys, OAuth tokens and Claude keys out of SQL into MindAttic.Vault (dry run unless --apply).",
  "properties": {
    "apply": {
      "type": "boolean",
      "description": "Actually copy into Vault and clear the SQL columns (without it: a dry run that changes nothing).",
      "default": false
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false
}

keys_opt_in

Route your orders to your own Alpaca account (alpaca) or back to the Sandbox (off).

CLI equivalent: idiotproof keys opt-in Examples: idiotproof keys opt-in alpaca idiotproof keys opt-in off

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Route your orders to your own Alpaca account (alpaca) or back to the Sandbox (off).",
  "properties": {
    "broker": {
      "type": "string",
      "description": "alpaca (route your orders to your own Alpaca account) or off (back to the Sandbox).",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "broker"
  ]
}

keys_probe

Round-trip your stored Alpaca keys with a read-only account call (paper, live or both).

CLI equivalent: idiotproof keys probe [--mode <all|paper|live>] Examples: idiotproof keys probe idiotproof keys probe --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Round-trip your stored Alpaca keys with a read-only account call (paper, live or both).",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "all (default), paper or live.",
      "default": "all"
    }
  },
  "additionalProperties": false
}

keys_set

Store an Alpaca paper/live key pair (checked, then probed) or your Claude key in MindAttic.Vault.

CLI equivalent: idiotproof keys set [--key-id ] --secret [--force] Examples: idiotproof keys set alpaca-paper --key-id PK...your-paper-key-id --secret idiotproof keys set alpaca-live --key-id AK...your-live-key-id --secret idiotproof keys set claude --secret

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Store an Alpaca paper/live key pair (checked, then probed) or your Claude key in MindAttic.Vault.",
  "properties": {
    "target": {
      "type": "string",
      "description": "alpaca-paper, alpaca-live or claude.",
      "default": ""
    },
    "key_id": {
      "type": "string",
      "description": "The Alpaca API key id (PK... for paper, AK... for live). Not used for claude."
    },
    "secret": {
      "type": "string",
      "description": "The Alpaca secret key, or for claude the Claude API key.",
      "default": ""
    },
    "force": {
      "type": "boolean",
      "description": "Store even when the key id prefix looks wrong or Alpaca rejects the pair.",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "target",
    "secret"
  ]
}

keys_status

Which Alpaca/Claude keys resolve for you and from which Vault entry (never shows a secret).

CLI equivalent: idiotproof keys status Examples: idiotproof keys status

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Which Alpaca/Claude keys resolve for you and from which Vault entry (never shows a secret).",
  "properties": {},
  "additionalProperties": false
}

ledger_list

Every command the Hub ran for you (CLI, MCP, web): operation, arguments, outcome, duration (ET).

CLI equivalent: idiotproof ledger list [--op ] [--since ] [--caller ] [--status ] [--limit ] Examples: idiotproof ledger list idiotproof ledger list --op "order place" --since 2026-10-30 idiotproof ledger list --op strategy --caller mcp --status blocked

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Every command the Hub ran for you (CLI, MCP, web): operation, arguments, outcome, duration (ET).",
  "properties": {
    "op": {
      "type": "string",
      "description": "Only this operation (\u0022strategy create\u0022 or strategy_create), or a noun for all of its verbs (strategy)."
    },
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date to include, yyyy-MM-dd (default: everything)."
    },
    "caller": {
      "type": "string",
      "description": "Only calls from this front door: cli, mcp, blazor or test."
    },
    "status": {
      "type": "string",
      "description": "Only this outcome: ok, failed, usage-error, blocked or confirmation-required."
    },
    "limit": {
      "type": "integer",
      "description": "Most rows, newest first, 1-1000 (default 50).",
      "default": 50
    }
  },
  "additionalProperties": false
}

llm_keys

Which Claude key the LLM panel resolves for you (yours, the host's, or none) and the voting toggles; never shows a key.

CLI equivalent: idiotproof llm keys Examples: idiotproof llm keys

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Which Claude key the LLM panel resolves for you (yours, the host\u0027s, or none) and the voting toggles; never shows a key.",
  "properties": {},
  "additionalProperties": false
}

llm_panel

The LLM voter panel: voters, trading lenses, which have keys, the consensus threshold and whether the gate is on.

CLI equivalent: idiotproof llm panel Examples: idiotproof llm panel

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The LLM voter panel: voters, trading lenses, which have keys, the consensus threshold and whether the gate is on.",
  "properties": {},
  "additionalProperties": false
}

llm_threshold

Show or set the LLM panel's consensus threshold (0.5-1): the share of votes that must Approve.

CLI equivalent: idiotproof llm threshold [] Examples: idiotproof llm threshold idiotproof llm threshold 0.75

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Show or set the LLM panel\u0027s consensus threshold (0.5-1): the share of votes that must Approve.",
  "properties": {
    "value": {
      "type": "number",
      "description": "Share of counted votes that must Approve, 0..1 (e.g. 0.66) or a percent (66); omit to show the current one."
    }
  },
  "additionalProperties": false
}

llm_vote

Dry-run the LLM voter panel on a strategy's current entry: every vote and the consensus. Never places an order.

CLI equivalent: idiotproof llm vote [--entry ] Examples: idiotproof llm vote NVDA idiotproof llm vote 0193a2b4 --entry 101.25

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Dry-run the LLM voter panel on a strategy\u0027s current entry: every vote and the consensus. Never places an order.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id (IP-XXXX-XXXX) or symbol.",
      "default": ""
    },
    "entry": {
      "type": "number",
      "description": "Entry price to put to the panel (default: the last 1-minute close)."
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

llm_voting_disable

Turn off your own LLM voter gate (a host-wide setting still applies).

CLI equivalent: idiotproof llm voting disable Examples: idiotproof llm voting disable

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Turn off your own LLM voter gate (a host-wide setting still applies).",
  "properties": {},
  "additionalProperties": false
}

llm_voting_enable

Turn on the LLM voter gate for your automated entries (needs a Claude key to take effect).

CLI equivalent: idiotproof llm voting enable Examples: idiotproof llm voting enable

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Turn on the LLM voter gate for your automated entries (needs a Claude key to take effect).",
  "properties": {},
  "additionalProperties": false
}

market_auctions

Opening and closing auction prices and sizes per day for one or more stocks (SIP, times in ET).

CLI equivalent: idiotproof market auctions ... [--from ] [--to ] Examples: idiotproof market auctions AAPL idiotproof market auctions SPY QQQ --from 2026-10-26 --to 2026-10-30

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Opening and closing auction prices and sizes per day for one or more stocks (SIP, times in ET).",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. AAPL MSFT."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET date to include (default: a week ago)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET date to include (default: today)."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

market_bars

Historical OHLCV bars for a stock at any timeframe, oldest first (times in ET).

CLI equivalent: idiotproof market bars [--tf ] [--from ] [--to ] [--limit ] [--adjustment ] Examples: idiotproof market bars AAPL idiotproof market bars NVDA --tf 5Min --limit 50 idiotproof market bars MSFT --tf 1Day --from 2026-09-01 --to 2026-09-30

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Historical OHLCV bars for a stock at any timeframe, oldest first (times in ET).",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. AAPL.",
      "default": ""
    },
    "tf": {
      "type": "string",
      "description": "Bar size: 1Min, 5Min, 15Min, 1Hour, 1Day (default), 1Week, 1Month; short forms 5m, 1h, 1d, 1w, 1mo work too.",
      "default": "1Day"
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET date to include (default: enough history for --limit bars)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET date to include (default: now)."
    },
    "limit": {
      "type": "integer",
      "description": "Most bars to show (default 30, max 10000). Without --from these are the most recent.",
      "default": 30
    },
    "adjustment": {
      "type": "string",
      "description": "Corporate-action adjustment: raw, split (default), dividend or all.",
      "default": "split"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

market_bond_prices

Latest Alpaca fixed income prices and yields for the given ISINs.

CLI equivalent: idiotproof market bond-prices ... Examples: idiotproof market bond-prices US912797KA41 US91282CJL54

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Latest Alpaca fixed income prices and yields for the given ISINs.",
  "properties": {
    "isins": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more bond ISINs (space or comma separated)."
    }
  },
  "additionalProperties": false,
  "required": [
    "isins"
  ]
}

market_candlesticks

Candlestick patterns (engulfing, hammer, shooting star, doji) on a symbol's recent bars.

CLI equivalent: idiotproof market candlesticks [--timeframe ] [--bars ] [--all] Examples: idiotproof market candlesticks NVDA idiotproof market candlesticks INTC --timeframe 5Min --bars 78 --all

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Candlestick patterns (engulfing, hammer, shooting star, doji) on a symbol\u0027s recent bars.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. NVDA.",
      "default": ""
    },
    "timeframe": {
      "type": "string",
      "description": "Bar size: 1Day (default), 1Hour, 15Min, 5Min or 1Min (what the Monitor\u0027s pattern verbs see).",
      "default": "1Day"
    },
    "bars": {
      "type": "integer",
      "description": "How many recent bars to scan, newest last (default 30).",
      "default": 30
    },
    "all": {
      "type": "boolean",
      "description": "List every bar, not only the ones with a pattern.",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

market_chart

ASCII candle chart of a symbol across premarket, regular and after-hours sessions (ET); crypto pairs as 24h days.

CLI equivalent: idiotproof market chart [--days ] [--bucket ] [--width ] [--height ] [--volume] [--ascii] Examples: idiotproof market chart INTC idiotproof market chart NVDA --days 3 --bucket 30 idiotproof market chart BTC/USD --days 3

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "ASCII candle chart of a symbol across premarket, regular and after-hours sessions (ET); crypto pairs as 24h days.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker to chart, e.g. INTC, or a crypto pair such as BTC/USD (charted as 24h days).",
      "default": ""
    },
    "days": {
      "type": "integer",
      "description": "Trading days to show, oldest first, each as premarket \u002B regular \u002B after-hours (default 2: the prior day and today).",
      "default": 2
    },
    "bucket": {
      "type": "integer",
      "description": "Minutes per time slot: half a character in Braille, one in --ascii (default: the smallest that fits the width)."
    },
    "width": {
      "type": "integer",
      "description": "Chart width in characters (default: the terminal\u0027s, else 118)."
    },
    "height": {
      "type": "integer",
      "description": "Price pane rows (default 20).",
      "default": 20
    },
    "volume": {
      "type": "boolean",
      "description": "Show the volume pane (default on; --no-volume hides it).",
      "default": true
    },
    "ascii": {
      "type": "boolean",
      "description": "Pure-ASCII candles (one per character) instead of the high-resolution Braille dots.",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

market_conditions

What each trade or quote condition code means (the codes in market trades/quotes).

CLI equivalent: idiotproof market conditions [--tape <a|b|c>] Examples: idiotproof market conditions trade idiotproof market conditions quote --tape c

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "What each trade or quote condition code means (the codes in market trades/quotes).",
  "properties": {
    "tick_type": {
      "type": "string",
      "enum": [
        "trade",
        "quote"
      ],
      "description": "trade or quote.",
      "default": "trade"
    },
    "tape": {
      "type": "string",
      "enum": [
        "a",
        "b",
        "c"
      ],
      "description": "SIP tape whose codes to list: a (default), b or c.",
      "default": "a"
    }
  },
  "additionalProperties": false,
  "required": [
    "tick_type"
  ]
}

market_exchanges

Exchange codes used in trades and quotes and the venue each one names.

CLI equivalent: idiotproof market exchanges Examples: idiotproof market exchanges

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Exchange codes used in trades and quotes and the venue each one names.",
  "properties": {},
  "additionalProperties": false
}

market_feed_status

The Hub's market data feed: Alpaca SIP/IEX or Mock, whether it can switch, and active strategies per mode.

CLI equivalent: idiotproof market feed status Examples: idiotproof market feed status

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The Hub\u0027s market data feed: Alpaca SIP/IEX or Mock, whether it can switch, and active strategies per mode.",
  "properties": {},
  "additionalProperties": false
}

market_feed_switch

Switch the Hub's market data to sip, iex or mock (mock refused while Paper/Live strategies are active).

CLI equivalent: idiotproof market feed switch Examples: idiotproof market feed switch iex idiotproof market feed switch mock

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Switch the Hub\u0027s market data to sip, iex or mock (mock refused while Paper/Live strategies are active).",
  "properties": {
    "feed": {
      "type": "string",
      "description": "sip (Alpaca consolidated, Algo Trader Plus), iex (Alpaca free tier) or mock (synthetic prices).",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "feed"
  ]
}

market_fx

Latest forex rates (bid/mid/ask) or historical rate bars for currency pairs (times in ET).

CLI equivalent: idiotproof market fx ... [--tf ] [--from ] [--to ] [--limit ] Examples: idiotproof market fx USDJPY EURUSD idiotproof market fx USDJPY --tf 1Day --limit 10 idiotproof market fx EURUSD --tf 1Hour --from 2026-10-29 --to 2026-10-30

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Latest forex rates (bid/mid/ask) or historical rate bars for currency pairs (times in ET).",
  "properties": {
    "pairs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Currency pairs, e.g. USDJPY EURUSD (USD/JPY works too)."
    },
    "tf": {
      "type": "string",
      "description": "Historical rate bar size (1Min, 5Min, 1Hour, 1Day...). Giving --tf, --from or --to switches from latest to history."
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET date of history (default: enough for --limit bars)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET date of history (default: now)."
    },
    "limit": {
      "type": "integer",
      "description": "Most history bars per pair (default 30, max 1000).",
      "default": 30
    }
  },
  "additionalProperties": false,
  "required": [
    "pairs"
  ]
}

market_latest

Latest minute bar, trade or quote for one or more stocks (times in ET).

CLI equivalent: idiotproof market latest ... Examples: idiotproof market latest bar AAPL MSFT idiotproof market latest trade NVDA idiotproof market latest quote SPY QQQ

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Latest minute bar, trade or quote for one or more stocks (times in ET).",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "bar",
        "trade",
        "quote"
      ],
      "description": "bar (latest minute bar), trade or quote.",
      "default": "trade"
    },
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. AAPL MSFT."
    }
  },
  "additionalProperties": false,
  "required": [
    "kind",
    "symbols"
  ]
}

Download a company's logo and save it under %LOCALAPPDATA%\MindAttic\IdiotProof\Logos; reports the path and size.

CLI equivalent: idiotproof market logo [--placeholder] [--dir ] Examples: idiotproof market logo AAPL idiotproof market logo TSLA --placeholder

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Download a company\u0027s logo and save it under %LOCALAPPDATA%\\MindAttic\\IdiotProof\\Logos; reports the path and size.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker whose logo to fetch, e.g. AAPL.",
      "default": ""
    },
    "placeholder": {
      "type": "boolean",
      "description": "When Alpaca has no logo, save its generated placeholder instead of failing.",
      "default": false
    },
    "dir": {
      "type": "string",
      "description": "Folder to save into (default %LOCALAPPDATA%\\MindAttic\\IdiotProof\\Logos)."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

market_meta

All market-data reference codes at once: exchanges plus trade and quote conditions.

CLI equivalent: idiotproof market meta [--tape <a|b|c>] Examples: idiotproof market meta idiotproof market meta --tape c

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "All market-data reference codes at once: exchanges plus trade and quote conditions.",
  "properties": {
    "tape": {
      "type": "string",
      "enum": [
        "a",
        "b",
        "c"
      ],
      "description": "SIP tape whose condition codes to list: a (default), b or c.",
      "default": "a"
    }
  },
  "additionalProperties": false
}

market_most_actives

Today's most active stocks by share volume or trade count (Alpaca screener).

CLI equivalent: idiotproof market most-actives [--by <volume|trades>] [--top ] Examples: idiotproof market most-actives idiotproof market most-actives --by trades --top 25

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Today\u0027s most active stocks by share volume or trade count (Alpaca screener).",
  "properties": {
    "by": {
      "type": "string",
      "enum": [
        "volume",
        "trades"
      ],
      "description": "Rank by share volume (default) or by trade count.",
      "default": "volume"
    },
    "top": {
      "type": "integer",
      "description": "How many stocks (default 10, max 100).",
      "default": 10
    }
  },
  "additionalProperties": false
}

market_movers

Today's top stock gainers and losers by percent change (Alpaca screener).

CLI equivalent: idiotproof market movers [--top ] Examples: idiotproof market movers idiotproof market movers --top 20

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Today\u0027s top stock gainers and losers by percent change (Alpaca screener).",
  "properties": {
    "top": {
      "type": "integer",
      "description": "How many gainers and how many losers (default 10, max 50).",
      "default": 10
    }
  },
  "additionalProperties": false
}

market_news

Latest news headlines for one or more stocks, or the whole market (times in ET).

CLI equivalent: idiotproof market news [...] [--limit ] [--from ] [--to ] [--summary] Examples: idiotproof market news AAPL idiotproof market news TSLA NVDA --limit 25 --summary idiotproof market news --from 2026-10-29

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Latest news headlines for one or more stocks, or the whole market (times in ET).",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tickers to filter on, e.g. AAPL TSLA (none = all market news)."
    },
    "limit": {
      "type": "integer",
      "description": "Most articles to show, newest first (default 10, max 200).",
      "default": 10
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "Earliest ET date to include (default: no bound)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Latest ET date to include (default: now)."
    },
    "summary": {
      "type": "boolean",
      "description": "Print each article\u0027s summary and link under its headline.",
      "default": false
    }
  },
  "additionalProperties": false
}

market_prev_close

Previous session's close (and full daily bar) for one or more stocks, with the move since.

CLI equivalent: idiotproof market prev-close ... Examples: idiotproof market prev-close AAPL idiotproof market prev-close SPY QQQ IWM

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Previous session\u0027s close (and full daily bar) for one or more stocks, with the move since.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. AAPL MSFT."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

market_quote

Latest trade and bid/ask for one or more stocks (Alpaca market data, times in ET).

CLI equivalent: idiotproof market quote ... Examples: idiotproof market quote AAPL idiotproof market quote AAPL MSFT NVDA

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Latest trade and bid/ask for one or more stocks (Alpaca market data, times in ET).",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. AAPL MSFT (commas work too)."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

market_quotes

Historical bid/ask quotes for a stock: sizes, exchanges, spread (times in ET).

CLI equivalent: idiotproof market quotes [--from ] [--to ] [--limit ] Examples: idiotproof market quotes AAPL idiotproof market quotes SPY --from 2026-10-29 --limit 200

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Historical bid/ask quotes for a stock: sizes, exchanges, spread (times in ET).",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. AAPL.",
      "default": ""
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET date to include (default: the most recent ticks)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET date to include (default: now)."
    },
    "limit": {
      "type": "integer",
      "description": "Most ticks to show (default 20, max 10000). Without --from these are the most recent.",
      "default": 20
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

market_scan_universe

Screen the tracked ticker universe on live price, volume and % change (Alpaca snapshots); arms nothing.

CLI equivalent: idiotproof market scan-universe [--min-price ] [--max-price ] [--min-volume ] [--min-change ] [--max-change ] [--exchange ] [--sort <volume|change|price|dollar>] [--limit ] [--max-symbols ] Examples: idiotproof market scan-universe idiotproof market scan-universe --min-price 2 --max-price 20 --min-change 10 --sort change idiotproof market scan-universe --exchange NASDAQ --min-volume 5000000 --limit 10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Screen the tracked ticker universe on live price, volume and % change (Alpaca snapshots); arms nothing.",
  "properties": {
    "min_price": {
      "type": "number",
      "description": "Lowest last price to keep (default 1).",
      "default": 1
    },
    "max_price": {
      "type": "number",
      "description": "Highest last price to keep (default: no cap)."
    },
    "min_volume": {
      "type": "number",
      "description": "Least shares traded today to keep (default 100000).",
      "default": 100000
    },
    "min_change": {
      "type": "number",
      "description": "Least percent change from the previous close to keep, e.g. 5 or -10 (default: any)."
    },
    "max_change": {
      "type": "number",
      "description": "Most percent change from the previous close to keep, e.g. -5 for losers only (default: any)."
    },
    "exchange": {
      "type": "string",
      "description": "Only tickers listed on this exchange (NASDAQ, NYSE, AMEX, ARCA, ...)."
    },
    "sort": {
      "type": "string",
      "enum": [
        "volume",
        "change",
        "price",
        "dollar"
      ],
      "description": "volume (default), change, price or dollar (price x volume); always largest first.",
      "default": "volume"
    },
    "limit": {
      "type": "integer",
      "description": "Rows to show (default 25).",
      "default": 25
    },
    "max_symbols": {
      "type": "integer",
      "description": "Most tracked tickers to quote, after the stored-price prefilter (default 3000).",
      "default": 3000
    }
  },
  "additionalProperties": false
}

market_snapshot

One-line snapshot per stock: last, change vs prior close, bid/ask, today's open/high/low/volume.

CLI equivalent: idiotproof market snapshot ... Examples: idiotproof market snapshot AAPL idiotproof market snapshot SPY QQQ NVDA TSLA

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "One-line snapshot per stock: last, change vs prior close, bid/ask, today\u0027s open/high/low/volume.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One or more tickers, e.g. AAPL MSFT."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbols"
  ]
}

market_stream_status

Websocket health: the Monitor's market data stream, the trade-updates listeners and open market watches (state, connected since, last message, reconnects, errors).

CLI equivalent: idiotproof market stream status Examples: idiotproof market stream status

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Websocket health: the Monitor\u0027s market data stream, the trade-updates listeners and open market watches (state, connected since, last message, reconnects, errors).",
  "properties": {},
  "additionalProperties": false
}

market_trades

Historical trade prints for a stock: price, size, exchange, conditions (times in ET).

CLI equivalent: idiotproof market trades [--from ] [--to ] [--limit ] Examples: idiotproof market trades AAPL idiotproof market trades TSLA --from 2026-10-29 --to 2026-10-29 --limit 100

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Historical trade prints for a stock: price, size, exchange, conditions (times in ET).",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. AAPL.",
      "default": ""
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "First ET date to include (default: the most recent ticks)."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last ET date to include (default: now)."
    },
    "limit": {
      "type": "integer",
      "description": "Most ticks to show (default 20, max 10000). Without --from these are the most recent.",
      "default": 20
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

market_watch

Live market tape over Alpaca's websockets: stock trades/quotes/bars/statuses/LULD, crypto, options and news, merged into one ET-stamped stream.

A terminal streams until Ctrl+C; MCP and --json get a bounded window (--seconds, default 15). Alpaca limits stock-feed connections per account: if the Monitor's stream holds the SIP connection, try --feed iex.

CLI equivalent: idiotproof market watch [...] [--channels <string[]>] [--news] [--feed ] [--options-feed ] [--seconds ] [--max ] Examples: idiotproof market watch AAPL MSFT idiotproof market watch NVDA --channels trades,quotes,statuses,lulds idiotproof market watch BTC/USD ETH/USD --channels trades,bars

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Live market tape over Alpaca\u0027s websockets: stock trades/quotes/bars/statuses/LULD, crypto, options and news, merged into one ET-stamped stream.",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Stocks (AAPL), crypto pairs (BTC/USD) and option contracts (AAPL261120C00200000), mixed freely."
    },
    "channels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "trades, quotes, bars, daily-bars, updated-bars, statuses, lulds (stocks only: statuses, lulds; options: trades, quotes). Default trades,quotes."
    },
    "news": {
      "type": "boolean",
      "description": "Also stream news headlines for these symbols (all news when no symbol is given).",
      "default": false
    },
    "feed": {
      "type": "string",
      "description": "Stock feed: sip, iex or delayed_sip (default: the Hub\u0027s market data tier)."
    },
    "options_feed": {
      "type": "string",
      "description": "Options feed: opra or indicative (default opra).",
      "default": "opra"
    },
    "seconds": {
      "type": "integer",
      "description": "Stop after this many seconds (a terminal streams until Ctrl\u002BC; MCP/--json default 15, at most 300)."
    },
    "max": {
      "type": "integer",
      "description": "Stop after this many lines."
    }
  },
  "additionalProperties": false
}

monitor_heartbeat

The Monitor loop's last heartbeat: when it ticked, ok or fail, failures in a row.

Reads the SupervisedLoop heartbeat file (Logs\monitor.heartbeat), which the loop rewrites after every tick, hosted here or not. Exit 3 (blocked) when it is stale.

CLI equivalent: idiotproof monitor heartbeat Examples: idiotproof monitor heartbeat

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The Monitor loop\u0027s last heartbeat: when it ticked, ok or fail, failures in a row.",
  "properties": {},
  "additionalProperties": false
}

monitor_lease

Who holds the Monitor's SQL leader lease (only the holder evaluates and trades).

One Monitor per database trades: it holds sp_getapplock 'IdiotProof.Monitor.Leader'. Shows the holder's PID and machine when SQL Server reports them.

CLI equivalent: idiotproof monitor lease Examples: idiotproof monitor lease

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Who holds the Monitor\u0027s SQL leader lease (only the holder evaluates and trades).",
  "properties": {},
  "additionalProperties": false
}

monitor_pause

Pause the Monitor: from its next tick it evaluates nothing - no entries and NO exits - until resumed.

Sets the SettingsKv flag monitor.paused, honored at the top of every tick (within 2 s). The loop, heartbeat and leader lease stay up. Open positions are not managed while paused - flatten them first if that matters.

CLI equivalent: idiotproof monitor pause [--reason ] Examples: idiotproof monitor pause idiotproof monitor pause --reason "news pending"

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Pause the Monitor: from its next tick it evaluates nothing - no entries and NO exits - until resumed.",
  "properties": {
    "reason": {
      "type": "string",
      "description": "Why (kept with the flag and shown by \u0060monitor status\u0060)."
    }
  },
  "additionalProperties": false
}

monitor_resume

Resume a paused Monitor (needs a confirmation code when a Live strategy is active).

Clears the SettingsKv flag monitor.paused; the Monitor evaluates again from its next tick. When any active strategy routes Live the first call returns a code: resuming means real-money entries.

CLI equivalent: idiotproof monitor resume Examples: idiotproof monitor resume idiotproof monitor resume --confirm K7Q2M9

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Resume a paused Monitor (needs a confirmation code when a Live strategy is active).",
  "properties": {
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false
}

monitor_status

Is the Monitor trading? Hosted, lease, last tick, paused, window, active strategies.

Reads the Hub's in-process Monitor state, the SettingsKv pause flag, the SQL leader lease and the heartbeat file. Times are ET.

CLI equivalent: idiotproof monitor status Examples: idiotproof monitor status idiotproof monitor status --json

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Is the Monitor trading? Hosted, lease, last tick, paused, window, active strategies.",
  "properties": {},
  "additionalProperties": false
}

monitor_tail

Recent Monitor activity: gate verdicts (fire, veto, block, entry, exit, reject) and live condition progress; --follow streams new ones.

A snapshot of the last --minutes of the Monitor's audit trail (your strategies' events plus its start/stop/pause events), newest last, followed by where each of your active strategies stands. --follow keeps pushing new events and progress changes: live in a terminal until Ctrl+C, a bounded window (--seconds, default 15) for MCP and --json.

CLI equivalent: idiotproof monitor tail [--lines ] [--minutes ] [--progress] [--follow] [--seconds ] Examples: idiotproof monitor tail idiotproof monitor tail --follow idiotproof monitor tail --lines 100 --minutes 390

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Recent Monitor activity: gate verdicts (fire, veto, block, entry, exit, reject) and live condition progress; --follow streams new ones.",
  "properties": {
    "lines": {
      "type": "integer",
      "description": "Most recent events to show (1-500).",
      "default": 40
    },
    "minutes": {
      "type": "integer",
      "description": "How far back to look for events (1-1440).",
      "default": 60
    },
    "progress": {
      "type": "boolean",
      "description": "Also show each active strategy\u0027s live condition progress.",
      "default": true
    },
    "follow": {
      "type": "boolean",
      "description": "After the snapshot, keep pushing new events and progress changes (a terminal streams until Ctrl\u002BC; MCP/--json get a bounded window).",
      "default": false
    },
    "seconds": {
      "type": "integer",
      "description": "With --follow: stop after this many seconds, 1-3600 (MCP/--json default 15, at most 300)."
    }
  },
  "additionalProperties": false
}

monitor_tick_once

Run one evaluation pass over your active strategies and show each verdict - never places, cancels or records an order.

Gate 1 only (entry conditions against fresh bars from the Hub's feed); the LLM panel, RiskGuardian and the broker are never called, and no position, progress row or live bar is written. Without --dry the pass is noted in the audit log.

CLI equivalent: idiotproof monitor tick-once [--dry] [--symbol ] Examples: idiotproof monitor tick-once --dry idiotproof monitor tick-once --symbol NVDA

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Run one evaluation pass over your active strategies and show each verdict - never places, cancels or records an order.",
  "properties": {
    "dry": {
      "type": "boolean",
      "description": "Write nothing at all (by default the pass is recorded in the audit log as monitor-tick-once).",
      "default": false
    },
    "symbol": {
      "type": "string",
      "description": "Only strategies on this symbol."
    }
  },
  "additionalProperties": false
}

options_bars

Historical OHLCV bars for one option contract.

CLI equivalent: idiotproof options bars [--timeframe ] [--start ] [--end ] [--limit ] Examples: idiotproof options bars AAPL261120C00250000 idiotproof options bars AAPL261120C00250000 --timeframe 15Min --start 2026-10-28

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Historical OHLCV bars for one option contract.",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC option symbol, e.g. AAPL261120C00250000.",
      "default": ""
    },
    "timeframe": {
      "type": "string",
      "description": "Bar size: [1-59]Min, [1-23]Hour, 1Day, 1Week or [1,2,3,4,6,12]Month (default 1Day).",
      "default": "1Day"
    },
    "start": {
      "type": "string",
      "format": "date",
      "description": "First ET date (yyyy-MM-dd); default 30 days back for daily bars, 5 for intraday."
    },
    "end": {
      "type": "string",
      "format": "date",
      "description": "Last ET date (yyyy-MM-dd); default today."
    },
    "limit": {
      "type": "integer",
      "description": "Most bars to return, oldest first (default 200).",
      "default": 200
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_buy

Buy option contracts to open (level 2+). Sandbox by default; live needs a confirmation code.

CLI equivalent: idiotproof options buy [--limit ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof options buy AAPL261219C00150000 2 --limit 3.20 --mode paper idiotproof options buy SPY261120P00560000 1 --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Buy option contracts to open (level 2\u002B). Sandbox by default; live needs a confirmation code.",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC contract symbol, e.g. AAPL261219C00150000.",
      "default": ""
    },
    "contracts": {
      "type": "integer",
      "description": "Whole contracts (each is usually 100 shares).",
      "default": 0
    },
    "limit": {
      "type": "number",
      "description": "Limit price per share (premium). Without it the order is a market order."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Where it routes: sandbox (simulator, the default), paper, or live (needs confirmation).",
      "default": "sandbox"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "occ",
    "contracts"
  ]
}

options_chain

An underlying's option chain for one expiration: calls and puts by strike with bid/ask, IV, delta and open interest.

CLI equivalent: idiotproof options chain [--expiry ] [--horizon ] [--strikes ] [--feed <indicative|opra>] Examples: idiotproof options chain AAPL idiotproof options chain SPY --expiry 2026-12-18 --strikes 5

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "An underlying\u0027s option chain for one expiration: calls and puts by strike with bid/ask, IV, delta and open interest.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Underlying ticker, e.g. AAPL.",
      "default": ""
    },
    "expiry": {
      "type": "string",
      "format": "date",
      "description": "Expiration date (yyyy-MM-dd) to show; default the nearest one."
    },
    "horizon": {
      "type": "integer",
      "description": "Days ahead to list expirations for (default 1098, about 3 years, so LEAPS show; Alpaca\u0027s own default is 1 week).",
      "default": 1098
    },
    "strikes": {
      "type": "integer",
      "description": "Strikes to show on each side of the spot price (default 10; 0 shows every strike).",
      "default": 10
    },
    "feed": {
      "type": "string",
      "enum": [
        "indicative",
        "opra"
      ],
      "description": "Options data feed: indicative (default, free) or opra (paid).",
      "default": "indicative"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

options_close

Close a whole options position (sells a long, buys back a short) through the gateway.

CLI equivalent: idiotproof options close [--limit ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof options close AAPL261219C00150000 --mode paper idiotproof options close SPY261120P00560000 --limit 2.40 --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Close a whole options position (sells a long, buys back a short) through the gateway.",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC contract symbol of the position to close.",
      "default": ""
    },
    "limit": {
      "type": "number",
      "description": "Limit price per share. Without it the close is a market order."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Which account holds it: sandbox (default), paper or live (needs confirmation).",
      "default": "sandbox"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_conditions

Options trade or quote condition codes and what they mean.

CLI equivalent: idiotproof options conditions [--tick <trade|quote>] Examples: idiotproof options conditions idiotproof options conditions --tick quote

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Options trade or quote condition codes and what they mean.",
  "properties": {
    "tick": {
      "type": "string",
      "enum": [
        "trade",
        "quote"
      ],
      "description": "trade (default) or quote condition codes.",
      "default": "trade"
    }
  },
  "additionalProperties": false
}

options_contract

Full catalog details of one option contract by OCC symbol or Alpaca id.

CLI equivalent: idiotproof options contract Examples: idiotproof options contract AAPL261120C00250000

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Full catalog details of one option contract by OCC symbol or Alpaca id.",
  "properties": {
    "contract": {
      "type": "string",
      "description": "OCC symbol (e.g. AAPL261120C00250000) or Alpaca contract id.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "contract"
  ]
}

options_contracts

Search listed option contracts for an underlying by expiry, type, strike range and status.

CLI equivalent: idiotproof options contracts [--expiry ] [--type <call|put>] [--strike-min ] [--strike-max ] [--status <active|inactive>] [--horizon ] [--limit ] Examples: idiotproof options contracts AAPL --expiry 2026-11-20 --type call idiotproof options contracts SPY --strike-min 600 --strike-max 650 --limit 50

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Search listed option contracts for an underlying by expiry, type, strike range and status.",
  "properties": {
    "underlying": {
      "type": "string",
      "description": "Underlying ticker(s), comma separated, e.g. AAPL or AAPL,MSFT.",
      "default": ""
    },
    "expiry": {
      "type": "string",
      "format": "date",
      "description": "Only this expiration date (yyyy-MM-dd)."
    },
    "type": {
      "type": "string",
      "enum": [
        "call",
        "put"
      ],
      "description": "Only calls or only puts."
    },
    "strike_min": {
      "type": "number",
      "description": "Lowest strike to include."
    },
    "strike_max": {
      "type": "number",
      "description": "Highest strike to include."
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "inactive"
      ],
      "description": "active (default) or inactive.",
      "default": "active"
    },
    "horizon": {
      "type": "integer",
      "description": "Without --expiry: days ahead to include (default 1098; Alpaca\u0027s own default is only 1 week).",
      "default": 1098
    },
    "limit": {
      "type": "integer",
      "description": "Most contracts to return (default 200, max 10000).",
      "default": 200
    }
  },
  "additionalProperties": false,
  "required": [
    "underlying"
  ]
}

options_do_not_exercise

Opt a held contract out of automatic exercise at expiry (paper or live; live needs a code).

CLI equivalent: idiotproof options do-not-exercise [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof options do-not-exercise AAPL261219C00150000 --mode paper

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Opt a held contract out of automatic exercise at expiry (paper or live; live needs a code).",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC contract symbol (or Alpaca contract id) of a long position you hold.",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Which Alpaca account: paper (default) or live (needs confirmation). Sandbox can\u0027t exercise.",
      "default": "paper"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_exchanges

Options exchange codes and their names, as they appear in quotes and trades.

CLI equivalent: idiotproof options exchanges Examples: idiotproof options exchanges

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Options exchange codes and their names, as they appear in quotes and trades.",
  "properties": {},
  "additionalProperties": false
}

options_exercise

Exercise a long option you hold (Alpaca paper or live; live needs a confirmation code).

CLI equivalent: idiotproof options exercise [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof options exercise AAPL261219C00150000 idiotproof options exercise AAPL261219C00150000 --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Exercise a long option you hold (Alpaca paper or live; live needs a confirmation code).",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC contract symbol (or Alpaca contract id) of a long position you hold.",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Which Alpaca account: paper (default) or live (needs confirmation). Sandbox can\u0027t exercise.",
      "default": "paper"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_glossary

Plain-English options jargon (hype, breakeven, IV, sell to close, ...): every term, or one in full.

CLI equivalent: idiotproof options glossary [] Examples: idiotproof options glossary idiotproof options glossary hype

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Plain-English options jargon (hype, breakeven, IV, sell to close, ...): every term, or one in full.",
  "properties": {
    "term": {
      "type": "string",
      "description": "A glossary key or title word (hype, breakeven, iv, sell-to-close, ...); omit to list every term."
    }
  },
  "additionalProperties": false
}

options_greeks

Delta, gamma, theta, vega and rho for one option contract; badged Model when computed locally.

CLI equivalent: idiotproof options greeks [--spot ] [--rate ] [--feed <indicative|opra>] Examples: idiotproof options greeks AAPL261120C00250000 idiotproof options greeks SPY261218P00600000 --spot 640 --rate 4.25

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Delta, gamma, theta, vega and rho for one option contract; badged Model when computed locally.",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC option symbol: ROOT \u002B YYMMDD \u002B C|P \u002B strike x 1000 (8 digits), e.g. AAPL261120C00250000.",
      "default": ""
    },
    "spot": {
      "type": "number",
      "description": "Underlying price to use instead of Alpaca\u0027s last trade."
    },
    "rate": {
      "type": "number",
      "description": "Risk-free rate in percent, e.g. 4.25 (default: the Options page setting, else 4)."
    },
    "feed": {
      "type": "string",
      "enum": [
        "indicative",
        "opra"
      ],
      "description": "Options data feed: indicative (default, free) or opra (paid).",
      "default": "indicative"
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_iv

Implied volatility for one option contract: Alpaca's, plus IV solved locally at bid, mid, ask and last.

CLI equivalent: idiotproof options iv [--spot ] [--rate ] [--feed <indicative|opra>] Examples: idiotproof options iv AAPL261120C00250000 idiotproof options iv AAPL261120C00250000 --spot 255

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Implied volatility for one option contract: Alpaca\u0027s, plus IV solved locally at bid, mid, ask and last.",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC option symbol: ROOT \u002B YYMMDD \u002B C|P \u002B strike x 1000 (8 digits), e.g. AAPL261120C00250000.",
      "default": ""
    },
    "spot": {
      "type": "number",
      "description": "Underlying price to use instead of Alpaca\u0027s last trade."
    },
    "rate": {
      "type": "number",
      "description": "Risk-free rate in percent, e.g. 4.25 (default: the Options page setting, else 4)."
    },
    "feed": {
      "type": "string",
      "enum": [
        "indicative",
        "opra"
      ],
      "description": "Options data feed: indicative (default, free) or opra (paid).",
      "default": "indicative"
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_latest

Latest NBBO quote and latest trade for one option contract, with exchanges and sizes.

CLI equivalent: idiotproof options latest [--feed <indicative|opra>] Examples: idiotproof options latest AAPL261120C00250000

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Latest NBBO quote and latest trade for one option contract, with exchanges and sizes.",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC option symbol: ROOT \u002B YYMMDD \u002B C|P \u002B strike x 1000 (8 digits), e.g. AAPL261120C00250000.",
      "default": ""
    },
    "feed": {
      "type": "string",
      "enum": [
        "indicative",
        "opra"
      ],
      "description": "Options data feed: indicative (default, free) or opra (paid).",
      "default": "indicative"
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_level

Options trading level (effective and approved) and options buying power for your Alpaca accounts.

CLI equivalent: idiotproof options level [--mode <all|paper|live>] Examples: idiotproof options level idiotproof options level --mode paper

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Options trading level (effective and approved) and options buying power for your Alpaca accounts.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

options_positions

Open option contracts in your Alpaca accounts: strike, expiry, DTE, cost, value and unrealized P&L.

CLI equivalent: idiotproof options positions [--mode <all|paper|live>] Examples: idiotproof options positions idiotproof options positions --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Open option contracts in your Alpaca accounts: strike, expiry, DTE, cost, value and unrealized P\u0026L.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

options_quote

Latest bid/ask, mid, spread and last trade for one option contract (OCC symbol).

CLI equivalent: idiotproof options quote [--feed <indicative|opra>] Examples: idiotproof options quote AAPL261120C00250000 idiotproof options quote SPY261218P00600000 --feed opra

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Latest bid/ask, mid, spread and last trade for one option contract (OCC symbol).",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC option symbol: ROOT \u002B YYMMDD \u002B C|P \u002B strike x 1000 (8 digits), e.g. AAPL261120C00250000.",
      "default": ""
    },
    "feed": {
      "type": "string",
      "enum": [
        "indicative",
        "opra"
      ],
      "description": "Options data feed: indicative (default, free) or opra (paid).",
      "default": "indicative"
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_sell

Sell option contracts you hold (sell to close), or write them with --open (level 1+).

CLI equivalent: idiotproof options sell [--limit ] [--mode <sandbox|paper|live>] [--open] [--note ] Examples: idiotproof options sell AAPL261219C00150000 2 --limit 4.10 --mode paper idiotproof options sell AAPL261219C00170000 1 --open --limit 1.05 --mode paper

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Sell option contracts you hold (sell to close), or write them with --open (level 1\u002B).",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC contract symbol, e.g. AAPL261219C00150000.",
      "default": ""
    },
    "contracts": {
      "type": "integer",
      "description": "Whole contracts (each is usually 100 shares).",
      "default": 0
    },
    "limit": {
      "type": "number",
      "description": "Limit price per share (premium). Without it the order is a market order."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Where it routes: sandbox (simulator, the default), paper, or live (needs confirmation).",
      "default": "sandbox"
    },
    "open": {
      "type": "boolean",
      "description": "Write (sell to open, level 1\u002B: covered call / cash-secured put) instead of selling contracts you hold.",
      "default": false
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "occ",
    "contracts"
  ]
}

options_signals

Sell-the-hype nudges on your open long options: hype near its session high plus bullish news (never places anything).

CLI equivalent: idiotproof options signals [--mode <all|paper|live>] Examples: idiotproof options signals idiotproof options signals --mode paper

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Sell-the-hype nudges on your open long options: hype near its session high plus bullish news (never places anything).",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

options_snapshot

Alpaca's full snapshot of one option contract: latest quote and trade, daily bars, IV and Greeks.

CLI equivalent: idiotproof options snapshot [--feed <indicative|opra>] Examples: idiotproof options snapshot AAPL261120C00250000

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Alpaca\u0027s full snapshot of one option contract: latest quote and trade, daily bars, IV and Greeks.",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC option symbol: ROOT \u002B YYMMDD \u002B C|P \u002B strike x 1000 (8 digits), e.g. AAPL261120C00250000.",
      "default": ""
    },
    "feed": {
      "type": "string",
      "enum": [
        "indicative",
        "opra"
      ],
      "description": "Options data feed: indicative (default, free) or opra (paid).",
      "default": "indicative"
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_spread

Place a 2-4 leg options order (verticals, straddles, ratios...) as one Alpaca multi-leg order; level 3, max-loss preview, live needs a code.

CLI equivalent: idiotproof options spread ... [--qty ] [--limit ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof options spread buy:AAPL261219C00150000 sell:AAPL261219C00160000 --limit 3.10 idiotproof options spread sell:SPY261120P00560000 buy:SPY261120P00550000 --limit -1.25 --qty 2 --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Place a 2-4 leg options order (verticals, straddles, ratios...) as one Alpaca multi-leg order; level 3, max-loss preview, live needs a code.",
  "properties": {
    "legs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "2 to 4 legs, each side:OCC[:ratio][:close], e.g. buy:AAPL261219C00150000 sell:AAPL261219C00160000. Legs open unless :close."
    },
    "qty": {
      "type": "integer",
      "description": "How many spreads (each leg trades ratio x qty contracts). Default 1.",
      "default": 1
    },
    "limit": {
      "type": "number",
      "description": "Net price per spread per share: positive = debit you pay, negative = credit you take. Without it the order is a market order."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "paper (default) or live (needs confirmation). The Sandbox simulator does not fill multi-leg orders.",
      "default": "paper"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "legs"
  ]
}

options_trades

Historical trades (prints) for one option contract, newest first.

CLI equivalent: idiotproof options trades [--start ] [--end ] [--limit ] Examples: idiotproof options trades AAPL261120C00250000 idiotproof options trades AAPL261120C00250000 --start 2026-10-29 --limit 200

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Historical trades (prints) for one option contract, newest first.",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC option symbol, e.g. AAPL261120C00250000.",
      "default": ""
    },
    "start": {
      "type": "string",
      "format": "date",
      "description": "First ET date (yyyy-MM-dd); default 7 days back."
    },
    "end": {
      "type": "string",
      "format": "date",
      "description": "Last ET date (yyyy-MM-dd); default today."
    },
    "limit": {
      "type": "integer",
      "description": "Most trades to return, newest first (default 50).",
      "default": 50
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

options_value

Intrinsic and extrinsic value, breakeven, DTE and Black-Scholes price for one option contract.

CLI equivalent: idiotproof options value [--spot ] [--premium ] [--iv ] [--rate ] [--feed <indicative|opra>] Examples: idiotproof options value AAPL261120C00250000 idiotproof options value AAPL261120C00250000 --spot 260 --premium 4.10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Intrinsic and extrinsic value, breakeven, DTE and Black-Scholes price for one option contract.",
  "properties": {
    "occ": {
      "type": "string",
      "description": "OCC option symbol: ROOT \u002B YYMMDD \u002B C|P \u002B strike x 1000 (8 digits), e.g. AAPL261120C00250000.",
      "default": ""
    },
    "spot": {
      "type": "number",
      "description": "Underlying price to value at (what-if) instead of Alpaca\u0027s last trade."
    },
    "premium": {
      "type": "number",
      "description": "Premium per share to value instead of the current mid, e.g. what you paid."
    },
    "iv": {
      "type": "number",
      "description": "Implied volatility in percent for the Black-Scholes price, e.g. 35 (default Alpaca\u0027s IV)."
    },
    "rate": {
      "type": "number",
      "description": "Risk-free rate in percent, e.g. 4.25 (default: the Options page setting, else 4)."
    },
    "feed": {
      "type": "string",
      "enum": [
        "indicative",
        "opra"
      ],
      "description": "Options data feed: indicative (default, free) or opra (paid).",
      "default": "indicative"
    }
  },
  "additionalProperties": false,
  "required": [
    "occ"
  ]
}

orders_bracket

Entry plus a take-profit and a stop-loss that cancel each other (Alpaca bracket). The stop-loss is the Risk Guardian's stop.

CLI equivalent: idiotproof orders bracket [--limit ] [--take-profit ] [--stop-loss ] [--stop-loss-limit ] [--tif ] [--client-id ] [--stop ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof orders bracket NVDA buy 10 --limit 131 --take-profit 140 --stop-loss 127 --tif gtc --mode paper idiotproof orders bracket AAPL buy 5 --take-profit 240 --stop-loss 220 --stop-loss-limit 219.5

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Entry plus a take-profit and a stop-loss that cancel each other (Alpaca bracket). The stop-loss is the Risk Guardian\u0027s stop.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. NVDA.",
      "default": ""
    },
    "side": {
      "type": "string",
      "enum": [
        "buy",
        "sell"
      ],
      "description": "buy or sell (the parent\u0027s side; an OCO\u0027s side closes the position: sell exits a long).",
      "default": "buy"
    },
    "qty": {
      "type": "integer",
      "description": "Whole shares.",
      "default": 0
    },
    "limit": {
      "type": "number",
      "description": "Entry limit price (bracket/OTO). Without it the entry is a market order."
    },
    "take_profit": {
      "type": "number",
      "description": "Take-profit child\u0027s limit price."
    },
    "stop_loss": {
      "type": "number",
      "description": "Stop-loss child\u0027s stop price."
    },
    "stop_loss_limit": {
      "type": "number",
      "description": "Make the stop-loss a stop-limit with this limit price."
    },
    "tif": {
      "type": "string",
      "description": "Time in force: day (default) or gtc.",
      "default": "day"
    },
    "client_id": {
      "type": "string",
      "description": "Your own id for the parent order (Alpaca client_order_id)."
    },
    "stop": {
      "type": "number",
      "description": "Planned protective stop for the Risk Guardian when the order has no stop-loss child (OTO with only a take-profit)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Where it routes: sandbox (simulator, the default), paper, or live (needs confirmation).",
      "default": "sandbox"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol",
    "side",
    "qty"
  ]
}

orders_cancel

Cancel one working order through the gateway (audited; live needs a confirmation code).

CLI equivalent: idiotproof orders cancel [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof orders cancel 61e69015-8549-4bfd-b9c3-01e75843f47d idiotproof orders cancel 61e69015-8549-4bfd-b9c3-01e75843f47d --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Cancel one working order through the gateway (audited; live needs a confirmation code).",
  "properties": {
    "id": {
      "type": "string",
      "description": "The order id (from \u0060orders list\u0060).",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "The account the order is in: paper (default), live (needs confirmation) or sandbox.",
      "default": "paper"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "id"
  ]
}

orders_cancel_all

Cancel every open order in an account, or only one symbol's, through the gateway (live needs a confirmation code).

CLI equivalent: idiotproof orders cancel-all [--symbol ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof orders cancel-all --mode paper idiotproof orders cancel-all --symbol NVDA --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Cancel every open order in an account, or only one symbol\u0027s, through the gateway (live needs a confirmation code).",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Only this symbol\u0027s open orders. Without it, every open order in the account."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "The account: paper (default), live (needs confirmation) or sandbox.",
      "default": "paper"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false
}

orders_history

Closed Alpaca orders (filled, cancelled, expired, rejected) over the last N days, newest first, with fill prices and totals.

CLI equivalent: idiotproof orders history [--days ] [--symbol ] [--mode <all|paper|live>] Examples: idiotproof orders history idiotproof orders history --days 30 --symbol NVDA --mode paper

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Closed Alpaca orders (filled, cancelled, expired, rejected) over the last N days, newest first, with fill prices and totals.",
  "properties": {
    "days": {
      "type": "integer",
      "description": "How far back, in days (default 7, up to 365).",
      "default": 7
    },
    "symbol": {
      "type": "string",
      "description": "Only orders for these symbols (comma-separated)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

orders_list

Your Alpaca orders (open by default) in the paper and live accounts, newest first, with bracket/OCO legs.

CLI equivalent: idiotproof orders list [--status <open|closed|all>] [--symbol ] [--side ] [--limit ] [--mode <all|paper|live>] Examples: idiotproof orders list idiotproof orders list --status closed --symbol NVDA --mode paper

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Your Alpaca orders (open by default) in the paper and live accounts, newest first, with bracket/OCO legs.",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "open",
        "closed",
        "all"
      ],
      "description": "open (default: working orders), closed (filled/cancelled/expired) or all.",
      "default": "open"
    },
    "symbol": {
      "type": "string",
      "description": "Only orders for these symbols (comma-separated)."
    },
    "side": {
      "type": "string",
      "description": "Only buy or sell orders."
    },
    "limit": {
      "type": "integer",
      "description": "Most orders per account (default 50, Alpaca\u0027s max 500).",
      "default": 50
    },
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

orders_oco

Exit a held position with a take-profit limit and a stop-loss; whichever fills cancels the other (Alpaca OCO).

CLI equivalent: idiotproof orders oco [--limit ] [--take-profit ] [--stop-loss ] [--stop-loss-limit ] [--tif ] [--client-id ] [--stop ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof orders oco NVDA sell 10 --take-profit 140 --stop-loss 127 --tif gtc --mode paper

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Exit a held position with a take-profit limit and a stop-loss; whichever fills cancels the other (Alpaca OCO).",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. NVDA.",
      "default": ""
    },
    "side": {
      "type": "string",
      "enum": [
        "buy",
        "sell"
      ],
      "description": "buy or sell (the parent\u0027s side; an OCO\u0027s side closes the position: sell exits a long).",
      "default": "buy"
    },
    "qty": {
      "type": "integer",
      "description": "Whole shares.",
      "default": 0
    },
    "limit": {
      "type": "number",
      "description": "Entry limit price (bracket/OTO). Without it the entry is a market order."
    },
    "take_profit": {
      "type": "number",
      "description": "Take-profit child\u0027s limit price."
    },
    "stop_loss": {
      "type": "number",
      "description": "Stop-loss child\u0027s stop price."
    },
    "stop_loss_limit": {
      "type": "number",
      "description": "Make the stop-loss a stop-limit with this limit price."
    },
    "tif": {
      "type": "string",
      "description": "Time in force: day (default) or gtc.",
      "default": "day"
    },
    "client_id": {
      "type": "string",
      "description": "Your own id for the parent order (Alpaca client_order_id)."
    },
    "stop": {
      "type": "number",
      "description": "Planned protective stop for the Risk Guardian when the order has no stop-loss child (OTO with only a take-profit)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Where it routes: sandbox (simulator, the default), paper, or live (needs confirmation).",
      "default": "sandbox"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol",
    "side",
    "qty"
  ]
}

orders_oto

Entry that, once filled, triggers ONE child: a take-profit or a stop-loss (Alpaca OTO).

CLI equivalent: idiotproof orders oto [--limit ] [--take-profit ] [--stop-loss ] [--stop-loss-limit ] [--tif ] [--client-id ] [--stop ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof orders oto NVDA buy 10 --limit 131 --stop-loss 127 --mode paper idiotproof orders oto NVDA buy 10 --limit 131 --take-profit 140 --stop 127

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Entry that, once filled, triggers ONE child: a take-profit or a stop-loss (Alpaca OTO).",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. NVDA.",
      "default": ""
    },
    "side": {
      "type": "string",
      "enum": [
        "buy",
        "sell"
      ],
      "description": "buy or sell (the parent\u0027s side; an OCO\u0027s side closes the position: sell exits a long).",
      "default": "buy"
    },
    "qty": {
      "type": "integer",
      "description": "Whole shares.",
      "default": 0
    },
    "limit": {
      "type": "number",
      "description": "Entry limit price (bracket/OTO). Without it the entry is a market order."
    },
    "take_profit": {
      "type": "number",
      "description": "Take-profit child\u0027s limit price."
    },
    "stop_loss": {
      "type": "number",
      "description": "Stop-loss child\u0027s stop price."
    },
    "stop_loss_limit": {
      "type": "number",
      "description": "Make the stop-loss a stop-limit with this limit price."
    },
    "tif": {
      "type": "string",
      "description": "Time in force: day (default) or gtc.",
      "default": "day"
    },
    "client_id": {
      "type": "string",
      "description": "Your own id for the parent order (Alpaca client_order_id)."
    },
    "stop": {
      "type": "number",
      "description": "Planned protective stop for the Risk Guardian when the order has no stop-loss child (OTO with only a take-profit)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Where it routes: sandbox (simulator, the default), paper, or live (needs confirmation).",
      "default": "sandbox"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol",
    "side",
    "qty"
  ]
}

orders_place

Place any single Alpaca order: market/limit/stop/stop-limit/trailing, every TIF, fractional or notional, client id, position intent. Through the gateway; live needs a code.

CLI equivalent: idiotproof orders place [] [--notional ] [--type <market|limit|stop|stop-limit|trailing-stop>] [--limit ] [--stop-price ] [--trail-percent ] [--trail-price ] [--tif ] [--ext] [--client-id ] [--intent ] [--stop ] [--target ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof orders place NVDA buy 10 --limit 131.20 --stop 127.50 --tif gtc --mode paper idiotproof orders place AAPL buy 0.5 --stop 220 --mode paper idiotproof orders place TSLA sell 5 --type trailing-stop --trail-percent 3 --tif gtc --mode paper

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Place any single Alpaca order: market/limit/stop/stop-limit/trailing, every TIF, fractional or notional, client id, position intent. Through the gateway; live needs a code.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. NVDA.",
      "default": ""
    },
    "side": {
      "type": "string",
      "enum": [
        "buy",
        "sell"
      ],
      "description": "buy or sell.",
      "default": "buy"
    },
    "qty": {
      "type": "number",
      "description": "Shares; fractions allowed (0.25, DAY only). Leave out and pass --notional to size by dollars."
    },
    "notional": {
      "type": "number",
      "description": "Size by dollar amount instead of shares (DAY only)."
    },
    "type": {
      "type": "string",
      "enum": [
        "market",
        "limit",
        "stop",
        "stop-limit",
        "trailing-stop"
      ],
      "description": "market, limit, stop, stop-limit or trailing-stop. Default: worked out from the prices given (none = market)."
    },
    "limit": {
      "type": "number",
      "description": "Limit price (limit and stop-limit orders)."
    },
    "stop_price": {
      "type": "number",
      "description": "Stop trigger price (stop and stop-limit orders)."
    },
    "trail_percent": {
      "type": "number",
      "description": "Trailing stop distance in percent."
    },
    "trail_price": {
      "type": "number",
      "description": "Trailing stop distance in dollars."
    },
    "tif": {
      "type": "string",
      "description": "Time in force: day (default), gtc, opg (at the open), cls (at the close), ioc or fok.",
      "default": "day"
    },
    "ext": {
      "type": "boolean",
      "description": "Extended hours (premarket/after-hours); limit \u002B day only.",
      "default": false
    },
    "client_id": {
      "type": "string",
      "description": "Your own order id (Alpaca client_order_id, up to 128 characters)."
    },
    "intent": {
      "type": "string",
      "description": "Position intent: buy-to-open, buy-to-close, sell-to-open or sell-to-close."
    },
    "stop": {
      "type": "number",
      "description": "Planned protective stop for an entry (the Risk Guardian refuses entries without one)."
    },
    "target": {
      "type": "number",
      "description": "Planned take-profit (for the reward:risk check)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Where it routes: sandbox (simulator, the default), paper, or live (needs confirmation).",
      "default": "sandbox"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol",
    "side"
  ]
}

orders_replace

Change a working order's quantity, limit/stop/trail, TIF or client id (Alpaca PATCH; it gets a new id). Through the gateway; live needs a code.

CLI equivalent: idiotproof orders replace [--qty ] [--limit ] [--stop-price ] [--trail ] [--tif ] [--client-id ] [--stop ] [--mode <sandbox|paper|live>] [--note ] Examples: idiotproof orders replace 61e69015-8549-4bfd-b9c3-01e75843f47d --limit 131.50 idiotproof orders replace 61e69015-8549-4bfd-b9c3-01e75843f47d --qty 5 --tif gtc --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Change a working order\u0027s quantity, limit/stop/trail, TIF or client id (Alpaca PATCH; it gets a new id). Through the gateway; live needs a code.",
  "properties": {
    "id": {
      "type": "string",
      "description": "The working order to change (from \u0060orders list\u0060).",
      "default": ""
    },
    "qty": {
      "type": "number",
      "description": "New share count (fractions allowed)."
    },
    "limit": {
      "type": "number",
      "description": "New limit price."
    },
    "stop_price": {
      "type": "number",
      "description": "New stop trigger price."
    },
    "trail": {
      "type": "number",
      "description": "New trailing distance, in the order\u0027s own unit (percent or dollars)."
    },
    "tif": {
      "type": "string",
      "description": "New time in force: day, gtc, opg, cls, ioc or fok."
    },
    "client_id": {
      "type": "string",
      "description": "New client order id for the replacement order."
    },
    "stop": {
      "type": "number",
      "description": "Protective stop for the position, needed when --qty raises an entry\u0027s size (the Risk Guardian checks the whole new size)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "The account the order is in: paper (default) or live (needs confirmation).",
      "default": "paper"
    },
    "note": {
      "type": "string",
      "description": "Why \u2014 kept in the audit trail."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "id"
  ]
}

orders_show

One Alpaca order in full, by id or client id: prices, fills, timestamps (ET) and its nested bracket/OCO/OTO/multi-leg legs.

CLI equivalent: idiotproof orders show [] [--client-id ] [--mode <all|paper|live>] Examples: idiotproof orders show 61e69015-8549-4bfd-b9c3-01e75843f47d idiotproof orders show --client-id exit-nvda-1 --mode paper

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "One Alpaca order in full, by id or client id: prices, fills, timestamps (ET) and its nested bracket/OCO/OTO/multi-leg legs.",
  "properties": {
    "id": {
      "type": "string",
      "description": "The Alpaca order id (from \u0060orders list\u0060). Leave out and pass --client-id to look up by your own id."
    },
    "client_id": {
      "type": "string",
      "description": "Look the order up by its client order id instead."
    },
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all: whichever account has it).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

orders_stream

Live order events from Alpaca (new, fill, partial fill, canceled, replaced, rejected, expired); the Hub records every fill in the trade diary and audit log.

Starts (or joins) the Hub's trade_updates listener for each account; once started it keeps recording fills until the Hub stops. A terminal streams events until Ctrl+C; MCP and --json get the events of a bounded window (--seconds, default 15) plus the last few seen.

CLI equivalent: idiotproof orders stream [--mode <all|paper|live>] [--fills-only] [--seconds ] [--max ] Examples: idiotproof orders stream idiotproof orders stream --mode paper --fills-only

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Live order events from Alpaca (new, fill, partial fill, canceled, replaced, rejected, expired); the Hub records every fill in the trade diary and audit log.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all: every account with keys).",
      "default": "all"
    },
    "fills_only": {
      "type": "boolean",
      "description": "Show only fills and partial fills.",
      "default": false
    },
    "seconds": {
      "type": "integer",
      "description": "Stop after this many seconds (a terminal streams until Ctrl\u002BC; MCP/--json default 15, at most 300)."
    },
    "max": {
      "type": "integer",
      "description": "Stop after this many events."
    }
  },
  "additionalProperties": false
}

positions_close

Close (or trim) one Alpaca position as a market exit through the TransactionGateway. Live needs a confirmation code.

CLI equivalent: idiotproof positions close [--qty ] [--percentage ] [--mode <sandbox|paper|live>] [--preview] Examples: idiotproof positions close HIHO --mode paper idiotproof positions close NVDA --percentage 50 --mode paper idiotproof positions close TSLA --qty 5 --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Close (or trim) one Alpaca position as a market exit through the TransactionGateway. Live needs a confirmation code.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker or OCC option symbol of the position to close, e.g. NVDA.",
      "default": ""
    },
    "qty": {
      "type": "number",
      "description": "Close only this many shares/contracts (default: all of it)."
    },
    "percentage": {
      "type": "number",
      "description": "Close this percent of the position (0-100) instead of all of it."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Which Alpaca account: paper (default) or live (needs a confirmation code).",
      "default": "paper"
    },
    "preview": {
      "type": "boolean",
      "description": "Run every gate and show the exit without sending it.",
      "default": false
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

positions_close_all

Close every Alpaca position in one account with market exits through the TransactionGateway; optionally cancel open orders first. Live needs a confirmation code.

CLI equivalent: idiotproof positions close-all [--cancel-orders] [--mode <sandbox|paper|live>] [--preview] Examples: idiotproof positions close-all --preview idiotproof positions close-all --cancel-orders --mode paper idiotproof positions close-all --cancel-orders --mode live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Close every Alpaca position in one account with market exits through the TransactionGateway; optionally cancel open orders first. Live needs a confirmation code.",
  "properties": {
    "cancel_orders": {
      "type": "boolean",
      "description": "Cancel every open order first (frees shares held by working sells/stops).",
      "default": false
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Which Alpaca account: paper (default) or live (one confirmation code covers the whole set).",
      "default": "paper"
    },
    "preview": {
      "type": "boolean",
      "description": "Run every gate and list everything that would close, without sending anything.",
      "default": false
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false
}

positions_list

Every open position in your Alpaca paper and live accounts: price, today's move, unrealized P&L.

CLI equivalent: idiotproof positions list [--mode <all|paper|live>] Examples: idiotproof positions list idiotproof positions list --mode paper

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Every open position in your Alpaca paper and live accounts: price, today\u0027s move, unrealized P\u0026L.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false
}

positions_reconcile

Read-only report: what Alpaca actually holds vs what your strategies book (PositionQty), per account.

CLI equivalent: idiotproof positions reconcile [--mode <all|paper|live>] [--problems] Examples: idiotproof positions reconcile idiotproof positions reconcile --mode paper --problems

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Read-only report: what Alpaca actually holds vs what your strategies book (PositionQty), per account.",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    },
    "problems": {
      "type": "boolean",
      "description": "Only the rows where the broker and the strategies disagree.",
      "default": false
    }
  },
  "additionalProperties": false
}

positions_show

One position in your Alpaca paper/live accounts, the IdiotProof strategy that owns it, and its latest trade-diary row.

CLI equivalent: idiotproof positions show [--mode <all|paper|live>] Examples: idiotproof positions show NVDA idiotproof positions show HIHO --mode paper

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "One position in your Alpaca paper/live accounts, the IdiotProof strategy that owns it, and its latest trade-diary row.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, OCC option symbol or crypto pair, e.g. NVDA.",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "all",
        "paper",
        "live"
      ],
      "description": "paper, live or all (default all).",
      "default": "all"
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

prefs_get

Show your preferences: theme, account pill and Risk Guardian limits.

CLI equivalent: idiotproof prefs get [] Examples: idiotproof prefs get idiotproof prefs get risk.max-loss-per-day

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Show your preferences: theme, account pill and Risk Guardian limits.",
  "properties": {
    "field": {
      "type": "string",
      "description": "One preference (theme, account-type, risk.max-loss-per-trade, ...); omit for all."
    }
  },
  "additionalProperties": false
}

prefs_set

Change one of your preferences (risk limits keep the Settings page's sanity rules).

CLI equivalent: idiotproof prefs set Examples: idiotproof prefs set risk.max-loss-per-day 250 idiotproof prefs set account-type paper

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Change one of your preferences (risk limits keep the Settings page\u0027s sanity rules).",
  "properties": {
    "field": {
      "type": "string",
      "description": "theme, account-type or a risk.* limit (see \u0060prefs get\u0060).",
      "default": ""
    },
    "value": {
      "type": "string",
      "description": "The new value.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "field",
    "value"
  ]
}

replay_all

Replay every strategy family on one ticker/day and rank them by realized P&L (best fit first).

CLI equivalent: idiotproof replay all [] [--pages] [--out ] Examples: idiotproof replay all NVDA 2026-10-29 idiotproof replay all ABCD --no-pages

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Replay every strategy family on one ticker/day and rank them by realized P\u0026L (best fit first).",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "The ticker to try every family on.",
      "default": ""
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "The ET trading day (yyyy-MM-dd); default the last completed trading day."
    },
    "pages": {
      "type": "boolean",
      "description": "Render each run\u0027s page and the archive indexes (HTML only).",
      "default": true
    },
    "out": {
      "type": "string",
      "description": "Archive folder for the pages (default the mindattic.com replays folder)."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

replay_compare

Two replay runs side by side: strategy, day, fires, round-trips, win rate, hold time and P&L, with the difference.

CLI equivalent: idiotproof replay compare Examples: idiotproof replay compare 0190a3f2 0190b7c1

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Two replay runs side by side: strategy, day, fires, round-trips, win rate, hold time and P\u0026L, with the difference.",
  "properties": {
    "run_a": {
      "type": "string",
      "description": "First run id or prefix.",
      "default": ""
    },
    "run_b": {
      "type": "string",
      "description": "Second run id or prefix.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "run_a",
    "run_b"
  ]
}

replay_families

The built-in strategy families replay run --family and replay all use, with what each trades.

CLI equivalent: idiotproof replay families Examples: idiotproof replay families

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The built-in strategy families \u0060replay run --family\u0060 and \u0060replay all\u0060 use, with what each trades.",
  "properties": {},
  "additionalProperties": false
}

replay_list

The replay archive, newest first: ticker, day, strategy, sim or live, fired and P&L.

CLI equivalent: idiotproof replay list [--symbol ] [--since ] [--kind ] [--fired] [--limit ] Examples: idiotproof replay list idiotproof replay list --symbol NVDA --since 2026-10-01 --fired

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The replay archive, newest first: ticker, day, strategy, sim or live, fired and P\u0026L.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Only this ticker."
    },
    "since": {
      "type": "string",
      "format": "date",
      "description": "Only runs of ET trading days on or after this date (yyyy-MM-dd)."
    },
    "kind": {
      "type": "string",
      "description": "Only sim (hypothetical replays) or live (the Monitor\u0027s real trades)."
    },
    "fired": {
      "type": "boolean",
      "description": "Only runs that fired.",
      "default": false
    },
    "limit": {
      "type": "integer",
      "description": "At most this many runs, newest first (default 50).",
      "default": 50
    }
  },
  "additionalProperties": false
}

replay_live

Render the Monitor's real trades for a day (from the trade diary) on that day's bars as LIVE runs in the archive.

CLI equivalent: idiotproof replay live [] [--date ] [--pages] [--out ] Examples: idiotproof replay live idiotproof replay live NVDA --date 2026-10-29

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Render the Monitor\u0027s real trades for a day (from the trade diary) on that day\u0027s bars as LIVE runs in the archive.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Only this ticker (default every ticker the Monitor traded that day)."
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "The ET day whose real trades to render (default today ET)."
    },
    "pages": {
      "type": "boolean",
      "description": "Render the run pages and archive indexes (HTML only; publishing stays manual).",
      "default": true
    },
    "out": {
      "type": "string",
      "description": "Archive folder for the pages (default the mindattic.com replays folder)."
    }
  },
  "additionalProperties": false
}

replay_regen

Regenerate the replay archive's HTML (every run page and index) from SQL; never uploads or deploys.

CLI equivalent: idiotproof replay regen [--out ] Examples: idiotproof replay regen idiotproof replay regen --out C:\temp\replays

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Regenerate the replay archive\u0027s HTML (every run page and index) from SQL; never uploads or deploys.",
  "properties": {
    "out": {
      "type": "string",
      "description": "Archive folder to (re)write (default the mindattic.com replays folder)."
    }
  },
  "additionalProperties": false
}

replay_run

Replay a strategy, gapper profile or built-in family over one past day with the Monitor's own evaluator; saves the run and its page.

CLI equivalent: idiotproof replay run [] [--strategy ] [--profile ] [--family ] [--repeat] [--pages] [--out ] Examples: idiotproof replay run NVDA 2026-10-29 idiotproof replay run ABCD 2026-10-29 --profile penny-runner idiotproof replay run TSLA --family rthdrive --repeat --no-pages

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Replay a strategy, gapper profile or built-in family over one past day with the Monitor\u0027s own evaluator; saves the run and its page.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "The ticker to replay.",
      "default": ""
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "The ET trading day (yyyy-MM-dd); default the last completed trading day."
    },
    "strategy": {
      "type": "string",
      "description": "Replay this saved strategy (id, id prefix, stamp id or symbol) instead of the symbol\u0027s own."
    },
    "profile": {
      "type": "string",
      "description": "Replay a gapper profile on the fly (e.g. classic-gapper, penny-runner)."
    },
    "family": {
      "type": "string",
      "description": "Replay a built-in family (momentum, reversal, rsireversal, emabreak, rthdrive, shortfade, swingreversal)."
    },
    "repeat": {
      "type": "boolean",
      "description": "Re-arm after every exit to show each round-trip the day offered.",
      "default": false
    },
    "pages": {
      "type": "boolean",
      "description": "Render the run page and archive indexes (HTML only; publishing stays manual).",
      "default": true
    },
    "out": {
      "type": "string",
      "description": "Archive folder for the pages (default the mindattic.com replays folder)."
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

replay_show

One replay run: its round-trips with entry features and its per-bar features (OHLCV, VWAP, volume ratio, conditions passed).

CLI equivalent: idiotproof replay show [--bars ] Examples: idiotproof replay show 0190a3f2 idiotproof replay show 0190a3f2 --bars session

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "One replay run: its round-trips with entry features and its per-bar features (OHLCV, VWAP, volume ratio, conditions passed).",
  "properties": {
    "run": {
      "type": "string",
      "description": "Run id or its first 6\u002B characters (from \u0060replay list\u0060).",
      "default": ""
    },
    "bars": {
      "type": "string",
      "description": "Which per-bar rows to print: marked (entries/exits, default), session (in-session bars) or all.",
      "default": "marked"
    }
  },
  "additionalProperties": false,
  "required": [
    "run"
  ]
}

research_analyze

Extract catalysts and portents from a ticker's news, a URL or pasted text via the LLM (--save to keep them).

Uses your Claude key (else the host's). Without --save nothing is written; with --save the claims join the research feed like scanned ones.

CLI equivalent: idiotproof research analyze [--ticker ] [--text ] [--source ] [--days ] [--max-articles ] [--save] Examples: idiotproof research analyze NVDA idiotproof research analyze https://www.sec.gov/Archives/edgar/data/1045810/x.htm --ticker NVDA --save idiotproof research analyze AMD --text "AMD signs a preliminary $4B supply deal, closing next quarter"

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Extract catalysts and portents from a ticker\u0027s news, a URL or pasted text via the LLM (--save to keep them).",
  "properties": {
    "target": {
      "type": "string",
      "description": "A ticker (analyzes its recent Alpaca news, or --text) or an http(s) URL of an article or filing.",
      "default": ""
    },
    "ticker": {
      "type": "string",
      "description": "The company a URL is about (required with a URL)."
    },
    "text": {
      "type": "string",
      "description": "Analyze this text instead of fetching anything."
    },
    "source": {
      "type": "string",
      "description": "Source name to record (default: the URL\u0027s host, Alpaca\u0027s outlet, or \u0022manual\u0022)."
    },
    "days": {
      "type": "integer",
      "description": "News lookback for a ticker, 1-30 days (default 3).",
      "default": 3
    },
    "max_articles": {
      "type": "integer",
      "description": "Most news articles to analyze for a ticker, 1-20 (default 5).",
      "default": 5
    },
    "save": {
      "type": "boolean",
      "description": "Persist the extracted claims to the research feed (skips a URL already analyzed).",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "target"
  ]
}

research_backfill

Record what each old enough claim's stock actually did (Alpaca daily closes) and settle portents.

CLI equivalent: idiotproof research backfill [--min-wait-days ] [--window-days ] [--max ] Examples: idiotproof research backfill idiotproof research backfill --min-wait-days 10 --window-days 10 --max 500

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Record what each old enough claim\u0027s stock actually did (Alpaca daily closes) and settle portents.",
  "properties": {
    "min_wait_days": {
      "type": "integer",
      "description": "Only claims at least this many days old, 1-365 (default 5).",
      "default": 5
    },
    "window_days": {
      "type": "integer",
      "description": "Measure the price move this many days after the claim, 1-365 (default 7).",
      "default": 7
    },
    "max": {
      "type": "integer",
      "description": "Most claims to backfill this run, 1-5000 (default 200).",
      "default": 200
    }
  },
  "additionalProperties": false
}

research_claim

One research claim in full: source, trigger, outcome, insider lines and its score breakdown.

CLI equivalent: idiotproof research claim Examples: idiotproof research claim 3f2a91c0

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "One research claim in full: source, trigger, outcome, insider lines and its score breakdown.",
  "properties": {
    "claim": {
      "type": "string",
      "description": "Claim id, or the 8-character prefix \u0060research claims\u0060 shows.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "claim"
  ]
}

research_claims

Ranked research feed: catalysts and portents by significance score, filterable by ticker, date, score and macro.

CLI equivalent: idiotproof research claims [--ticker ] [--since ] [--min-score ] [--macro] [--portents] [--limit ] Examples: idiotproof research claims idiotproof research claims --ticker NVDA --since 2026-10-01 idiotproof research claims --min-score 60 --portents

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Ranked research feed: catalysts and portents by significance score, filterable by ticker, date, score and macro.",
  "properties": {
    "ticker": {
      "type": "string",
      "description": "Only claims about this symbol (and macro claims that name it)."
    },
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date a claim was found, yyyy-MM-dd (default: 14 days ago)."
    },
    "min_score": {
      "type": "number",
      "description": "Only claims scored at least this (0-100); unscored claims are left out."
    },
    "macro": {
      "type": "boolean",
      "description": "Only macro/regulatory claims (no single ticker).",
      "default": false
    },
    "portents": {
      "type": "boolean",
      "description": "Only pending portents: announced, not yet happened.",
      "default": false
    },
    "limit": {
      "type": "integer",
      "description": "Most claims to show, 1-500 (default 50).",
      "default": 50
    }
  },
  "additionalProperties": false
}

research_gappers_build_universe

Gapper study T1/T6 + universe: every Alpaca us_equity asset's daily bars and splits, then U(D), exclusions, candidates, ADV deciles and price tiers per the frozen protocol, and sample.json.

Research rows only, on the research database (the connection string must name a database containing 'Research'); read-only market data; no orders. Every number comes from docs/research/gapper-study-2026-11/params.json. Resumable: covered symbols are not re-pulled; universe rows for the range are rebuilt.

CLI equivalent: idiotproof research gappers build-universe --from --to [--smoke] [--symbols ] [--max-calls ] Examples: idiotproof research gappers build-universe --from 2021-11-01 --to 2026-10-30 idiotproof research gappers build-universe --smoke --symbols GOGO,STAK,BE --from 2026-11-03 --to 2026-11-05

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Gapper study T1/T6 \u002B universe: every Alpaca us_equity asset\u0027s daily bars and splits, then U(D), exclusions, candidates, ADV deciles and price tiers per the frozen protocol, and sample.json.",
  "properties": {
    "from": {
      "type": "string",
      "format": "date",
      "description": "First trading day D of the universe (ET, yyyy-MM-dd).",
      "default": "0001-01-01"
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Last trading day D (ET, yyyy-MM-dd).",
      "default": "0001-01-01"
    },
    "smoke": {
      "type": "boolean",
      "description": "Smoke run: only --symbols, daily bars from 60 days before --from, rows tagged split \u0027smoke\u0027, sample.smoke.json.",
      "default": false
    },
    "symbols": {
      "type": "string",
      "description": "Comma-separated symbols for a --smoke run."
    },
    "max_calls": {
      "type": "integer",
      "description": "Stop pulling after this many Alpaca requests (0 = no cap); the run stays resumable.",
      "default": 0
    }
  },
  "additionalProperties": false,
  "required": [
    "from",
    "to"
  ]
}

research_gappers_catalysts

Re-run the deterministic CatalystPreClassifier over every backfilled catalyst row (idempotent) and spend an optional Haiku budget on rows never classified; each article/filing is classified at most once.

Research rows only, on the research database (the connection string must name a database containing 'Research'); read-only market data; no orders.

CLI equivalent: idiotproof research gappers catalysts [--llm-budget ] Examples: idiotproof research gappers catalysts idiotproof research gappers catalysts --llm-budget 200

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Re-run the deterministic CatalystPreClassifier over every backfilled catalyst row (idempotent) and spend an optional Haiku budget on rows never classified; each article/filing is classified at most once.",
  "properties": {
    "llm_budget": {
      "type": "integer",
      "description": "At most this many never-classified backfilled rows get a Haiku classification (default 0).",
      "default": 0
    }
  },
  "additionalProperties": false
}

research_gappers_label

Gapper study labels: next-bar-open entry and forward returns per horizon, reach-20 by 09:45, premarket/RTH/full-session high times and bucket, fade, extension from open, velocity death, death-to-HOD, halt proxy and VWAP-loss time, per the frozen definitions.

Research rows only, on the research database (the connection string must name a database containing 'Research'); read-only market data; no orders. Same holdout lock as snapshot.

CLI equivalent: idiotproof research gappers label --split [--smoke] [--from ] [--to ] Examples: idiotproof research gappers label --split train idiotproof research gappers label --split train --smoke

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Gapper study labels: next-bar-open entry and forward returns per horizon, reach-20 by 09:45, premarket/RTH/full-session high times and bucket, fade, extension from open, velocity death, death-to-HOD, halt proxy and VWAP-loss time, per the frozen definitions.",
  "properties": {
    "split": {
      "type": "string",
      "description": "train, validation or holdout (holdout needs holdout-unlock.txt and runs once).",
      "default": "train"
    },
    "smoke": {
      "type": "boolean",
      "description": "Label the smoke-tagged rows instead.",
      "default": false
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "Restrict to days on or after this ET date."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Restrict to days on or before this ET date."
    }
  },
  "additionalProperties": false,
  "required": [
    "split"
  ]
}

research_gappers_pull

Gapper study data tiers: minute bars for candidate/prior/control days into the file store (then gapper tiers and controls), Alpaca news, ticker-CIK map, EDGAR form index with acceptance times, splits. Resumable, rate-limited, --max-calls capped.

Research rows only, on the research database (the connection string must name a database containing 'Research'); read-only market data; no orders. Minute bars go to D:\IdiotProofData\gapper-study\bars (setting gapperStudy.barRoot) as packed day blocks; a killed pull is rerun, not restarted.

CLI equivalent: idiotproof research gappers pull --tier [--smoke] [--from ] [--to ] [--max-calls ] Examples: idiotproof research gappers pull --tier bars idiotproof research gappers pull --tier all --smoke idiotproof research gappers pull --tier edgar --max-calls 5000

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Gapper study data tiers: minute bars for candidate/prior/control days into the file store (then gapper tiers and controls), Alpaca news, ticker-CIK map, EDGAR form index with acceptance times, splits. Resumable, rate-limited, --max-calls capped.",
  "properties": {
    "tier": {
      "type": "string",
      "description": "bars (T2 minute bars \u002B gapper classification \u002B controls), news (T3), cik (T5), edgar (T4 form index \u002B acceptance times), splits (T6), or all.",
      "default": "all"
    },
    "smoke": {
      "type": "boolean",
      "description": "Operate on the smoke-tagged universe rows only.",
      "default": false
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "Restrict to candidate days on or after this ET date."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Restrict to candidate days on or before this ET date."
    },
    "max_calls": {
      "type": "integer",
      "description": "Stop after this many API requests per tier (0 = no cap); the pull resumes from its coverage marks next time.",
      "default": 0
    }
  },
  "additionalProperties": false,
  "required": [
    "tier"
  ]
}

research_gappers_snapshot

Gapper study feature snapshots: every candidate and control day at every frozen decision time through the shared GapperFormationFeatures.Compute, written as Source=backtest rows; fits and saves data/tod-profile.json on train control days first.

Research rows only, on the research database (the connection string must name a database containing 'Research'); read-only market data; no orders. The holdout split refuses to run unless holdout-unlock.txt holds the frozen commit hash, and refuses a second run.

CLI equivalent: idiotproof research gappers snapshot --split [--smoke] [--from ] [--to ] Examples: idiotproof research gappers snapshot --split train idiotproof research gappers snapshot --split train --smoke

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Gapper study feature snapshots: every candidate and control day at every frozen decision time through the shared GapperFormationFeatures.Compute, written as Source=backtest rows; fits and saves data/tod-profile.json on train control days first.",
  "properties": {
    "split": {
      "type": "string",
      "description": "train, validation or holdout (holdout needs holdout-unlock.txt and runs once).",
      "default": "train"
    },
    "smoke": {
      "type": "boolean",
      "description": "Snapshot the smoke-tagged rows instead (profile goes to data/tod-profile.smoke.json).",
      "default": false
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "Restrict to days on or after this ET date."
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Restrict to days on or before this ET date."
    }
  },
  "additionalProperties": false,
  "required": [
    "split"
  ]
}

research_gappers_status

What the gapper study holds per split (universe days, candidates, gappers per tier, controls, minute-bar coverage, snapshots, labels), the data tiers' row counts, and the holdout lock state.

Research rows only, on the research database (the connection string must name a database containing 'Research'); read-only market data; no orders.

CLI equivalent: idiotproof research gappers status Examples: idiotproof research gappers status

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "What the gapper study holds per split (universe days, candidates, gappers per tier, controls, minute-bar coverage, snapshots, labels), the data tiers\u0027 row counts, and the holdout lock state.",
  "properties": {},
  "additionalProperties": false
}

research_index_events

S&P 500 / S&P 100 additions and removals: announced and effective dates, pending or done.

CLI equivalent: idiotproof research index-events [--since ] [--ticker ] [--pending] Examples: idiotproof research index-events idiotproof research index-events --pending idiotproof research index-events --ticker DDOG --since 2026-01-01

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "S\u0026P 500 / S\u0026P 100 additions and removals: announced and effective dates, pending or done.",
  "properties": {
    "since": {
      "type": "string",
      "format": "date",
      "description": "First announcement date, yyyy-MM-dd (default: 180 days ago)."
    },
    "ticker": {
      "type": "string",
      "description": "Only this symbol."
    },
    "pending": {
      "type": "boolean",
      "description": "Only events whose effective date has not passed yet.",
      "default": false
    }
  },
  "additionalProperties": false
}

research_insiders

Form 4 insider transactions for a ticker: filer, role, buy/sell, shares, price, value.

CLI equivalent: idiotproof research insiders [--days ] [--code <string[]>] [--limit ] Examples: idiotproof research insiders NVDA idiotproof research insiders TSLA --code P,S --days 365

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Form 4 insider transactions for a ticker: filer, role, buy/sell, shares, price, value.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker symbol, e.g. NVDA.",
      "default": ""
    },
    "days": {
      "type": "integer",
      "description": "Transactions dated within this many days, 1-3650 (default 180).",
      "default": 180
    },
    "code": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "SEC transaction codes, comma-separated: P purchase, S sale, A award, M exercise, F tax, G gift (default: all)."
    },
    "limit": {
      "type": "integer",
      "description": "Most lines to show, 1-1000 (default 100).",
      "default": 100
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

research_macro

Macro and regulatory claims (rule changes, listing standards) with the tickers each affects.

CLI equivalent: idiotproof research macro [--since ] [--affects ] [--limit ] Examples: idiotproof research macro idiotproof research macro --since 2026-09-01 --affects SOUN

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Macro and regulatory claims (rule changes, listing standards) with the tickers each affects.",
  "properties": {
    "since": {
      "type": "string",
      "format": "date",
      "description": "First ET date a claim was found, yyyy-MM-dd (default: 30 days ago)."
    },
    "affects": {
      "type": "string",
      "description": "Only claims whose affected-ticker list names this symbol."
    },
    "limit": {
      "type": "integer",
      "description": "Most claims to show, 1-500 (default 50).",
      "default": 50
    }
  },
  "additionalProperties": false
}

research_scan

Run one research scan pass now in the Hub (news, SEC filings, regulatory, index events, backfill, scoring).

Targeted with --tickers; otherwise watchlist + the next rotating batch of the ticker universe. Writes claims and a ScanRun row; the Monitor's trading loop is untouched.

CLI equivalent: idiotproof research scan [--tickers <string[]>] [--batch ] [--days-back ] Examples: idiotproof research scan --tickers NVDA,AMD idiotproof research scan --batch 50 --days-back 3

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Run one research scan pass now in the Hub (news, SEC filings, regulatory, index events, backfill, scoring).",
  "properties": {
    "tickers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Scan just these symbols, comma-separated (default: every watchlist symbol plus the next rotating batch of the universe)."
    },
    "batch": {
      "type": "integer",
      "description": "Rotating-batch size beyond the watchlist, 1-5000 (default 300, or IDIOTPROOF_RESEARCHSCAN_BATCHSIZE)."
    },
    "days_back": {
      "type": "integer",
      "description": "Lookback per source in days, 1-30 (default 2, or IDIOTPROOF_RESEARCHSCAN_DAYSBACK)."
    }
  },
  "additionalProperties": false
}

research_score

Explain a claim's 0-100 significance score term by term (magnitude, confidence, history, source, watchlist, recency).

CLI equivalent: idiotproof research score Examples: idiotproof research score 3f2a91c0

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Explain a claim\u0027s 0-100 significance score term by term (magnitude, confidence, history, source, watchlist, recency).",
  "properties": {
    "claim": {
      "type": "string",
      "description": "Claim id, or the 8-character prefix \u0060research claims\u0060 shows.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "claim"
  ]
}

research_similar

Look-alike past claims (LSH neighbours) and what their stocks did afterwards.

CLI equivalent: idiotproof research similar [--max-distance ] [--limit ] Examples: idiotproof research similar 3f2a91c0 idiotproof research similar 3f2a91c0 --max-distance 12 --limit 10

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Look-alike past claims (LSH neighbours) and what their stocks did afterwards.",
  "properties": {
    "claim": {
      "type": "string",
      "description": "Claim id, or the 8-character prefix \u0060research claims\u0060 shows.",
      "default": ""
    },
    "max_distance": {
      "type": "integer",
      "description": "Largest Hamming distance (of 64 signature bits) that counts as similar, 0-64 (default 20).",
      "default": 20
    },
    "limit": {
      "type": "integer",
      "description": "Most neighbours to list, 1-100 (default 20).",
      "default": 20
    }
  },
  "additionalProperties": false,
  "required": [
    "claim"
  ]
}

research_ticker

Everything research knows about one ticker: claims, portents, macro and index events, insiders, outcomes.

CLI equivalent: idiotproof research ticker [--days ] [--limit ] Examples: idiotproof research ticker NVDA idiotproof research ticker SMCI --days 365 --limit 30

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Everything research knows about one ticker: claims, portents, macro and index events, insiders, outcomes.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker symbol, e.g. NVDA.",
      "default": ""
    },
    "days": {
      "type": "integer",
      "description": "Look back this many days, 1-3650 (default 90).",
      "default": 90
    },
    "limit": {
      "type": "integer",
      "description": "Most claims to list, 1-200 (default 15).",
      "default": 15
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol"
  ]
}

research_universe_list

The tracked ticker universe the research scan sweeps: symbol, exchange, last price, freshness.

CLI equivalent: idiotproof research universe list [--exchange ] [--prefix ] [--min-price ] [--max-price ] [--limit ] Examples: idiotproof research universe list idiotproof research universe list --exchange NASDAQ --max-price 5 --limit 50 idiotproof research universe list --prefix NV

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "The tracked ticker universe the research scan sweeps: symbol, exchange, last price, freshness.",
  "properties": {
    "exchange": {
      "type": "string",
      "description": "Only NASDAQ or NYSE."
    },
    "prefix": {
      "type": "string",
      "description": "Only symbols starting with this text."
    },
    "min_price": {
      "type": "number",
      "description": "Only tickers whose last price is at least this."
    },
    "max_price": {
      "type": "number",
      "description": "Only tickers whose last price is at most this."
    },
    "limit": {
      "type": "integer",
      "description": "Most rows to show, 1-10000 (default 100).",
      "default": 100
    }
  },
  "additionalProperties": false
}

research_universe_refresh

Reload the tracked ticker universe (asset list and last prices) from Alpaca when stale, or --force.

CLI equivalent: idiotproof research universe refresh [--force] [--max-age-hours ] Examples: idiotproof research universe refresh idiotproof research universe refresh --force

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Reload the tracked ticker universe (asset list and last prices) from Alpaca when stale, or --force.",
  "properties": {
    "force": {
      "type": "boolean",
      "description": "Reload even when the cache is fresher than --max-age-hours.",
      "default": false
    },
    "max_age_hours": {
      "type": "integer",
      "description": "Only reload when the newest row is older than this, 1-720 (default 24).",
      "default": 24
    }
  },
  "additionalProperties": false
}

risk_check

Dry-run a setup through your Risk Guardian: approved or why not, worst case, and the largest size allowed. Places nothing.

CLI equivalent: idiotproof risk check --entry --stop --qty [--target ] [--short] Examples: idiotproof risk check NVDA --entry 100 --stop 98 --qty 20 idiotproof risk check TSLA --entry 250 --stop 255 --qty 5 --target 240 --short

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Dry-run a setup through your Risk Guardian: approved or why not, worst case, and the largest size allowed. Places nothing.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Ticker, e.g. NVDA.",
      "default": ""
    },
    "entry": {
      "type": "number",
      "description": "Planned entry price.",
      "default": 0
    },
    "stop": {
      "type": "number",
      "description": "Planned protective stop price.",
      "default": 0
    },
    "qty": {
      "type": "integer",
      "description": "Planned share count.",
      "default": 0
    },
    "target": {
      "type": "number",
      "description": "Planned take-profit price, for the reward:risk warning."
    },
    "short": {
      "type": "boolean",
      "description": "A short entry (stop above entry) instead of a long.",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "symbol",
    "entry",
    "stop",
    "qty"
  ]
}

risk_kill_switch

Halt every new entry now (on), or resume (off, which needs a confirmation code); exits always go through.

CLI equivalent: idiotproof risk kill-switch Examples: idiotproof risk kill-switch on idiotproof risk kill-switch off

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Halt every new entry now (on), or resume (off, which needs a confirmation code); exits always go through.",
  "properties": {
    "state": {
      "type": "string",
      "description": "on (halt every new entry now) or off (resume; needs a confirmation code).",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "state"
  ]
}

risk_set

Change Risk Guardian limits; unnamed ones keep their value and today's loss counter is preserved.

CLI equivalent: idiotproof risk set [--max-loss-per-trade ] [--max-loss-per-day ] [--min-stop-percent ] [--max-stop-percent ] [--account-balance ] [--max-account-risk-percent ] Examples: idiotproof risk set --max-loss-per-trade 50 --max-loss-per-day 200 idiotproof risk set --max-stop-percent 8 --account-balance 25000

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Change Risk Guardian limits; unnamed ones keep their value and today\u0027s loss counter is preserved.",
  "properties": {
    "max_loss_per_trade": {
      "type": "number",
      "description": "Most a single trade may lose in the worst case, in dollars."
    },
    "max_loss_per_day": {
      "type": "number",
      "description": "Daily loss that trips the circuit breaker, in dollars (at least the per-trade limit)."
    },
    "min_stop_percent": {
      "type": "number",
      "description": "Tightest allowed stop, percent of entry (0.01-50)."
    },
    "max_stop_percent": {
      "type": "number",
      "description": "Widest allowed stop, percent of entry (at least the minimum)."
    },
    "account_balance": {
      "type": "number",
      "description": "Balance the position size is measured against, in dollars."
    },
    "max_account_risk_percent": {
      "type": "number",
      "description": "Most of the balance one trade may risk, percent (0-100)."
    }
  },
  "additionalProperties": false
}

risk_show

Your six Risk Guardian limits (per-trade and daily loss, stop range, balance, account risk %) and the kill switch.

CLI equivalent: idiotproof risk show Examples: idiotproof risk show

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Your six Risk Guardian limits (per-trade and daily loss, stop range, balance, account risk %) and the kill switch.",
  "properties": {},
  "additionalProperties": false
}

risk_status

Today's realized P&L, losses counted against the daily breaker, remaining room, breaker and kill-switch state.

CLI equivalent: idiotproof risk status Examples: idiotproof risk status

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Today\u0027s realized P\u0026L, losses counted against the daily breaker, remaining room, breaker and kill-switch state.",
  "properties": {},
  "additionalProperties": false
}

scan_movers

Screen today's top gainers to the gapper band; --replay replays each survivor with a gapper profile and saves the runs.

CLI equivalent: idiotproof scan movers [--date ] [--replay] [--top ] [--min-gap ] [--min-price ] [--max-price ] [--profile ] [--pages] [--out ] Examples: idiotproof scan movers idiotproof scan movers --min-gap 10 --max-price 20 --replay

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Screen today\u0027s top gainers to the gapper band; --replay replays each survivor with a gapper profile and saves the runs.",
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "ET day to replay the survivors on (default today ET \u2014 movers are live)."
    },
    "replay": {
      "type": "boolean",
      "description": "Replay each survivor with the gapper profile and save the runs (and pages).",
      "default": false
    },
    "top": {
      "type": "integer",
      "description": "Keep at most this many gappers (default 10, max 25).",
      "default": 10
    },
    "min_gap": {
      "type": "number",
      "description": "Minimum percent change (default 5).",
      "default": 5
    },
    "min_price": {
      "type": "number",
      "description": "Lowest price (default 1).",
      "default": 1
    },
    "max_price": {
      "type": "number",
      "description": "Highest price (default 50).",
      "default": 50
    },
    "profile": {
      "type": "string",
      "description": "Gapper profile or family to replay with (default classic-gapper).",
      "default": "classic-gapper"
    },
    "pages": {
      "type": "boolean",
      "description": "With --replay: render run pages and archive indexes (HTML only).",
      "default": true
    },
    "out": {
      "type": "string",
      "description": "Archive folder for the pages (default the mindattic.com replays folder)."
    }
  },
  "additionalProperties": false
}

settings_get

Show one runtime setting: value, default, range and meaning.

CLI equivalent: idiotproof settings get Examples: idiotproof settings get Options.RiskFreeRate

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Show one runtime setting: value, default, range and meaning.",
  "properties": {
    "key": {
      "type": "string",
      "description": "The setting key, e.g. Options.RiskFreeRate.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "key"
  ]
}

settings_list

List the app's runtime settings with current value, default, range and meaning.

CLI equivalent: idiotproof settings list [--all] Examples: idiotproof settings list idiotproof settings list --all

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "List the app\u0027s runtime settings with current value, default, range and meaning.",
  "properties": {
    "all": {
      "type": "boolean",
      "description": "Also show internal bookkeeping keys the app writes for itself.",
      "default": false
    }
  },
  "additionalProperties": false
}

settings_set

Change one runtime setting (type- and range-checked; unknown and internal keys refused).

CLI equivalent: idiotproof settings set Examples: idiotproof settings set Options.RiskFreeRate 0.045 idiotproof settings set decay.be-bex.threshold 10

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Change one runtime setting (type- and range-checked; unknown and internal keys refused).",
  "properties": {
    "key": {
      "type": "string",
      "description": "The setting key (see \u0060settings list\u0060).",
      "default": ""
    },
    "value": {
      "type": "string",
      "description": "The new value; checked against the key\u0027s type and range.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "key",
    "value"
  ]
}

strategy_activate

Hand a strategy to the Monitor. A Live strategy needs a confirmation code.

CLI equivalent: idiotproof strategy activate Examples: idiotproof strategy activate NVDA

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Hand a strategy to the Monitor. A Live strategy needs a confirmation code.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id (IP-XXXX-XXXX) or symbol.",
      "default": ""
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

strategy_bulk

Activate or deactivate many strategies at once (--all, --symbol, --mode). Live activations need one confirmation code for the batch.

Deactivation skips strategies holding a position (that would orphan the exit). Activation skips quarantined and soft-deleted strategies; when the batch would turn on any Live strategy, nothing happens until you re-run with the confirmation code, which is bound to exactly that batch.

CLI equivalent: idiotproof strategy bulk [--all] [--symbol ] [--mode <sandbox|paper|live>] Examples: idiotproof strategy bulk deactivate --all idiotproof strategy bulk activate --symbol NVDA --mode paper

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Activate or deactivate many strategies at once (--all, --symbol, --mode). Live activations need one confirmation code for the batch.",
  "properties": {
    "action": {
      "type": "string",
      "enum": [
        "activate",
        "deactivate"
      ],
      "description": "activate or deactivate.",
      "default": "activate"
    },
    "all": {
      "type": "boolean",
      "description": "Every strategy you own (soft-deleted ones excluded).",
      "default": false
    },
    "symbol": {
      "type": "string",
      "description": "Only strategies on this symbol."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Only strategies in this broker mode (sandbox, paper, live)."
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "action"
  ]
}

strategy_clone

Copy a strategy (optionally onto another symbol) as a new, inactive Sandbox strategy.

The copy gets the same canon (re-validated), never the original's position, history or Live routing. Cloning onto another symbol warns about fixed prices that belonged to the original's chart.

CLI equivalent: idiotproof strategy clone [--symbol ] [--title ] [--mode <sandbox|paper|live>] Examples: idiotproof strategy clone NVDA idiotproof strategy clone NVDA --symbol AMD --title "AMD VWAP reclaim"

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Copy a strategy (optionally onto another symbol) as a new, inactive Sandbox strategy.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id or symbol of the strategy to copy.",
      "default": ""
    },
    "symbol": {
      "type": "string",
      "description": "Trade a different symbol with the same rules."
    },
    "title": {
      "type": "string",
      "description": "Title for the copy (default: \u0022\u003Ctitle\u003E (copy)\u0022)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Broker mode for the copy: sandbox (default) or paper.",
      "default": "sandbox"
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

strategy_create

Create a strategy from IdiotScript or canonical JSON after validating it. It starts inactive in Sandbox.

Exactly one of --script or --canon. A strategy with no size buys 1 share. Errors (no stop, stop on the wrong side of the target, a broken canon) stop the save; warnings are shown.

CLI equivalent: idiotproof strategy create [--script ] [--canon ] [--title ] [--ticker ] [--description ] [--mode <sandbox|paper|live>] [--dry-run] Examples: idiotproof strategy create --script "Stock.Ticker("NVDA").IsAboveVwap().Long().StopLoss(170).TakeProfit(190).Build()" idiotproof strategy create --canon - --mode paper

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Create a strategy from IdiotScript or canonical JSON after validating it. It starts inactive in Sandbox.",
  "properties": {
    "script": {
      "type": "string",
      "description": "The strategy as IdiotScript text (\u0060-\u0060 reads stdin)."
    },
    "canon": {
      "type": "string",
      "description": "The strategy as canonical JSON (what \u0060strategy export --format json\u0060 prints) (\u0060-\u0060 reads stdin)."
    },
    "title": {
      "type": "string",
      "description": "Title (default: the strategy\u0027s own name, else \u0022SYM strategy\u0022)."
    },
    "ticker": {
      "type": "string",
      "description": "Symbol to use when the script doesn\u0027t name one."
    },
    "description": {
      "type": "string",
      "description": "Free-form description stored with the strategy."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Broker mode: sandbox (default) or paper. Live is a separate, confirmed step.",
      "default": "sandbox"
    },
    "dry_run": {
      "type": "boolean",
      "description": "Validate and show the stamp without saving anything.",
      "default": false
    }
  },
  "additionalProperties": false
}

strategy_deactivate

Stop the Monitor evaluating a strategy (refused while it holds a position).

CLI equivalent: idiotproof strategy deactivate Examples: idiotproof strategy deactivate NVDA

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Stop the Monitor evaluating a strategy (refused while it holds a position).",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id (IP-XXXX-XXXX) or symbol.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

strategy_delete

Soft-delete a strategy: deactivate it and mark it [deleted] (reversible with --restore). Refused while it holds a position.

Deleting is a reversible disable (HOUSE-LAW-2): the row, canon and history stay, and strategy list hides it unless --deleted. --hard permanently removes a strategy that is already deleted — a separate, explicit second step.

CLI equivalent: idiotproof strategy delete [--restore] [--hard] Examples: idiotproof strategy delete NVDA idiotproof strategy delete 0193ab12 --restore idiotproof strategy delete 0193ab12 --hard

DESTRUCTIVE. If it returns confirmation-required, show the preview and call again with confirmation_code only after the user agrees. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Soft-delete a strategy: deactivate it and mark it [deleted] (reversible with --restore). Refused while it holds a position.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id or symbol.",
      "default": ""
    },
    "restore": {
      "type": "boolean",
      "description": "Undo a delete: take the [deleted] marker off (it stays inactive).",
      "default": false
    },
    "hard": {
      "type": "boolean",
      "description": "Permanently remove an ALREADY deleted strategy and its progress row. Cannot be undone.",
      "default": false
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

strategy_diff

Compare two strategies field by field at the canon level (what the Monitor actually runs), plus title, mode and state.

CLI equivalent: idiotproof strategy diff Examples: idiotproof strategy diff NVDA AMD idiotproof strategy diff IP-P4AY-UXZU IP-Q7RB-K2MD

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Compare two strategies field by field at the canon level (what the Monitor actually runs), plus title, mode and state.",
  "properties": {
    "a": {
      "type": "string",
      "description": "First strategy: id, id prefix, stamp id or symbol.",
      "default": ""
    },
    "b": {
      "type": "string",
      "description": "Second strategy: id, id prefix, stamp id or symbol.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "a",
    "b"
  ]
}

strategy_explain

Explain a strategy in plain English, phase by phase — generated from its canon, no LLM, the same words every time.

CLI equivalent: idiotproof strategy explain Examples: idiotproof strategy explain NVDA

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Explain a strategy in plain English, phase by phase \u2014 generated from its canon, no LLM, the same words every time.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id (IP-XXXX-XXXX) or symbol.",
      "default": ""
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

strategy_export

Export a strategy as a stamp, armored payload, canonical JSON or IdiotScript.

CLI equivalent: idiotproof strategy export [--format <stamp|armor|json|script>] Examples: idiotproof strategy export NVDA --format json

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Export a strategy as a stamp, armored payload, canonical JSON or IdiotScript.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id or symbol.",
      "default": ""
    },
    "format": {
      "type": "string",
      "enum": [
        "stamp",
        "armor",
        "json",
        "script"
      ],
      "description": "stamp (default), armor (payload only), json (canonical) or script (IdiotScript).",
      "default": "stamp"
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

strategy_fires

Why a strategy did or didn't fire: its recent gate verdicts (conditions met, LLM veto, Risk Guardian block, order placed or rejected) and where it stands now.

CLI equivalent: idiotproof strategy fires [--limit ] Examples: idiotproof strategy fires NVDA idiotproof strategy fires NVDA --limit 50

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Why a strategy did or didn\u0027t fire: its recent gate verdicts (conditions met, LLM veto, Risk Guardian block, order placed or rejected) and where it stands now.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id or symbol.",
      "default": ""
    },
    "limit": {
      "type": "integer",
      "description": "How many verdicts to show (default 20, max 200).",
      "default": 20
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

strategy_from_text

Turn a plain-English description into a strategy (via the LLM), show its stamp, and save it only when you confirm.

The first call writes the IdiotScript, validates it and shows the stamp with a confirmation code; nothing is saved. Re-run with --confirm to save exactly what was shown (the LLM is not called again). It saves inactive, in Sandbox by default, 1 share when unsized.

CLI equivalent: idiotproof strategy from-text [--ticker ] [--mode <sandbox|paper|live>] [--title ] Examples: idiotproof strategy from-text "Buy NVDA when it reclaims VWAP with volume, stop 2% under, take profit at 190" idiotproof strategy from-text "long on a 9 EMA reclaim above VWAP, 3% stop" --ticker AMD --mode paper

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Turn a plain-English description into a strategy (via the LLM), show its stamp, and save it only when you confirm.",
  "properties": {
    "description": {
      "type": "string",
      "description": "The strategy in plain English (\u0060-\u0060 reads stdin).",
      "default": ""
    },
    "ticker": {
      "type": "string",
      "description": "The symbol to trade (default: the first ticker-looking word, e.g. $NVDA or NVDA)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Broker mode for the saved strategy: sandbox (default) or paper.",
      "default": "sandbox"
    },
    "title": {
      "type": "string",
      "description": "Title for the saved strategy (default: its own name, else \u0022SYM strategy\u0022)."
    }
  },
  "additionalProperties": false,
  "required": [
    "description"
  ]
}

strategy_from_watchlist

Create one strategy per item of a watchlist JSON file (the Monitor's create-strategies, through the CLI).

Each item's script is validated like strategy create; an item that fails is reported and skipped. Items already present (same symbol and title) or repeated in the file are skipped, so re-running is safe. New strategies start inactive in Sandbox with 1 share when unsized; --activate turns on the items marked active.

CLI equivalent: idiotproof strategy from-watchlist [--mode <sandbox|paper|live>] [--activate] [--dry-run] Examples: idiotproof strategy from-watchlist D:/watchlists/2026-10-30.json idiotproof strategy from-watchlist - idiotproof strategy from-watchlist - --mode paper --activate --dry-run

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Create one strategy per item of a watchlist JSON file (the Monitor\u0027s create-strategies, through the CLI).",
  "properties": {
    "file": {
      "type": "string",
      "description": "A watchlist JSON file (absolute path: the Hub reads it), the JSON itself, or \u0060-\u0060 for stdin: [{\u0022title\u0022,\u0022symbol\u0022,\u0022script\u0022,\u0022description\u0022,\u0022author\u0022,\u0022originTranscript\u0022,\u0022active\u0022}].",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Broker mode for every new strategy: sandbox (default) or paper.",
      "default": "sandbox"
    },
    "activate": {
      "type": "boolean",
      "description": "Activate items marked \u0022active\u0022: true (default: everything starts inactive).",
      "default": false
    },
    "dry_run": {
      "type": "boolean",
      "description": "Validate every item and report what would happen without saving.",
      "default": false
    }
  },
  "additionalProperties": false,
  "required": [
    "file"
  ]
}

strategy_history

A strategy's trail, newest first: Monitor verdicts and fills, diary trades, and the CLI/MCP commands that touched it.

CLI equivalent: idiotproof strategy history [--limit ] Examples: idiotproof strategy history NVDA idiotproof strategy history NVDA --limit 100

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "A strategy\u0027s trail, newest first: Monitor verdicts and fills, diary trades, and the CLI/MCP commands that touched it.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id or symbol.",
      "default": ""
    },
    "limit": {
      "type": "integer",
      "description": "How many events to show (default 40, max 500).",
      "default": 40
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

strategy_import

Create a strategy from a stamp, canonical JSON or IdiotScript. It starts inactive in Sandbox.

CLI equivalent: idiotproof strategy import [--title ] [--mode <sandbox|paper|live>] Examples: idiotproof strategy import - idiotproof strategy import "Ticker("NVDA").IsAboveVwap().StopLoss(2)" --mode paper

Changes saved state. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Create a strategy from a stamp, canonical JSON or IdiotScript. It starts inactive in Sandbox.",
  "properties": {
    "source": {
      "type": "string",
      "description": "A pasted stamp/armor/IPS1 payload, canonical JSON, or IdiotScript text (\u0060-\u0060 reads stdin).",
      "default": ""
    },
    "title": {
      "type": "string",
      "description": "Title for the new strategy (default: the strategy\u0027s own name or symbol)."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Broker mode for the new strategy: sandbox (default) or paper. Live is a separate, confirmed step.",
      "default": "sandbox"
    }
  },
  "additionalProperties": false,
  "required": [
    "source"
  ]
}

strategy_list

List your strategies with mode, position and live condition progress.

CLI equivalent: idiotproof strategy list [--active] [--symbol ] [--mode <sandbox|paper|live>] [--deleted] Examples: idiotproof strategy list idiotproof strategy list --active --mode live

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "List your strategies with mode, position and live condition progress.",
  "properties": {
    "active": {
      "type": "boolean",
      "description": "Only strategies the Monitor is evaluating.",
      "default": false
    },
    "symbol": {
      "type": "string",
      "description": "Only this symbol."
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "Only this broker mode (sandbox, paper, live)."
    },
    "deleted": {
      "type": "boolean",
      "description": "Include soft-deleted strategies (hidden by default).",
      "default": false
    }
  },
  "additionalProperties": false
}

strategy_mode

Route a strategy to sandbox, paper or live. Switching to live needs a confirmation code.

CLI equivalent: idiotproof strategy mode Examples: idiotproof strategy mode NVDA paper idiotproof strategy mode NVDA live

MOVES MONEY. Sandbox and Paper run immediately. A Live action returns status confirmation-required with a preview and a code instead of executing: show the user the preview verbatim, ask them, and only if they say yes call this tool again with the identical arguments plus confirmation_code. Never invent or reuse a code. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "Route a strategy to sandbox, paper or live. Switching to live needs a confirmation code.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id or symbol.",
      "default": ""
    },
    "mode": {
      "type": "string",
      "enum": [
        "sandbox",
        "paper",
        "live"
      ],
      "description": "sandbox, paper or live (live needs a confirmation code).",
      "default": "sandbox"
    },
    "confirmation_code": {
      "type": "string",
      "description": "Only after the user explicitly approves the preview: the code a previous call of this tool returned."
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy",
    "mode"
  ]
}

strategy_progress

How close a strategy is to firing: conditions passing N/M, the first failing verb and the last price, optionally watched.

Reads the row the Monitor writes every tick. --watch samples it every --every seconds and reports each change, stopping when every condition passes: in a terminal each change streams live until Ctrl+C; for MCP and --json it takes --samples samples (at most two minutes in all).

CLI equivalent: idiotproof strategy progress [--watch] [--every ] [--samples ] Examples: idiotproof strategy progress NVDA idiotproof strategy progress NVDA --watch --every 10 --samples 6

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "How close a strategy is to firing: conditions passing N/M, the first failing verb and the last price, optionally watched.",
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Id, id prefix, stamp id or symbol.",
      "default": ""
    },
    "watch": {
      "type": "boolean",
      "description": "Keep sampling the Monitor\u0027s progress row and report each change: a terminal streams until Ctrl\u002BC or all conditions pass; MCP/--json are bounded by --samples.",
      "default": false
    },
    "every": {
      "type": "integer",
      "description": "Seconds between samples while watching (0-60, default 5).",
      "default": 5
    },
    "samples": {
      "type": "integer",
      "description": "How many samples to take while watching (1-120; default 12 for MCP/--json, unlimited in a terminal)."
    }
  },
  "additionalProperties": false,
  "required": [
    "strategy"
  ]
}

strategy_quarantine

List strategies the Monitor refuses to evaluate (canon unreadable, or no canon and a script that doesn't parse), with the reason.

A quarantined strategy never fires; one that is quarantined while holding a position has NO managed exit and is listed first.

CLI equivalent: idiotproof strategy quarantine [--symbol ] Examples: idiotproof strategy quarantine

Read-only. Times are US Eastern.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "description": "List strategies the Monitor refuses to evaluate (canon unreadable, or no canon and a script that doesn\u0027t parse), with the reason.",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Only this symbol."
    }
  },
  "additionalProperties": false
}

strategy_rename

Give a strategy a new title. Its canon, stamp id and state are untouched.

Only the title changes, so the stamp id stays the same. The Monitor's audit lines carry the title at the time, so strategy history matches the new title from now on.

CLI equivalent: idiotproof strategy rename