Pro & Elite feature. Reactor is available on Simmer Pro and Elite plans (Elite includes everything in Pro).
GET /api/sdk/reactor/pending, branch on payload.type, act, and DELETE the signal on success. Skills subscribe to specific signal types, so a copytrading skill ignores any signal type it does not handle.
How it works
- Detect — A producer (relay or detector) monitors on-chain or order-flow data in real time
- Resolve — Server-side: market IDs mapped, sizes computed, payload assembled
- Queue — Typed signal written to your pending feed with a 120s expiry window
- Consume — Your skill polls the endpoint, reads
payload.type, and acts accordingly - Acknowledge — DELETE on success clears the signal; unacknowledged signals expire automatically
Signal type catalog
Reactor delivers typed signals such ascopytrading; older seasonal signal types are documented below for reference. Your skill should filter by payload.type on every poll so signal types it does not handle are ignored.
copytrading — Whale trade mirroring
Emitted by Simmer’s copytrading relay when a watched wallet settles a trade on-chain. The signal is pre-resolved: market ID mapped, mirror size computed, ready to trade. The polymarket-copytrading skill consumes this type.
Arm copytrading signals:
Signal payload fields:
Skill: Install
polymarket-copytrading from ClawHub. The skill’s built-in reactor mode handles the full poll → filter → trade → DELETE pipeline.
Polling mode — how the copytrading endpoint works
Thepolymarket-copytrading skill also has a free-tier polling mode that doesn’t use the reactor bus. Understanding its endpoint pattern is useful if you’re building a custom copytrading flow:
copytrading_execute() method on SimmerClient — the server-side planning and the client-side signing are deliberately split. Reading other wallets’ positions, running conflict detection, and computing trade sizes all happen server-side via that endpoint. The client only executes the resulting plan.
polymarket-worldcup-copytrader fetched a daily-curated leader set from GET /api/sdk/wc/copy-leaders and passed those wallets into the same POST /api/sdk/copytrading/execute flow. The skill was deprecated on 2026-07-24 and the endpoint is no longer served; the page is kept for reference at World Cup Copytrader. The polymarket-copytrading flow above is unaffected.
Retired signal types
The former World Cupshock_ladder flow and polymarket-soccer-shock-ladder skill are deprecated. They are not current install or run targets, and their arming endpoint remains only as a compatibility switch with no practical effect outside live World Cup match windows.
shock_ladder — Soccer in-play shock fader (retired reference)
Emitted by Simmer’s shock detector when a Polymarket World Cup market’s price drops sharply during a live match. The server detects the shock, classifies it (by favoritism, order-book depth, match minute), and emits a pre-sized signal with rung prices and sizes derived from historical depth percentiles.
This is no longer a self-serve Reactor setup path. The arming endpoint (
/api/sdk/shock-ladder/config) is still in the API and remains callable, but it has no practical effect outside live World Cup match windows because no shock signals are emitted between tournaments.The reference consumer, polymarket-soccer-shock-ladder, was deprecated on 24 July 2026 and is no longer installable. This section remains only as a historical payload reference for existing logs and old installs.Risk alerts: a sibling mechanism
Risk alerts are not on the reactor bus. They travel on a separaterisk_alert:* channel with their own consumer endpoint (GET /api/sdk/risk-alerts) and a 3600s TTL. They’re emitted when your server-side risk monitor (stop-loss / take-profit) triggers on an external wallet position — the SDK picks them up on the next get_briefing() call or SimmerClient init and executes the exit.
See Risk Management for the full consumer pattern and configuration.
Consuming signals
The copytrading skill follows this consumer loop:Monitoring
All reactor activity — signals received, trades executed, skipped signals, and failures — appears in the Reactor tab on your dashboard. You can label whale wallets in the copytrading watchlist for easier identification; labels appear in the Reaction Log.Reactor activity appears in the Reactor tab, not the Observability tab. Observability tracks executed trades across all skills. The Reactor tab tracks the full signal pipeline — including signals your agent correctly skipped.
Safety features
- Circuit breaker — 5 consecutive trade failures triggers a pause. Signals are skipped until the issue is resolved. The circuit auto-resets after 1 hour, or reset manually from the Reactor tab.
- Signal expiry — Unprocessed signals expire after 120s. No stale trades.
- Server-side filtering — Copytrading signals only generate for wallets on your watchlist above
min_size. Your skill doesn’t see noise. - Per-config caps —
max_sizebounds each mirror trade;daily_capbounds daily spend (skill-enforced at execution, plus a server-side 3x runaway guard on proposals). CheckGET /api/sdk/reactor/status→skips_24hto see if you’re being capped.
Cross-runtime
Reactor works with any agent runtime — OpenClaw, Hermes, Claude Code, or plain Python scripts. The pending endpoint is a standard REST call; your skill trades viaSimmerClient.trade(), which handles both managed and external wallets.
Requirements
- Simmer Pro plan
SIMMER_API_KEYenvironment variablesimmer-sdkPython package, 0.20.0 or newer:
