Skip to content
Back to skills

End Session

ASecurity

Завершение сессии — обновление PLAN приложения, остановка таймера, коммит и retire agent-mail

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 20, 2026
developmentgoshellbashnodegitdatabase

Security analysis

A100/100

Scanned October 20, 2026

npx -y skills add kamiletar/letar --skill end-session --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of End Session?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for End Session
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kamiletar-end-session/badge)](https://www.skillsdirectory.com/skills/kamiletar-end-session)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: end-session
description: Завершение сессии — обновление PLAN приложения, остановка таймера, коммит и retire agent-mail
allowed-tools: Bash, Read, Edit, Grep, Glob
---

Завершай сессию:

1. **Определи контекст работы** — над каким приложением/библиотекой шла сессия
2. **Обнови ПЛАН приложения** (не глобальный `PLAN.md` в корне репо):
   - Если у проекта есть `tasks/` ([tasks-per-file](/.claude/docs/tasks-per-file.md)) — итог и
     передача пишутся в файл задачи: `bun scripts/tasks.mjs note <ID> "…"` по ходу,
     `done <ID> --summary "…"` по завершении. `PLAN*.md` проекта не трогай: они заморожены.
   - Иначе: `apps/<name>/PLAN.md` — отметь выполненные задачи как `[x]`;
     `apps/<name>/PLAN_COMPLETED.md` — добавь итоги сессии с деталями реализации.
   - Если работали над несколькими приложениями — обнови каждый
3. **Глобальная очередь** (`tasks/` корня или `/PLAN.md`) — только если сессия затрагивала кросс-приложенческую работу (auth, libs, инфра, деплой)
4. **Не ретирь фиксированную identity agent-mail** (`<app>-dev`, координаторы вроде
   `deploy-agent-dev`/`forms-coordinator-dev`/`animatrona-coordinator-dev`/`repo-dev`). Она
   персистентная и переиспользуется следующей сессией того же приложения — `retire_agent` на неё
   ничего не даёт (сервер сам ретирит по простою) и только плодит orphan-состояния, из которых
   потом приходится восстанавливать identity вручную (разбор — `docs/plans/PLAN-INFRA-5.md` §93). Так уже
   устроен `/deploy-agent`: на завершении `deploy-agent-dev` не ретирится,
   только broadcast «ухожу» — бери это за образец. `retire_agent`/`expire_window` вызывай только
   для временной identity этой сессии (`<app>-dev-<задача>`, заведённая через `register_agent`
   по [agent-mail.md](/.claude/rules/agent-mail.md), раздел «Вторая сессия того же приложения»)
   — если такая была. Случайные имена вида `SunnyTower` не заводят.
5. **Если менялась `schema.zmodel` — проверь, что миграция создана.** `nx db:push` синхронизирует
   dev-БД без файла миграции — этого достаточно для локальной разработки, но не для деплоя:
   продовая БД накатывается только через файлы миграций (`prisma/migrations/`). Перед коммитом:
   - `git status apps/<name>/schema.zmodel` (или проверь, что `schema.zmodel` в списке изменённых
     файлов сессии) — если менялась;
   - убедись, что в `apps/<name>/prisma/migrations/` появилась новая папка, соответствующая
     изменению (`nx db:migrate <name>` создаёт её; голого `db:push` без последующего `db:migrate`
     недостаточно);
   - если миграции нет — создай её сейчас (`nx zenstack:generate <name>` → `nx db:migrate <name>`),
     не откладывай на следующую сессию: незакоммиченный дрейф схемы без миграции — то, что молча
     ломает деплой на этапе применения к прод-БД.
     Подробности воркфлоу — `.claude/docs/database.md`.
6. **Закоммить изменения** — добавь только файлы текущего приложения и закоммить их:
   ```bash
   git add <файлы этой сессии>
   git commit -m "<type>(<scope>): <описание>" -- <те же файлы>
   git show --stat HEAD   # убедись, что чужого WIP в коммите нет
   ```
   Следуй формату из `.claude/rules/git.md` (feat/fix/refactor/chore/style/docs).
7. **Оглянись на системные решения в монорепо** — просмотри код, к которому прикасалась сессия (и смежный контекст), на предмет:
   - дублирования логики/компонентов/утилит, которые стоит вынести в `libs/` и зашарить через `@letar/*` (shared-first — AGENTS.md § «Методология»)
   - мест, которые пора отDRYть (повторяющиеся паттерны в 3+ местах)
   - разросшихся файлов/функций, которые стоит декомпозировать
   - паттернов, которые уже устоялись в приложении и заслуживают документации в `.claude/docs/`

   Если находки есть — не применяй изменения самостоятельно, а заведи для каждой отдельный чип
   через `spawn_task` (заголовок-глагол, самодостаточный prompt с путями файлов, короткий tldr) —
   так пользователь сможет запустить каждую находку отдельной новой сессией одним кликом. После
   этого кратко перечисли в тексте, что заведено (файл, что не так, что предлагается).
   Если находок нет — прямо напиши, что предложить нечего.

   ⚠️ **Такая находка запускается позже как отдельная новая сессия** — время её выполнения не
   входит в таймер текущей сессии (он уже остановлен к тому моменту). Поэтому в `prompt`
   `spawn_task` включай инструкцию для будущей сессии самой стартовать `time_start` в начале
   своей работы — иначе время на неё нигде не запишется.
8. **Останови фоновые процессы, запущенные этой сессией** — background Bash/PowerShell-задачи
   (`run_in_background: true`) через `TaskStop` по их id, dev-серверы/preview, поднятые через
   `preview_start`, через `preview_stop` по `serverId`. Не трогай процессы, которые не заводила
   сама эта сессия (`tsgo`, `node`, `nx`, чужие `claude`-сессии других агентов) — репозиторий
   общий, параллельно работают другие агенты (`.claude/rules/git.md`,
   `.claude/rules/agent-mail.md`), и убийство процесса по имени вместо PID снесёт их работу.
   Если не уверен, что именно висит в фоне — перечисли активные background-задачи текущей сессии
   и останови только их.
9. **Открытые вопросы** — если за сессию остались нерешённые вопросы (недосказанность с
   пользователем, развилка, требующая его решения, недостающая информация) — не оставляй их
   только в чате. Если у проекта есть `tasks/` — заведи задачу:
   `bun scripts/tasks.mjs new <проект> "<суть>" --status blocked --blocked-by "kami: <что нужно>"`
   с коротким контекстом в «Что и зачем». Иначе занеси в `apps/<name>/PLAN.md` (или в
   глобальный `PLAN.md`, если вопрос кросс-приложенческий) с пометкой
   `[ ] ⚠️ Открытый вопрос: <суть>`. Так вопрос не потеряется между сессиями.
10. **Закрой завершённые этапы (`ProjectStage`) ДО остановки таймера.** Если за сессию хоть один
    вызов `time_start`/`time_switch` передавал `stage: "<название>"` — по каждому такому названию
    задача завершена или нет, реши явно и, если завершена, вызови:
    ```
    time_stage_close({ app: "<app>", stage: "<то же название дословно>" })
    ```
    ⚠️ **Это не опция «если вспомнишь» — карточка «Этапы» на `/owner/projects/<id>` показывает
    незакрытые чекбоксы как незавершённую работу, даже если задача давно сделана и отмечена `[x]`
    в `PLAN.md`.** `PLAN.md` и `ProjectStage` — два независимых состояния, автоматической синхронизации
    между ними нет: галочка в плане не закрывает карточку, а `time_stage_close` не отмечает пункт в
    плане. Расхождение видит только владелец на дашборде, не агент — если не закрыть явно здесь,
    оно останется до следующей сессии, где про этот этап уже никто не вспомнит.
    Пройдись по задачам, закрытым в этой сессии (шаг 2): для проектов с `tasks/` название этапа
    берётся из поля `stage` (`done` напоминает про `time_stage_close`), для остальных — по пунктам
    `PLAN.md`, отмеченным `[x]`. Каждая такая задача — кандидат на `time_stage_close`.
11. **Останови таймер тайм-трекера studio** — покажи итог сессии по проектам (`time_status` перед
    остановкой). Клиентская биллируемая работа — `time_stop`; инфраструктура студии и
    некоммерческие/личные проекты — `time_discard` (биллинг считается по флагу записи, а не по
    тексту описания; [time-tracking.md](/.claude/rules/time-tracking.md)). Если за сессию был
    задет не один проект, проверь, что для каждого переключения был вызван `time_switch` —
    забытое переключение приводит к тому, что время одного проекта записывается на другой. Один
    `Stop`-хук (`.claude/hooks/time-stop-check.js`) эту роль не закрывает: он срабатывает на конец
    **ответа агента**, а не на конец рабочей сессии — нужны оба механизма.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.