1. Role separation
Define explicit responsibilities (Analyst = quant report, Boss = directive, Executor = PnL + execution guard) and keep prompts < 4k tokens.
2. Cooldowns & budgets
Use `max_trades_per_hour`, `cooldown_minutes`, and per-role model choices (flagship models for analysis, faster models for executor) to prevent runaway token spend.
3. Semantic stops
Embed instructions like “Reject execution if edge < cost” or “Skip trade if missing market data” to keep the LLM from improvising.
4. Versioning & rollout
Store prompts in `system_prompts.json`, log every update (session logs), and roll out via Brain Control Center with rollback.
5. Analyst template
Start with market regime, liquidity, catalysts, and risk radar. Include explicit hypotheses, target portion of balance, leverage bands, and a JSON summary that Boss/Executor can parse.
6. Boss template
Translate the Analyst’s metrics into directives such as BUY/SELL/HOLD, rationale, stop/target, execution urgency, and whether ErrorWatcher confirms no active incidents.
7. Executor template
Make the Executor prompt deterministic: remind it to check wallet balances, open orders, reduce-only rules, fee impact, and to call `execute_order` only when probability-adjusted payoff is positive.
8. Model routing
Assign flagship models to Analyst when deep reasoning is needed, route Boss to optimized models for concise directives, and pin Executor to a faster, cheaper model for execution. Budget field lives next to each model config.
9. Testing & rollback
Use `/bin/run-script.sh --script force_trade_test.py` in testnet before promoting prompts. Keep prior prompt versions in `session_log_seo_growth.md` and roll back immediately if ErrorWatcher spots anomalies.