HgHermesGrass
Черновик. Материалы проходят проверку на Hermes Agent v0.19.0. Непроверенные и устаревшие блоки помечены отдельно.
Требует проверки

hooks.yaml шаблон

Экспериментальный guardrails/hooks пример. Не готовый шаблон. Шаблон показан полностью прямо на сайте.

Важно: не вставляй реальные API-ключи, пароли и токены в публичные шаблоны или Telegram-чат.
Не применяйте этот конфиг до проверки синтаксиса на текущей версии Hermes. Код затемнён, Copy отключён.
hooks.yaml шаблон
Copy disabled
# ═══════════════════════════════════════════
# Hermes Agent -- hooks.yaml шаблон
# Положи рядом с агентом (~/.hermes/hooks.yaml)
# Хуки -- скрипты-охранники: проверяют каждое
# действие агента ДО выполнения
# ═══════════════════════════════════════════

hooks:

  # ─── Перед действием с инструментом ───
  # Блокирует опасные команды до их выполнения
  pre_tool_call:

    # Хук 1: блокировка rm за пределами рабочей папки
    - command: "python3 hooks/block-rm.py"
      matcher: "bash"
      timeout: 30

    # Хук 2: защита критичных файлов (.env, память, конфиг)
    - command: "python3 hooks/protect-files.py"
      matcher: "bash|file_write"
      timeout: 30

  # ─── После действия с инструментом ───
  # Логирование, проверка результата
  post_tool_call:

    # Хук 3: запись всех изменений файлов в лог
    - command: "python3 hooks/audit-log.py"
      matcher: "file_write|bash"
      timeout: 10

  # ─── Перед обращением к AI-модели ───
  # Подкидывает свежие данные в контекст
  pre_llm_call:

    # Хук 4: инжекция актуального состояния системы
    - command: "bash hooks/inject-context.sh"


# ═══════════════════════════════════════════
# СКРИПТЫ ХУКОВ
# Создай папку hooks/ рядом с hooks.yaml
# и положи туда эти файлы
# ═══════════════════════════════════════════

# --- hooks/block-rm.py ---
# Блокирует rm -rf за пределами рабочей папки
#
# import sys, json
# data = json.load(sys.stdin)
# cmd = data.get('tool_input', {}).get('command', '')
# if 'rm -rf' in cmd and '/workspace' not in cmd and '/tmp' not in cmd:
#     print(json.dumps({
#         'decision': 'block',
#         'reason': 'rm -rf вне рабочей папки запрещён'
#     }))

# --- hooks/protect-files.py ---
# Блокирует запись в .env, конфиг и файлы памяти
#
# import sys, json
# data = json.load(sys.stdin)
# cmd = data.get('tool_input', {}).get('command', '')
# protected = ['.env', 'config.yaml', 'agent-memory.md', 'SOUL.md']
# for f in protected:
#     if f in cmd and 'cat' not in cmd and 'grep' not in cmd:
#         print(json.dumps({
#             'decision': 'block',
#             'reason': f'Изменение {f} заблокировано хуком'
#         }))
#         break

# --- hooks/audit-log.py ---
# Записывает все изменения файлов в лог
#
# import sys, json, datetime
# data = json.load(sys.stdin)
# tool = data.get('tool_name', '')
# cmd = data.get('tool_input', {}).get('command', '')
# ts = datetime.datetime.now().isoformat()
# with open('hooks/audit.log', 'a') as f:
#     f.write(f'{ts} | {tool} | {cmd[:200]}\n')

# --- hooks/inject-context.sh ---
# Подкидывает актуальное состояние системы перед каждым запросом к модели
#
# #!/bin/bash
# DISK=$(df -h / | awk 'NR==2{print $5}')
# MEM=$(free -m 2>/dev/null | awk 'NR==2{printf "%.0f%%", $3/$2*100}' || echo "N/A")
# DATE=$(date '+%Y-%m-%d %H:%M')
# echo "{\"context\": \"Сейчас $DATE. Диск: $DISK. Память: $MEM.\"}"