Stuck-протокол при тупике (3 попытки или 45 мин без progress). STOP + statement + LLM-кворум 3-4 моделей + синтез + 3 подхода пользователю. Триггеры — "/stuck", auto после порогов из tools-allowlist.
Installs into .claude/skills of the current project.
Are you the author of Stuck?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/andrewcigan-stuck)
---
name: stuck
description: Stuck-протокол при тупике (3 попытки или 45 мин без progress). STOP + statement + LLM-кворум 3-4 моделей + синтез + 3 подхода пользователю. Триггеры — "/stuck", auto после порогов из tools-allowlist.
when_to_use: Когда 3 попытки не привели к цели (фича, тест, диагностика). Auto-trigger через 45 мин без commit/test-pass. Не для отсутствующих данных или auth — там прямая эскалация.
---
# /stuck
Формализация правила: «3 попытки — стоп, не 4-я попытка того же».
## Триггеры (auto или manual)
**Auto**:
1. **45 мин без commit/test-pass** (из tools-allowlist.yaml stuck_detector)
2. **3 неуспешных /verify** на одну фичу
3. **2 одинаковых ошибки подряд** (recurrence detect в error-journal)
4. **stage-verifier вернул FAIL 3 раза**
**Manual**:
- Пользователь сказал «в тупике / крутимся / не получается»
## Шаг 0: Эскалация тира ПЕРЕД кворумом (pilotfish N=2)
Прежде чем собирать дорогой LLM-кворум — различи **«модель не тянет»** и **«подход неверен»**:
- Если работа/фича шла на **дешёвом тире** (Sonnet-исполнитель, `implementer`) и провалилась **2 раза** — первая эскалация НЕ кворум, а **поднять тир**: перезапусти задачу на Opus или возьми её в main-session (takeover). **Запрещён 3-й ретрай того же тира** — это и есть залипание.
- Кворум и statement (Шаги 1–6) запускаются, ТОЛЬКО если и **высший тир (Opus) провалил 2 раза** — тогда причина не в модели, а в подходе (нужны принципиально другие гипотезы).
Порядок эскалации: **Sonnet ×2 → Opus ×2 → кворум**. «Додумал размытый план» на дешёвом тире лечится сменой тира, а не кворумом — это дешевле и часто решает.
## Шаг 1: STOP
Немедленно остановить попытки того же подхода. **Не делать 4-ю попытку.**
Зафиксировать в SESSION.md:
```markdown
## Stuck Event YYYY-MM-DD HH:MM
- Active feature: feat-XXX
- Attempts made: 3 (или N)
- Last approach: <описание>
- Trigger: auto / manual
```
## Шаг 2: Создать stuck-statement
Subagent **stuck-protocol-handler** (Sonnet) генерирует `docs/stuck-statements/stuck-YYYY-MM-DD-HHMM.md`:
```markdown
# Stuck Statement — <короткое название>
**Дата**: ISO
**Этап pipeline**: <номер>
**Задача**: <что пытались сделать>
## Цель
[Что должны достичь — метрика / проверяемая формулировка]
## Что делали (все попытки)
### Попытка 1
- Подход: ...
- Результат: ...
- Почему не сработало: ...
### Попытка 2-3
...
## Анализ
### Bottleneck (TOC)
[Где именно застряли — конкретный компонент]
### 5 Whys
1-5. Корневая причина: ...
### Диаграмма Ишикавы (опц.)
Man / Method / Machine / Material / Measurement / Environment — что причина?
## Проверенные и отвергнутые гипотезы
- [гипотеза] — отвергнута потому что ...
## Контекст
- Стек, ограничения, данные
- Эталон если есть
## Открытые вопросы
- Что не знаем
- Что нужно уточнить у пользователя
## Прошу у других LLM
Предложите 3-5 новых подходов, принципиально отличных от перечисленных.
Используйте: Lean (муда, poka-yoke, pull), TOC (настоящий bottleneck),
смена абстракции, альтернативные технологии.
```
## Шаг 3: Кворум LLM
Отправить stuck-statement параллельно в **3-4 LLM** (с budget cap из tools-allowlist):
| LLM | Канал | Cost cap |
|---|---|---|
| Claude (Opus subscription) | Локальный subagent | $0 (подписка) |
| Gemini (cli) | `gemini -p "$(cat statement.md)"` | $0.50 |
| Codex (cli) | `codex -p "$(cat statement.md)"` | $0.30 |
| ChatGPT (через API) | если ключ доступен | $1.00 |
**Hard cap всего кворума**: $5 (из cost_policy). Если бюджет не позволяет — 2 LLM минимум (Claude + Gemini).
Ответы → `docs/research/llm-quorum-<timestamp>-<source>.md`.
## Шаг 4: Synthesizer
Synthesizer subagent читает все ответы и пишет `docs/research/llm-quorum-synthesis-<timestamp>.md`:
```markdown
# Кворум LLM — синтез гипотез
## Триангулированные гипотезы (несколько LLM предложили одно и то же)
1. <гипотеза> — Claude + Gemini — **высокий приоритет**
2. <гипотеза> — Gemini + Codex — **высокий приоритет**
## Уникальные интересные идеи
- <идея> — Codex — почему интересно
- <идея> — ChatGPT — почему интересно
## Отвергнутые (уже пробовали)
- <идея> — источник — причина
## 3 подхода для пользователя
### A: <название>
- Суть (1-2 предложения)
- Оценка времени
- Риск
### B: ...
### C: ...
```
## Шаг 5: Эскалация пользователю
**Формат сообщения (по Quality Gate — НЕ technical A/B):**
```
🚨 /stuck на feat-XXX
3 попытки не привели к цели. Собрал кворум 3 моделей.
Самые перспективные подходы:
A) [название] — суть одной фразой
Время: ~X часов / Риск: <оценка> / Качество: <оценка>
B) [название] — суть одной фразой
Время: ~Y часов / Риск: <оценка>
C) [название] — суть одной фразой
Время: ~Z часов / Риск: <оценка>
Моя рекомендация: B — потому что [одна причина бизнес-языком]
Детали в docs/research/llm-quorum-synthesis-*.md
Какой? (A / B / C / свой вариант)
```
## Шаг 6: Новый подход, не 4-я попытка того же
После выбора:
- feature.state = active (rollback counter обнуляется)
- Старые попытки → в SESSION.md секцию `Decisions Made` как «попробовали, не сработало»
- Новый подход → новая последовательность attempts
## Лимиты
- **Максимум 3 stuck-протокола на фичу.** Если третий — `/escalate-to-human`, остановка плагина, серьёзный разговор.
- **Stuck-statement никогда не удаляется** — архив в `docs/stuck-statements/`. Это история решений.
## Что НЕ stuck (прямая эскалация без протокола)
- Отсутствие критичных данных (нет API ключа, нет доступа) → ASK пользователю напрямую
- Блокер на уровне инфры (нет интернета, сервер не отвечает) → ASK
- Бизнес-вопрос (что важнее — A или B по бизнесу) → ASK
Stuck-протокол — **только для алгоритмического / архитектурного тупика**.
## Anti-patterns
- ❌ 4-я попытка того же подхода — главное правило
- ❌ Кворум из 1 LLM (минимум 2)
- ❌ Послать секреты или приватные данные в внешние LLM — вырезать `<private>` теги
- ❌ Эскалировать пользователю technical A/B — переписать в business-impact формат (Quality Gate)