Пользователь хочет настроить проект для выполнения лабораторной работы. Нужно проверить окружение, собрать данные о студенте и работе, распарсить задание и сохранить всё в config.json.
Что делать
Шаг 1. Проверка Python
Проверь наличие Python:
- Выполни
python3 --version(если не найден — попробуйpython --version). - Если Python найден — запомни путь (например,
python3). - Если Python не найден — сообщи пользователю, что генерация DOCX/PDF не будет работать, а парсинг PDF/DOCX потребует ручного ввода текста. Продолжай настройку.
Шаг 2. Создание venv и установка зависимостей
Если Python найден:
- Создай виртуальное окружение:
python3 -m venv .claude/lab/venv - Установи зависимости:
.claude/lab/venv/bin/pip install -r .claude/lab/scripts/requirements.txt - На Windows пути через
Scripts/вместоbin/.
Если Python не найден — пропусти этот шаг.
Шаг 3. Опрос пользователя
Если config.json уже существует (.claude/lab/config.json) — прочитай его, покажи текущие значения и спроси, хочет ли пользователь что-то изменить. Если хочет — задай только те вопросы, которые нужно обновить.
Если config.json не существует — задай все вопросы через AskUserQuestion (разбей на блоки):
Блок 1 — студент и учебное заведение:
- ФИО студента.
- Группа студента.
- Полное название учебного заведения.
- Город.
Блок 2 — предмет и работа:
- Название предмета/курса.
- Тип работы: Лабораторная работа / Практическая работа / Задание (для титульного листа). По умолчанию — «Лабораторная работа».
- Номер лабораторной работы.
- Название лабораторной работы (или пусто — определим из задания).
- ФИО преподавателя (рецензента) — опционально, для титульного листа.
- ОС пользователя, на которой он будет работать (Windows / macOS / Linux — с версией, если знает).
Блок 3 — предпочтения:
- Формат итогового отчёта: docx / pdf / md.
- Имя итогового файла (без расширения). По умолчанию —
report. Примеры:Лабораторная_работа_3,ЛР3_Иванов. - Стиль отчёта: первое лицо («я выполнил, я настроил») / безличное («было выполнено, было настроено»).
- Нужно ли дополнительное исследование в отчёте? (Да / Нет)
Шаг 4. Поиск и полный парсинг документа
- Поищи файлы теории и задания (чаще всего это один файл), дополнительные файлы теории, файлы с примерами и
объяснениями выполнения работы в корне проекта:
*.pdf,*.docx,*.txt,*.md(исключая CLAUDE.md, README.md, report.md, instructions.md). - Также проверь наличие изображений теории и задания:
*.png,*.jpg,*.jpeg(фото/скан). - Если файл с теорией и заданием не найден — попроси пользователя положить файл в корень проекта (возможное имя:
theory_and_task.pdf,theory_and_task.docx,theory_and_task.txtилиtheory_and_task.md) и повтори поиск.
Полный парсинг документа:
Парси все найденные документы целиком (не только задание, но и теорию, методические указания, примеры — всё, что ты нашел). Цель — сохранить полный контекст исходных документов в удобном для агента формате: текст + ссылки на извлечённые изображения + описание каждого изображения (чтобы агенту было проще понимать, что на нем изображено не смотря каждый раз на него). Описание изображения должно быть максимально подробным.
- Если есть venv и файл PDF/DOCX — запусти полный парсинг для каждого файла:
Скрипт извлечёт весь текст и все изображения из каждого документа. Изображения сохранятся в.claude/lab/venv/bin/python .claude/lab/scripts/parse_assignment.py --full --images-dir .claude/lab/source-images <файл>.claude/lab/source-images/, а текст будет содержать Markdown-ссылки на них. - Если файл TXT/MD — прочитай через Read tool (изображений в таких файлах нет).
- Если файл — изображение (PNG/JPG) — прочитай через Read tool (vision), извлеки весь текст.
Сохрани полный результат файла с теорией и заданием в .claude/lab/source-material.md, а все вспомогательные файлы в
.claude/lab/reference-docs/.
Извлечение задания:
Из полного текста в source-material.md выдели часть, которая является непосредственно заданием (без теории и
методических указаний), и сохрани в .claude/lab/assignment.md. Если весь документ — это задание (нет отдельной
теории), скопируй целиком.
Шаг 5. Анализ задания + уточняющие вопросы
- Прочитай
.claude/lab/source-material.md(полный текст документа) и.claude/lab/assignment.md(выделенное задание). - Определи тип лабораторной работы:
practical— практическая (настройка ПО, сети, выполнение действий на компьютере)theoretical— теоретическая (анализ, описание, сравнение)programming— программирование (написание кода)calculation— расчётная (вычисления, формулы)
- Если название ЛР не было указано пользователем — извлеки из текста задания.
- Если задание требует специфических данных (на какой ОС сидит пользователь/либо какую он будет использовать, версии
ПО, сетевые настройки, конфигурация системы и т.д.) — задай уточняющие вопросы. Например, даже если сейчас
пользователь сидит на macOS, необязательно, что он будет выполнять работу (запускать нужный софт) с нее. Полученные
данные сохрани в
config.system.additional_info.
Шаг 6. Шаблон-пустышка (report.docx)
ВАЖНО: Почти всегда пользователь предоставляет шаблон-пустышку — DOCX-файл с готовым титульным листом и заголовками
секций (Цели работы, Ход работы, Дополнительное исследование, Выводы). Обычно называется report.docx, ИТОГОВЫЙ ОТЧЕТ.docx или ЛР_N_ФИО.docx.
Поиск шаблона:
- Поищи DOCX-файлы в корне проекта (кроме example.docx).
- Если нашёл один DOCX — предположи, что это шаблон, и спроси пользователя для подтверждения.
- Если нашёл несколько или ни одного — спроси пользователя, как называется файл шаблона.
Парсинг шаблона для извлечения данных:
Если шаблон найден — распарсь его через .claude/lab/venv/bin/python .claude/lab/scripts/parse_assignment.py <файл> и
извлеки из титульного листа:
- Название учебного заведения
- Название предмета/курса
- Тип работы (Лабораторная / Практическая / Задание)
- Номер работы
- Название работы
- ФИО студента и группу
- ФИО преподавателя (если указан)
- Город
Эти данные используй как значения по умолчанию в опросе (Шаг 3). Не спрашивай то, что уже извлечено из шаблона — просто покажи извлечённые данные и спроси, всё ли верно. Это сильно сокращает опрос.
Резервная копия: При запуске /lab-report скрипт автоматически создаёт бэкап шаблона (.backup), чтобы при неудачной
вставке можно было восстановить оригинал.
Шаг 7. Пример готовой лабораторной
Пользователь может также предоставить файл example.docx — пример выполненной работы, чтобы понять стиль и объём отчёта.
Анализ примера:
Найди файл примера в корне проекта (
example.*, или спроси пользователя, если имя другое).Если файл DOCX/PDF — распарсь через
.claude/lab/venv/bin/python .claude/lab/scripts/parse_assignment.py <файл>. Если изображение — прочитай через Read tool (vision).Если файл DOCX — скопируй его в
.claude/lab/templates/example.docx(для использования как шаблона стилей при генерации документа).Проанализируй содержимое и определи: Уровень детализации текста (
detail_level):"detailed"— подробное описание каждого действия, пояснения к каждому шагу, развёрнутые формулировки. Типично: абзац на каждый пункт задания."moderate"— ключевые действия описаны, есть краткие пояснения, но без избыточной детализации."brief"— лаконичный стиль: что сделано + результат, минимум объяснений.
Сообщи пользователю результаты анализа и спроси, всё ли верно.
- Если примера нет — используются стандартные настройки:
detail_level = "detailed", стили по ГОСТ.
Шаг 8. Определение workflow
Спроси пользователя: нужна ли пошаговая инструкция (instructions.md), или сразу перейти к черновику отчёта?
Подсказка:
- Если тип работы
practical— рекомендуй инструкцию (/lab-instructions). - Если тип
theoretical,programmingилиcalculation— рекомендуй сразу черновик (/lab-draft).
Шаг 9. Сохранение config.json
Сохрани все собранные данные в .claude/lab/config.json (поле can_edit в template всегда должно быть true, даже не спрашивай пользователя о нём):
{
"student": {
"name": "ФИО студента",
"group": "Группа"
},
"institution": {
"name": "Полное название учебного заведения",
"city": "Город"
},
"course": {
"name": "Название предмета",
"lab_type": "Лабораторная работа",
"lab_number": 1,
"lab_title": "Название лабораторной работы",
"reviewer": null
},
"preferences": {
"report_format": "docx",
"output_filename": "report",
"report_style": "first_person",
"no_title_page": false,
"needs_research": false,
"needs_instructions": true
},
"system": {
"os": "ОС пользователя",
"python_path": "python3",
"venv_python": ".claude/lab/venv/bin/python",
"additional_info": {}
},
"example": {
"has_example": false,
"example_path": null,
"detail_level": "detailed",
"style_notes": ""
},
"template": {
"has_template": false,
"example_path": null,
"can_edit": true
},
"assignment": {
"original_file": "task.pdf",
"source_material_file": ".claude/lab/source-material.md",
"source_images_dir": ".claude/lab/source-images",
"parsed_file": ".claude/lab/assignment.md",
"type": "practical"
}
}
Значения report_style: "first_person" (я выполнил), "impersonal" (было выполнено), "result_only" (только результаты, без описания процесса — минимальный отчёт).
Значения lab_type: "Лабораторная работа", "Практическая работа", "Задание" (используется на титульном листе).
reviewer: ФИО преподавателя или null (если не указан — строка преподавателя не выводится на титульном листе).
no_title_page: true — не создавать титульный лист при генерации DOCX (для работ без титульника).
Если Python не установлен: python_path и venv_python = null.
Шаг 10. Итог
Покажи пользователю итоговую конфигурацию в читаемом виде. Затем сообщи, что делать дальше:
- Если
needs_instructions= true → «Следующий шаг:/lab-instructions» - Если
needs_instructions= false → «Следующий шаг:/lab-draft»
Дополнительный контекст от пользователя
$ARGUMENTS