AdvancedPlatform / AI Eng

Pin the model agents run — plan on one, execute on another

Neutralize client-side model choice, then split plan mode from execution so a strong model plans and a cheap model executes.

What the community actually complains about

"Our devs flip Claude Code to Opus to summarize a changelog," "everyone has a different model in their settings and we can't see who spent what," "we tried a client-side policy, but anyone can just edit it back."

Model choice is a cost decision, not a developer preference — it has to be enforced at the gateway, where the request actually lands.

How GateLLM does it

Three layers, none skippable: the key group's models allowlist (ingress gate) rejects unauthorized model names with 403; a catch-all model mapping from "*" rewrites whatever the client requests to the sanctioned model; and a before-slot script keeps plan mode on the strong model and switches to the execution model on exit.

Bypass requests — like Claude Code's conversation-title generation — carry no plan marker, so they fall through to the cheap execution model. That is exactly the "don't run Opus on a summary" behavior you wanted.

5 levers that actually land

  • Ingress gate: the key group's models allowlist rejects any unauthorized model name before routing
  • Catch-all mapping: from "*" → to the sanctioned model normalizes every requested name to one model
  • Plan/exec split: a before-slot script reads the plan-mode markers and switches routing only after exiting plan
  • Observable: switched requests get an SW tag in the logs, so every request's real landing model is auditable
  • Hot-reload: mappings and rules take effect immediately — no restart, no per-developer rollout
Full how-to: plan-mode model switch (docs)

FAQ