Правила и хуки Codex
С помощью правил и хуков можно настроить поведение Codex так, чтобы оно лучше соответствовало вашему рабочему процессу. В этом разделе подробно описаны обе функции.
Правила
Правила позволяют задавать пользовательские правила поведения для Codex, применяемые ко всем диалогам.
Расположение файла правил
Codex загружает правила из следующих мест:
~/.codex/rules/- Правила уровня пользователя{项目}/.codex/rules/- Правила уровня проекта
Формат файла правил
Создание файла правил
## Стиль кода
- Используйте 4 пробела для отступа
- Максимум 100 символов в строке
- Всегда используйте const/let, а не var
## Соглашения о комментариях
- Публичные функции должны включать комментарии JSDoc
- Добавляйте встроенные комментарии для объяснения сложной логики
- Удалите все console.log, предназначенные для отладки
## Требования к тестированию
- Все новые возможности должны включать тест-кейсы
- Именование тестовых файлов: *.test.js или *.spec.js
## Git-коммит
- Сообщения коммитов используют формат Conventional Commits
- Перед коммитом запускайте lint и тесты
Включить правила
Включите правила в конфигурации
codex_hooks = true
Правила внедряются в системный промпт каждого диалога, гарантируя, что Codex всегда следует вашим стандартам кодирования.
Хуки
Хуки позволяют выполнять пользовательские действия при наступлении определённых событий.
Расположение файла хука
Хуки~/.codex/hooks.jsonнастраиваются в:
Создание конфигурации хука
"hooks": [
{
"event": "on_tool_call",
"match": "shell",
"action": "allow"
},
{
"event": "on_task_complete",
"action": "notify",
"command": "echo 'Task completed'"
}
]
}
Доступные события
| Events | Описание |
|---|---|
on_tool_call | Срабатывание перед вызовом инструмента |
on_task_start | Срабатывание при запуске задачи |
on_task_complete | Срабатывание при завершении задачи |
on_error | Срабатывание при ошибке |
on_message | Срабатывание при получении сообщения |
Действия хука
| Действие | Описание |
|---|---|
allow | Разрешить продолжение операции |
deny | Блокировать действия |
notify | Отправить уведомления |
log | Записать логи |
custom | Выполнить пользовательский скрипт |
Для включения функциональности хуков требуется настройка[features].codex_hooks = true
Практические примеры
Пример 1: Автоматический запуск тестов
Автоматически запускать тесты каждый раз, когда Codex изменяет файл:
Хук автоматического тестирования
"hooks": [
{
"event": "on_tool_call",
"match": "edit_file",
"action": "custom",
"command": "npm test",
"timeout": 60
}
]
}
Пример 2: Обязательное код-ревью
Обязательное код-ревью перед коммитом:
Хук код-ревью
"hooks": [
{
"event": "on_tool_call",
"match": "git_commit",
"action": "custom",
"command": "/review",
"require_approval": true
}
]
}
Пример 3: Логирование
Логировать все выполнения команд:
Хук логирования
"hooks": [
{
"event": "on_tool_call",
"match": "shell",
"action": "log",
"log_file": "/tmp/codex-commands.log"
}
]
}
Разница между правилами и хуками
| Особенности | Правила | Хук |
|---|---|---|
| Время | Когда начинается разговор | Когда срабатывает событие |
| Основное назначение | Определите стандарты кодирования | Действия автоматизации |
| Расположение конфигурации | каталог rules/ | hooks.json |
Правила и хуки можно использовать вместе: правила определяют «как», а хуки определяют «когда».
Лучшие практики
Лучшие практики для правил
- Делайте правила краткими и понятными
- Избегайте чрезмерно строгих ограничений
- Настраивайте правила в соответствии с требованиями проекта
Лучшие практики для хуков
- Избегайте длительно выполняющихся хуков
- Установите разумный тайм-аут
- Тестируйте поведение хуков
Чрезмерное использование хуков может повлиять на производительность Codex, поэтому добавляйте только те хуки, которые действительно нужны.
ЧАВО
Вопрос: правила не применяются?
Убедитесь, что файл правил находится в правильном месте и включён.codex_hooksВозможности.
Вопрос: Заблокирует ли неудачное выполнение Hook операцию?
Это зависит от конфигурации Hook; некоторые сбои Hook заблокируют последующие операции.
Вопрос: Можно ли динамически включать/отключать правила?
Да, вы можете управлять ими через файлы конфигурации или переменные среды.
Другие расширения