Хуки
Хуки позволяют вам внедрить пользовательскую логику в рабочий процесс Careti в ключевые моменты. Думайте о них как об автоматизированных контрольных точках, где вы можете проверить операции перед выполнением, контролировать использование инструментов по мере его происхождения и формировать то, как Careti принимает решения.
Хуки запускаются автоматически, когда происходят определённые события во время разработки. Они получают подробную информацию о каждой операции, могут заблокировать проблемные действия перед их выполнением, и могут внедрить контекст, который направляет будущие решения AI.
Настоящая мощь приходит из комбинирования этих возможностей. Вы можете:
- Остановить операции перед тем, как они вызовут проблемы (например, создание файлов
.jsв проекте TypeScript) - Учиться из того, что происходит, и развивать знание проекта с течением времени
- Контролировать производительность и ловить проблемы по мере их возникновения
- Отслеживать всё в целях аналитики или соответствия
- Запускать внешние инструменты или сервисы в правильные моменты
Warning
Хуки в настоящее время поддерживаются только на macOS и Linux. Поддержка Windows недоступна.
Как начать
Включение хуков в Careti просто. Вот что вам нужно сделать:
Включить хуки в параметрах
Откройте параметры Careti и установите флажок "Enable Hooks".
Вы можете найти этот параметр следующим образом:
- Откройте Careti
- Нажмите кнопку "Settings" в верхнем правом углу
- Нажмите на раздел "Feature" в левом меню навигации.
- Прокрутите вниз до тех пор, пока не увидите флажок "Enable Hooks" и установите его.
Выберите размещение хука
Решите, где разместить ваши хуки:
Для личных или организационных хуков:
- Создайте хуки в
~/Documents/.agents/hooks/ - Они автоматически применяются ко всем рабочим областям
Для хуков, специфичных для проекта:
- Создайте хуки в
.agents/hooks/в корневом каталоге вашего проекта - Они применяются только к определённой рабочей области
- Фиксируйте их в контроль версии, чтобы ваша команда могла их использовать тоже
Создайте свой первый хук
Файлы хуков должны иметь точные имена без расширений файлов. Например, для создания хука TaskStart:
# Создать файл хука
vim .agents/hooks/TaskStart
Добавьте ваш скрипт (должен начинаться с shebang)
#!/usr/bin/env bash
# Сохраните введённый ввод в переменную
input=$(cat)
# Дамп всего полезного груза JSON
echo "$input" | jq .
# Получить тип поля
echo "$input" | jq -r '.timestamp | type'
Этот пример скрипта демонстрирует ключевые механики ввода/вывода хука: чтение полезного груза JSON из stdin с помощью input=$(cat), и использование jq для инспекции структуры данных и типов полей, которые ваш хук получает. Это помогает вам понять, какие данные доступны перед созданием более сложной логики хука.
Сделайте его исполняемым
chmod +x .agents/hooks/TaskStart
Протестируйте свой хук
Запустите задачу в Careti и проверьте, выполняется ли ваш хук.
Tip
Начните с простого хука, который просто регистрирует информацию, перед тем как строить сложную логику валидации. Это помогает вам понять структуру данных и время выполнения.
Что вы можете построить
После того, как вы поймёте основы, хуки открывают творческие возможности:
- Логирование и мониторинг: Отслеживайте все операции AI для целей аудита, аналитики или соответствия регуляциям
- Проверка и валидация: Остановите нежелательные операции перед их выполнением
- Контроль инструментов: Управляйте доступом к инструментам и отслеживайте использование
- Интеграция с внешними системами: Запускайте webhooks, запускайте CI/CD конвейеры, отправляйте уведомления
- Формирование знаний: Вводите контекст, который управляет будущими решениями AI
Примеры хуков
Вот несколько распространённых примеров, которые помогут вам начать:
Простой логирующий хук
Этот хук записывает все входящие события в файл для целей аудита:
#!/usr/bin/env bash
input=$(cat)
# Добавить в лог с временной меткой
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $input" >> ~/.agents/hooks/audit.log
# Вывести оригинальный ввод (допустить операцию)
echo "$input"
Хук валидации TypeScript проекта
Этот хук предотвращает создание файлов .js в проектах TypeScript:
#!/usr/bin/env bash
input=$(cat)
# Получить тип события и целевой файл
event=$(echo "$input" | jq -r '.event')
filename=$(echo "$input" | jq -r '.data.path' 2>/dev/null)
# Если это создание файла .js в проекте TypeScript, заблокировать его
if [[ "$event" == "FileCreated" && "$filename" == *.js ]]; then
if [[ -f "tsconfig.json" ]]; then
# Возвратить ошибку для блокирования операции
echo '{"error": "Cannot create .js files in TypeScript projects"}'
exit 1
fi
fi
# Дать разрешение на операцию
echo "$input"
Хук интеграции Slack
Этот хук отправляет уведомления в Slack, когда возникают важные события:
#!/usr/bin/env bash
input=$(cat)
event=$(echo "$input" | jq -r '.event')
# Отправить в Slack только для значимых событий
if [[ "$event" == "ToolCalled" ]]; then
tool=$(echo "$input" | jq -r '.data.toolName')
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\": \"Careti used tool: $tool\"}" \
$SLACK_WEBHOOK_URL
fi
# Разрешить операцию
echo "$input"
Доступные хуки
Careti поддерживает следующие точки хука:
TaskStart- Запускается, когда пользователь отправляет новую задачуMessageAdded- Запускается, когда было добавлено сообщение (AI или пользователь)ToolCalled- Запускается перед выполнением инструментаFileModified- Запускается при изменении файлаCommandExecuted- Запускается перед выполнением командыContextUpdated- Запускается при обновлении контекста AI
Каждый хук получает JSON payload с деталями события, включая временные метки, пути файлов, имена инструментов и другую полезную информацию.
Лучшие практики
- Начните простым: Тестируйте с логированием, прежде чем добавлять сложную логику
- Будьте быстрыми: Хуки должны выполняться быстро, чтобы не замедлять ваш рабочий процесс
- Обрабатывайте ошибки правильно: Возвращайте JSON ошибки с соответствующими кодами выхода для блокирования операций
- Протестируйте тщательно: Убедитесь, что ваши хуки работают на локальной машине перед фиксированием в контроль версии
- Ведите документацию: Наружите документацию о том, что делает ваш хук и почему, особенно для командных хуков
