# Lab Setup

> Настройка проекта

- Skill: `id-andyyy/lab-setup` (Agent Skill)
- Install (CLI): `npx skillmds@latest add id-andyyy/lab-setup`
- Raw SKILL.md: https://api.skillmd.com/api/skills/id-andyyy/lab-setup/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: id-andyyy (https://skillmd.com/u/id-andyyy)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/id-andyyy/lab-setup

---


Пользователь хочет настроить проект для выполнения лабораторной работы. Нужно проверить окружение, собрать данные о
студенте и работе, распарсить задание и сохранить всё в config.json.

## Что делать

### Шаг 1. Проверка Python

Проверь наличие Python:

1. Выполни `python3 --version` (если не найден — попробуй `python --version`).
2. Если Python найден — запомни путь (например, `python3`).
3. Если Python не найден — сообщи пользователю, что генерация DOCX/PDF не будет работать, а парсинг PDF/DOCX потребует
   ручного ввода текста. Продолжай настройку.

### Шаг 2. Создание venv и установка зависимостей

Если Python найден:

1. Создай виртуальное окружение: `python3 -m venv .claude/lab/venv`
2. Установи зависимости: `.claude/lab/venv/bin/pip install -r .claude/lab/scripts/requirements.txt`
3. На Windows пути через `Scripts/` вместо `bin/`.

Если Python не найден — пропусти этот шаг.

### Шаг 3. Опрос пользователя

Если config.json уже существует (.claude/lab/config.json) — прочитай его, покажи текущие значения и спроси, хочет ли
пользователь что-то изменить. Если хочет — задай только те вопросы, которые нужно обновить.

Если config.json не существует — задай все вопросы через AskUserQuestion (разбей на блоки):

**Блок 1 — студент и учебное заведение:**

1. ФИО студента.
2. Группа студента.
3. Полное название учебного заведения.
4. Город.

**Блок 2 — предмет и работа:**

1. Название предмета/курса.
2. Тип работы: Лабораторная работа / Практическая работа / Задание (для титульного листа). По умолчанию — «Лабораторная работа».
3. Номер лабораторной работы.
4. Название лабораторной работы (или пусто — определим из задания).
5. ФИО преподавателя (рецензента) — опционально, для титульного листа.
6. ОС пользователя, на которой он будет работать (Windows / macOS / Linux — с версией, если знает).

**Блок 3 — предпочтения:**

1. Формат итогового отчёта: docx / pdf / md.
2. Имя итогового файла (без расширения). По умолчанию — `report`. Примеры: `Лабораторная_работа_3`, `ЛР3_Иванов`.
3. Стиль отчёта: первое лицо («я выполнил, я настроил») / безличное («было выполнено, было настроено»).
4. Нужно ли дополнительное исследование в отчёте? (Да / Нет)

### Шаг 4. Поиск и полный парсинг документа

1. Поищи файлы теории и задания (чаще всего это один файл), дополнительные файлы теории, файлы с примерами и
   объяснениями выполнения работы в корне проекта: `*.pdf`, `*.docx`, `*.txt`, `*.md` (исключая CLAUDE.md, README.md,
   report.md, instructions.md).
2. Также проверь наличие изображений теории и задания: `*.png`, `*.jpg`, `*.jpeg` (фото/скан).
3. Если файл с теорией и заданием не найден — попроси пользователя положить файл в корень проекта (возможное имя:
   `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. Анализ задания + уточняющие вопросы

1. Прочитай `.claude/lab/source-material.md` (полный текст документа) и`.claude/lab/assignment.md` (выделенное задание).
2. Определи тип лабораторной работы:
    - `practical` — практическая (настройка ПО, сети, выполнение действий на компьютере)
    - `theoretical` — теоретическая (анализ, описание, сравнение)
    - `programming` — программирование (написание кода)
    - `calculation` — расчётная (вычисления, формулы)
3. Если название ЛР не было указано пользователем — извлеки из текста задания.
4. Если задание требует специфических данных (на какой ОС сидит пользователь/либо какую он будет использовать, версии
   ПО, сетевые настройки, конфигурация системы и т.д.) — задай уточняющие вопросы. Например, даже если сейчас
   пользователь сидит на macOS, необязательно, что он будет выполнять работу (запускать нужный софт) с нее. Полученные
   данные сохрани в `config.system.additional_info`.

### Шаг 6. Шаблон-пустышка (report.docx)

**ВАЖНО:** Почти всегда пользователь предоставляет шаблон-пустышку — DOCX-файл с готовым титульным листом и заголовками
секций (Цели работы, Ход работы, Дополнительное исследование, Выводы). Обычно называется `report.docx`, `ИТОГОВЫЙ
ОТЧЕТ.docx` или `ЛР_N_ФИО.docx`.

**Поиск шаблона:**
1. Поищи DOCX-файлы в корне проекта (кроме example.docx).
2. Если нашёл один DOCX — предположи, что это шаблон, и спроси пользователя для подтверждения.
3. Если нашёл несколько или ни одного — спроси пользователя, как называется файл шаблона.

**Парсинг шаблона для извлечения данных:**

Если шаблон найден — распарсь его через `.claude/lab/venv/bin/python .claude/lab/scripts/parse_assignment.py <файл>` и
извлеки из титульного листа:
- Название учебного заведения
- Название предмета/курса
- Тип работы (Лабораторная / Практическая / Задание)
- Номер работы
- Название работы
- ФИО студента и группу
- ФИО преподавателя (если указан)
- Город

Эти данные используй как значения по умолчанию в опросе (Шаг 3). Не спрашивай то, что уже извлечено из шаблона — просто
покажи извлечённые данные и спроси, всё ли верно. Это сильно сокращает опрос.

**Резервная копия:** При запуске `/lab-report` скрипт автоматически создаёт бэкап шаблона (`.backup`), чтобы при неудачной
вставке можно было восстановить оригинал.

### Шаг 7. Пример готовой лабораторной

Пользователь может также предоставить файл `example.docx` — пример выполненной работы, чтобы понять стиль и объём отчёта.

**Анализ примера:**

1. Найди файл примера в корне проекта (`example.*`, или спроси пользователя, если имя другое).
2. Если файл DOCX/PDF — распарсь через `.claude/lab/venv/bin/python .claude/lab/scripts/parse_assignment.py <файл>`.
   Если изображение — прочитай через Read tool (vision).
3. Если файл DOCX — скопируй его в `.claude/lab/templates/example.docx` (для использования как шаблона стилей при
   генерации документа).
4. Проанализируй содержимое и определи:
   **Уровень детализации текста** (`detail_level`):
    - `"detailed"` — подробное описание каждого действия, пояснения к каждому шагу, развёрнутые формулировки. Типично:
      абзац на каждый пункт задания.
    - `"moderate"` — ключевые действия описаны, есть краткие пояснения, но без избыточной детализации.
    - `"brief"` — лаконичный стиль: что сделано + результат, минимум объяснений.

5. Сообщи пользователю результаты анализа и спроси, всё ли верно.

- Если примера нет — используются стандартные настройки: `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, даже не спрашивай пользователя о нём):

```json
{
    "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

