Settings
every row is generated from the spec the backend validates against — nothing here can drift from what the API acceptsDetection
enabled
Master kill switch — off stops sweeps, discovery, replay and copy; the tracked fleet is not touched.
bool
default was on
poll_sec
Seconds between monitor cycles. Every enabled relay is swept every cycle.
int · 10–3600
default
burner_sweep_ttl_sec
How stale a watched burner's token history may get before it is re-fetched.
int · 30–86400
default
Discovery
discovery_enabled
Whether the seed-wallet back-trace hunts for new operators at all.
bool
default
discovery_min_multiple
A seed wallet must have peaked at this multiple before back-trace bothers with it.
float · 2.0–1000.0
default
discovery_interval_sec
Seconds between discovery passes — each pass spends Blockscout budget.
int · 300–86400
default
drip_hub_autotrack
Automatically track discovered drip hubs — this is what grows the fleet without you.
bool
default
drip_hub_min_cluster
Wallets a funding cluster needs before its hub qualifies for autotrack.
int · 2–50
default
autotrack_max_relays
Ceiling on how far autotrack may grow the enabled fleet — the per-cycle cost cap (#2350).
int · 1–500
default
History replay
history_replay_enabled
Reconstruct plays from relay history between live cycles (#1368). Off stops only the reconstruction.
bool
default was on
Copy engine
mode
dry_run records copy decisions without touching Maestro; live drives the real Operator Finder Telegram account.
enum
default
max_slots
Copy slots the engine may hold open at once — each slot is a tracked burner in Maestro.
int · 1–12
default was 5
default_burners_per_play
Burners tracked per play for an operator with no per-operator override.
int · 1–4
default
stale_hours
A slot whose burner has gone this long without activity is closed as stale.
float · 1.0–168.0
default
live_max_buy_eth
Per-buy ETH ceiling in live mode — the hard cap under every Maestro buy this engine causes.
float · 0.001–1.0
default
maestro_chain_button
The exact chain-button text Maestro shows for Robinhood (e.g. HOOD). Empty keeps live mode refusing to act.
str
default
Master
auto_execute_enabled
Master switch. Off = the nightly cycle previews (logs what it would do) and moves no wallets.
bool
default was off
promotion_floor_only_enabled
Floor-only Sim->Live promotion (#2472). With auto_execute_enabled, the nightly pass promotes any sim wallet whose score AT DECISION TIME clears live_min_score — and asks nothing else about its record. The evidence is the corrected #2452 report: >=70 is the only floor positive at $12 and it held +$17.5/trade through a book-wide -$7.7k stretch. Still gated on capability (can_execute_sell_all, never overridable), sim tenure, and the per-chain live cap. The MANUAL gate's trades/days/win-rate/PF/30d rules are untouched and do not apply in this mode. Ships OFF.
bool
default
notifications_enabled
Daily funnel digest + urgent live-demote ping (#672).
bool
default
Capacity
sim_cap
Simulation-lane slots. Paper only — the cost of raising it is API/compute budget and list length, not money.
int · 1–200
default
live_cap
Live-lane slots PER CHAIN (#2450), enforced by the promotion endpoint. Keep equal to Maestro's per-chain copy-trade slot count (5 free, 12 premium): below idles earned slots, above lets a promotion succeed here and fail to sync. Per chain because Maestro's slots are per chain and `sync_wallets` already pushes per chain — a global cap refused a sixth live wallet even onto a chain with all five slots empty.
int · 0–50
default
sim_chain_floor
Per-chain sim slot reservation (#1327): each reserved chain keeps this many slots only its own candidates can fill.
int · 0–50
default
sim_reserved_chains
Comma-separated chains holding a sim_chain_floor reservation. Empty reservations cost nothing.
str
default
candidate_pool_cap
Throughput bound on the candidate pool (#2227) — NOT a merit valve (#2198/D3): eviction is labelled pool_cap, makes room by rank, and 0 disables.
int · 0–10000
default was 300
scanner_standdown_at_cap
When the pool is full, discovery stands down instead of competing for the Gecko budget the tracker needs (#1831). 0 = keep scanning regardless.
bool
default
Candidate → Sim gate
gate_min_closed_trades
Candidate→Sim: settled trades required before the gate judges.
int · 0–1000
default
gate_min_days_tracked
Candidate→Sim: days of tracking required.
int · 0–365
default
gate_min_win_rate
Candidate→Sim: minimum win rate (%). The measured cliff sits at 40% — wallets above it hold 96.8% of book PnL.
float · 0–100
default
gate_max_rug_rate
Candidate→Sim: maximum rug rate (%).
float · 0–100
default
gate_min_net_pnl
Candidate→Sim: minimum lifetime net PnL (USD).
float · -100000–100000
default
gate_max_trades_per_day
Candidate→Sim bot detector (#2271): above this settled-trade RATE the wallet runs a cadence our copy path cannot mirror (FERRET: 186/day, 18% win, −$2,891 simmed).
float · 1–1000
default
Sim → Live gate
live_min_sim_trades
Sim→Live: settled sim trades required.
int · 0–1000
default
live_min_days
Sim→Live: days in the sim lane required (#2170: the sim-lane clock, not lifetime tenure).
int · 0–365
default
live_min_net_pnl_30d
Sim→Live recency floor (#1259): the last 30 days must have earned this much (USD) — lifetime-positive is not enough.
float · -100000–100000
default
live_min_win_rate
Sim→Live quality floor (#1305), passable EITHER by win rate OR by modern profit factor (#1933) — a 2x-fib ladder is many small losers and few large winners by design.
float · 0–100
default
live_min_profit_factor
Sim→Live: the OTHER way past the quality floor (#1933). 2.0 = wins two dollars per dollar lost.
float · 1–100
default
live_min_modern_trades
Sim→Live: modern-era sample required behind the profit-factor branch.
int · 1–1000
default
live_max_rug_rate
Sim→Live: maximum rug rate (%).
float · 0–100
default
live_min_score
The grade line of the sim→live gate — BINDING since #2386: live requires evidence AND grade, ungraded fails. Stored value governs; the operator holds it at 60 (B−) as of 2026-08-16.
float · 0–100
default was 66.67
Gate units
gate_notional_normalize
Read the three absolute-dollar thresholds at the reference notional (#2071), so a $5-stake live wallet is not judged on a $100 ruler. Ships off; flipping it is the operator's call.
bool
default
gate_notional_reference_usd
The notional the dollar thresholds were written against ($100, from #740).
float · 1–100000
default
Score weights
w_net_pnl
Composite weight: 30d net PnL vs its benchmark.
float · 0–100
default
w_win_rate
Composite weight: win rate on the floor/target ramp.
float · 0–100
default was 20.0
w_avg_pnl
Composite weight: average PnL per settled trade.
float · 0–100
default was 15.0
w_edge
RETIRED (#2034) — edge left the composite, so this weight is never applied whatever it is set to. Kept so stored configs still parse.
float · 0–100
default was 10.0
w_profit_factor
Composite weight: profit factor (#1902). Ships 0 = inert; the breakdown shows the figure either way.
float · 0–100
default was 0.0
w_roi
Composite weight: ROI on staked capital (#1902). Ships 0 = inert.
float · 0–100
default was 0.0
w_sample
Composite weight: sample size. Dropped automatically when shrinkage is on — scoring confidence twice is the bug.
float · 0–100
default
w_drawdown
Composite weight: max drawdown. Enters the score only when drawdown_scoring_enabled.
float · 0–100
default
w_recency
Composite weight: recency of activity.
float · 0–100
default
Score benchmarks
bench_net_pnl_30d
30d net PnL (USD) that earns 100.
float · 1–1000000
default was 500.0
bench_avg_pnl
Average per-trade PnL (USD) that earns 100.
float · 0.1–100000
default was 50.0
bench_edge
Edge PnL (USD) that earns 100.
float · 1–1000000
default
bench_sample_trades
Settled trades that earn the sample component 100.
float · 1–10000
default
bench_win_rate_floor
Win rate (%) scoring 0 — the ramp starts here, placed below the measured 40% profitability cliff (#1589).
float · 0–100
default
bench_win_rate_target
Win rate (%) scoring 100 — the top of the ramp.
float · 0–100
default
bench_profit_factor
Profit factor that earns 100. Neutral is 1.0 by arithmetic, which immunizes this benchmark against drift.
float · 1.01–100
default
bench_roi_pct
ROI (%) that earns 100. Normalized by stake, so sim and live grade on one scale.
float · 0.1–10000
default
Score behaviour
score_scope
Which era the performance components read: the whole record, or modern-entry rows only.
choice
default was lifetime
score_curve
How a component scales to its benchmark. linear saturates at the benchmark; log keeps earning per 10x above it (losses stay linear). Reorders promotions — decide against measured impact (tools/score_curve_impact.py).
choice
default
bench_log_ratio
Under score_curve=log: the multiple of the benchmark that reaches 100.
float · 2–1000000
default
score_shrinkage_enabled
Thin-record handling (#1579): pull small samples toward score_prior instead of scoring absence as badness; drops the sample component to avoid double-counting confidence.
bool
default was off
score_prior
The score a record with no evidence reads (#1592 d3: 50 = C on the rebased bands). Coupled to the grade scale — neither moves alone.
float · 0–100
default
score_shrinkage_k
Settled trades at which the record carries half the weight against the prior.
float · 1–1000
default was 20.0
best_cutoff
BEST-hero eligibility score. Display rank only, never a gate. 60 sits a full band above the 50 starting line.
float · 0–100
default
Score components (shadow flips)
drawdown_scoring_enabled
Let max drawdown enter the composite. Refused while coverage is below min_drawdown_coverage_pct (#2077) — scoring a component with no input makes the denominator wallet-dependent.
bool
default
min_drawdown_coverage_pct
Coverage (% of wallets with computed drawdown) required before drawdown scoring may be enabled. 0 disables the gate.
float · 0–100
default
edge_scoring_enabled
RETIRED (#2034) — INERT IN BOTH POSITIONS. Edge no longer enters the composite for any wallet: it says which exit strategy suits a wallet, not how good the wallet is. Still measured and shown, with its sign and coverage, on every live-shortlist surface.
bool
default
min_edge_coverage_pct
Edge is rankable only when at least this % of the book produced a mirror leg (#1520).
float · 0–100
default
min_edge_scored_positions
Edge is rankable only on at least this many scored positions — 100% coverage of 4 rows is not evidence.
int · 0–1000
default
max_edge_concentration_pct
Edge is unrankable when one position carries more than this % of the measurement (#1899). 0 disables.
float · 0–100
default
Demotion
demote_window_days
Window (days) over which sustained underperformance is judged.
int · 1–365
default
demote_min_closed
Settled trades required before demotion floors judge — a sample gate, not a floor.
int · 1–1000
default
demote_win_floor
Demotion floor: win rate (%) below this over the window (with sample) demotes. Deliberately far below the promotion floor.
float · 0–100
default
demote_max_rug
Demotion floor: rug rate (%) above this demotes.
float · 0–100
default
demote_net_pnl_floor
Demotion floor: window net PnL (USD) below this demotes. Calibrated on the $100 sim notional — see gate_notional_normalize.
float · -1000000–0
default
demote_min_score
Grade floor for demotion (#2195 companion). Shadow unless demote_min_score_enabled.
float · 0–100
default
demote_min_score_enabled
Enforce demote_min_score. Off = computed, logged, shown, and nothing moves (the shadow pattern).
bool
default
Panic & staleness
panic_daily_loss_pct
Instant demotion: daily loss (%) that trips the panic path, no demotion window needed.
float · 0.1–100
default
panic_consecutive_rugs
Instant demotion: consecutive rugs that trip the panic path.
int · 1–100
default
stale_slowdown_days
Days quiet before a wallet reads as slowing down.
int · 1–365
default
stale_dead_days
Days quiet before a PROVEN wallet is demoted as dead.
int · 1–365
default
stale_never_traded_days
Shorter leash (#1584): days a wallet that has NEVER traded may hold a sim slot.
int · 1–365
default
idle_decay_enabled
Flat idle decay (#2196/D2): ranking-score points bleed per whole day the LEAD shows no observed activity. Read-time only; replaces the recency term's idle contribution, never stacks.
bool
default
idle_decay_per_day
Points off the ranking score per idle day.
float · 0–50
default
Displacement
sim_swap_enabled
Allow displacement swaps at all.
bool
default
sim_swap_margin
Competitive displacement (#1584): a queued candidate takes the weakest incumbent's slot only when it outscores by this margin — the anti-thrash guard.
float · 0–100
default
sim_swap_requires_approval
Propose instead of execute (#1667). Off since #2246: nothing could approve a proposal, so the lane could not turn over.
bool
default was off
Candidate pool
candidate_inactive_days
Candidate eviction (#795): no new buys in this many days evicts.
int · 1–365
default
candidate_inactive_days_ever_live
Leeway for proven (ever-live) earners before inactivity evicts.
int · 1–730
default
Auto-nicknames
auto_nickname_enabled
Name fresh sim promotions with a pronounceable handle (#1587). Never overwrites a real name (#1842); runs after the commit and cannot block a promotion.
bool
default
auto_nickname_timeout_sec
Seconds the naming CLI call may take (#2242: 15 killed every call mid-answer; 60 is the measured-safe value).
int · 5–600
default
auto_nickname_model
Model for the naming call. Empty = the CLI's own default.
str
default
Cadence & startup
scan_interval
Scan Interval (seconds) — Time between automated scan cycles. Default: 3600 (1 hour)" [wallet_scanner.html:947-949]
int · 0–10000000
default was 3600
scanner_auto_start
Auto-Start Scanner" — card note: "Configure services to start automatically when the application launches. Delays allow time for testing/development." (ws) / "Configure services to start automaticall
bool
default was off
scanner_start_delay
Delay [30 min]" — no separate hint beyond the slider end labels "Now" / "60 min" and the Auto-Start card note
int · 0–3600
default was 1800
recheck_max_wallets_per_cycle
Candidate Re-checks per Cycle — All candidates rotate through the daily re-check, stalest first, capped at this many per cycle (#1058). 0 = no cap." [wallet_scanner.html:1008-1010]
int · 0–500
default
Chains
enabled_chains
Enabled Chains — Connectivity + trading + scanner universe (#1242). Applies after a service restart. Stored in settings; secrets.json is the fallback when unset. Solana copy-trade rides its own stack
str
default was
paused_chains
Scan Chains — Which chains the scanner spends API budget on (#1043/#1242/#1187). Unchecked chains are paused everywhere — discovery sweep, candidate re-checks, and queued/manual wallets (skipped with
str
default
Discovery
use_debank
Use DeBank scraping — Operator kill switch (#1252). Off disables DeBank scraping entirely; discovery falls back to the chains it can index without it." [copy_trade.html:2902-2905]
bool
default
max_debank_pages
Max DeBank Pages — Max pages to scrape per wallet (~20 txns/page). Prevents excessive wait times on wallets with 1000s of transactions" [wallet_scanner.html:1135-1137]
int · 5–500
default
top_n_tokens
Top N Tokens to Scan — Max trending tokens to analyze per chain" [wallet_scanner.html:963-965]
int · 1–500
default
top_n_traders
Top N Traders per Token — Max traders to check from Top Traders list" [wallet_scanner.html:968-970]
int · 1–500
default
min_24h_gain
Min 24H Gain (%) — Only scan tokens with this % gain in 24h" [wallet_scanner.html:1031-1033]
float · 0–10000000
default
volume_threshold
Volume Threshold ($) — Min daily volume required to include token in scoring. Higher = stricter. Default $500 works for alpha snipers on fresh launches." [wallet_scanner.html:1120-1122]
float · 100.0–10000.0
default
max_matched_tokens_per_chain
Matched Tokens per Sweep (per chain) — Per-sweep budget of filter-passing tokens to trader-scrape (#1025). 0 = unlimited." [wallet_scanner.html:1003-1005]
int · 0–100
default was 15
scanner_rank_by_gainers
Rank discovery by gainers — Order the scan by top gainers rather than the legacy ordering. Config-gated so it can be reverted without a deploy." [copy_trade.html:2886-2889]
bool
default
Filters
min_pnl_multiplier
Min PNL Multiplier (x) — PNL must be this multiple of buy-in (2x = doubled)" [wallet_scanner.html:1057-1059]
float · 0–10000000
default
min_score
High Grade Threshold — Score at/above this fires the Discord discovery alert and the \"high grade\" log. It does NOT gate saving: every wallet scoring ≥60 (or thin-strong) is kept as a Candidate; bel
float · 0.0–100.0
default
max_token_age_hours
Max Token Age (hours) — Only scan tokens younger than this" [wallet_scanner.html:1036-1038]
int · 1–168
default
exclude_suspicious_data
Exclude Suspicious Data — Exclude tokens flagged as suspicious (capped at 10,000x) from PNL and scoring calculations" [wallet_scanner.html:1141-1145]
bool
default
solana_skip_hyperactive
Skip Hyperactive Solana Wallets — Pre-fetch volume-band skip of bot-grade wallets — saves Helius credits (#1025)" [wallet_scanner.html:1014-1017]
bool
default
auto_refresh_unknown
Auto-Refresh Failed Tokens — Retry tokens that failed (not indexed, no data)" (options verbatim: "Enabled (retry once/day, max 7 days)" / "Disabled") [wallet_scanner.html:1125-1130]
bool
default
trader_max_buy_usd
Max Buy-in ($) — Only traders who bought with less than this (filters whales)" [wallet_scanner.html:1052-1054]
float · 0–1000000
default
High-frequency detection
hf_detection_mode
Detection Mode — Count per token or total" (options verbatim: "Per Token" / "Per Wallet") [wallet_scanner.html:1100-1105]
choice
default
hf_buy_amount_threshold
Buy Amount ($) — Buys under this are \"small\"" (section note: "Filters out bots and snipers that make many tiny trades. These are hard to copy profitably.") [wallet_scanner.html:1095-1097]
float · 0–10000000
default
hf_buy_count_threshold
Buy Count Threshold — Flag if more small buys than this" [wallet_scanner.html:1090-1092]
int · 0–10000000
default
Backtest model
fibonacci_sell_pct
Fibonacci Sell % — 50% sold at 2x, then this % at 3x, 5x, 8x, 13x, 21x..." (card note: "Configure theoretical PNL strategies. All entries normalized to $100 for comparison.") [wallet_scanner.html:117
float · 5–20
default
trailing_stop_pct
Trailing Stop % — 50% sold at 2x, remaining uses this trailing stop" (card note: "Configure theoretical PNL strategies. All entries normalized to $100 for comparison.") [wallet_scanner.html:1173-1175
float · 10–30
default
pnl_method
Default Display Method — Which method to highlight in wallet cards" (options verbatim: "Trailing Stop (rides runners)" / "Fibonacci Laddering (profit-taking)" / "Show Both (comparison)") [wallet_scan
choice
default
Execution (arming)
ct_execution_enabled
Execution Enabled — Master switch for live on-chain sells" (card note: "Execute sells on-chain via DEX routers when Fibonacci levels trigger. Wallet private key must be configured in secrets.json.")
bool
default was off
ct_execution_dry_run
Dry Run Mode — Log sells without submitting transactions" [copy_trade.html:1853-1854]
bool
default was on
ct_default_max_buy_usd
Default Max Buy per Wallet (USD) — Single source of truth for live buy size — converted to native at the live price and pushed to Maestro per wallet. On Solana this is the TOTAL debit per buy: the Ma
float · 1.0–100000.0
default was 10.0
ct_execution_slippage
Slippage (%) — Tolerance for swap price impact" [copy_trade.html:1862-1865]
float · 1.0–50.0
default
ct_execution_exit_slippage
Forced-Exit Slippage (%) — Looser min-out for forced exits (stops, liquidity, time rules) so an emergency sell is not blocked by its own protection (#925)" [copy_trade.html:1872-1882]
float · 1.0–99.0
default
Engine cadence
ct_poll_interval
Blockchain Poll Interval — How often to scan the blockchain for new wallet buys" (options verbatim: "3s — Fast (~114k credits/hr)" / "5s — Normal (~68k credits/hr)" / "10s — Efficient (~34k credits/h
int · 3–60
default
ct_live_poll_interval_sec
Live Position Poll Interval (seconds) — How often LIVE positions are repriced (#2252). Simulation keeps the 30s loop; only this lane pays. Costs one price call per unique live token per tick — at 2 l
int · 1–30
default
ct_stale_poll_interval_sec
Stale Poll Interval (seconds) — Poll cadence for positions already flagged stale — a frozen price loses nothing at a slow cadence" [copy_trade.html:2357-2360]
float · 0–864000
default
ct_near_trigger_poll_interval_sec
Near-Trigger Poll Interval (seconds) — Cadence for a position CLOSE to a decision — the trailing stop, the hard stop, or the next fib rung (#2252). The tier only ever tightens: nothing is polled slow
int · 0–30
default
copytrade_auto_start
Auto-Start Copy Trade" — card note: "Configure services to start automatically when the application launches. Delays allow time for testing/development." (ws) / "Configure services to start automatic
bool
default was off
copytrade_start_delay
Delay [30 min]" — no separate hint beyond the slider end labels "Now" / "60 min" and the card note quoted for copytrade_auto_start
int · 0–3600
default was 1800
queue_resume_on_boot
Resume the scan queue on boot — On (default, #1225) a queue interrupted by a restart is picked up where it stopped. Off restores the #840 policy of starting clean — a queue that can never be resumed
bool
default
outage_catchup_enabled
Outage catch-up — Operator kill switch (#2057). On, a stale watermark RECORDS a gap, the tracker pass puts gap wallets first, and wallets outside the candidate universe (armed leads) get EXTRA catch-
bool
default
Entry gates
ct_min_liquidity_usd
Minimum Liquidity (USD) — Exit if pool liquidity falls below this absolute value" [copy_trade.html:2471-2474]
float · 0.0–100000.0
default
ct_prebuy_liquidity_floor_enabled
Pre-buy liquidity floor — Refuse a buy when the entry liquidity is KNOWN and below Minimum Liquidity (USD) — the same one number the Liquidity Protection card owns, so the pre-buy floor and the post-
bool
default
ct_prebuy_v4_sim
V4 pre-buy sellability probe — Runs only where the V2 on-chain sim cannot (a Uniswap V4 token has no V2 pair), so the blocking gate is otherwise blind there. Three states rather than a boolean on pur
choice
default
ct_max_token_age_enabled
Max token age — skip buy / sell held bag — Don't enter tokens older than this at buy time; sell a held token once it ages past it." (card note: "Force an exit (and skip stale entries) on the clock, i
bool
default
ct_max_token_age_hours
Max token age — skip buy / sell held bag — Don't enter tokens older than this at buy time; sell a held token once it ages past it." (shares its panel's hint with ct_max_token_age_enabled) [copy_trade
float · 0–8760
default
ct_max_tokens_per_wallet
Max Tokens Per Wallet — Max open positions per wallet (0 = unlimited). Skips new buys when cap is reached." [copy_trade.html:2156-2160]
int · 0–50
default was 3
ct_sim_model_taxes
Model token taxes in SIM — Apply the token's measured buy/sell tax to simulated fills. Off makes SIM optimistic against the same token LIVE would trade, which is the one direction a simulator must no
bool
default
ct_sim_entry_impact_base_v4_pct
SIM entry impact, base V4 (%) — added to a SIM entry booked at the pair quote on a Uniswap V4 pool. The median lead-fill-over-quote gap printed by tools/measure_entry_impact.py (#2538).
float · 0.0–200.0
default
ct_sim_entry_impact_base_v3_pct
SIM entry impact, base V3 (%) — added to a SIM entry booked at the pair quote on a V3 pool. LOW CONFIDENCE: n=11 on 2026-09-15, IQR +8.6% to +93.1%. The median printed by tools/measure_entry_impact.py (#2538).
float · 0.0–200.0
default
ct_sim_entry_impact_solana_pct
SIM entry impact, Solana (%) — added to a SIM entry booked at the pair quote on Solana. Measured 0% (the quote is the fill) (#2538).
float · 0.0–200.0
default
ct_sim_entry_impact_measured_on
Entry impact measured on (YYYY-MM-DD) — the date of the sample behind the impact numbers above. Past the max age they are not modeled (#2538).
str
default
ct_sim_entry_impact_max_age_days
Entry impact max age (days) — a measurement older than this is not applied; the row stamps no modeled impact until the tool is re-run (#2538).
int · 1–365
default
Exits & stops
ct_fib_strategy
Sell Strategy — Familiar through 13x, then tapers for moonbag" (default-selected option's dynamic desc; options verbatim: "90/10 Fib Taper (recommended)" / "Front-Loaded Decay" / "Fat Middle" / "Cust
str
default was
ct_fib_sell_mode
% of Remaining — Moonbag never depletes" / "% of Initial — Fixed chunks, can fully close" (button pair calling setFibSellMode()) [copy_trade.html:2254-2266]
choice
default was remaining
ct_fib_sell_pct
Sell per Level (%) — % of initial position to sell at each level after 2x (position can fully close)" (hint dynamic, id=fibSellPctDesc) [copy_trade.html:2277-2281]
float · 1.0–50.0
default
ct_fib_free_roll_pct
Free Roll at 2x (%) — % of initial position to sell at 2x" (hint text is dynamic, id=fibFreeRollDesc) [copy_trade.html:2270-2274]
float · 10.0–90.0
default
ct_trailing_stop_pct
Trailing Stop (%) — Sell remaining if price drops this % from peak (after hitting threshold)" [copy_trade.html:2312-2315]
float · 10.0–80.0
default
ct_hard_stoploss_enabled
Hard Stop-Loss — Close if down X% and never hit threshold" [copy_trade.html:2321-2322]
bool
default
ct_hard_stoploss_pct
Hard Stop-Loss (%) — Close position if down this % and never reached threshold" [copy_trade.html:2330-2333]
float · 20.0–80.0
default
ct_breakeven_threshold
Profit Threshold (multiple) — Must reach this multiple before trailing/breakeven stops activate" [copy_trade.html:2306-2309]
float · 1.1–3.0
default
ct_max_hold_enabled
Max hold duration — sell immediately — Close any position held longer than this, regardless of price." [copy_trade.html:2417-2426]
bool
default
ct_max_hold_minutes
Max hold duration — sell immediately — Close any position held longer than this, regardless of price." (shares its panel's hint with ct_max_hold_enabled) [copy_trade.html:2422-2426]
int · 0–10080
default
ct_near_trigger_enter_pct
Near-Trigger Band — enter (%) — A position within this distance of its nearest trigger joins the fast lane." [copy_trade.html:2375-2378]
float · 0–100
default
ct_near_trigger_exit_pct
Near-Trigger Band — leave (%) — And leaves it only past this one. A BAND, not a line (#2308's shape): on a single threshold a position sitting on it changes cadence every tick. Set below the enter va
float · 0–100
default
ct_liquidity_exit_enabled
Liquidity Exit — Exit when pool liquidity drops below thresholds" (card note: "Auto-exit positions when pool liquidity drops (anti-rug). Uses on-chain data from swap events at zero extra RPC cost.")
bool
default
ct_liquidity_drop_pct
Liquidity Drop (%) — Exit if pool liquidity drops this % from entry (e.g., 80% = liquidity went from $10K to $2K)" [copy_trade.html:2477-2480]
float · 20.0–99.0
default
ct_time_rules_chains
Applies to chains — Comma-separated (e.g. solana,base) or all." [copy_trade.html:2441-2445]
str
default was solana
ct_time_rules_modes
Applies to modes — Live also caps Maestro-executed positions — start with Sim." (options verbatim: "Simulation only" / "Live only" / "Simulation + Live") [copy_trade.html:2431-2438]
choice
default was sim
Stale & orphans
ct_stale_warning_hours
Stale Price Warning (hours) — Flag a position stale once its price has been frozen this long (#848); Dead Token Detection then classifies it at its own threshold" [copy_trade.html:2351-2354]
float · 0.25–24.0
default
ct_price_unchanged_hours
Dead Token Detection (hours) — Mark as rugged if price unchanged for this many hours" [copy_trade.html:2336-2339]
float · 1.0–24.0
default
ct_orphan_timeout_min
Orphan timeout (minutes) — How long a LIVE position waits for a Maestro fill before it is orphan-closed. Too short and a slow-but-real fill is written off; too long and the book carries a position no
int · 0–10000000
default
ct_ohlc_cooldown_hours
Post-Close Cooldown (hours) — Continue recording candles after a position closes to see what happened next. 0 = disabled." (card note: "Records 1-minute OHLC candles during active positions for trade
float · 0.0–48.0
default
ct_bag_ledger_mode
Bag ledger — Whose tokens a sell is allowed to spend when two positions share one wallet bag. Ships off; promote it once shadow lines from real live sells have been compared. Anything unrecognised re
choice
default
ct_live_sim_twin
$100 SIM twin for LIVE buys — Book a paper $100 simulation sibling next to every LIVE position, at the same detected entry and through the same SIM friction (tax modelling above), so the sim lane's c
bool
default was off
Treasury (#2532)
treasury_enabled
Treasury manager ARMED (#2532) — OFF (the default) runs the manager DRY: it computes the transfer it would make and writes it to the treasury ledger with dry_run=1, and signs nothing. ON lets it sign real SOL transfers between the treasury and the DBot-facing trading wallet — and only between those two addresses, which are derived from the keys in secrets.json rather than configured anywhere. Read the dry-run ledger rows before arming
bool
default was off
treasury_float_target_usd
Treasury: float target (USD) — How much the DBot-facing wallet is allowed to hold. DBot escrows imported keys with no export and has taken a chain down indefinitely, so this is the maximum we are willing to lose to the vendor. A dollar figure, converted to SOL at the modeled price each tick; a tick with no price SKIPS rather than sizing a transfer off a guess
float · 0.0–100000.0
default was 50.0
treasury_band_high_pct
Treasury: sweep band (%) — Sweep to the treasury only once free SOL is this far ABOVE the float target. A band rather than a line (#2532): on a single threshold a wallet sitting near target transfers on every tick forever, paying a fee each time. The transfer restores the balance to exactly the target
float · 0.0–500.0
default
treasury_band_low_pct
Treasury: top-up band (%) — Top the trading wallet up only once free SOL is this far BELOW the float target. Same hysteresis argument as the sweep band; the transfer restores the balance to exactly the target
float · 0.0–99.0
default
treasury_gas_reserve_sol
Treasury: gas reserve (SOL) — Left untouched in BOTH wallets. Covers transaction fees and rent-exemption; a wallet that cannot pay a fee cannot sell. A top-up the treasury cannot fund without breaching this is REFUSED, never part-filled
float · 0.0–10.0
default was 0.01
treasury_tick_minutes
Treasury: tick cadence (minutes) — How often the float is evaluated. Bookkeeping, not latency-sensitive: the trading wallet drifting a few minutes past its band costs nothing, and a fast cadence just spends RPC reads. Floored at one minute
float · 1.0–1440.0
default
DBot (#2512)
ct_dbot_enabled
DBot lane ENABLED (#2512) — Master switch for writing copy tasks to DBot. OFF = no task is created or edited, whatever a wallet's executor says. A wallet reaches DBot only when this is on AND that wallet's executor column is 'dbot'; nothing in this repo sets the latter — the operator does, one wallet at a time
bool
default was off
ct_dbot_wallet_solana
DBot: Solana execution wallet address — The dedicated, disposable DBot Solana wallet (SolTest). NEVER the Maestro-shared execution wallet. Empty REFUSES the sync on Solana rather than falling back to anything
str
default was
ct_dbot_wallet_evm
DBot: EVM execution wallet address — The dedicated, disposable DBot EVM wallet (BaseTest). NEVER the Maestro-shared execution wallet: DBot's risk posture (#2512) is fresh wallets holding float only. Empty REFUSES the sync for EVM chains rather than falling back to anything
str
default
ct_dbot_max_mc_usd
DBot: max market cap (USD) — Only copy buys into tokens below this market cap. 25000 is the band the operator actually trades; it lives here rather than in a constant because that band moves (#1740). 0 = no ceiling, which reaches DBot as null rather than as 0 (#1620). Maps to buySettings.maxTokenMCUSD
float · 0.0–100000000.0
default
ct_dbot_buy_slippage_pct
DBot: buy slippage (%) — Tolerance the DBot copy engine buys with. Separate from ct_maestro_buy_slippage (default 100, max 1000) because DBot expresses slippage as a FRACTION in (0,1] and Maestro as a percent that legitimately exceeds 100: the same stored number cannot mean both, and reusing it would push "unlimited" on every DBot buy. Maps to buySettings.maxSlippage as pct/100
float · 0.1–100.0
default
ct_dbot_buy_once_per_wallet
DBot: only one buy per token — #1464 in DBot's vocabulary. The copy signal is the lead's FIRST entry into a token; a re-entry is a different signal at a different price. On by default because that rule is not optional on this lane — it is the one the sim book already enforces. Maps to buySettings.buyOncePerWallet
bool
default
ct_dbot_token_safety
DBot: refuse unsafe tokens at BUY time — On this lane nothing of ours runs before a buy: DBot copies the lead on its own and we only hear about the fill afterwards, so the task we push IS the entire pre-trade check. WHAT IT DELIVERS DEPENDS ON THE CHAIN: freeze authority and mint authority everywhere, plus GoPlus honeypot and unverified-source on EVM only — DBot documents those two as "valid for EVM", so on SOLANA THERE IS NO HONEYPOT SCREEN AT BUY TIME whatever this is set to. On by default because the alternative is no buy-time protection at all. Maps to buySettings.skipFreezableToken and skipMintableToken, and to skipHoneyPot and skipNotOpensource on EVM chains
bool
default
ct_dbot_sync_minutes
DBot: sync cadence (minutes) — How often the runner READS BACK and re-verifies every dbot-lane wallet's copy task (#2560). Not a heartbeat: every pass compares the whole landed config against the goal, so this is also how quickly a task edited on DBot's own dashboard is corrected. The full-state rewrite only goes out when that comparison finds a difference (#2661) - an unchanged task is verified, not rewritten. Floored at 60s so a zero cannot busy-loop the price thread it rides on
float · 1.0–1440.0
default
ct_dbot_tasks_armed
DBot: copy tasks ARMED (#2560) — OFF means every task the sync writes is created and kept with `enabled: false`: DBot holds the exact config, echoes it back, and buys nothing. It stays off until the fill consumer (PR 3) and the sell signer by custody (PR 4) are merged, because a task that buys before those exist spends real money into a bag with no position row, no fill reader and no key that can sell it. Arming is an operator act from a browser session; the admin token cannot set it (#1756)
bool
default was off
Maestro
ct_maestro_enabled
Maestro Sync Enabled — Auto-sync top-graded wallets to Maestro" (card note: "Sync approved wallets to Maestro on Telegram for MEV/same-block copy trade buys. Telegram API credentials must be in secre
bool
default was off
ct_maestro_allow_auto_buys
⚠️ Allow Maestro Auto Buys — Master gate. When ON, Maestro spends real funds on detected buys (all chains). Leave OFF until you're ready to trade live." [copy_trade.html:1928-1929]
bool
default was off
ct_maestro_buy_pct
Buy % of the tracked wallet's buy — The percentage of the LEAD's buy Maestro replicates, clipped to Max Buy above — so Max Buy is only a CEILING until this is set high enough to exceed it. 0 = push n
float · 0.0–1000.0
default was 0.0
ct_maestro_buy_slippage
Buy Slippage % (per wallet, when Smart Slippage off) — Pushed to each Live wallet so the per-wallet override matches your intent (the per-wallet value is what Maestro actually uses for buys). On chai
float · 0.1–1000.0
default
ct_maestro_smart_slippage
Smart Slippage — Auto-adjust for token taxes (per wallet)" [copy_trade.html:2112-2113]
bool
default was on
ct_maestro_frontrun_bsc
Frontrun (BSC) — Buy before tracked wallet" [copy_trade.html:2120-2121]
bool
default
ct_maestro_min_liq_enabled
Push Min Liq to Maestro's Auto Buy Checks — When on, every reconcile writes Minimum Liquidity (USD) — the value set in Liquidity Exit above, ct_min_liquidity_usd — into each LIVE wallet's Auto Buy Ch
bool
default was on
ct_maestro_max_mc_usd
Global Max MC ceiling (USD) — The market-cap ceiling for Maestro's GLOBAL Auto Buy Checks (per chain — wallet screens inherit it). 0 = CryptoBot does not own this; Maestro keeps its current value — n
float · 0–1000000
default was 0.0
ct_maestro_max_buy_tax_pct
Push Max Buy Tax % to Maestro — 0 = off (default): nothing is written, Maestro's Buy Tax check is left exactly as you set it. Above 0, every reconcile writes this ceiling into each LIVE wallet's Auto
float · 0.0–100.0
default
ct_maestro_max_sell_tax_pct
Push Max Sell Tax % to Maestro — 0 = off (default), same as above but for the sell side — the honeypot-shaped one, since a token you can buy and cannot sell shows up here first. NOTE: setting it back
float · 0.0–100.0
default
ct_maestro_post_sync_readback
Read back after a sync — On (default, #874): after a successful add, read the wallet's Maestro settings page back and log what it actually holds. Costs one extra read-only Telegram round-trip per add
bool
default
ct_maestro_reconcile_autoheal
Auto-heal on drift — On (default): a reconcile that finds a LIVE wallet's Maestro state out of line re-pushes it, and reverts the wallet to SIM if it cannot. Off leaves the drift in place and only re
bool
default
ct_maestro_reconcile_interval_hours
Reconcile every [n] hours — Sweep cadence. Default 6." [copy_trade.html:2092-2098]
float · 0–8760
default
Maestro buy sizing
ct_maestro_max_buy_base
Max buy — Base (ETH) — Native ETH ceiling written into each LIVE wallet on Base. Default 0.02." [copy_trade.html:2047-2050]
float · 0–10000000
default was 0.02
ct_maestro_max_buy_bsc
Max buy — BSC (BNB) — Native BNB ceiling on BSC. Default 0.08." [copy_trade.html:2053-2056]
float · 0–10000000
default
ct_maestro_max_buy_solana
Max buy — Solana (SOL) — Native SOL ceiling on Solana. Default 0.3." [copy_trade.html:2059-2062]
float · 0–10000000
default
ct_maestro_pct_sizing_enabled
% of Balance Sizing — Nightly, set Max Buy to a % of the execution wallet's USD balance so buys compound as it grows (Base only)" [copy_trade.html:1945-1946]
bool
default
ct_maestro_max_buy_pct
Max Buy % (of balance) — When enabled, this overwrites Default Max Buy nightly (midnight ET). e.g. 1 = 1% of balance." [copy_trade.html:1952-1955]
float · 0.01–100.0
default
Solana
solana_monitor_enabled
Buy Monitor Enabled — Poll the watched Solana wallets for buys via Helius" (card note: "The watch set is automatic: Solana candidates in the ≥60 pool (top score first, max 25) plus active Solana copy
bool
default was off
solana_monitor_poll_sec
Monitor Poll Interval (seconds) — Helius credits: ~1/wallet/poll (≈8.6k credits/day/wallet at 10s) + ~100 per detected-buy history fetch" [copy_trade.html:2567-2570]
float · 3.0–300.0
default
solana_ws_enabled
WS buy detector enabled — Off by default. On, a logsSubscribe socket watches the same wallet set the poller does, and detects a buy in the moment rather than on the next 90s tick. The poller keeps ru
bool
default was off
solana_ws_primary
WS detections are PRIMARY — On (default): a notification triggers the buy path immediately. Off is shadow — the socket detects and logs but never fires a buy, which is the half-step for watching the
bool
default
ct_solana_sim_enabled
Sim Copy-Trading (#1065) — Route detected Solana buys into SIM positions (token gate + $100 fib ladder). OFF = shadow mode, log only. No real funds either way." [copy_trade.html:2559-2560]
bool
default was off
ct_solana_sell_enabled
Solana selling ENABLED (#1559 rung 3) — The master switch for the Solana sell path. OFF = no sell is attempted at all. This is the control to reach for first if Solana sells are behaving badly — it s
bool
default was off
ct_solana_sell_dry_run
Solana sells are DRY RUN — ON = the whole sell path runs against real quotes and stops before signing (rung 2). OFF = sells sign and broadcast for real (rung 3). Turning this ON is the reversible hal
bool
default was on
ct_solana_sell_slippage
Sell slippage (%) — Tolerance on an ordinary laddered sell. Default 10." [copy_trade.html:2615-2618]
float · 0.0–100.0
default
ct_solana_sell_exit_slippage
Exit slippage (%) — The wider tolerance used when the goal is to be OUT — a stop, a rug exit, a full close. Deliberately far above the laddered figure: refusing to fill is the expensive outcome there
float · 0.0–100.0
default
ct_solana_priority_fee_micro_lamports
Priority fee (micro-lamports) — Per-transaction priority fee on the sell path. 0 = none (default). Raise it when sells are landing late in a congested block; it buys inclusion, not price." [copy_trad
int · 0–10000000
default
ct_solana_resolve_luts
Resolve Lookup Tables / v0 Routes (#1789) — OFF = legacy-only quotes, every account inline. ON = accept v0 routes and resolve their address lookup tables before the pre-sign check. Neither arms nor s
bool
default was off
solana_rpc_tiered_ceilings
Enable the tiered daily Helius credit ceilings the RPC fetcher paces against (helius_health + solana_tx_fetcher own the tiers).
bool
default was off
Candidate tracker
candidate_intraday_minutes
Intraday candidate pass (minutes) — Interval between intraday candidate passes. Default 180. The watermark saying when it last ran is candidate_intraday_last_run and is not a setting." [copy_trade.ht
float · 0–10080
default
candidate_pnl_per_position_cap
PnL cap per candidate position (USD) — Ceiling applied to a single tracked position's contribution, so one implausible row cannot carry a wallet's score. Default 2500." [copy_trade.html:2877-2880]
float · 0–10000000
default was 2500.0
ct_intraday_resnapshot_minutes
Intraday score resnapshot (minutes) — 0 = off (default). When on (floored at 15m), today's wallet snapshots are rewritten on this interval by the funnel watchdog, so scores and grades move during the
int · 0–10080
default was 0
tracker_ingest_budget_sec
Per-wallet ingest budget (seconds) — The same bound for the ingest phase (#1734), which the budget above deliberately did not cover. Sampling found the three longest holds in a 69-minute window all i
int · 0–864000
default
tracker_wallet_budget_sec
Per-wallet reprice budget (seconds) — Most wall-clock one wallet's reprice phase may take before the pass moves on (#2243). 0 = no bound. Default 600. A cut wallet keeps every position it already rep
int · 0–864000
default
reprice_hot_age_days
Hot lane ends at (days) — Younger than this is HOT — the fib-active window." (card note: "One coherent trade: API spend against how stale a tracked candidate's price may get. ... Lowering these raise
float · 0–730
default
reprice_warm_age_days
Warm lane ends at (days) — Older than this is COLD. Between the two is WARM." [copy_trade.html:2802-2805]
float · 0–730
default
reprice_ttl_hot_sec
Hot TTL (seconds) — 0 = every pass, which is the default and the point of the lane." [copy_trade.html:2811-2814]
int · 0–864000
default
reprice_ttl_warm_sec
Warm TTL — still moving (seconds) — Peak ≥ 1.2x. Default 21600 (6h)." [copy_trade.html:2819-2822]
int · 0–864000
default
reprice_ttl_warm_flat_sec
Warm TTL — flat (seconds) — Default 43200 (12h)." [copy_trade.html:2825-2828]
int · 0–864000
default
reprice_ttl_cold_sec
Cold TTL — still a runner (seconds) — Peak ≥ 2x. Default 345600 (96h) — above the measured candidate cycle, or the skip can never fire (#2229)." [copy_trade.html:2831-2834]
int · 0–864000
default
reprice_ttl_cold_flat_sec
Cold TTL — never ran (seconds) — The cheapest lane. Default 432000 (120h) — MAX_TRACK_DAYS is still its backstop (#2229)." [copy_trade.html:2837-2840]
int · 0–864000
default
Gecko budget
gecko_rate_limit_per_min
GeckoTerminal rate limit (calls/min per endpoint) — 0 = built-in default (30/min, the vendor's documented keyless ceiling). Applied by the endpoint pool within ~5 minutes, no restart; clamped to 1–30
int · 0–300
default was 0
gecko_tracker_reserved_per_min
GeckoTerminal tracker reserve (calls/min per endpoint) — 0 = off, one shared budget (today's behaviour). Nonzero holds back this many of each endpoint's slots for the candidate-tracker pass so the wa
int · 0–300
default was 0
gecko_rested_endpoints
Rest these exits from the GeckoTerminal lane — Comma-separated endpoint names (as they appear in /api/copy-trade/gecko-stats). A rested exit keeps every other duty — RPC, WSS relay, health probe — an
str
default
gateway_daily_credit_ration
Blockscout gateway daily credit ration — the self-imposed cap on keyed-gateway spend per UTC day, held against the DevPortal allowance. A SETTING rather than a constant because the right number turns on how that ledger renews, and reading it wrong once already cost a month of gateway: 3,000/day came from treating a 100k allowance as monthly, and the portal's renewal countdowns then showed it resets DAILY. 80,000 leaves 20% headroom on a 100k/day allowance. The day's spend is persisted per UTC day, so the ration binds across restarts (#2432).
int · 0–1000000
default
Funnel & misc
funnel_phase_deadline_hour
Phase deadline hour (ET) — The hour by which the nightly phase must have completed. Default 6." [copy_trade.html:2935-2938]
int · 0–23
default
funnel_use_rebased_pnl
Promote on REBASED PnL — Which PnL the promotion decision reads — a decision about real money, and until now one the operator could neither see nor set. On is the default. Turning it off puts the pas
bool
default
ct_validation_alerts_enabled
Validation Alerts — Discord ping on first dry-run BUY and SELL for a Live-mode wallet" [copy_trade.html:1890-1891]
bool
default was off
ct_validation_session_url
Session URL — Embedded in alerts so the operator knows where to paste log excerpts for review" [copy_trade.html:1897-1900]
str
default was
discord_lane_filter
Discord lane filter — Which lane's activity reaches Discord. both is the default." [copy_trade.html:2658-2665]
choice
default was both