Remont Smeta Builder
Запуск Навыка
Этот черновой навык запускайте только при явном вызове по имени или прямой команде пользователя. При одном смысловом совпадении не запускайте навык и не спрашивайте о его применении.
При явном вызове перед первым шагом покажите ровно одну короткую контекстную строку (не более 30 слов) и продолжайте работу в том же ответе, не ожидая реакции:
Применяю черновой навык «Смета ремонта с замерами» (обратная связь — @kir-kopylov): <кратко назовите конкретную пользу для текущего запроса>; продолжаю без ожидания.
Не включайте в строку author_github, внутреннее имя папки или пересказ всего запроса. Не спрашивайте, применять ли навык.
Если одновременно подходят совместимые навыки, выберите минимальный набор и покажите одну общую строку. Если подходы ведут к несовместимым результатам и запрос не позволяет выбрать, спросите только о желаемом результате, не о разрешении применить навык.
Запуск навыка не расширяет полномочия. Выполните всю безопасную и уже разрешённую часть; запросите подтверждение только непосредственно перед ещё не разрешённым внешним или изменяющим действием. Не запрашивайте повторно уже данное разрешение и не дублируйте системное окно подтверждения.
Обзор
Повторяемая боль: договорились на сумму «за всё», а потом начинается «а это входит?» — и конфликт между собственником и мастером, потому что объём не был расписан. Skill превращает это в прозрачный документ: сначала собирает реальный объём (интервью + замеры), потом считает попозиционно по актуальным местным ценам, и только после этого видно, сколько ремонт стоит на самом деле. Никаких выводов «суммы мало или много» до расчёта.
Результат — Excel-книга: «Замеры — проёмы», «Замеры — стены и пол», «Тесты замеров», «Решения и проверки», «Смета» (Раздел 1 / Раздел 2), «Материалы», «Справочники».
Естественные Входы
- «составь смету на ремонт квартиры»
- «посчитай, сколько стоит ремонт»
- «сделай замерный лист и смету в экселе»
- «смета-меню, чтобы не спорить с мастером о цене»
- «проверь, что входит в сумму за ремонт»
Контрфактический Гейт Рабочего Вопроса
Проверку проводи внутренне; пользователю не показывай вероятные ответы и карту изменений.
Перед любым вопросом проведи контрфактическую проверку: Представь наиболее вероятные ответы пользователя. Назови, какое решение, действие или часть результата изменит каждый ответ. Если следующий шаг при всех ответах одинаков — вопрос запрещён. Если пользователь уже зафиксировал выбор — запиши его, не открывай заново. Если неизвестное техническое и его можно проверить самостоятельно — проверь, не спрашивай. Задавай только ближайший вопрос, ответ на который реально меняет результат.
Процесс
- Локация и момент — до всего. Определи город/регион, тип адреса и страну (валюта). По умолчанию НЕ Алматы. Если локация не следует из запроса или переданных материалов и меняет расчёт, спроси первым делом. Зафиксируй текущую дату/год на момент запуска.
0-bis. Состояние между сессиями. Смета собирается не за один заход. Если пользователь приносит уже начатую книгу — открой её (
openpyxl.load_workbook) и продолжи с этой точки, а не собирай заново поверх. Пересборка скриптом поверх существующего файла допустима только с флагом--force; без него — потеряешь весь ранее введённый замер и решения. Носитель состояния — лист «Сводка»: что уже посчитано, что в домашнем задании собственника, что ждёт вскрытия; перед продолжением прочитай его, чтобы не переспрашивать уже известное. 0-tri. Формат вывода. Если формат не указан и выбор меняет способ сдачи, спроси: (1) Excel-файл (локально/по почте) или (2) Google Таблица для совместной онлайн-работы команды (владелец, дизайнер, прораб, мастер, посуточный оператор). По умолчанию Excel. При выборе Google — собери ту же книгу с--format gsheet: скил выдаёт.xlsx+ файл-инструкцию с пошаговым мостом в Google Таблицы и матрицей ролей. Программно таблица пока НЕ создаётся — нужна Google-авторизация (отдельный этап); это ручной мост (Вариант 1). - Интервью по объёму — по одному вопросу. Не выдумывай объём. Каждый следующий вопрос пересобирай с учётом всех предыдущих ответов. Раздели позиции на: считаем сейчас, собственник уточнит (домашнее задание), прояснится только при вскрытии.
- Замерные листы. Строка = один объект (каждая дверь, окно, арка, комната отдельно). Размеры — в миллиметрах в отдельных колонках. Площади, периметры и «стены нетто = брутто − проёмы» — формулами. Никогда не сваливай несколько объектов в одну ячейку.
- Смета-меню. Раздел 1 «делаем точно» и Раздел 2 «может понадобиться» (с диагностикой «когда и как это прояснится»). Тон нейтральный, попозиционная стоимость, без ярлыков «доплата» и обвинений. Отдельные суммы по разделам, резерв на непредвиденное процентом.
- Цены — живые, под локацию и момент. Не переноси числа из примеров. Собери актуальные расценки (работа + материалы) для указанного города: веб-поиск по местным прайсам, агрегаторам и объявлениям, минимум 2–3 источника, с датой и ссылкой. Отдели рыночные ставки от SEO-приманок «от …». Для не-крупного города бери ближайший рынок и помечай допущение. Валюта — по стране.
- Тесты замеров. Отдельный лист с формулами-проверками: обмер против тех.паспорта, разброс высот, проём не больше стены и не выше комнаты, размеры в мм (не см/м), полнота. Подсветка ✗ / ⚠ / OK условным форматированием.
- Материалы. Ведомость с количеством, запасом на подрезку/бой, ценами эконом/комфорт и отдельной суммой; материалы покупает собственник.
- Форензик-самопроверка перед выдачей. Назови, где количества всё ещё допущения, где цены не подтверждены живыми офферами, где скрыт ручной труд (вынос мусора, подъём, штробление).
Технически: книга строится через openpyxl; формулы лучше пересчитать через LibreOffice, при его отсутствии они посчитаются при открытии в Excel/Numbers; ссылки на ячейки ввода оборачивай в N(), чтобы плейсхолдеры и пустые ячейки не давали #VALUE; единицы — выпадающими списками со «Справочника».
Готовый детерминированный сборщик книги — scripts/build_smeta_xlsx.py: на вход --city, --currency, опционально --config (JSON с rooms/openings/materials), на выход — книга со всеми семью листами, формулами N(), выпадающими списками и цветными тестами. Скрипт НЕ заполняет цены и НЕ хардкодит регион. Само по себе отсутствие зашитых цен НЕ гарантирует корректность — корректность даёт живой поиск расценок под локацию плюс гейт цен в книге (каждая цена требует колонок «источник» и «дата» и проходит проверку). Цены в книге без заполненных колонок источник/дата считать неподтверждёнными. Запуск: python3 scripts/build_smeta_xlsx.py --out <путь>.xlsx --city "<город>" --currency <валюта>. Повторный запуск поверх начатой книги перезаписывает ввод только с флагом --force; без него не трогай существующий файл.
Границы
- Не гарантия итоговой цены: смета по живым ценам — это ориентир, а не контракт; финал — после замеров и 2–3 живых офферов.
- Не переносить цены или ставки из примеров на другой город или год — это иллюстрация метода, а не прайс.
- Не предполагать регион или валюту — всегда уточнять.
- Не прыгать к выводу «суммы мало/много» до попозиционного расчёта.
- Не публиковать приватное: адрес, тех.паспорт, кадастровый номер, имена, телефоны; в примерах — только обезличенно («Объект А»).
Опрос После Использования
Опрос задаётся один раз — после передачи готовой Excel-книги со сметой, не посреди рабочего цикла. Если пользователь уже ответил «пропустить» в этой сессии, не переспрашивайте.
Опрос по skill:
1. Что в этом использовании smeta-remonta-do-dogovora было полезно?
2. Что стоит доработать в skill или его формате?
Можно ответить коротко или написать "пропустить".
Если пользователь ответил, сохраните санированную карточку в ~/.codex/skill-runs/smeta-remonta-do-dogovora/usage-feedback.jsonl — лучше через bundled script:
python3 scripts/log_usage_feedback.py --liked "..." --improve "..." --outcome "..."
Script перед записью редактирует приватные пути, контакты и token-like строки и сохраняет redaction_applied и redaction_types. Если запись невозможна из-за sandbox, прав или отсутствия tools, не делайте вид, что лог сохранён: скажите об этом и покажите короткую JSONL-карточку для ручного сохранения. Raw-ответы, контакты, пути и секреты не коммитить.
Логирование Сбоев
Перед выполнением прочитайте локальный known-exceptions.yaml как список уже известных случаев и применяйте подходящее do_next_time без нового поиска.
Если пользователь поправил skill, tool/API/browser упал, нарушен режим работы, пришлось искать workaround или skill сделал ложное предположение, запишите приватную карточку в ~/.codex/skill-runs/<skill-name>/exception-log.jsonl.
Пишите факты: что skill хотел сделать, что сделал, где сломался, какая предпосылка была ложной и что сделать в следующий раз. Если поле неизвестно, пишите unknown. Raw logs не коммитить.