Artifactor
Skill TserenTserenov/FMT-exocortex-template/.claude/skills/artifactor
Exocortex template: fork & deploy your AI-powered personal knowledge system with Claude Code
npx -y skills add TserenTserenov/FMT-exocortex-template --skill artifactorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
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.
SKILL.md
4.9 KB, as published. Nobody here has run it
/artifactor — Артефактор-Постановщик
Роль: DP.ROLE.058 Артефактор-Постановщик
Триггер: запрос без routing-tag (Маршрутизатор → Артефактор) или/artifactor "текст"
Service Clause: DP.SC.160
When to use
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.
Обещание (контракт)
Вход: сырой текст запроса пилота (любой длины, без routing-tag)
Выход: JSON 7 полей → stdout:
{
"task_type": "string",
"class": "trivial | closed-loop | open-loop | problem-framing",
"artifact": "string (одна строка на русском — существительное-результат)",
"budget_estimate": "~Xh | ?",
"confidence": "high | low",
"routing_tag": "string",
"resolution_path": "keyword | llm"
}
Инвариант:
- НЕ создаёт РП, НЕ вызывает исполнителя, НЕ задаёт уточняющих вопросов
confidence=highтолько при keyword-пути;confidence=lowпри LLM-пути- При запросе <5 слов: вернуть
{"error": "INSUFFICIENT_INPUT"}, стоп budget_estimate: "?"только приproblem-framingили полной неопределённости
Algorithm
Шаг 1. Keyword-lookup
Запустить скрипт (возвращает JSON или сигнал):
python3 "${IWE_SCRIPTS:-$HOME/IWE/scripts}/artifactor.py" "$ARGUMENTS"
Интерпретация результата:
- stdout = JSON (exit 0) → вернуть пилоту, стоп
- stdout = INSUFFICIENT_INPUT (exit 1) → вернуть
{"error": "INSUFFICIENT_INPUT"}, стоп - stdout = NO_KEYWORD_MATCH (exit 2) → перейти к Шагу 2
Шаг 2. LLM-классификация (fallback при NO_KEYWORD_MATCH)
Заполнить все 7 полей, используя правила ниже. Вернуть JSON с resolution_path: "llm" и confidence: "low".
Правила class:
| Класс | Критерий |
|---|---|
trivial | Протокол без неопределённости (day-open, week-close, peer-сессия) |
closed-loop | Чёткая спецификация + известный метод (баг-фикс, миграция, ревью, триаж) |
open-loop | Нет спецификации, нужно генерировать (контент-план, диагностика, сценарии) |
problem-framing | Расплывчато, метод неизвестен (идеи, концепции, «что-то придумать с X») |
При сомнении — выбирать более широкий класс (open-loop, не closed-loop).
Правила artifact: одна строка на русском, существительное-результат.
Примеры: «Список тем для трёх постов», «Диагностический отчёт латентности», «ТЗ сценариев».
Правила budget_estimate:
trivial→~0.5hclosed-loop→~2h(если нет конкретного числа в запросе)open-loop→~3hproblem-framing→?
Поле routing_tag = значение task_type (snake_case).
Шаг 3. Вернуть результат
Вывести JSON в stdout. Без дополнительных пояснений.
Режим отказа
| Сценарий | Поведение |
|---|---|
| Запрос < 5 слов | {"error": "INSUFFICIENT_INPUT"} |
| Скрипт не найден / сбой | Перейти к Шагу 2 напрямую |
| Запрос на иностранном языке | Классифицировать как есть, confidence: low |