On this page Структурированная система принятия решений для технических предложений и анализа компромиссов. Когда пользователь сталкивается с выбором между несколькими подходами (архитектурные решения, выбор инструментов, стратегии рефакторинга, пути миграции), этот навык формирует результат в формате 1-3-1: одна чёткая формулировка проблемы, три различных варианта с плюсами/минусами и одна конкретная рекомендация с критериями завершения и планом реализации. Используйте, когда пользователь просит «1-3-1», говорит «дай варианты» или нуждается в помощи с выбором между конкурирующими подходами.
Skill metadata¶
| Источник | Опционально — установите с помощью hermes skills install official/communication/one-three-one-rule |
| Путь | optional-skills/communication/one-three-one-rule |
| Версия | 1.0.0 |
| Автор | Willard Moore |
| Лицензия | MIT |
| Теги | communication, decision-making, proposals, trade-offs |
| ## Reference: full SKILL.md | |
| > info | |
| > Ниже приведено полное описание навыка, которое Hermes загружает при его активации. Вот что агент видит в качестве инструкций, когда навык активен. |
1-3-1 Communication Rule¶
Структурированный формат принятия решений для задач, у которых есть несколько возможных подходов и пользователю нужна чёткая рекомендация. Создаёт краткую формулировку проблемы, три варианта с компромиссами и практичный план для рекомендованного пути.
When to Use¶
- Пользователь явно просит ответ в формате «1-3-1».
- Пользователь говорит «дай варианты» или «какие у меня есть варианты» для технического решения.
- Задача имеет несколько возможных подходов со значимыми компромиссами (архитектура, инструменты, стратегия миграции).
- Пользователю нужно предложение, которое он может направить команде или заинтересованным сторонам.
НЕ используйте для простых вопросов с одним очевидным ответом, сеансов отладки или задач, где пользователь уже выбрал подход.
Procedure¶
- Проблема (одно предложение)
- Сформулируйте ключевое решение или желаемый результат одним кратким предложением.
- Сосредоточьтесь на что, а не как — никаких деталей реализации, названий инструментов или конкретных технологий.
- Будьте лаконичны. Если вам нужно «и», значит, вы описываете две проблемы.
- Варианты (ровно три)
- Представьте три различных возможных подхода, обозначенных A, B, C.
- Каждый вариант получает краткое описание, плюсы и минусы.
- Варианты должны представлять принципиально разные стратегии, а не незначительные вариации одного подхода.
- Рекомендация (один вариант)
- Укажите, какой вариант вы рекомендуете и почему, исходя из контекста и приоритетов пользователя.
- Будьте прямы — это ваше профессиональное суждение, а не уклончивый ответ.
- Критерии завершения (Definition of Done)
- Перечислите конкретные критерии успеха для рекомендованного варианта.
- Это конкретные, проверяемые результаты — не расплывчатые пожелания.
- Если пользователь выбирает другой вариант, пересмотрите этот раздел соответствующим образом.
- План реализации
- Конкретные шаги для выполнения рекомендованного варианта.
- Включайте конкретные команды, инструменты или действия, где это применимо.
- Если пользователь выбирает другой вариант, пересмотрите этот раздел соответствующим образом.
Verification¶
- В ответе ровно одно предложение Проблемы.
- В ответе ровно три Варианта (A, B, C) с плюсами и минусами для каждого.
- В ответе одна Рекомендация, выбирающая один вариант с обоснованием.
- Критерии завершения и План реализации соответствуют рекомендованному варианту.
- Если пользователь выбирает другой вариант, Рекомендация, Критерии завершения и План реализации обновляются соответствующим образом.
Example¶
Пользователь: «Сделай 1-3-1 для добавления логики повторных попыток в наш API-клиент.» Агент: Проблема: API-вызовы к внешним сервисам нестабильно завершаются с ошибками при нагрузке, и требуется корректная обработка повторных попыток. Варианты: * Вариант A: Экспоненциальная задержка с джиттером в общей утилите. Плюсы: Простой, хорошо понятный паттерн; одна реализация, общая для всех вызывающих сторон. Минусы: Нет размыкателя цепи (circuit breaker); вызывающие стороны всё ещё блокируются во время повторных попыток. * Вариант B: Библиотека повторных попыток (tenacity) в качестве декоратора для каждого вызова конечной точки. Плюсы: Настраивается для каждой конечной точки; встроенная поддержка размыкателей цепи и ограничений скорости. Минусы: Добавляет зависимость; паттерн декоратора может затемнять поток управления. * Вариант C: Асинхронные повторные попытки на основе очереди с обработкой недоставленных сообщений (dead letter). Плюсы: Неблокирующий; неудачные вызовы отслеживаются и могут быть повторены; хорошо масштабируется. Минусы: Значительное усложнение; требует бэкенда очереди; избыточно для сервисов с низким объёмом запросов.
Рекомендация: Вариант A. Объём вызовов не оправдывает инфраструктуру очередей, а общая утилита с экспоненциальной задержкой и джиттером чисто покрывает сценарий отказа без новых зависимостей.
Критерии завершения:
* Утилита api_retry() обрабатывает временные HTTP-ошибки (429, 502, 503, 504).
* До 3 повторных попыток с экспоненциальной задержкой и джиттером.
* Все внешние API-вызовы проходят через утилиту повторных попыток.
* Журналирование каждой попытки с указанием конечной точки и номера попытки.
* Тесты покрывают сценарии исчерпания попыток, немедленного успеха и успеха после временного сбоя.
План реализации:
1. Создайте utils/api_retry.py с настраиваемым максимальным количеством попыток, базовой задержкой и повторяемыми кодами состояния.
2. Добавьте джиттер с помощью random.uniform(0, base_delay) для предотвратия эффекта лавины (thundering herd).
3. Оберните существующие API-вызовы в api_client.py утилитой повторных попыток.
4. Добавьте модульные тесты с имитацией HTTP-ответов для каждого сценария повторных попыток.
5. Проверьте под нагрузкой с помощью простого стресс-теста с имитацией нестабильной конечной точки.