# Sdat

> Сдача практических заданий Академии Hamidun прямо из Claude Code. Использовать, когда ученик говорит «сдать задание», «сдай задание N», «отправь задание на проверку», «проверь моё задание», «submit homework», «сдать дз». Скилл берёт персональный токен ученика из ~/.claude/hamidun.env, собирает артефакт (код, текст, ссылку на репозиторий) и отправляет его в LMS на автопроверку — вердикт (зачтено / нужна доработка) и фидбек приходят в Telegram/на почту и в кабинет academy.hamidun.com.

- Skill: `jhamidun/sdat` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add jhamidun/sdat`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jhamidun/sdat/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: JHamidun (https://skillmd.com/u/jhamidun)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/jhamidun/sdat

---


# Сдать задание (Академия Hamidun)

Ученик сдаёт домашние и задания «на звонке» тем же агентом, в котором работает.
Скилл вызывает `scripts/submit.py` (без внешних зависимостей — только стандартная
библиотека Python 3). Сдача уходит в LMS `POST /api/submit`, автопроверку делает
проверяющий-агент, вердикт приходит ученику в Telegram/на почту.

## Перед первой сдачей — токен

Ученику нужен персональный токен сдачи (формат `hs_...`). Он лежит в кабинете:
**academy.hamidun.com → раздел «Эфиры» → блок «Сдача заданий через Claude Code»**.
Токен надо один раз положить строкой в `~/.claude/hamidun.env`:

```
HAMIDUN_SUBMIT_TOKEN=hs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

Если файла нет — создай его. Токен персональный, привязан к участнику потока;
он один и тот же для всех заданий. Если токена нет — скажи ученику, где его взять
(текст выше), и не пытайся угадывать.

## Как действовать (для агента)

1. **Определи номер задания.** Из фразы ученика («сдать задание 3» → номер 3).
   Если номер не назван — запусти `list` (см. ниже) и спроси, какое из заданий сдаём.
2. **Собери артефакт** — что именно ученик сделал:
   - **код/текст** → `--type text` c `--content-file <файл>` (предпочтительно) или
     `--content "..."`. Если работа — это файл(ы) в проекте, отправь текст самого
     значимого файла или короткое связное описание сделанного + ключевой код.
   - **репозиторий/gist/ссылка** → `--type link --url https://...`. Хорошо для
     больших проектов (артефакт > 2 МБ текстом не принимается — только ссылкой).
   - Всегда добавляй короткое человеческое описание того, что сделано, если
     задание это подразумевает — проверяющий читает и описание, и артефакт.
3. **Покажи ученику, что именно отправляешь**, и отправь.
4. **Покажи ответ сервера** дословно: принято / уже на проверке / уже зачтено.
   Напомни: вердикт и фидбек придут в Telegram/на почту и в кабинет — здесь мы
   только отправили работу, оценивает её проверяющий асинхронно (пара минут).
5. Если пришёл `needs_work` (ученик вернулся дорабатывать) — поправь по фидбеку и
   сдай снова: та же команда, попытка увеличится автоматически.

## Команды

Показать список заданий и их статусы (что сдавать, что уже зачтено):

```bash
python "$HOME/.claude/skills/sdat/scripts/submit.py" list
```

Сдать задание текстом из файла:

```bash
python "$HOME/.claude/skills/sdat/scripts/submit.py" submit \
  --assignment 3 --type text --content-file ./solution.md
```

Сдать ссылкой на репозиторий (для больших работ):

```bash
python "$HOME/.claude/skills/sdat/scripts/submit.py" submit \
  --assignment 3 --type link --url https://github.com/user/repo
```

Пересдать уже зачтённое задание (по умолчанию зачтённое не трогается):

```bash
python "$HOME/.claude/skills/sdat/scripts/submit.py" submit \
  --assignment 3 --type text --content-file ./solution_v2.md --resubmit
```

На Windows используй `python` (или `py`) и путь
`%USERPROFILE%\.claude\skills\sdat\scripts\submit.py`.

## Флаги submit

| Флаг | Значение |
|------|----------|
| `--assignment, -a` | номер задания (или его uuid) — обязателен |
| `--type, -t` | `text` (по умолч.) · `link` · `file` |
| `--content, -c` | текст артефакта прямо в аргументе |
| `--content-file` | файл, чьё содержимое отправить как текст (filename проставится) |
| `--file, -f` | то же, что `--content-file`, но всегда ставит имя файла |
| `--url, -u` | ссылка (для `--type link`) |
| `--filename` | метка имени файла |
| `--resubmit` | пересдать даже если уже зачтено |

## Тонкости

- **Токен из окружения** тоже подхватывается: если задан `HAMIDUN_SUBMIT_TOKEN`
  в env — файл не обязателен. Файл `~/.claude/hamidun.env` — рекомендованный способ.
- **Другой домен** (стенд/тест) — переменная `HAMIDUN_ACADEMY_URL`.
- **Лимит текста 2 МБ.** Большие проекты — только ссылкой (`--type link`).
- **Только текстовые артефакты.** `--type file` / `--content-file` читают файл
  строгим UTF-8. Бинарники (PDF, скриншоты, архивы, `.docx`, `.zip`) сдавать
  нельзя — скилл честно откажет (а не отправит кашу с ложным «принято»). Такой
  артефакт залей на gist/GitHub/облако и сдай ссылкой (`--type link --url ...`).
- **Дубли не плодятся:** если сдача уже на проверке (`pending`), сервер вернёт ту
  же сдачу, а не создаст новую. Уже зачтённое требует `--resubmit`.
- **Приватность:** скилл шлёт ТОЛЬКО на academy.hamidun.com и ТОЛЬКО работу
  ученика. Никаких токенов/ключей из окружения в артефакт не подкладывай.

