---
name: codex-bus-system-prompt-gotcha
description: Codex-шина OmniRoute (GUI-режим) игнорирует system-prompt JSON-инструкции и max_tokens — формат ответа класть в USER-сообщение; кросс-проектная грабля для всех ботов
metadata: 
  node_type: memory
  type: project
  originSessionId: 6f344612-b945-4107-b457-8ad2163cd988
---

**Codex через OmniRoute (GUI chatgpt-режим, [[codex-omniroute-provider]]) НЕ уважает system-промпт и max_tokens (обнаружено 2026-07-15 на КодИнвесте).** «Отвечай СТРОГО JSON» в system → модель всё равно пишет markdown-эссе на 10K+ символов; `max_tokens=700` → `completion_tokens=3172, finish_reason=stop`. GUI-шина разбавляет system своей обёрткой.

**Why:** в КодИнвесте это молча убило челленджер-гейт: 12/12 «отклонил без причины», 0 пушей за всю историю ([[investpilot-cebersresearch-voter]], D31). Парс-фейл маскировался под осознанный отказ. Тот же codex как voter работал — потому что там JSON-инструкция была в user-сообщении.

**How to apply (для ЛЮБОГО бота, зовущего codex/* через OmniRoute):**
1. Схему/формат ответа дублировать в **user**-сообщение, не полагаться на system.
2. Толерантный парс + ретрай с напоминанием формата + фолбэк на следующую модель цепочки при не-JSON.
3. Валидировать распарсенный объект по ключевому полю (напр. `verdict`) — регэксп `\{.*\}` выдирает из эссе мусорные фрагменты.
4. Различать в причинах/логах: осознанный отказ модели / не-JSON / LLM недоступна — иначе сбой формата маскируется под решение ([[avtero-delor-honesty-pattern]]).
5. На `max_tokens` для codex/* не рассчитывать (ни как на лимит, ни как на причину обрезки).
