Правила и хуки Codex

С помощью правил и хуков можно настроить поведение Codex так, чтобы оно лучше соответствовало вашему рабочему процессу. В этом разделе подробно описаны обе функции.


Правила

Правила позволяют задавать пользовательские правила поведения для Codex, применяемые ко всем диалогам.

Расположение файла правил

Codex загружает правила из следующих мест:

  • ~/.codex/rules/- Правила уровня пользователя
  • {项目}/.codex/rules/- Правила уровня проекта

Формат файла правил

Создание файла правил

# Мои правила кодирования

## Стиль кода
- Используйте 4 пробела для отступа
- Максимум 100 символов в строке
- Всегда используйте const/let, а не var

## Соглашения о комментариях
- Публичные функции должны включать комментарии JSDoc
- Добавляйте встроенные комментарии для объяснения сложной логики
- Удалите все console.log, предназначенные для отладки

## Требования к тестированию
- Все новые возможности должны включать тест-кейсы
- Именование тестовых файлов: *.test.js или *.spec.js

## Git-коммит
- Сообщения коммитов используют формат Conventional Commits
- Перед коммитом запускайте lint и тесты

Включить правила

Включите правила в конфигурации

[features]
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 заблокируют последующие операции.

Вопрос: Можно ли динамически включать/отключать правила?

Да, вы можете управлять ими через файлы конфигурации или переменные среды.

Другие расширения