Prediction Copy Trading¶
Use Prediction copy trading when you want Bullpen to follow Polymarket
prediction-market traders through the tracker copy command family. This is
separate from Perps copy trading, which lives under hl copy.
Start read-only, preview the subscription, choose whether executions need manual confirmation, then set risk limits before unattended use.
Before You Start¶
Confirm the CLI can read your account:
Run bullpen login only when status or auth diagnostics say login is required.
Inspect current copy-trading state:
bullpen tracker copy list --output json
bullpen tracker copy risk --output json
bullpen tracker copy pending --output json
These commands do not create subscriptions, approve copied trades, or change risk settings.
Preview A Subscription¶
Preview the trader address before creating a subscription:
bullpen tracker copy start 0x1111111111111111111111111111111111111111 --dry-run \
--amount 10 \
--execution-mode confirm \
--output json
Review the source address, sizing, execution mode, subscription-local plan
fields, and any warning fields. These plan fields include values such as
max_trade_size_usd, max_per_market_usd, total_budget_usd,
daily_limit_usd, slippage_tolerance_pct, and mirror_percent_cap when set.
--dry-run validates the plan without creating a subscription, but it does not
include account-level risk limits. Run bullpen tracker copy risk --output json
to inspect account limits.
Use --execution-mode confirm when copied trades should wait for explicit
approval. Use automatic execution only after risk limits are configured and the
subscription has been tested with small amounts.
Create Or Update¶
Use the subscription preview from the previous section as the lead-in for the live create example.
bullpen tracker copy start 0x1111111111111111111111111111111111111111 --dry-run \
--amount 10 \
--execution-mode confirm \
--output json
Live: Create the subscription after reviewing the preview:
bullpen tracker copy start 0x1111111111111111111111111111111111111111 \
--amount 10 \
--execution-mode confirm \
--yes \
--output json
List subscriptions and use the followed trader address for lifecycle commands:
Preview editable changes before submitting them:
No immediate state-change: Run only the one confirmation-preview command for the subscription change you intend to review.
bullpen tracker copy edit <ADDRESS> --amount 8 --output json
bullpen tracker copy resume <ADDRESS> --output json
Live, immediate state-change: Submit only one lifecycle command at a time
after reviewing the subscription status or command-specific confirmation
preview; pause, stop, and delete have no separate preview and should be
executed only for the exact subscription you intend to mutate.
Live: Submit lifecycle changes only after reviewing the subscription status or confirmation preview:
bullpen tracker copy status <ADDRESS> --output json
bullpen tracker copy edit <ADDRESS> --amount 8 --yes --output json
bullpen tracker copy pause <ADDRESS> --yes --output json
bullpen tracker copy resume <ADDRESS> --yes --output json
bullpen tracker copy stop <ADDRESS> --yes --output json
bullpen tracker copy delete <ADDRESS> --yes --output json
Use delete only when you intend to remove the subscription record rather than
stop copying.
Confirmation behavior depends on the command. start without --dry-run,
edit, resume, risk set, risk reset, and confirm can show a
confirmation preview before mutation. In JSON or non-interactive mode, omitting
--yes returns a confirmation-required response and does not mutate.
pause, stop, and delete are stricter. Without --yes, they return a
Use --yes instruction before looking up the subscription. Review
status <ADDRESS> --output json first, then run the exact --yes command only
for the intended followed address.
Read commands such as list, status, risk, and pending use bounded
retries for transient read failures, then fail without changing copy-trading
state if fresh state still cannot be read.
If a mutation returns mutation_outcome_unknown or safe_to_retry: false, do
not rerun the same mutation immediately. Inspect server state first with the
matching read command, such as list, status <ADDRESS>, risk, or pending.
Retry manually only after the current state proves the mutation did not apply
and the next command output says it is safe.
Risk Limits¶
Set account-level risk limits before enabling unattended execution:
No immediate state-change: The no---yes form returns a
confirmation-required preview in JSON or non-interactive mode; submit only after
reviewing that output.
bullpen tracker copy risk set \
--max-per-trade 25 \
--daily-limit 100 \
--max-open-positions 5 \
--output json
Live, immediate state-change: After reviewing the confirmation-required preview, submit the risk update:
bullpen tracker copy risk set \
--max-per-trade 25 \
--daily-limit 100 \
--max-open-positions 5 \
--yes \
--output json
Review risk state and preview reset before submitting a reset:
No immediate state-change: Inspect current risk state and the reset confirmation before any live reset.
Live, immediate state-change: Reset only after the preview matches the intended account-level risk state:
tracker copy risk set uses --max-per-trade. The similarly named
--max-trade-size flag belongs to subscription start/edit, not the risk config
command.
risk reset clears the server's numeric USD and integer limits. It does not
clear restricted categories. To change restricted categories, run
risk set --restrict-categories <CATEGORY>[,<CATEGORY>...] --yes; omitting
--restrict-categories leaves categories unchanged. The current CLI does not
document a supported command to clear the category list to empty.
Manual Confirmations¶
If a subscription uses confirmation mode, review pending executions and preview the selected action before approving or rejecting it.
No immediate state-change: Run only the one confirm or reject preview matching the pending execution you intend to decide.
bullpen tracker copy pending --output json
bullpen tracker copy confirm <EXECUTION_ID> --output json
bullpen tracker copy reject <EXECUTION_ID> --output json
Live, immediate state-change: Confirm or reject only after checking the execution ID and market identity:
bullpen tracker copy confirm <EXECUTION_ID> --yes --output json
bullpen tracker copy reject <EXECUTION_ID> --yes --output json
confirm <EXECUTION_ID> --yes validates the ID against pending executions and
checks the pending execution identity, but it suppresses the pending-execution
preview before approval. In JSON or non-interactive mode, confirm without
--yes returns a confirmation-required preview and does not approve the
execution.
reject also supports --yes. Without --yes, JSON or non-interactive mode
returns a confirmation-required response and does not reject. Submit
reject <EXECUTION_ID> --yes only after reviewing pending --output json and
verifying the execution ID and market identity.
For a bounded interactive terminal monitor:
Interactive watch, no immediate state-change: This terminal monitor does not approve or reject executions. Run it only when you intend to open a temporary live watch stream and stop it after the timeout.
bullpen tracker copy watch &
WATCH_PID=$!
sleep 30
kill "$WATCH_PID" 2>/dev/null || true
wait "$WATCH_PID" 2>/dev/null || true
tracker copy watch is for a human terminal session, does not support JSON
output, and has no native duration flag. The shell sequence above stops the
example after 30 seconds. Agents should use bounded polling of
pending --output json, then explicit confirm or reject calls.
Before confirming, inspect the market identity in the pending execution. When
market metadata is sparse, the CLI still exposes lower-level
source_condition_id and source_token_id fields in JSON and shows them in
the confirmation preview.
Agent-Safe Workflow¶
Agents should use this sequence:
- Run
bullpen tracker copy list --output json. - Run
bullpen tracker copy risk --output json. - Preview new subscriptions with
bullpen tracker copy start <ADDRESS> ... --dry-run --output json. - For edits, inspect
bullpen tracker copy status <ADDRESS> --output jsonorbullpen tracker copy list --output json, then show the proposed changed fields withbullpen tracker copy edit <ADDRESS> ... --output jsonbefore submittingbullpen tracker copy edit <ADDRESS> ... --yes. - Show the trader address, sizing, execution mode, subscription-local plan
fields, and account limits from
bullpen tracker copy risk --output json. - Use
--yesonly for mutations that accept it:startwithout--dry-run,edit,pause,resume,stop,delete,risk set,risk reset,confirm, andreject. - Use followed trader addresses from JSON output for edit, pause, resume, stop, delete, and status.
- If confirmation mode is enabled, inspect
pending --output jsonbefore runningconfirmorreject; use--yesonly after checking the execution ID and market identity. - After
mutation_outcome_unknownorsafe_to_retry: false, inspect current state with the matching read command before any manual retry.
Boundaries¶
tracker copyis Prediction (Polymarket)-only.- Perps copy trading uses
hl copy. --non-interactivesuppresses prompts. It does not imply--yes.- Turnkey policy denials such as
ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2require account-policy repair by support; repeated login does not grant missing policy permissions.
Generated References¶
Use generated references for exact flags:
tracker copy,
start,
edit,
status,
list,
pause,
resume,
stop,
delete,
pending,
confirm,
reject,
risk,
risk set,
risk reset, and
stats.