За последнее время наткнулся дважды на эту фичу, и оба раза в контексте что не все знают про такие фичи. Я тоже в свое время не очень знал, но разбирался - поэтому думаю мои исследования могут быть полезны "широким массам" ИИ кодеров.
Итак, у кодекса есть возможность дописать/заменить в системный промпт инструкции.
❓ В чем профит в сравнении с AGENTS.md? В отличиет от AGENTS.md, эти инструкции переживают компакт без сжатия, то есть в неизменном виде. Пишите сюда все что нужно чтобы агент соблюдал всегда, вне зависимости от контекста проекта или задачи: персонализацию под вас, ваши "святые правила", кастомизацию стиля общения. Ну и если вас раздражает как ведет себя кодекс - можно поменять, настроив абсолютно все под себя. Почему просто не дописать в agents.md? потому что будут конфиликты с указанынми инструкциями в системном промпте, поэтому надо править именно сам base instructions файл.
Давайте разберем какие у нас возможности есть.
👉 Кодекс позволяет кастомизировать base_instructions и developer_Instructions.
▶️ base instructions - это и есть главный системный промпт агента. В исходниках - в
codex/codex-rs/protocol/src/prompts/base_instructions/default.md. Вот оно на гитхабе: https://github.com/openai/codex/blob/main/codex-rs/protocol/src/prompts/base_instructions/default.mdСмотрите, читайте. Можно (и улчше всего) на базе этого же свое делать, поменяв только чего вам там не хватает/мешает - например, можно просить подробнее все объяснять.
▶️ developer_Instructions - это возможность дописать на уровне системного промпта свои инструкции, не заменяя системный промпт. Для приверженцев менее радикальных решений.
👉 Как заменять? через параметры запуска:
для base instructions:
codex -c model_instructions_file=/tmp/my-system-prompt.mdcodex exec -c model_instructions_file=/tmp/my-system-prompt.md "сделай задачу"для developer instructions похоже:
codex -c developer_instructions="..."▶️ В ~/.codex/config.toml так:
model_instructions_file = "/absolute/path/to/base_instructions.md"
developer_instructions = """
Твои дополнительные developer-инструкции.
Они не заменяют base_instructions, а добавляются отдельным developer-блоком.
"""
Для профиля:
[profiles.custom]
model_instructions_file = "/absolute/path/to/base_instructions.md"
developer_instructions = "Дополнительные developer-инструкции"
Запуск с профилем:
codex --profile customВажно: model_instructions_file должен быть путем к файлу, а не строкой prompt прямо в TOML.
▶️ Точно работает в CLI, но по логике должно работать и в app.
——
Upd 1️⃣ : забыл сказать - base instructions сохраняются в сессиях (rollout файлы, в метаданных), поэтому без оверрайда при запуске агента старые сессии получают старые инструкции.
——
Upd 2️⃣ : верное дополнение: у моделей могут быть свои инструкции, которые они берут в каталоге моделей вот тут https://github.com/openai/codex/blob/main/codex-rs/models-manager/models.json
При онлайн-режиме Codex ходит в backend /models, получает свежие ModelInfo, мержит их поверх встроенного каталога и кэширует в $CODEX_HOME/models_cache.json. Его тоже можно посмотреть, там свежий тюнинг моделей.
Не сравнивал, но было бы интересно сравнить - что думают разработчики про разные модели, что им надо сказать.
——
Upd 3️⃣: там в кеше моделей еще есть model_messages - это более структурированная замена/надстройка над base_instructions для конкретной модели, вместо строка с готовым system/base prompt у нас шаблон, который может содержать {{ personality }}
именно так инжектим некоторым моделям персоналии. model_messages.instructions_variables — набор вариантов текста для personality, например friendly/pragmatic/none
Если model_messages нет или template пустой, Codex берет обычный base_instructions
Если ты задаешь свой model_instructions_file/baseInstructions, Codex сбрасывает model_messages = None, чтобы твой prompt не смешивался с модельным шаблоном
(ц) удачной кастомизации
@deksden_notes