一键导入
pmm-mister-deploy
End-to-end playbook for deploying a pmm_mister bot on a token — regime analysis, profile selection, config creation, and bot deployment.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
End-to-end playbook for deploying a pmm_mister bot on a token — regime analysis, profile selection, config creation, and bot deployment.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
How total_amount_quote and initial_positions define a controller's isolated capital — the budget a single pmm_mister controller trades with, and how to seed it with base assets you already hold so each controller is independent from the wider portfolio.
Run the MM bot status report: running bots, open/hold-mode positions, closed position breakdown (TP/SL/Early/Hold), PnL, volume, and error summary.
Ready-to-deploy pmm_mister config profiles (aggressive / balanced / conservative) — full parameter coverage including spreads, effectivization times, tolerance, order types, skew, and global TP/SL.
On hyperliquid_perpetual, tokenized perp contracts (equities/pre-IPO names like SPCX-USD) are issued by a provider and require an issuer prefix in the trading pair (e.g. XYZ:SPCX-USD, not SPCX-USD).
Create and operate autonomous trading agents the minimal way — create the agent from just its role + purpose, prove it's alive by consulting it, then progressively improve it with routines and (optionally) a loop strategy.
The single reference for writing Condor routines — fetching Hummingbot data, parallel calls, reports/charts, continuous loops, and candlestick charts. Routes to a companion file per topic.
| name | pmm_mister_deploy |
| description | End-to-end playbook for deploying a pmm_mister bot on a token — regime analysis, profile selection, config creation, and bot deployment. |
| when_to_use | When asked to set up, deploy, or launch a market making bot on a token/pair. This is the autonomous deployment flow — follow it when running as a delegate task. |
| created | 2026-07-02T10:31:11Z |
| source | agent:market_making_expert |
Full end-to-end flow for deploying a pmm_mister market making bot on a given
pair. Follow these steps in order. You are running as a background delegate —
no user confirmation mid-flow. Be decisive and complete the deployment.
When managing a running pmm_mister bot, there are two independent config stores:
| Layer | What it is | How to modify |
|---|---|---|
| Saved controller config | The template on disk (used for future deployments) | manage_controllers(action="upsert", target="config", ...) |
| Live bot config | The running bot's in-memory config (affects live behavior immediately) | manage_bots(action="update_config", bot_name=..., config_name=..., config_data=...) |
Critical rule: these stores are independent. Updating one does NOT update the other. When asked to update a parameter:
manage_bots(action="status") before updating live config.manage_bots(action="status") or check manage_bots(action="logs", bot_name=<guess>) which returns available bots on 404.confirm_override=True for both manage_controllers upsert and manage_bots update_config.Fetch candles for the target pair (1h, last 7 days) and current price:
get_market_data(data_type="candles", connector_name=<connector>, trading_pair=<pair>, interval="1h", days=7)
get_market_data(data_type="prices", connector_name=<connector>, trading_pairs=[<pair>])
If the pair is on a perpetual connector, also fetch funding rate:
get_market_data(data_type="funding_rate", connector_name=<connector_perpetual>, trading_pair=<pair>)
Use the candle data to classify the current regime:
When in doubt, default to Balanced.
Load the profile companion file from the pmm_config_playbook skill:
manage_skill(action="read_file", name="pmm_config_playbook", file="config_<profile>.md")
Where <profile> is aggressive, balanced, or conservative.
Take the JSON block from the template and substitute the actual values:
connector_name — the target connectortrading_pair — the target pairtotal_amount_quote — from the task context (user-specified or strategy risk limit)leverage — from task context; if not specified use the template default; always 1 for spotAlso validate:
total_amount_quote × portfolio_allocation ÷ number_of_levels must exceed the exchange's minimum notional (typically $5–10 on Binance spot, $20 on perps). If not, increase total_amount_quote or reduce levels.take_profit must exceed round-trip maker fee (e.g. if fee is 0.02%, take_profit ≥ 0.04%).price_distance_tolerance — re-entry gate after a fill:
X × (1 - price_distance_tolerance).buy_cooldown_time / sell_cooldown_time — time gate after a fill:
max_active_executors_by_level — max simultaneous open orders per level:
manage_controllers(
action="upsert",
target="config",
controller_name="pmm_mister",
config_name="<auto-generated: NNN_pmm_<connector>_<pair>>",
config_data=<adapted config dict>
)
manage_bots(
action="deploy",
bot_name="pmm_<pair>_<timestamp>",
controllers_config=["<config_name from step 5>"],
account_name="master_account"
)
After deployment:
manage_bots(action="status") to confirm the bot is running.When the task completes, return a concise summary:
min_base_pct, max_base_pct, and target_base_pct are not just deploy-time settings.
They are primary active management levers — the main way to express a market opinion
or unblock a stuck bot without redeploying. They can be mutated live at any time via
manage_bots(action="update_config", ...) with immediate effect.
Default baseline: target_base_pct=0.5, min_base_pct=0.3, max_base_pct=0.7
(symmetric, no directional bias, bot quotes both sides freely)
Constraint that must always hold: min_base_pct < target_base_pct < max_base_pct
Symptoms: Market drifting down, position_profit_protection is blocking new sells,
base inventory accumulating above max_base_pct, bot effectively stopped quoting.
Cause: The bot's ceiling (max_base_pct) is too low for the current inventory level.
Once base holdings exceed max_base_pct, buys are suppressed and the bot stalls.
Fix — raise all three values upward:
target_base_pct: 0.5 → 0.65
min_base_pct: 0.3 → 0.45
max_base_pct: 0.7 → 0.85
This tells the controller "holding more base is acceptable now" — it can resume quoting within the new band and will skew toward selling to reach the new (higher) target.
When to apply: bot is clearly accumulating inventory in a downtrend and has stopped
placing meaningful sell orders, or position_profit_protection is trapping base exposure.
Symptoms: Bot is long and in profit, but the position is sitting in "hold" mode (effectivization expired, waiting for global TP). You want to actively skew the bot toward selling rather than waiting passively.
Fix — lower all three values downward:
target_base_pct: 0.5 → 0.35
min_base_pct: 0.3 → 0.15
max_base_pct: 0.7 → 0.55
This shifts the target to quote-heavy. The controller will treat current base holdings as overweight and skew its quoting aggressively toward sells, effectively draining the position into the market without a hard close.
When to apply: accumulated unrealized profit you want to realize progressively,
or you want to reduce base exposure after a strong move up without a hard manual_kill_switch.
Use these params to encode a market opinion without changing spreads or allocation size:
Bullish (want to hold more base, take more upside risk):
target_base_pct: 0.5 → 0.60
min_base_pct: 0.3 → 0.40
max_base_pct: 0.7 → 0.80
Bot will buy more aggressively and be slower to sell, accumulating base as the market rises.
Bearish (want to reduce base exposure, stay quote-heavy):
target_base_pct: 0.5 → 0.40
min_base_pct: 0.3 → 0.20
max_base_pct: 0.7 → 0.60
Bot will sell more aggressively and be slower to buy, staying lighter on base.
When to apply: regime has shifted (e.g. trending up → raise target; breaking down → lower target), or user expresses a directional view and wants the bot to lean into it.
Always update both the live bot and the saved config:
# 1. Update the live bot (immediate effect)
manage_bots(
action="update_config",
bot_name=<running_bot_name>,
config_name=<controller_config_name>,
config_data={
"target_base_pct": <new_value>,
"min_base_pct": <new_value>,
"max_base_pct": <new_value>
},
confirm_override=True
)
# 2. Persist to saved config (so a future redeploy uses the same values)
manage_controllers(
action="upsert",
target="config",
controller_name="pmm_mister",
config_name=<controller_config_name>,
config_data={..., "target_base_pct": <new>, "min_base_pct": <new>, "max_base_pct": <new>},
confirm_override=True
)
Proactive monitoring: when checking bot health (e.g. via the mm_bot_report skill),
always note the current base/quote split from get_portfolio_overview. If base holdings
are near or above max_base_pct, flag it and suggest raising the band or lowering target.
If the bot is far below min_base_pct, flag it and suggest lowering the band.
⚠️ Hard constraint: controllers are fixed at deploy time. You CANNOT add a new controller to an already-running bot. The
controllers_configlist is set when the bot is deployed and is immutable for that bot's lifetime.manage_bots update_configandstop/start_controllersonly operate on controllers that were included at deploy time — you cannot inject new ones into a live bot.Plan A/B testing BEFORE you deploy. If you think you may want to compare configs later, include multiple controllers from the start. For a bot that is already running, the only lever is mutating the configs of its existing controllers.
Instead of deploying one controller per bot and mutating its config over time to find best parameters, you can deploy multiple controllers with different parameter sets inside the same bot. This enables a live A/B comparison — each controller runs with its own config on an allocated slice of capital, so you observe which params perform better in real market conditions simultaneously.
This is strictly better than sequential testing: sequential tests run under different market conditions, making results incomparable. Simultaneous controllers share the same conditions.
Timing: raise this option with the user BEFORE deploying. Once the bot is running, A/B is no longer possible without a full redeploy. Ask the user upfront: "Do you want to A/B test two parameter sets simultaneously?"
1. Create variant configs — upsert two (or more) controllers with the differing params. Use a naming convention that makes the variant clear:
NNN_pmm_<connector>_<PAIR>_variantA ← e.g. tight spreads, short cooldown
NNN_pmm_<connector>_<PAIR>_variantB ← e.g. wider spreads, longer cooldown
Split total_amount_quote proportionally across variants (e.g. $500 each if total budget is $1000).
Each controller's allocation is independent — they do NOT share capital.
2. Deploy a single bot with both controllers:
manage_bots(
action="deploy",
bot_name="pmm_<pair>_ab_<timestamp>",
controllers_config=[
"NNN_pmm_<connector>_<PAIR>_variantA",
"NNN_pmm_<connector>_<PAIR>_variantB"
],
account_name="master_account"
)
manage_bots deploy accepts a list — both controllers run inside the same bot process,
each with its own executor set and capital allocation.
3. Verify both controllers are active:
manage_bots(action="status")
manage_executors(action="list", bot_name=<bot_name>)
Confirm executors appear for both config names.
You cannot add new controllers. The only levers are:
manage_bots(action="update_config", ...) —
changes take effect live but you can only change params of controllers already in the bot.stop_controllers to effectively
pause a variant — but this is not the same as replacing it with a new one.controllers_config list if you need a true A/B setup that wasn't planned at launch.After sufficient runtime (typically 24–48h), compare performance:
Promote the winner: upsert its config as the canonical (non-variant) name and redeploy a
clean single-controller bot, or simply stop the losing variant via manage_controllers
while the bot keeps running.