Bullpen CLI Skill¶
This is a live example of the AI agent skill format. For the full format specification, see AI Agent Skill Format Specification.
Wallet model¶
Each Polymarket user has two layers of wallet selection:
-
Bullpen-managed 0x wallet — set via
bullpen wallet select. This is a Bullpen-managed wallet address on the user's account. A user may have multiple Bullpen wallets in one account. -
Polymarket wallet kind (Deposit Wallet vs Safe vs Proxy) — determined automatically by Bullpen for each Bullpen-managed 0x wallet. Users typically do NOT pick this manually; Bullpen's selection is authoritative. In healthy state, one Polymarket wallet kind is active for a given Bullpen-managed 0x wallet. Money-moving commands route through the consistent selected kind; diagnostics may inspect all wallet kinds, and inconsistent evidence fails closed. When the user has assets on another owned wallet, the guided
recover fundsdry-run reports root statusready,no_op,backend_only, orblocked; executable legs requireoutcome: "supported"andsubmit_authorized: true.
The server-selected wallet is what trading commands route through by default when server state is consistent. Recovery never changes that selection. The --wallet-kind safe|dw override is available only for expert asset-moving commands (consolidate, sweep-stranded) and is not a trading-wallet switch. Trading commands always follow the server selection or fail closed when server evidence is inconsistent.
--wallet <BULLPEN_0X_WALLET> pins the command to a Bullpen-managed wallet for automation. It does not override Safe/Proxy vs Deposit Wallet selection and does not bypass 1151 / L2_WALLET_DISAGREEMENT wallet-routing guards.
Common user scenarios¶
"My trade was rejected with 'maker address not allowed'" — Run bullpen fix --refresh. Follow its one next command. If it directs you to support, create a passive redacted bundle with bullpen support bundle --output json and stop retrying the trade; changing wallets or redeploying a wallet is not a safe bypass.
"Polymarket says wallet registry validation failed / wallet is not registered" — Run bullpen recover polymarket --refresh --output json and follow its next_command. If the plan says support is required, create a passive redacted bundle with bullpen support bundle --output json; repeated approval, activation, login, or wallet switching cannot repair an account-side registration record.
"I have funds on my Safe AND my Deposit Wallet" — Preview bullpen recover funds --dry-run --output json. Execute bullpen recover funds --yes only after the plan identifies the expected source, destination, and assets.
"My trade failed with 1151 / wallet disagreement" — Run bullpen recover polymarket --refresh --output json. Do not use --wallet or a wallet-kind command as a bypass. Follow the returned next command, or create a passive redacted bundle with bullpen support bundle --output json when the plan says account repair is required.
"My Deposit Wallet has funds or redeemables but the CLI still says another wallet is active" — For redeemable positions, start with bullpen polymarket redeem --dry-run --output json; normal redeem discovery probes every proven owner and its Safe and Deposit Wallet candidates. For fungible stranded funds, start with bullpen recover funds --dry-run --output json. Use bullpen recover polymarket --refresh --output json only if the issue is wallet-kind, stale route, account readiness, or auth repair rather than asset movement. Create a passive redacted bundle with bullpen support bundle --output json if the selected wallet and on-chain evidence disagree.
"I want to recover funds from an older wallet" — Use bullpen recover funds --dry-run --output json. Do not add expert wallet overrides unless the recovery plan or Bullpen support identifies the exact owned destination.
Funds recovery can recover eligible assets from selected or non-selected owned Safe, Proxy, current Deposit Wallet, deployed legacy Deposit Wallet, and locally signable owned EOA sources proven by the CLI. Self-service direct-address submit requires CLI-proven local signing authority and enough native gas. Imported, external, and routing-only addresses are not eligible for self-service direct-address recovery unless the CLI proves the source is a locally signable owned EOA. Other address-source routing requires Bullpen support. Live submit rechecks source identity, destination identity, and exact transfer details, then validates the full plan before the first transfer.
"My first trade fails with credential errors" — Run bullpen fix --refresh. Run bullpen polymarket activate only when the fix output identifies first-trade activation as the next action.
Copy-trade lifecycle¶
Copy trading depends on Bullpen service-side subscription, budget, and executor state. Before telling a user that a copy-trading incident is fixed, verify the current CLI can list the subscription and executions, and that the service returns typed support-safe errors instead of low-level transport failures.
Prefer pause over delete. Deleting a subscription is destructive in one specific way that affects open positions.
- Delete affects the subscription record only. It does NOT touch open Polymarket positions — those live on the user's Polymarket wallet, not the subscription. Open positions remain after delete.
- Delete DOES stop mirror-sells. If the subscription has
exit_behavior = mirror_sells, future mirror-sell events from the followed trader stop firing once the subscription is deleted. Open positions become manual-exit-only. Warn users about this before deleting. pauseis the non-destructive alternative.bullpen tracker copy pause <ADDRESS>moves the subscription toPaused.resumerestores it toActive. Subscription config (includingexit_behavior) is preserved.- Execution history retention on delete is server-side. The CLI cannot guarantee history rows persist after delete; do not promise retention unless Bullpen support confirms it for the account.
Fixture-gated local snapshot recipe. Before any destructive action on a copy-trade subscription, capture state so the user can rebuild if needed. This writes JSON files in the current directory; run it only when collecting support or recovery evidence for that account:
bullpen tracker copy list --output json > copy-list-snapshot.json
bullpen tracker copy executions --output json > copy-executions-snapshot.json
bullpen polymarket positions --output json > positions-snapshot.json
Decision tree:
- Want to stop copying temporarily? → pause (reversible)
- Subscription is misconfigured and you want a clean restart? → pause first, then either update or delete-and-recreate
- Open positions need to exit on the followed trader's signals? → DO NOT delete; pause only
Instructions¶
Quick Start (if user is new)¶
If the user hasn't set up Bullpen yet, guide them through this canonical order:
- Install CLI:
curl -fsSL https://cli.bullpen.fi/install.sh | bash - Inspect local session state:
bullpen status(local-only; usebullpen fix --refreshfor active account and readiness checks) - Run auth diagnostics:
bullpen doctor auth --output json - Log in only if diagnostics require it:
bullpen login - Install AI skills and restart Claude/Codex:
bullpen skill install, then restart so it picks up the new skills
To update an existing install: bullpen upgrade (updates the binary and skills automatically). Homebrew and npm installs delegate to the package manager before checking GitHub releases. Homebrew recovery: brew update, brew upgrade bullpen, then brew link --overwrite bullpen; if Homebrew refuses the Bullpen tap as untrusted, run brew trust --formula bullpenfi/tap/bullpen and retry. npm recovery: npm install -g @bullpenfi/cli@latest.
Current Wallet-Selection Guidance¶
Bullpen selects the active Polymarket wallet for the account. Ordinary trading commands use that selection automatically and fail closed when the account data is inconsistent. Do not choose a wallet kind manually to make a failed trade go through.
Use this order:
- Run
bullpen statusfor local session state. - Run
bullpen fix --refreshwhen trading or balances look wrong. - Run
bullpen recover polymarket --refresh --output jsonwhen the fix output identifies a Prediction account or wallet problem. - Preview
bullpen recover funds --dry-run --output jsonwhen funds or positions may be on any owned Safe, Proxy, current Deposit Wallet, deployed legacy Deposit Wallet, or locally signable owned EOA source proven by the CLI. - Create a passive redacted bundle with
bullpen support bundle --output jsonwhen the plan says account-side repair is required.
Expert commands such as wallet-audit, wallet select --kind,
reregister-deposit-wallet, consolidate, and sweep-stranded remain
available for support-directed recovery. Use them only when the guided output
or Bullpen support names the exact command and target. --wallet selects an
owner for automation; it never overrides the account's selected Polymarket
wallet kind.
For collateral conversion, preview before submitting:
bullpen polymarket wrap <AMOUNT> --preview --output json
bullpen polymarket unwrap <AMOUNT> --preview --output json
Run the corresponding --yes command only after the preview shows the
expected wallet, amount, and destination.
Step 1: Identify What the User Wants to Do¶
Route to the right reference based on the user's intent:
Getting started (install, authenticate, configure, install skills):
- references/getting-started.md
Find and research markets (discover, search, events, prices, tags, series):
- references/discovery-and-research.md
Trade (buy, sell, limit orders, redeem, outcome-token split/merge, collateral):
- references/trading.md
Manage portfolio and orders (positions, open orders, cancel, watchlist, activity):
- references/portfolio-and-orders.md
Social and signals (comments, feeds, alerts, tracker, leaderboard):
- references/social-and-signals.md
Account and platform (auth, config, portfolio balances, points, status):
- references/platform-and-account.md
Wallet management (list wallets, select primary, switch chains):
- references/platform-and-account.md
Step-by-step tutorials (complete workflows with exact commands):
- references/trading-tutorial.md — discover → trade → manage → redeem
- references/copy-trading-tutorial.md — find traders → copy → monitor → manage
- references/tracker-tutorial.md — track wallets → groups → watchlist → alerts
Scripting and automation (JSON output, jq piping, batch workflows):
- references/scripting-and-automation.md
- references/cross-protocol-sizing.md — unit semantics for Polymarket, Hyperliquid, and Solana trade sizing
Hyperliquid / perpetuals (perps trading, positions, funding, balances, orders, live watch, funds movement):
- references/hyperliquid.md
Solana (experimental Solana balance/portfolio, token price/metadata by mint, Jupiter Ultra swaps, activity history, stats/closed-position PnL, withdraw, deposit):
- references/solana.md
Bracket contests (March Madness, tournament picks, fill bracket, leaderboard):
- references/bracket-contest.md
Community and support (Discord, X/Twitter, file a ticket, report a bug):
- references/community.md
Diagnostics and troubleshooting (collect system info, debug errors, file support tickets):
- references/diagnostics.md
Troubleshooting (deposit not showing, wrong asset, account access, CLI errors):
- references/troubleshooting.md
Many tasks span multiple categories. Read all relevant references before acting.
Step 2: Key Rules¶
Before running any command, keep these rules in mind:
- Most data and automation commands support
--output jsonfor machine-readable output. Default istable; raw/script, interactive, and explicitly unsupported streaming commands reject JSON mode. - Trading commands require
--yesto skip interactive confirmation (essential for automation). - Authentication is required for any write operation (trading, orders, alerts, comments).
- Read-only operations (discover, search, price, event, default and server-filtered leaderboards) work without local auth when the server accepts anonymous reads. Filtered social feeds/comments still require login.
- Market slugs remain the primary identifier; copy current slugs from
discover,search, or a Polymarket URL. Read-only market data commands such asmarket,price,orderbook,holders,trades,price-history, andcandlesalso accept numeric Gamma IDs, decimal or 0x CLOB token IDs, and 0x condition IDs. Trading and money-moving commands still use market slugs/outcomes unless their help says otherwise. - Polymarket SDK/protocol compatibility is internal. Treat command JSON as Bullpen's contract. Explain supported Bullpen commands, output fields, and printed next actions instead of service implementation details.
- Outcomes are specified by displayed outcome label copied from market data.
Yes/Noand aliases apply only when those labels exist on that market. - Limit prices must match each market's tick size (representing cents per share / probability).
- Global flags:
--env staging|production,--config <path>work on all commands. If--configis omitted,BULLPEN_CONFIGis used before the default~/.bullpen/config.toml. Explicit--configandBULLPEN_CONFIGpaths fail closed when missing instead of silently loading defaults. Credentials still resolve viaBULLPEN_HOME, so setBULLPEN_HOMEtoo when isolating a session.
Step 3: Execute¶
Run commands via bullpen CLI. If the CLI is not installed, start with references/getting-started.md.
Quick Command Map¶
Use this for simple queries without reading full references:
bullpen prediction ... is a visible alias for bullpen polymarket ...; help output may show the canonical polymarket form.
| Intent | Command |
|---|---|
| Install CLI | curl -fsSL https://cli.bullpen.fi/install.sh | bash |
| Log in | bullpen login |
| Check local auth/session status | bullpen status (local-only; remote and wallet-readiness checks remain not_checked) |
| Show Bullpen account identity | bullpen identity show <USERNAME_OR_USER_ID> [--output table\|json] (read-only exact username/Bullpen user ID lookup; never wallet address) |
| Run active account/readiness checks | bullpen fix --refresh (refreshes evidence, runs the shared recovery planner, and prints the safest next command) |
| Preview a simple prediction trade | bullpen trade buy <SLUG> <OUTCOME> <USD_AMOUNT> --max-price <PRICE> --preview --output json |
| Live: place a simple prediction trade | bullpen trade buy <SLUG> <OUTCOME> <USD_AMOUNT> --max-price <PRICE> --yes |
| Preview funds recovery | bullpen recover funds --dry-run --output json |
| Diagnose Polymarket account readiness | bullpen recover polymarket --refresh --output json |
| Preview redeem | bullpen recover redeem --dry-run --output json |
| Create support bundle | bullpen support bundle --output json (passive redacted handoff; does not refresh auth, probe signing, or probe order credit; this file is on this machine and has not been uploaded, so attach the JSON file to support) |
| Check Polymarket platform status | bullpen polymarket status (public read-only status page with per-component health) |
| Discover markets | bullpen polymarket discover (default hides untradeable markets; use --include-untradeable to include them, prefixed with [NOT TRADEABLE]) |
| Discover sports markets | bullpen polymarket discover sports (Sports markets have a 1-second matching delay by design. If a sports order doesn't fill immediately, the CLI prints a hint to retry with a more aggressive price.) |
| Discover crypto markets | bullpen polymarket discover crypto |
| Search markets | bullpen polymarket search "bitcoin" |
| Get event details | bullpen polymarket event <SLUG> |
| Check price | bullpen polymarket price <MARKET> |
| Check price history | bullpen polymarket price-history --outcome <OUTCOME> <MARKET> |
| View market details | bullpen polymarket market <MARKET> |
| List markets with filters | bullpen polymarket markets --active --sort volume |
| Browse tags | bullpen polymarket tags |
| Browse series | bullpen polymarket series |
| Buy shares | bullpen polymarket buy <SLUG> <OUTCOME> <USD_AMOUNT> [--max-price <PRICE>] |
| Sell shares | bullpen polymarket sell <SLUG> <OUTCOME> <SHARES> [--min-price <PRICE>] or --max |
| Limit buy | bullpen polymarket limit-buy --price 0.45 --shares 100 <SLUG> <OUTCOME> |
| Limit sell | bullpen polymarket limit-sell --price 0.65 --shares 50 <SLUG> <OUTCOME> |
| View positions | bullpen polymarket positions |
| View open orders | bullpen polymarket orders |
| Non-runnable: cancel an order | bullpen polymarket orders --cancel <ORDER_ID> only after open-order output proves the target ID |
| Non-runnable: cancel all orders | bullpen polymarket orders --cancel-all --yes only when clearing every open order is intentional |
| Redeem resolved | bullpen polymarket redeem (discovers redeemable positions from supported production sources, reports the payout route when available, and emits support-safe JSON when wallet or submission evidence is inconsistent) |
| Inspect redeem settlement | bullpen polymarket redeem-status <operation-id-or-tx-or-trace> --output json (non-submitting; use the redeem operation ID, raw tx hash, or exact trace ID from previous output) |
| Close out resolved | bullpen polymarket closeout --dry-run (won positions delegate to redeem; lost zero-payout positions are reported in current releases) |
| View watchlist | bullpen tracker watchlist |
| Non-runnable: add Prediction to watchlist | bullpen tracker watchlist add-polymarket <SLUG> only after choosing the exact event |
| Non-runnable: add Onchain Solana token to watchlist | bullpen tracker watchlist add-solana <MINT> only after verifying the mint |
| Non-runnable: add Hyperliquid to watchlist | bullpen tracker watchlist add-hyperliquid --symbol BTC --kind perp or --token-id <SPOT_TOKEN_ID> --kind spot only after verifying the market |
| View activity | bullpen polymarket activity (also: history) |
| View typed trade history | bullpen polymarket data my-trades [--type trade\|redeem\|split\|merge\|convert] |
| View recent trades | bullpen polymarket trades <MARKET> |
| View top holders | bullpen polymarket holders <MARKET> |
| View event top holders | bullpen prediction event-top-holders <EVENT_ID_OR_SLUG> |
| View comments | bullpen polymarket comments <SLUG> |
| View trade feed | bullpen polymarket feed trades |
| View comment feed | bullpen polymarket feed comments |
| Leaderboard | bullpen polymarket data leaderboard |
| Trader profile | bullpen polymarket data trader-profile <ADDRESS> (public Polymarket wallet analytics; profile is a compatibility alias) |
| Wallet stats | bullpen polymarket data wallet-stats <ADDRESS> |
| Smart money signals | bullpen polymarket data smart-money (requires: bullpen experimental enable prediction_analytics) |
| Portfolio balances | bullpen portfolio balances |
| Portfolio P&L | bullpen portfolio pnl |
| Current quests | bullpen quests |
| Quest history | bullpen quests history |
| Bullpen app rewards | bullpen rewards --output json |
| Reconcile rewards | bullpen rewards --reconcile --output json |
| Verify a reward claim | bullpen rewards --verify <WITHDRAWAL_ID> |
| Polymarket rewards | bullpen polymarket rewards --mm --output json |
| CLOB reward records | bullpen polymarket clob rewards --date <YYYY-MM-DD> --output json |
| List wallets | bullpen wallet list |
| View wallet addresses | bullpen wallet addresses |
| Import wallet for account visibility | bullpen wallet import --chain evm |
| Rename wallet | bullpen wallet nickname <ADDRESS> "Name" |
| Hide wallet | bullpen wallet hide <ADDRESS> |
| Non-runnable: set primary Bullpen-managed EVM wallet | bullpen wallet select <ADDRESS> --chain evm only after wallet list --output json verifies the intended managed wallet |
| Non-runnable: set primary Solana wallet | bullpen wallet select <ADDRESS> --chain solana only after wallet list --output json verifies the intended managed wallet |
| View primary wallets | bullpen wallet info |
| Show all 4 wallet addresses + balances | bullpen wallet show-addresses |
| Audit Polymarket wallet state | bullpen polymarket wallet-audit (read-only; shows all wallet kinds, balances, positions, and assets outside the selected trading wallet across Bullpen-managed 0x wallets; use --refresh --output json for wallet-routing disagreements) |
| Include order credit in wallet audit | bullpen polymarket wallet-audit --refresh --include-order-credit --output json (read-only; opt-in because it performs an authenticated per-wallet order credit lookup) |
| Non-runnable: repair confirmed server wallet selection | bullpen polymarket wallet select --kind <safe|proxy|dw> --yes only after Bullpen support confirms the exact kind; then run bullpen polymarket activate --yes only if needed |
| Recover eligible Polymarket funds | bullpen recover funds --dry-run --output json; Live: bullpen recover funds --yes only after root status ready and executable legs are supported plus submit-authorized; recovery does not change selected wallet |
| First-trade wallet activation | bullpen polymarket activate (creates CLOB credentials and bundles approvals; usually auto-invoked on first trade) |
| Funds balances | bullpen funds balances (--output json includes routing-wallet probe status: verified_clean, verified_nonzero, partial_unverified, or probe_failed; current successful probes are Polygon-only and therefore partial_unverified when Arbitrum/Ethereum remain unverified) |
| Deposit funds | bullpen deposit (opens web app with correct per-chain routing; the old funds deposit-address flow is not available) |
| Non-runnable: track a trader | bullpen tracker add 0x1111111111111111111111111111111111111111 only after verifying the address |
| Non-runnable: track with group | bullpen tracker add 0x1111111111111111111111111111111111111111 --group group-123 --nickname "Name" only after verifying the address and group |
| List tracked addresses | bullpen tracker list |
| View tracked trades | bullpen tracker feed |
| Manage groups | bullpen tracker groups |
| Non-runnable: create a group | bullpen tracker groups create "Name" --emoji "🐋" only when creating that server-side group is intended |
| Non-runnable: share a group | bullpen tracker groups share <GROUP_ID> only after verifying the group ID |
| Non-runnable: import a group | bullpen tracker groups import <CODE> only after verifying the share code |
| Browse curated groups | bullpen tracker groups curated |
| View alerts config | bullpen tracker alerts |
| Non-runnable: set trade alert | bullpen tracker alerts trade set --min-trade-size 5000 --tracked-only only when updating alert config is intended |
| Dry-run smart alerts | bullpen tracker alerts smart --smart-money true --dry-run --output json |
| Live: set smart alerts | bullpen tracker alerts smart --smart-money true --yes |
| Upgrade CLI | bullpen upgrade |
| List bracket contests | bullpen polymarket bracket contests --status open |
| Dry-run chalk bracket | bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --dry-run --output json |
| Live: auto-fill chalk bracket | bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --yes |
| Dry-run bracket from file | bullpen polymarket bracket fill march-madness-2026 --file picks.json --dry-run --output json |
| Live: fill bracket from file | bullpen polymarket bracket fill march-madness-2026 --file picks.json --yes |
| Bracket summary | bullpen polymarket bracket summary march-madness-2026 |
| Dry-run bracket pick | bullpen polymarket bracket pick march-madness-2026 --slot R1_E1 --winner "Duke" --dry-run --output json |
| Live: submit bracket pick | bullpen polymarket bracket pick march-madness-2026 --slot R1_E1 --winner "Duke" --yes |
| Bracket leaderboard | bullpen polymarket bracket leaderboard march-madness-2026 |
| Deposit funds | bullpen deposit (opens web app) |
| Join Discord | open "https://discord.com/invite/bullpen" |
| Follow on X | open "https://x.com/BullpenFi" |
| File support ticket | open "https://bullpen-help.freshdesk.com/support/tickets/new" |
| Collect diagnostics | bullpen status --output json + bullpen config show --output json (v0.1.102+ redacts token-bearing provider URLs; still review output before sharing) |
bullpen tracker copy start|edit|pause|resume|stop|delete|pending|confirm|reject
is Polymarket/prediction-market copy trading only. Use the experimental
bullpen hl copy surface to create or manage Hyperliquid copy subscriptions.
bullpen tracker copy list|status reads Bullpen's copy-trading records and may show
historical or mixed-platform subscriptions, so check the Platform table column
or the JSON platform field before acting. tracker copy confirm confirms a
pending Polymarket copy execution; Hyperliquid confirmations use hl copy
confirm. Polymarket tracker-copy live examples below either include --yes or
are explicitly interactive. The hyperliquid_trading gate applies only to
hl copy live mutating commands; their preview paths do not submit.
| Dry-run copy subscription | bullpen tracker copy start <ADDRESS> --preset recommended --dry-run |
| Live: copy a Polymarket trader | bullpen tracker copy start <ADDRESS> --preset recommended --yes |
| List copy trades | bullpen tracker copy list (shows stopped time/reason when available) |
| View copy trade status | bullpen tracker copy status <ADDRESS> |
| Pending confirmations | bullpen tracker copy pending |
| Non-runnable: confirm pending Polymarket copy execution | bullpen tracker copy confirm copy-exec-123 --yes only after pending verifies that exact Polymarket execution |
| Watch copy trades live | bullpen tracker copy watch (interactive monitor for pending Polymarket copy-trade executions; confirm/reject from the prompt) |
| Preview Hyperliquid copy subscription | bullpen hl copy start <LEADER> --fixed-notional 25 --preview --output json (<LEADER> can be a 0x... address or Bullpen username) |
| Live: create Hyperliquid copy subscription | bullpen hl copy start <LEADER> --fixed-notional 25 --yes (experimental; preview first and verify the subscription after creation) |
| Update Hyperliquid copy subscription | bullpen hl copy update <SUBSCRIPTION_ID> --fixed-notional 50 --preview --output json |
| List Hyperliquid copy subscriptions | bullpen hl copy list --include-stopped --output json |
| Inspect Hyperliquid copy subscription | bullpen hl copy show <SUBSCRIPTION_ID> --output json |
| Hyperliquid copy pending executions | bullpen hl copy pending --output json |
| Preview Hyperliquid copy confirmation | bullpen hl copy confirm <EXECUTION_ID> --preview --output json |
| Live: confirm Hyperliquid copy execution | bullpen hl copy confirm <EXECUTION_ID> --yes (requires hyperliquid_trading; preview first) |
| Hyperliquid copy executions history | bullpen hl copy executions --subscription <SUBSCRIPTION_ID> --output json |
| Hyperliquid copy open positions | bullpen hl copy open-positions --subscription <SUBSCRIPTION_ID> --output json (the subscription is an option; do not pass a leader address positionally) |
| Hyperliquid copy leader profile | bullpen hl copy leader-profile <LEADER> --output json |
| Preview Hyperliquid copy pause | bullpen hl copy pause <SUBSCRIPTION_ID> --preview --output json |
| Preview Hyperliquid copy resume | bullpen hl copy resume <SUBSCRIPTION_ID> --preview --output json |
| Preview Hyperliquid copy stop | bullpen hl copy stop <SUBSCRIPTION_ID> --preview --output json |
| Hyperliquid copy cleanup status | bullpen hl copy cleanup-status --output json |
| Hyperliquid copy risk config | bullpen hl copy risk config --output json |
| Preview Hyperliquid copy risk config update | bullpen hl copy risk config set --max-open-positions 3 --preview --output json |
| Non-runnable: submit Hyperliquid copy risk config update | bullpen hl copy risk config set --max-open-positions 3 --yes --output json only after reviewing the same risk config preview and enabling hyperliquid_trading for unattended use |
| Preview Hyperliquid copy risk config reset | bullpen hl copy risk config reset --preview --output json |
| Copy trade stats | bullpen tracker copy stats |
| Copy trade risk config | bullpen tracker copy risk |
| Non-runnable: pause a Polymarket copy trade (non-destructive) | bullpen tracker copy pause <ADDRESS> --yes only after verifying the subscription; preserves the subscription and any future mirror-sells |
| Non-runnable: resume a paused Polymarket copy trade | bullpen tracker copy resume <ADDRESS> --yes only after verifying the subscription |
| Snapshot before destructive action | bullpen tracker copy list --output json + bullpen tracker copy executions --output json + bullpen polymarket positions --output json |
| Non-runnable: delete a Polymarket copy trade (last resort) | bullpen tracker copy delete <ADDRESS> --yes only after the snapshot commands above and the "Copy-trade lifecycle" warning |
| View outcome orderbook | bullpen polymarket orderbook <MARKET> --outcome Yes |
| Inspect direct CLOB book metadata | bullpen polymarket clob book <TOKEN_ID> --output json or bullpen polymarket clob books <TOKEN_ID_1>,<TOKEN_ID_2> --output json (keeps min order size, tick size, and neg-risk metadata when available) |
| Preview trade fees | bullpen polymarket preview <SLUG> <OUTCOME> <AMOUNT> |
| Browse categories | bullpen polymarket categories |
| List events | bullpen polymarket events |
| View candles | bullpen polymarket candles --outcome Yes <MARKET> |
| List sports | bullpen polymarket sports-list |
| List teams | bullpen polymarket teams --league nba |
| Preview wrap USDC to pUSD | bullpen polymarket wrap <AMOUNT> --preview --output json |
| Live: wrap USDC to pUSD | bullpen polymarket wrap <AMOUNT> --yes |
| Preview unwrap pUSD to USDC | bullpen polymarket unwrap <AMOUNT> --preview --output json |
| Live: unwrap pUSD to USDC | bullpen polymarket unwrap <AMOUNT> --yes |
| Sweep stranded ERC-20 from Safe/Proxy | Prefer bullpen recover funds --dry-run --output json; use bullpen polymarket sweep-stranded --token <SYMBOL_OR_ADDR> --amount <TOKEN_AMOUNT> --yes only when support identifies the exact route |
| Check trade readiness | bullpen polymarket preflight |
| Check V2 approvals | bullpen polymarket approve --check |
| Verify email | bullpen verify-email |
| Install AI skills | bullpen skill install |
| List AI skills | bullpen skill list |
| Non-runnable: manage group addresses | bullpen tracker groups add-address <GROUP_ID> <ADDR> only after verifying the group and address |
| Auth diagnostics | bullpen doctor auth --output json |
| Non-runnable: force logout | bullpen logout --force only when diagnostics or support identify local credential reset as the recovery |
| Hyperliquid balances | bullpen hl balances |
| Hyperliquid all-DEX balances | bullpen hl balances --all-dexes --output json |
| Hyperliquid positions / status | bullpen hl status |
| Hyperliquid all-DEX positions / status | bullpen hl status --all-dexes --output json |
| Hyperliquid status single-DEX note | hl status --dex <DEX> is not supported; use hl status --all-dexes for position aggregation and hl frontend-orders --dex <DEX> for one DEX's open orders |
| Hyperliquid all-DEX open orders | bullpen hl orders --all-dexes --output json |
| Hyperliquid single-DEX open orders | bullpen hl orders --dex <DEX> --output json |
| Hyperliquid price | bullpen hl price <COIN> |
| Hyperliquid single-DEX price | bullpen hl price <COIN> --dex <DEX> --output json |
| Hyperliquid single-DEX markets | bullpen hl markets --dex <DEX> --output json |
| Hyperliquid single-DEX mids | bullpen hl mids --dex <DEX> --output json |
| Hyperliquid funding rates | bullpen hl funding |
| Hyperliquid single-DEX funding rates | bullpen hl funding --dex <DEX> --output json |
| Hyperliquid single-DEX orderbook | bullpen hl orderbook <COIN> --dex <DEX> --output json |
| Hyperliquid single-DEX funding history | bullpen hl funding-history <COIN> --dex <DEX> --output json |
| Hyperliquid single-DEX candles | bullpen hl candles <COIN> --dex <DEX> --output json |
| Hyperliquid fill history | bullpen hl fills --address <ADDR> |
| Hyperliquid vault equities | bullpen hl vault list --address <ADDR> |
| Hyperliquid HIP-3 DEX registry | bullpen hl perp-dexes |
| Preview a TradeXYZ HIP-3 long | bullpen hl long xyz:SPCX --notional 20 --preview --output json |
| Preview a TradeXYZ HIP-3 scale ladder | bullpen hl scale xyz:SPCX --side long --notional 20 --start 180 --end 179 --levels 2 --preview --output json |
| Modify a TradeXYZ HIP-3 order | bullpen hl modify <OID> --dex xyz --price <PRICE> --preview --output json |
| Preview cancelling a TradeXYZ HIP-3 order | bullpen hl cancel <OID> --dex xyz --preview --output json after verifying the order with bullpen hl frontend-orders --dex xyz --output json |
| Close a TradeXYZ HIP-3 position | bullpen hl close xyz:SPCX --preview --output json; Live: rerun with --yes after review |
| Verify HIP-3 position state after a write | bullpen hl status --all-dexes --output json (plain hl status shows main perps and includes a hint to use --all-dexes for HIP-3) |
| Hyperliquid spot pairs | bullpen hl spot pairs |
| Hyperliquid spot orderbook | bullpen hl spot orderbook --pair HYPE/USDC |
| Hyperliquid spot open orders | bullpen hl spot orders --pair HYPE/USDC |
| Hyperliquid spot order status | bullpen hl spot order-status --pair HYPE/USDC --oid <OID> |
| Hyperliquid spot order history | bullpen hl spot order-history --pair HYPE/USDC |
| Hyperliquid spot fills | bullpen hl spot fills --pair HYPE/USDC --address <ADDR> |
| Preview a Hyperliquid spot IOC order | bullpen hl spot buy --pair HYPE/USDC --price 25 --size 0.5 --preview |
| Live: submit a Hyperliquid spot IOC order | bullpen hl spot buy --pair HYPE/USDC --price 25 --size 0.5 --tif ioc --yes |
| Hyperliquid spot IOC no-match recovery | If live output returns HYPERLIQUID_IOC_NO_MATCH, refresh bullpen hl spot orderbook --pair <PAIR> --output json, adjust price, rerun preview, and do not submit cleanup sells unless a fill or balance proves inventory. |
| Hyperliquid spot cancel validation note | For a single-order cancel, verify the order with spot order-status or preview before live cleanup. Use spot cancel-all only when you intentionally want to clear every matching open spot order. |
| Preview Hyperliquid spot cancel | bullpen hl spot cancel --pair HYPE/USDC --oid <OID> --preview |
| Live: cancel one Hyperliquid spot order | bullpen hl spot cancel --pair HYPE/USDC --oid <OID> --yes after spot order-status/preview confirms the target order |
| Preview Hyperliquid spot cancel-all | bullpen hl spot cancel-all --pair HYPE/USDC --preview |
| Live: cancel all Hyperliquid spot orders | bullpen hl spot cancel-all --pair HYPE/USDC --yes after confirming you want every matching open spot order cleared |
| Preview Hyperliquid spot TWAP | bullpen hl spot twap create --pair HYPE/USDC --side buy --base-size <BASE> --minutes <N> --preview |
| Cancel Hyperliquid spot TWAP | bullpen hl spot twap cancel --pair HYPE/USDC <TWAP_ID> --preview |
| Pear setup status | bullpen hl pair status --output json |
| Non-runnable: Pear login | bullpen hl pair login --yes only when Pear auth challenge setup is available and intended |
| Preview Pear setup | bullpen hl pair setup --preview --output json |
| Live: enable Pear setup | bullpen hl pair setup --yes (requires Hyperliquid trading access; preview first and verify pair status after setup) |
| Pear positions | bullpen hl pair positions --output json |
| Pear orders | bullpen hl pair orders --output json |
| Pear TWAP orders | bullpen hl pair twaps --output json |
| Preview Pear pair open | bullpen hl pair open --long BTC=0.5 --short ETH=0.5 --size-usd 22 --preview --output json |
| Preview Pear balanced pair open | bullpen hl pair open --long BTC --short ETH --size-usd 22 --rebalance --preview --output json |
| Preview Pear pair open with initial TP/SL | bullpen hl pair open --long BTC=0.5 --short ETH=0.5 --size-usd 22 --take-profit 12.5 --stop-loss 5 --preview --output json |
| Live: submit Pear pair open | bullpen hl pair open --long BTC=0.5 --short ETH=0.5 --size-usd 22 --yes (requires successful Pear setup) |
| Preview Pear pair TWAP open | bullpen hl pair open --long BTC=0.5 --short ETH=0.5 --size-usd 22 --twap-minutes 30 --preview --output json |
| Live: submit Pear pair TWAP open | bullpen hl pair open --long BTC=0.5 --short ETH=0.5 --size-usd 22 --twap-minutes 30 --yes (requires successful Pear setup) |
| Preview Pear risk update | bullpen hl pair risk <POSITION_ID> --take-profit 12 --stop-loss 5 --preview --output json |
| Live: submit Pear risk update | bullpen hl pair risk <POSITION_ID> --clear-stop-loss --yes (requires fresh Pear session) |
| Preview Pear leverage update | bullpen hl pair leverage <POSITION_ID> --leverage 4 --preview --output json |
| Live: submit Pear leverage update | bullpen hl pair leverage <POSITION_ID> --leverage 4 --yes (requires fresh Pear session) |
| Preview Pear close | bullpen hl pair close <POSITION_ID> --preview |
| Live: submit Pear close | bullpen hl pair close <POSITION_ID> --yes (requires successful Pear setup) |
| Preview closing all Pear positions | bullpen hl pair close-all --preview --output json |
| Preview Pear cancel | bullpen hl pair cancel <ORDER_ID> --preview --output json |
| Preview Pear TWAP cancel | bullpen hl pair cancel-twap <ORDER_ID> --preview --output json |
| Pear pair-trading tutorial | references/pear-trading.md |
| Preview a long perp | bullpen hl long <COIN> --notional <USD_NOTIONAL> --preview |
| Preview a base-sized long perp | bullpen hl long <COIN> --base-size <BASE> --preview |
| Live: open a long perp | bullpen hl long <COIN> --notional <USD_NOTIONAL> --yes |
| Live: open a post-only long limit | bullpen hl long <COIN> --notional <USD_NOTIONAL> --limit <PRICE> --tif alo --yes |
| Preview a long bracket | bullpen hl long <COIN> --notional <USD_NOTIONAL> --tp <PRICE> --sl <PRICE> --preview |
| Preview a scale ladder | bullpen hl scale <COIN> --side long --notional <USD> --start <PRICE> --end <PRICE> --levels <N> --preview |
| Preview a stop-entry trigger | bullpen hl stop-entry <COIN> --side long --trigger-price <PRICE> --notional <USD> --preview |
| Live: place a scale ladder | bullpen hl scale <COIN> --side long --notional <USD> --start <PRICE> --end <PRICE> --levels <N> --yes |
| Live: open a short perp | bullpen hl short <COIN> --notional <USD> --yes |
| Preview a base-sized short perp | bullpen hl short <COIN> --base-size <BASE> --preview |
| Preview a short bracket | bullpen hl short <COIN> --notional <USD_NOTIONAL> --tp <PRICE> --sl <PRICE> --preview |
| Preview HL take-profit | bullpen hl take-profit <COIN> --trigger-price <PRICE> --base-size <BASE> --preview |
| Live: submit HL take-profit | bullpen hl take-profit <COIN> --trigger-price <PRICE> --base-size <BASE> --yes |
| Preview HL stop-loss | bullpen hl stop-loss <COIN> --trigger-price <PRICE> --base-size <BASE> --preview |
| Live: submit HL stop-loss | bullpen hl stop-loss <COIN> --trigger-price <PRICE> --base-size <BASE> --yes |
| Show current HL TP/SL | bullpen hl tpsl show <COIN> --address <ADDR> --output json |
| Preview HL TP/SL modify | bullpen hl tpsl modify <COIN> --take-profit <PRICE> --preview |
| Live: submit HL TP/SL modify | bullpen hl tpsl modify <COIN> --take-profit <PRICE> --yes (take-profit trigger create/show/clear live-validated; full positionTpsl replacement still validation-gated) |
| Preview HL TP/SL clear | bullpen hl tpsl clear <COIN> --all --preview |
| Live: clear HL TP/SL | bullpen hl tpsl clear <COIN> --all --yes (take-profit trigger clear live-validated on the test account) |
| Live: close a perp position | bullpen hl close <COIN> --yes |
| Preview a partial base-sized close | bullpen hl close <COIN> --base-size <BASE> --preview |
| Live: close with post-only limit | bullpen hl close <COIN> --limit <PRICE> --tif alo --yes |
| Preview flatten all HL positions | bullpen hl close-all --preview |
| Live: flatten all HL positions | bullpen hl close-all --yes |
| Preview cancel HL order | bullpen hl cancel <OID> --preview |
| Preview cancel all HL orders | bullpen hl cancel-all [<COIN>] --preview |
| Live: cancel reviewed HL orders | bullpen hl cancel-all [<COIN>] --preview, then rerun the same scope with --yes only after the preview shows the intended orders |
| Preview HL leverage update | bullpen hl leverage <COIN> <X> --preview |
| Preview HL order modify | bullpen hl modify <OID> --price <PRICE> --base-size <BASE> --preview |
| Preview HL cloid cancel | bullpen hl cancel-by-cloid <COIN> <CLOID> --preview |
| Preview HL scheduled cancel | bullpen hl schedule-cancel --time <UNIX_MS> --preview |
| Preview HL margin update | bullpen hl update-margin <COIN> --amount <USD> --preview |
| Watch HL fills live | bullpen hl watch fills --address 0x1111111111111111111111111111111111111111 --updates 1 --timeout 5s |
| Watch HL orderbook live | bullpen hl watch orderbook BTC --updates 1 --timeout 5s |
| Watch HL trades live | bullpen hl watch trades BTC --updates 1 --timeout 5s |
| Watch HL candles live | bullpen hl watch candles BTC --interval 1m --updates 1 --timeout 5s |
| List HL subaccounts | bullpen hl subaccount list |
| Dry-run HL subaccount creation | bullpen hl subaccount create --name <NAME> --dry-run |
| Live: create HL subaccount | bullpen hl subaccount create --name <NAME> --yes (permanent; operator-validation-gated until operator approval or explicit deferral is recorded) |
| Dry-run own subaccount USDC transfer | bullpen hl subaccount transfer --from master --to <OWNED_SUBACCOUNT_ADDR> --amount <USDC> --dry-run |
| Dry-run same-Hyperliquid spot send | bullpen hl send --asset <ASSET> --amount <AMOUNT> --to <OWNED_SUBACCOUNT_ADDR> --dry-run |
| Dry-run HL unified-account migration | bullpen hl unify-account --dry-run |
| List HL vault equities | bullpen hl vault list |
| List HL agent wallets | bullpen hl agent list |
| Preview HL agent approval | bullpen hl agent approve <0xAGENT> --name <NAME> --preview |
| Revoke HL agent wallet | bullpen hl agent revoke <NAME> --preview |
| Dry-run HL spot/perp transfer | bullpen hl transfer --amount <USD> --to perp --dry-run |
| Live: transfer spot <-> perp | bullpen hl transfer --amount <USD> --to perp --yes |
| Dry-run Hyperliquid withdraw | bullpen hl withdraw --amount <USD> --dry-run --output json |
| Live: withdraw from Hyperliquid | bullpen hl withdraw --amount <USD> --yes |
| Preview narrow Arbitrum -> HL bridge | bullpen hl deposit --amount <USD> --dry-run |
Hyperliquid default account reads and writes use the active EVM wallet as the signing address. hl status, hl balances, hl stats, and hl topology JSON can include optional signer_address for authenticated default-account reads; explicit --address public reads omit it. Table mode can show Signing as: / Reading as: context and warns on multiple EVM wallets unless --no-multi-wallet-warning or JSON output is used.
Solana commands are opt-in. Run bullpen experimental enable solana once; the setting writes [experimental] solana = true to the Bullpen config and persists across upgrades.
| Enable Solana commands | bullpen experimental enable solana |
| Solana balance | bullpen solana balance |
| Solana portfolio refresh | bullpen solana portfolio --refresh |
| Solana token price by mint | bullpen solana price <MINT> |
| Solana token metadata by mint | bullpen solana token <MINT> |
| Search a Solana token | bullpen solana search <QUERY> |
| Search Solana tokens with filters | bullpen solana search dog --protocol Pump.fun --min-market-cap 100000 --min-volume 10000 --output json |
| Discover Memescope tokens | bullpen solana discover memescope --category newly-launched --protocol Pump.fun --output json |
| Watch Memescope updates | bullpen solana discover memescope watch --limit 10 --max-events 5 --output json |
| Discover Solana runners | bullpen solana discover runners --include-dev-metrics --output json |
| Solana token performance | bullpen solana token performance <MINT> --timeframe all --output json |
| Solana token risk | bullpen solana token risk <MINT> --output json |
| Solana token holders | bullpen solana token holders <MINT> --limit 25 --output json |
| Solana token traders | bullpen solana token traders <MINT> --period week --output json |
| Solana token transactions | bullpen solana token transactions <MINT> --event-type swap --event-action buy --output json |
| Solana token whales | bullpen solana token whales <MINT> --transaction-type buy --sort biggest --output json |
| Solana token chart | bullpen solana token chart <MINT> --interval 1h --countback 50 --output json |
| Solana developer metrics | bullpen solana token developer <MINT> --output json |
| Preview a Solana token buy | bullpen solana buy <MINT> <USD_AMOUNT> --preview |
| Live: buy a Solana token after preview | bullpen solana buy <MINT> <USD_AMOUNT> --yes |
| Preview a Solana token sell | bullpen solana sell <MINT> <TOKEN_AMOUNT> --preview |
| Live: sell a Solana token after preview | bullpen solana sell <MINT> <TOKEN_AMOUNT> --yes --retry-after-rate-limit |
| Preview a Solana token swap | bullpen solana swap <INPUT_MINT> <OUTPUT_MINT> <INPUT_AMOUNT> --preview |
| Live: swap Solana tokens after preview | bullpen solana swap <INPUT_MINT> <OUTPUT_MINT> <INPUT_AMOUNT> --yes --retry-after-rate-limit (success output includes referral attribution when configured) |
| Preview a Solana limit buy | bullpen solana limit-buy <MINT> <USD_AMOUNT> --price <USD> --preview |
| Live: place a Solana limit buy | bullpen solana limit-buy <MINT> <USD_AMOUNT> --price <USD> --yes |
| Preview a Solana limit sell | bullpen solana limit-sell <MINT> <TOKEN_AMOUNT> --price <USD> --preview |
| Live: place a Solana limit sell | bullpen solana limit-sell <MINT> <TOKEN_AMOUNT> --price <USD> --yes |
| List Solana limit orders | bullpen solana orders --status active |
| Preview Solana limit-order cancel | bullpen solana cancel-order <ORDER_KEY> --preview --output json |
| Preview all Solana limit-order cancels | bullpen solana cancel-all-orders --mint <MINT> --preview --output json |
| Solana activity history | bullpen solana history --limit 20 --type all |
| Solana trade history | bullpen solana history --type trades --limit 20 --output json |
| Solana transfer history | bullpen solana history --type transfers --limit 20 --output json |
| Solana stats | bullpen solana stats --output json |
| Solana closed positions | bullpen solana stats closed-positions |
| Preview Solana DCA create | bullpen solana dca create <INPUT_MINT> <OUTPUT_MINT> --per-cycle 50 --cycles 3 --interval 1d --preview --output json |
| List Solana DCA schedules | bullpen solana dca list --status active --output json |
| Cancel Solana DCA schedule | bullpen solana dca cancel <ORDER_KEY> --preview --output json |
| List hidden Solana tokens | bullpen solana token hidden --output json |
| Hide Solana token row | bullpen solana token hide <MINT> --output json |
| Unhide Solana token row | bullpen solana token unhide <MINT> --output json |
| Preview Solana withdraw | bullpen solana withdraw <DESTINATION> <AMOUNT> --token <MINT> --preview --output json |
| Preview user-paid Solana SPL withdraw | bullpen solana withdraw <DESTINATION> <AMOUNT> --token <MINT> --use-own-sol --preview --output json |
| Open Solana deposit flow | bullpen solana deposit (opens web app; no raw deposit address) |
| Solana short alias | sol is the alias for the solana namespace |
Hyperliquid transfer verification waits 1.5 seconds before polling and defaults to 5 attempts at 1500 ms. Advanced tuning uses BULLPEN_HYPERLIQUID_TRANSFER_VERIFY_ATTEMPTS (clamped 1-20) and BULLPEN_HYPERLIQUID_TRANSFER_VERIFY_POLL_MS (clamped 250-10000); raising attempts or lowering the interval increases Hyperliquid /info request load.
Examples¶
Example 1: First-Time Setup and First Trade¶
User says: "Set up Bullpen and buy Yes on a live sports market"
Actions:
1. Install: curl -fsSL https://cli.bullpen.fi/install.sh | bash
2. Log in: bullpen login
3. Verify: bullpen status
4. Check readiness with bullpen polymarket preflight (checks pUSD balance and V2 approvals)
5. If pUSD balance is $0, preview the wrap first: bullpen polymarket wrap 10 --preview --output json; Live: execute with bullpen polymarket wrap 10 --yes
- When native USDC needs a pre-swap, require balance proof before wrap. Output below 99% of approved input is terminal; a shortfall within 1% wraps only the proven amount and reports requested versus submitted values. Never retry submission_unknown blindly.
6. Find a live market: bullpen polymarket discover sports --sort volume --limit 5
7. Check the price: bullpen polymarket price <MARKET_SLUG>
8. Preview the buy with the same price ceiling: bullpen polymarket buy <MARKET_SLUG> Yes 10 --max-price 0.20 --preview --output json
9. Live: buy shares with that price ceiling only if the preview is acceptable: bullpen polymarket buy <MARKET_SLUG> Yes 10 --max-price 0.20 --yes
10. Verify position: bullpen polymarket positions
Example 2: Market Research Workflow¶
User says: "Research the most active prediction markets"
Actions:
1. Discover trending: bullpen polymarket discover --sort volume --limit 10 --output json
2. Pick an event and drill down: bullpen polymarket event <SLUG> --output json
3. Check pricing: bullpen polymarket price <MARKET> --output json
4. View recent trades: bullpen polymarket trades <MARKET> --output json
5. Check top holders: bullpen polymarket holders <MARKET> --output json
6. Enable and check smart money: bullpen experimental enable prediction_analytics && bullpen polymarket data smart-money --output json
Example 3: Execute a Buy and Verify¶
User says: "Buy $50 of Yes shares on a live market and show me the position"
Actions:
1. Find a live slug: bullpen polymarket discover --sort volume --limit 5
2. Preview the order with a price ceiling: bullpen polymarket buy <MARKET_SLUG> Yes 50 --max-price 0.20 --preview --output json
3. Live: execute with a price ceiling only if the preview is acceptable: bullpen polymarket buy <MARKET_SLUG> Yes 50 --max-price 0.20 --yes
4. Check position: bullpen polymarket positions --source polymarket --output json
Example 4: Set Up Smart Money Alerts¶
User says: "Alert me when whales trade on crypto markets"
Current public command: use bullpen tracker alerts smart.
Actions:
1. Dry-run the smart alert change: bullpen tracker alerts smart --smart-money true --top-traders true --dry-run --output json
2. Live: apply the same smart alert change only if the dry-run is acceptable: bullpen tracker alerts smart --smart-money true --top-traders true --yes
3. Non-runnable: track specific traders with bullpen tracker add 0x1111111111111111111111111111111111111111 only after verifying the address.
4. Check current alerts: bullpen tracker alerts --output json
Example 5: Automated Portfolio Monitoring¶
User says: "Script that checks my positions and finds markets to trade"
# Check positions
bullpen polymarket positions --output json | jq '.positions[] | {market: .title, shares: .size, value: .current_value}'
# Find high-volume active markets
bullpen polymarket discover --sort volume --min-liquidity 100000 --output json | jq '.events[].markets[]? | {title, volume, liquidity}'
# Check prices for Prediction rows on watchlist
bullpen tracker watchlist --output json | jq -r '.items[].Prediction.slug' | while read slug; do
bullpen polymarket price "$slug" --output json
done
# Get filtered leaderboard ideas
bullpen polymarket data leaderboard --time-period 7d --sort copyability --hide-farmers --limit 5 --output json
Example 6: Diagnose and Resolve Split-Brain Wallet State¶
User says: "I migrated to Deposit Wallet but my funds seem to be missing"
Actions:
1. Audit all wallet kinds and balances: bullpen polymarket wallet-audit --refresh --output json
2. Review the report — look for assets on a non-server-selected wallet
3. Dry-run recovery to confirm the plan: bullpen recover funds --dry-run --output json
4. Live: execute only after root status is ready, executable legs are supported, and submit_authorized is true: bullpen recover funds --yes
5. Confirm trade readiness: bullpen polymarket preflight
If the failure is 1151 / L2_WALLET_DISAGREEMENT, do not treat consolidate --wallet-kind safe or any asset-movement override as the default repair. Follow the 1151 support-confirmed wallet-routing workflow above and use bullpen polymarket wallet select --kind <safe|proxy|dw> --yes only when Bullpen support confirms the exact intended server wallet kind.
Example 7: Resolve a 1151 Wallet-Routing Stop¶
User says: "Every trade fails with 1151 / server-vs-on-chain wallet disagreement"
Actions:
1. Refresh authoritative wallet evidence: bullpen polymarket wallet-audit --refresh --output json
2. Cross-check the same routing evidence for support: bullpen doctor wallet --output json
3. Inspect and attach these JSON fields when present: l2_status, disagreements[], hints[], and the server-selected wallet kind/address.
4. Do not retry with --wallet <BULLPEN_0X_WALLET> as a bypass; it pins the command to a Bullpen-managed wallet only and does not override Safe/Proxy vs Deposit Wallet selection.
5. Non-runnable: if Bullpen support confirms the intended server wallet kind, run bullpen polymarket wallet select --kind <safe|proxy|dw> --yes with that exact kind.
6. Non-runnable: if the selected wallet has never traded, run bullpen polymarket activate --yes.
7. Retry the blocked operation only after the refreshed audit and selected wallet agree.
Legacy/backcompat commands¶
bullpen polymarket wallet check— legacy/backcompat; usebullpen polymarket wallet-auditinstead unless Bullpen support asks for old-format outputbullpen polymarket migrate-collateral— deprecated compatibility alias for the older pUSD migration flow; preferbullpen polymarket migratefor Safe/Proxy ↔ Deposit Wallet pUSD migration, and usebullpen recover funds --dry-run --output jsonfor balances, positions, mixed assets, or guided funds recovery
Note: bullpen polymarket reregister-deposit-wallet is NOT deprecated, but it is support-directed only. Use it only when Bullpen support or guided recovery explicitly confirms Bullpen's own Deposit Wallet registration state is out of sync. It is not a self-service/local fix for external Polymarket relayer or registry rejection.
Troubleshooting¶
Hint Sentinels¶
Bullpen's source may wrap command hints as <<RUN: bullpen ...>> or <<TRY: bullpen ...>> so validation tests can prove the command path exists. Normal CLI output strips those wrappers. If a raw sentinel leaks into stderr/stdout, treat the inner bullpen ... text as the command guidance, do not include the <<RUN: / <<TRY: wrapper when running it, and report the leak as a CLI bug.
| Error | Fix |
|---|---|
| "Not authenticated" | Run bullpen status --output json and bullpen doctor auth --output json; run bullpen login only when diagnostics report requires_login: true or AUTH_REFRESH_REJECTED_LOGIN_REQUIRED |
| "Market not found" | The CLI will suggest similar markets ("Did you mean?"). Use slugs from bullpen polymarket search or discover, not numeric IDs. You can also paste a full Polymarket URL. |
| "Insufficient balance" | Check bullpen portfolio balances; use the website deposit flow (bullpen deposit opens app.bullpen.fi) |
| "Positions API shows 0 shares" | This is an indexing delay warning after a recent trade, not a real error. The order may still succeed. Wait a few seconds and retry, or run bullpen polymarket positions to verify holdings. |
| "Rate limited" | Wait 30 seconds and retry; reduce request frequency in scripts |
| "Order failed" | Run bullpen polymarket preflight to check approvals and balance |
| "Approval needed" | Run bullpen polymarket approve --check to inspect approval status. Live: submit missing approvals with bullpen polymarket approve --yes only after reviewing the prompt/output. |
| "Polymarket CLOB API-key creation failed (HTTP 403)" | Visit polymarket.com with the connected wallet, open Settings -> API Keys, create an API key, then rerun the CLI command |
| "Polymarket submission reports degraded service (STATE_FAILED)" | Run bullpen upgrade, then inspect the matching dry-run or diagnostic JSON before any repeat live submit. For redeem, use bullpen polymarket redeem --dry-run --output json; for other relayer flows, keep the emitted JSON error. If the upgraded CLI still returns STATE_FAILED, capture error_code, trace ID, condition ID, dry-run JSON, and live-submit JSON for support. Do not keep retrying the same live submit. |
| "Polymarket submission reports degraded service (rate limited)" | Wait for the reported cooldown, then retry once. |
polymarket_relayer_submit_outcome_unknown, post_submit_reconciliation, or a redeem submit HTTP 5xx |
Do not retry automatically. For redeem operations, run bullpen polymarket redeem-status <operation-id-or-tx-or-trace> --output json with the emitted redeem operation ID, raw tx hash, or exact trace ID. Generic relayer outcome-unknown errors may emit a different next_command; run that command for reconciliation instead of assuming redeem-status applies. If the result remains pending, missing evidence, reverted, wrong-wallet, or contradictory, file support with the JSON and attempt fingerprint. |
| "polymarket_status" in an error | Polymarket's status page is degraded for a trading-relevant component; retry shortly and check https://status.polymarket.com |
| "Polymarket account trading mode: Closed-only" | New buy orders are restricted for this account. Run bullpen doctor auth --output json and contact Polymarket support; Bullpen support can help collect diagnostics. This account signal is separate from an IP geoblock check. |
direct_clob_ip_blocked: true or a blocked direct CLOB request |
bullpen polymarket clob geoblock reports Polymarket's signal for the current request IP and network path. It does not determine legal eligibility, and Bullpen routing does not change provider controls or eligibility. Review Polymarket's geographic restrictions guidance or contact Polymarket support. |
| Turnkey 404 / "case sensitive" | Run bullpen upgrade and retry. If bullpen doctor auth --output json still reports resource missing / exit 14, this is support-owned Turnkey account repair rather than a local retry loop. |
| "spender not in allowed list" on Safe/Proxy wallets | Run bullpen upgrade then bullpen polymarket approve --check; Live: run bullpen polymarket approve --yes only if approvals are still missing. |
| "I logged out and now my balance shows $0" | Run bullpen upgrade; current builds refresh wallet-routing evidence and fail closed when server evidence is inconsistent. If balances or wallet kind still look wrong, run bullpen polymarket wallet-audit --refresh --output json and send support the output. |
| "Copy-trade 100x portfolio inflation" | Run bullpen upgrade, then bullpen portfolio overview --output json and bullpen hl status --output json. If values still disagree, run bullpen support and include which view is wrong. |
| "Bullpen is not authorized to perform: ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2" | Contact support@bullpen.fi; this points to a server-side Turnkey policy issue that support can repair. |
"Where are my funds?" / funds balances shows wrong amount after a server-side migration |
Run bullpen recover funds --dry-run --output json first. Review the plan's legs[], source/destination identities, outcomes, and retry fields. Use bullpen polymarket wallet-audit --refresh --include-order-credit --output json only when the plan or support asks for deeper evidence. |
"1151: server-vs-on-chain wallet disagreement" or L2_WALLET_DISAGREEMENT |
Run bullpen recover polymarket --refresh --output json; follow its one next command and create a passive redacted bundle with bullpen support bundle --output json when it reports account-side repair. Do not use --wallet or wallet-kind selection as a bypass. |
| Assets outside the selected trading wallet, stranded assets, or Safe / Proxy / Deposit Wallet funds confusion | Run bullpen recover funds --dry-run --output json first. Use bullpen recover polymarket --refresh --output json only for wallet-kind, stale route, account readiness, or auth-repair diagnostics. |
| "maker address not allowed" on first trade | Run bullpen fix --refresh. Follow its one next command; if it directs you to support, create a passive redacted bundle with bullpen support bundle --output json and do not retry by deploying or switching wallets. |
| "wallet registry validation failed" / "wallet is not registered" | Run bullpen recover polymarket --refresh --output json. Follow its next_command; if support is required, create a passive redacted bundle with bullpen support bundle --output json instead of repeating approval, activation, login, wallet switching, or reregister-deposit-wallet. |
| Command not found | Run bullpen upgrade to get the latest published version |
| Config issues | Run bullpen config init to reset, or bullpen config show to inspect |
| Other bugs | Report at github.com/BullpenFi/bullpen-cli-releases/issues or Bullpen Support |
Resources¶
- Docs: cli.bullpen.fi
- Bug reports: github.com/BullpenFi/bullpen-cli-releases/issues
- Support: bullpen-help.freshdesk.com
- Releases: github.com/BullpenFi/bullpen-cli-releases
- Full LLM docs bundle: cli.bullpen.fi/llm.txt