personal-guide-start · diff
v1.3.2 to v1.4.0
113 added, 137 removed. Audit A to A.
---
name: personal-guide-start
- description: Bootstrap-обёртка — создаёт пустой репо `DS-personal-guide` под аккаунтом пилота (плоское имя, без логина в названии; если ещё нет), затем вызывает /personal-guide-render для наполнения 6 файлами. Используй когда пилот в первый раз просит «создай мне персональное руководство», «хочу начать программу личного развития», «собери мне стартовый план».
+ description: Подготавливает или проверяет приватный DS-personal-guide и отдельно проверяет доступность материалов. Не устанавливает скиллы в личный репозиторий и не обещает немедленную генерацию.
argument-hint: "[необязательно: override домена — knowledge-worker / generic]"
experimental: true
sunset: "после DONE WP-222 (Портной, ~июнь 2026) и WP-149 Ф6 (книга ЛР v3)"
related: [personal-guide-render, repo-new, WP-245, WP-222, WP-149, WP-527, PD.FORM.089, PD.CAT.003]
- version: 1.3.2
+ version: 1.4.0
layer: L1
status: active
browser_safe: false
triggers:
slash: [/personal-guide-start]
phrases: []
routing:
executor: sonnet
deterministic: false
agents: single
interaction: multi-step
gates_required: []
gates_enforced: []
gates_rationale: "операционный скилл; WP Gate применим только при создании нового РП, не для операционных вызовов"
---
- # Bootstrap персонального руководства
-
- > ⚡ **ВЫПОЛНИ НЕМЕДЛЕННО — НЕ ЗАДАВАЙ ВОПРОСОВ.** Первое действие = Шаг 1 (Plan → Decision Gate → Execute `/repo-new` с заранее известными ответами). Вопросы о домене, ступени, «главной системе», целях — запрещены на этом шаге; они задача render-скилла (Шаг 2). Даже если MCP-инструменты вернули данные о пилоте — не анализировать, не интерпретировать, сразу Шаг 1.
-
- > **Experimental MVP-скилл — UX-обёртка над `/repo-new`** с предзаполненными параметрами (IntegrationGate exception: сужение вариативности ради onboarding-фокуса, не обход гейта — с WP-527 Ф4 Шаг 1 идёт через полный алгоритм `/repo-new`; WP-245 Ф28 Open Decision #7, обоснование обновлено WP-527 Ф5). Делит ответственность с `/personal-guide-render`:
- > - **`/personal-guide-start` (этот)** — создание инфраструктуры: GitHub-репо как часть Персоны.инфра. **Один раз** на пилота.
- > - **`/personal-guide-render`** — наполнение содержания: чтение Память.Derived (RCS-профиль) + Персона.декларации (домен) → 6 файлов. **N раз** (каждое обновление).
- >
- > Различение зафиксировано в `.claude/rules/distinctions.md` (AUTHOR-ONLY).
+ # Запуск персонального руководства
## When to use
- Bootstrap-обёртка — создаёт пустой репо `DS-personal-guide` под аккаунтом пилота (плоское имя, без логина в названии; если ещё нет), затем вызывает /personal-guide-render для наполнения 6 файлами. Используй когда пилот в первый раз просит «создай мне персональное руководство», «хочу начать программу личного развития», «собери мне стартовый план».
+ Пользователь просит создать персональное руководство или завершить прежнюю
+ настройку. Повторный запуск проверяет существующий репозиторий и материалы;
+ он не должен пересоздавать репозиторий или перезаписывать историю.
- ## Контракт скилла
+ ## Контракт
- - **Вход:** активная подписка «Инженерия интеллекта» (ранее «Бесконечное развитие») (DP.SC.112). Доступ к `create_repository`, `github_status`. (Память.Derived и `personal_write` нужны на втором шаге — там их проверит `/personal-guide-render`.)
- - **Выход:** репо `DS-personal-guide` под аккаунтом пилота существует на GitHub + 6 файлов записаны (через делегирование render-скиллу). Имя репо — константа для всех пилотов: один личный GitHub-аккаунт = один репо ЛР, ФИО/login в названии не нужен.
- - **Время:** ≤60 мин с момента вызова до открытого в VS Code репо (критерий MVP из WP-188 Ф4.5).
- - **Идемпотентность:** повторный вызов на существующем репо безопасен — Шаг 1 reuse, Шаг 2 пересобирает контент.
+ - **Вход:** запрос пользователя, подключённый GitHub, доступ к общим инструкциям
+ и разрешённое чтение личного источника. Создание требует авторизации `/repo-new`.
+ - **Выход:** отдельно подтверждены подключение приватного репозитория, доступность
+ материалов за период и состояние генерации. Создание репозитория не означает,
+ что руководство уже собрано.
+ - **Сохранность:** не изменять пользовательские `CLAUDE.md`, историю, планы и
+ шаблоны рефлексии. Не удалять ранее установленные скиллы.
+ - **Повтор:** одинаковые проверки после создания и подключения существующего
+ репозитория; отсутствие материалов не является поводом создать его заново.
## Algorithm
- ## Шаг 1. Создать (или переиспользовать) персональный репозиторий через `/repo-new`
-
- > **WP-527 Ф4 (01.09).** Не вызывай `create_repository` напрямую — раньше этот шаг обходил гейт `/repo-new`, что создавало два независимых пути создания репозитория в системе. Теперь Шаг 1 проходит по алгоритму `.claude/skills/repo-new/SKILL.md` (Plan → Decision Gate → Execute) с заранее известными ответами и `approval_scope: policy` (не `instance` — на каждого нового подписчика живой пилот не спрашивается, границы уже утверждены им заранее, `machine/repo-new-policies.yaml` запись `personal-subscriber-onboarding-v1`).
-
- Сформируй Plan по Steps 1-4 `/repo-new` с заранее известными ответами:
- - `repo_class`: `personal-subscriber`
- - owner: `github_status().github_username` из **живого вызова в этом же шаге** (не аргумент, не значение из другого хода/сессии)
- - name: `DS-personal-guide` (константа для всех подписчиков — не подставлять GitHub-логин; один личный аккаунт = один репо)
- - `template_type`: `notes`
- - privacy: `private`
- - назначение: личное пространство участника программы МИМ; `description` для `create_repository` дословно: «Персональное руководство пилота программы МИМ» (WP-527 Ф7, поправлено 01.09 — раньше было «программы ЛР (IWE)»)
- - data domains: личные материалы участника (детализация — Step 3 `/repo-new`)
- - writer/owner/readers: writer = подписчик (правки) + `/personal-guide-render` (пересборка); owner = подписчик; readers = подписчик, его агенты сессии
- - registry mode: без регистрации в `REPOSITORY-REGISTRY.md` (Step 7 `/repo-new`, исключение по `repo_class: personal-subscriber`)
-
- Выполни Decision Gate Step 5 `/repo-new` с `approval_scope: policy`: прочитать `machine/repo-new-policies.yaml` заново (без кэша), найти запись `policy_id: personal-subscriber-onboarding-v1`, проверить срок действия, что namespace/privacy/owner_selector/domains совпадают с `bounds`, посчитать `usage_log` за последние 90 дней против лимита 50 — под файловым локом (`gateway-lock.py`) на время check+запись. Любой чек не прошёл → **STOP**, не продолжай молча: сообщи пилоту конкретную нарушенную границу и попроси новое решение (продлить policy или явный instance-проход `/repo-new`).
-
- Выполни Execute Steps 7-8 `/repo-new`: создать репозиторий, дописать факт в `usage_log` политики (под тем же локом). После OAuth Gateway создаст репо с базовой notes-структурой (inbox/, docs/, README.md). Эта структура будет переопределена render-скиллом на Шаге 2 (плюс render удалит `inbox/.gitkeep` — артефакт notes-template, не нужный для ЛР).
-
- **Failure modes Шага 1:**
-
- | Симптом | Решение |
- |---------|---------|
- | 401 от Gateway | Попроси пилота нажать «Authorize» в OAuth, повторить |
- | `github_status` пустой | Пилот не подключил GitHub в Aisystant MCP — отправь его в onboarding |
- | 409 (репо существует) | Проверь, что существующий репозиторий принадлежит ИМЕННО этому owner (из `github_status` этого шага), `private: true`, и структура похожа на `notes`-шаблон. Всё совпало → reuse, **сразу переходи к Шагу 2** без сообщения об ошибке. Не совпало (типично — старый публичный экземпляр, созданный до этого изменения) → **STOP**, не reuse — это отдельная задача миграции, эскалируй пилоту, не решай молча |
- | Policy-чек Step 5 `/repo-new` не прошёл (истекла / лимит исчерпан / bounds не совпали) | STOP, отчёт пилоту с конкретной границей и числами (см. выше) |
-
- ## Шаг 1.5. Раздать скиллы в репо пилота (идемпотентно)
-
- > **Зачем:** скиллы (`/lesson`, `/lesson-close`, `/connect-guide`, `/personal-guide-render`, `/personal-guide-start`) живут в `${IWE_WORKSPACE:-$HOME/IWE}/.claude/skills/` платформы. При работе пилота в **claude.ai/code** (cloud sandbox) user-global `~/.claude/skills/` не пробрасывается. Чтобы скиллы работали в любом канале, их нужно положить в сам репо пилота.
-
- Записать пять скиллов в порядке (порядок важен — `personal-guide-start/SKILL.md` идёт последним, используется как canary проверки):
-
- ```python
- SKILLS_TO_DISTRIBUTE = [
- "lesson/SKILL.md",
- "lesson-close/SKILL.md",
- "connect-guide/SKILL.md",
- "personal-guide-render/SKILL.md",
- "personal-guide-start/SKILL.md", # ← canary: последний в очереди
- ]
+ ## Шаг 0. Загрузить общие инструкции и проверить возможности канала
- for skill_path in SKILLS_TO_DISTRIBUTE:
- workspace = os.environ.get("IWE_WORKSPACE") or os.path.expanduser("~/IWE")
- content = Read(f"{workspace}/.claude/skills/{skill_path}")
- personal_write(
- source="DS-personal-guide",
- path=f".claude/skills/{skill_path}",
- content=content,
- )
- ```
+ Этот скилл и `/personal-guide-render` доставляются обычным обновлением IWE.
+ В MCP-клиенте общий текст можно получить через
+ `personal_load_skill(skill_name="personal-guide-start")` и
+ `personal_load_skill(skill_name="personal-guide-render")` (либо опубликованный
+ в этом клиенте общий псевдоним `knowledge_load_skill`). Это загрузка инструкции,
+ не автоматическое выполнение её шагов.
- Если один из вызовов вернул ошибку — сообщить пилоту: «Не удалось установить скилл {skill_path}. Установка прервана. Повтори /personal-guide-start для завершения.» Стоп.
+ **Не копировать SKILL.md в `DS-personal-guide/.claude/skills/`.** Не использовать
+ `personal_write` или другой транспорт для обхода запрета dotfiles. `lesson`,
+ `lesson-close`, `connect-guide` не являются зависимостями настройки: не искать их
+ в авторской рабочей папке и не требовать их установки. Личный репозиторий хранит
+ материалы и историю, а общие инструкции имеют свой источник в шаблоне.
- ### CLAUDE.md — доменная кастомизация (WP-527 Ф4)
+ Полный путь создания пока имеет `browser_safe: false`: `/repo-new` требует
+ проверяемой авторизации и локальных средств учёта. Загрузка текста через MCP не
+ заменяет политику или файловый замок. Если эти средства недоступны, создание
+ остановить с конкретной причиной и предложить продолжить в локальном IWE.
+ Проверку уже подключённых материалов можно выполнить через доступный только
+ для чтения `/personal-guide-render`; не объявлять при этом полный запуск готовым.
- > **Зачем не просто «если нет».** С WP-527 Ф4 Шаг 1 сам проходит через `/repo-new` Execute (Step 8), который уже разворачивает generic `CLAUDE.md`-заглушку как часть скелета — при первом создании репо там будет именно она, не пусто. Этот шаг заменяет её на доменную версию (render-скилл, конкретный процесс работы). Но **не перезаписывать безусловно** — Контракт скилла обещает идемпотентность повторного вызова, а `CLAUDE.md` явно называет пилота писателем (`Writer: пилот`); безусловная перезапись на втором вызове стирала бы правки пилота, которые он имеет право туда вносить.
+ ## Шаг 1. Разрешить источник и подтвердить владельца
- Через `personal_search(source: "DS-personal-guide", path: "CLAUDE.md")` прочитать текущее содержимое. Записать (перезаписать) доменную версию **только если** файл отсутствует ИЛИ его текст содержит маркер generic-заглушки `/repo-new` — «Это заглушка, развёрнутая скиллом `/repo-new`» (пункт 3 `assets/repository-skeleton/CLAUDE.md`) — то есть репозиторий только что создан Execute и ещё не кастомизирован. Если файл существует и маркера нет — считать его уже кастомизированным (этим же шагом ранее или пилотом вручную) и не трогать:
+ Вызови `github_status` в этом запуске. Не используй логин из памяти или локального
+ `gh auth status`: локальный GitHub-клиент может быть подключён к другому аккаунту.
+ Если подключение отсутствует — предложи `github_connect` и дождись авторизации.
- ```python
- personal_write(
- source="DS-personal-guide",
- path="CLAUDE.md",
- content="""# DS-personal-guide — инструкции для Claude Code
+ Найди `DS-personal-guide` среди подключённых источников. При
+ `github_owner_mismatch: true` не читать и не писать через этот источник: требуется
+ переподключение к выбранному аккаунту. Отсутствие источника в списке не доказывает
+ отсутствие репозитория на GitHub. Для уже существующего, но неподключённого репо
+ используй подключение GitHub, а не создание нового.
- > **Класс:** личное пространство данных пилота. **Назначение:** персональное руководство — план, методы, история занятий пилота. **Писатель:** пилот (правки) + render-скилл `/personal-guide-render` (пересборка). **Владелец:** пилот. **Читатели:** пилот, его агенты сессии.
+ Для изменения или подтверждения готовности нужны факты из актуальных метаданных
+ GitHub: полный owner/name совпадает с выбранным пользователем аккаунтом и
+ `private: true`. Один `github_owner_mismatch: false` не доказывает приватность;
+ `github_status` может вообще не возвращать поле private. Нет способа проверить
+ метаданные — сообщи «приватность не подтверждена», не выполняй запись и не
+ объявляй настройку завершённой. Публичный или чужой репозиторий автоматически
+ не мигрировать и не менять его видимость.
- Создан через `/personal-guide-start` — UX-обёртка над общим гейтом создания репозитория `/repo-new` с предзаполненными параметрами (WP-527 Ф4/Ф5).
+ ### Если репозиторий нужно создать
- ## Работа с этим репозиторием
+ Выполни Plan → Decision Gate → Execute по `/repo-new` с параметрами:
- Основные правки сюда идут через `/personal-guide-render` (пересборка) или обычные текстовые правки пилота — отдельный процесс/задача здесь не нужны, это личный рабочий репозиторий, не командный.
- """,
- )
- ```
+ - `repo_class: personal-subscriber`, name `DS-personal-guide`, `template_type: notes`;
+ - privacy `private`, owner — выбранный пользователем аккаунт, сверенный с живым
+ `github_status`; description «Персональное руководство пилота программы МИМ»;
+ - данные — личные материалы; владелец и писатель правок — пользователь;
+ серверный генератор публикует руководство только в пределах разрешённого доступа;
+ - учёт личного источника — через GitHub/MCP, без реестра репозиториев экосистемы.
- ### Reflection-template (идемпотентно)
+ Для автоматического создания по `personal-subscriber-onboarding-v1` выполнить
+ все проверки политики и учёт под замком из Step 5 `/repo-new`. Отсутствующая или
+ истёкшая политика не даёт разрешения: не переключаться на иной вид авторизации
+ молча. Явный разовый проход возможен только по новому решению пользователя.
+ Серверные проверки согласия, выбранного аккаунта и прав доступа не обходить.
- Через `personal_search(source: "DS-personal-guide", path: "history/reflection-template.md")` проверь наличие. Если нет — записать:
+ Вызывать только опубликованный инструмент с его фактической схемой. Если сервер
+ требует выбранный GitHub-логин, а клиент не позволяет его передать, остановиться
+ и предложить обновить подключение инструментов. Не подставлять несуществующие
+ параметры и не повторять запрос с ослабленными проверками.
- ```python
- template_content = Read("${IWE_WORKSPACE:-$HOME/IWE}/.claude/skills/personal-guide-render/templates/reflection-template.md")
- personal_write(
- source="DS-personal-guide",
- path="history/reflection-template.md",
- content=template_content,
- )
- ```
+ Ссылка OAuth ещё не подтверждает создание. После завершения авторизации повтори
+ проверку источника и метаданных. При 409 существующий репозиторий можно использовать
+ только после проверки owner/private и назначения по README/структуре. Отсутствие
+ `inbox/` после прежней настройки руководства само по себе не повод пересоздавать
+ репозиторий. Новый и существующий репозитории далее проходят одни и те же шаги.
- ## Шаг 2. Делегировать первый рендер в `/personal-guide-render`
+ ## Шаг 2. Проверить доступность репозитория
- Вызови скилл `personal-guide-render` через Skill tool (без аргументов, дата = сегодня).
+ Прочитай `README.md` через
+ `personal_get_document(source="DS-personal-guide", filename="README.md", include_sha=true)`.
+ Это чтение актуальной версии из GitHub; при больших ответах соблюдай пагинацию.
+ Поиск можно использовать для обнаружения пути, но пустой индекс не доказывает
+ отсутствие файла. Ошибку доступа, задержку индекса и подтверждённое отсутствие
+ сообщать различно. Не заменять README и не создавать персональные данные для
+ маскировки неудачного чтения.
- Render-скилл вызовет gateway → guide/<date>.md + panel/<date>.md готовы. Дождись завершения, потом переходи к Шагу 3.
+ Наличие README подтверждает доступ к репозиторию, а не полноту руководства.
+ `bootstrap_completed` — записанная отметка, а не проверка файлов; не менять её
+ на основании одного README, ответа скилла или загрузки общих инструкций.
+ Необязательные памятки и шаблоны рефлексии не являются условием этого шага.
- Если Skill tool недоступен (например, отладка вне Claude Code) — fallback: прочитай `~/.claude/skills/personal-guide-render/SKILL.md` и выполни Шаги 1-7 инлайн.
+ ## Шаг 3. Проверить материалы через `/personal-guide-render`
- ## Шаг 3. Финальное подтверждение пилоту
+ Загрузи актуальную общую инструкцию и выполни её проверку за выбранную дату.
+ В локальном клиенте используй доступный механизм запуска скилла; без него
+ прочитай поставленный `SKILL.md` и следуй существующим шагам. Не ссылаться на
+ устаревшие «Шаги 1–7» и не вызывать отсутствующий `render_personal_guide`.
- После того как render-скилл выдал своё подтверждение, добавь:
+ Этот шаг проверяет материалы, а не гарантирует запуск генератора. Не создавать
+ вместо него шесть файлов вручную, не придумывать профиль или оценки пользователя.
+ Если материалов нет, определить доступные сведения о существующей генерации:
+ подтверждённое задание / подтверждённая ошибка / запуск не подтверждён. Отсутствие
+ доступа к очереди не означает, что задание существует или что генерация сломана.
- ```
- Чтобы работать с руководством локально — клонируй репо в свой IWE:
- git clone https://github.com/<github-login>/DS-personal-guide.git ${IWE_WORKSPACE:-$HOME/IWE}/DS-personal-guide
+ ## Шаг 4. Сообщить проверенный результат
- (подставь свой GitHub-login в URL — `gh auth status` покажет, кто ты сейчас.)
+ Назови отдельно:
- После этого правки локально → git push → Aisystant MCP подхватит через reindex.
+ 1. Репозиторий: подключён и приватность подтверждена / что не подтверждено.
+ 2. Материалы: какие конкретные файлы за период доступны / отсутствуют /
+ не удалось проверить — по результату `/personal-guide-render`.
+ 3. Генерация: запуск подтверждён / ошибка подтверждена / запуск не подтверждён.
- Это первый запуск. Дальше — никаких спец-скиллов:
- - Чтобы пересобрать после изменений в Память.Derived → /personal-guide-render
- - Чтобы обновить план / методы / итоги недели → пиши в чате обычными словами
- - Автоматизация по расписанию (без запроса) — придёт с Портным летом
- ```
+ «Настройка репозитория выполнена» допустимо после проверки источника, владельца,
+ приватности и чтения README. «Руководство доступно» — только после проверки
+ материала за выбранный период **и** табло. Найденные файлы не означают, что они
+ сгенерированы этим вызовом. При отсутствии материалов полная пользовательская
+ приёмка остаётся открытой; сообщи конкретный следующий шаг диагностики или
+ обращения в поддержку, без обещания «появится утром».
- **Важно:** `create_repository` создаёт репо только в облаке (GitHub) и регистрирует через `personal_list_sources`, но **не клонирует** на диск пилота. Без локального клона все правки идут только через `personal_write` MCP-инструмент. Подсказка про `git clone` обязательна.
+ Если пользователь хочет работать локально и существование репозитория
+ подтверждено, предложи клонировать его по проверенному URL в свой IWE.
+ Создание через OAuth само по себе не создаёт локальную копию.
## Verification
- Bootstrap создаёт внешний ресурс (GitHub-репо) — перед сообщением об успехе проверь контрактный выход (Контракт §Выход), не считай «вызвал create_repository» за «репо готово»:
-
- 1. **Репо существует.** Вызови `github_status` — источник `DS-personal-guide` присутствует. Нет → bootstrap не состоялся (вероятно 401 / GitHub не подключён), вернись к Шагу 1, не выдавай подсказку про `git clone`.
- 2. **Скиллы установлены.** `personal_search(source: "DS-personal-guide", path: ".claude/skills/personal-guide-start/SKILL.md")` — нашёл. Не нашёл → Шаг 1.5 не завершился, перезапусти Шаг 1.5.
- 3. **Руководство собрано.** Render-скилл (Шаг 2) завершился без ошибки — `guide/<date>.md` готов. Ошибка → перезапусти Шаг 2.
-
- Только при обоих PASS переходи к подсказке `git clone` (Шаг 3). Иначе — сообщи пилоту, какой из двух пунктов не выполнен, и что делать.
-
- ## Граница с `/personal-guide-render`
-
- | Аспект | `/personal-guide-start` | `/personal-guide-render` |
- |--------|-------------------------|--------------------------|
- | Слой пользовательских данных | Персона.инфра (репо как идентичность) | Память.Derived + Персона.декларации + Контекст-сборка |
- | Writer | пользователь (через своего агента) | LLM-агент в runtime |
- | Owner факта | GitHub-аккаунт пилота | сам репо (git history) |
- | Зависит от Память.Derived | Нет | Да |
- | Идемпотентность | reuse при 409 | перезапись с архивом в `history/` |
- | Частота вызова | один раз на пилота | N раз (еженедельно + по событиям) |
-
- ## Что скилл НЕ делает
-
- - Не читает Память.Derived, не вычисляет ступень, не выбирает домен — это всё в `/personal-guide-render`.
- - Не пишет файлы напрямую — делегирует render-скиллу.
- - Не отправляет уведомления в TG / email — пилот сам открывает репо в VS Code.
-
- Когда Портной (WP-222) выйдет — оба скилла уйдут в архив. Портной возьмёт на себя bootstrap+render+автоматический weekly/daily.
+ Проверь новый, существующий пустой и существующий кастомизированный репозиторий;
+ отказ для чужого/публичного источника; задержку индекса; повторный запуск.
+ Ни в одном сценарии не должно быть установки скиллов в dotfiles, удаления
+ пользовательских файлов или ложного сообщения о готовых материалах.
<!-- USER-SPACE -->
<!-- /USER-SPACE -->