$npx -y skills add TserenTserenov/FMT-exocortex-template --skill artifactorClassifies raw pilot request → structured JSON {task_type, class, artifact, budget_estimate, confidence, routing_tag, resolution_path}. Keyword-fast (<200ms) or Haiku fallback (<60s). Does NOT create WP or call executor.
| 1 | # /artifactor — Артефактор-Постановщик |
| 2 | |
| 3 | > **Роль:** DP.ROLE.058 Артефактор-Постановщик |
| 4 | > **Триггер:** запрос без routing-tag (Маршрутизатор → Артефактор) или `/artifactor "текст"` |
| 5 | > **Service Clause:** DP.SC.160 |
| 6 | |
| 7 | ## When to use |
| 8 | |
| 9 | Classifies raw pilot request → structured JSON {task_type, class, artifact, budget_estimate, confidence, routing_tag, resolution_path}. Keyword-fast (<200ms) or Haiku fallback (<60s). Does NOT create WP or call executor. |
| 10 | |
| 11 | ## Обещание (контракт) |
| 12 | |
| 13 | **Вход:** сырой текст запроса пилота (любой длины, без routing-tag) |
| 14 | **Выход:** JSON 7 полей → stdout: |
| 15 | |
| 16 | ```json |
| 17 | { |
| 18 | "task_type": "string", |
| 19 | "class": "trivial | closed-loop | open-loop | problem-framing", |
| 20 | "artifact": "string (одна строка на русском — существительное-результат)", |
| 21 | "budget_estimate": "~Xh | ?", |
| 22 | "confidence": "high | low", |
| 23 | "routing_tag": "string", |
| 24 | "resolution_path": "keyword | llm" |
| 25 | } |
| 26 | ``` |
| 27 | |
| 28 | **Инвариант:** |
| 29 | - НЕ создаёт РП, НЕ вызывает исполнителя, НЕ задаёт уточняющих вопросов |
| 30 | - `confidence=high` только при keyword-пути; `confidence=low` при LLM-пути |
| 31 | - При запросе <5 слов: вернуть `{"error": "INSUFFICIENT_INPUT"}`, стоп |
| 32 | - `budget_estimate: "?"` только при `problem-framing` или полной неопределённости |
| 33 | |
| 34 | ## Algorithm |
| 35 | |
| 36 | ### Шаг 1. Keyword-lookup |
| 37 | |
| 38 | Запустить скрипт (возвращает JSON или сигнал): |
| 39 | |
| 40 | ```bash |
| 41 | python3 "${IWE_SCRIPTS:-$HOME/IWE/scripts}/artifactor.py" "$ARGUMENTS" |
| 42 | ``` |
| 43 | |
| 44 | Интерпретация результата: |
| 45 | - **stdout = JSON** (exit 0) → вернуть пилоту, стоп |
| 46 | - **stdout = INSUFFICIENT_INPUT** (exit 1) → вернуть `{"error": "INSUFFICIENT_INPUT"}`, стоп |
| 47 | - **stdout = NO_KEYWORD_MATCH** (exit 2) → перейти к Шагу 2 |
| 48 | |
| 49 | ### Шаг 2. LLM-классификация (fallback при NO_KEYWORD_MATCH) |
| 50 | |
| 51 | Заполнить все 7 полей, используя правила ниже. Вернуть JSON с `resolution_path: "llm"` и `confidence: "low"`. |
| 52 | |
| 53 | **Правила `class`:** |
| 54 | |
| 55 | | Класс | Критерий | |
| 56 | |-------|---------| |
| 57 | | `trivial` | Протокол без неопределённости (day-open, week-close, peer-сессия) | |
| 58 | | `closed-loop` | Чёткая спецификация + известный метод (баг-фикс, миграция, ревью, триаж) | |
| 59 | | `open-loop` | Нет спецификации, нужно генерировать (контент-план, диагностика, сценарии) | |
| 60 | | `problem-framing` | Расплывчато, метод неизвестен (идеи, концепции, «что-то придумать с X») | |
| 61 | |
| 62 | При сомнении — выбирать более широкий класс (open-loop, не closed-loop). |
| 63 | |
| 64 | **Правила `artifact`:** одна строка на русском, существительное-результат. |
| 65 | Примеры: «Список тем для трёх постов», «Диагностический отчёт латентности», «ТЗ сценариев». |
| 66 | |
| 67 | **Правила `budget_estimate`:** |
| 68 | - `trivial` → `~0.5h` |
| 69 | - `closed-loop` → `~2h` (если нет конкретного числа в запросе) |
| 70 | - `open-loop` → `~3h` |
| 71 | - `problem-framing` → `?` |
| 72 | |
| 73 | **Поле `routing_tag`** = значение `task_type` (snake_case). |
| 74 | |
| 75 | ### Шаг 3. Вернуть результат |
| 76 | |
| 77 | Вывести JSON в stdout. Без дополнительных пояснений. |
| 78 | |
| 79 | ## Режим отказа |
| 80 | |
| 81 | | Сценарий | Поведение | |
| 82 | |---------|-----------| |
| 83 | | Запрос < 5 слов | `{"error": "INSUFFICIENT_INPUT"}` | |
| 84 | | Скрипт не найден / сбой | Перейти к Шагу 2 напрямую | |
| 85 | | Запрос на иностранном языке | Классифицировать как есть, `confidence: low` | |
| 86 | |
| 87 | <!-- USER-SPACE --> |
| 88 | <!-- /USER-SPACE --> |