/repo-new
SkillDev toolsGate for creating any new IWE repository (ecosystem or personal space). Runs the request through: intent classification (Pack / SpacePlan / named project / ecosystem DS), name and class validation, data markup (types 2.1-2.6, quarantine), declaring writer/owner/readers, re
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the /repo-new skill
What this skill tells your AI
The instructions your AI receives, as published by tserentserenov/fmt-exocortex-template in .claude/skills/repo-new/SKILL.md and read by ahel’s review.
Область действия: создать НОВЫЙ репозиторий IWE (экосистемный DS или личное пространство данных) через обязательный гейт имя/данные/владение, с результатом — созданный репозиторий, запись в реестре, развёрнутый скелет. Не входит: расширение существующего репозитория (→ Repo-Touch/Residency Gate); Pack-репозитории (делегировать
/pack-newна Шаге 1 и остановиться); одномоментное развёртывание всей структуры 5 семей (этоsetup.sh/ WP-559 — этот скилл обрабатывает один репозиторий за вызов). Роль: R6 Кодировщик выполняет гейт и записи фазы Execute; носитель авторизации Decision Gate по умолчанию — пилот (WP-527 Ф0 п.3, решено round-loop сессией 01.09.2026, зафиксировано STAGING.md S-60) — новая Pack-роль не вводится, self-approval со стороны R6 запрещён.
When to use
- Пилот хочет создать новый репозиторий (экосистемный
DS-*/instrument/surface, или личное пространство данныхPD-*/MC-*/PACK-*). - Пилот спрашивает, где и как разместить новый вид данных, а подходящего репозитория ещё нет.
- Автоматизации/CI нужно создать репозиторий по уже одобренной ограниченной политике (пилота в моменте нет).
Preconditions
- WP Gate precondition. Задача должна быть привязана к согласованному РП в плане недели (этот скилл — продукт WP-527).
- Карта доменов данных должна быть актуальна.
docs/adr/ADR-004-data-domain-map.md+docs/DATA-DOMAINS-REGISTRY.yaml(FMT-exocortex-template) должны существовать и быть читаемы — у скилла нет запасной карты доменов, и он не должен изобретать её. - Намерение Pack — немедленный выход. Если запрошенный репозиторий — это Pack, делегировать
/pack-newна Шаге 1 и остановиться; не выполнять остаток гейта этого скилла (авторитет там — Pack Creation Gate, не этот).
Известные исключения (не гейтуются этим скиллом)
Инвентаризация 01.09 (WP-527, в авторской рабочей копии): голые вызовы
gh repo create/create_repositoryвне этого гейта. Скилл вызывает LLM-агент, читающий SKILL.md — сырой bash-скрипт его вызвать не может; поэтому найденные каналы — документированные исключения, не кандидаты на переподключение.
setup.sh(шаг «Create DS-strategy repo») — создаёт governance-репозиторий при самой первой установке IWE, до того как у пользователя вообще появляется агент со скиллами. Не может идти через гейт по конструкции (курица-яйцо). Имя фиксировано, гейт не нужен.setup/optional/setup-agent-workspace.sh— опциональный ручной скрипт созданияDS-agent-workspace, вызывается после онбординга (гейт уже доступен). Уже самостоятельно пишетREPO-TYPE.md+CLAUDE.mdпри создании — не переподключён к/repo-newсознательно (переписывать рабочий bash-скрипт на вызов агентского скилла архитектурно не оправдано), задокументирован здесь как известное исключение, не как разрыв.
Algorithm
Восемь шагов в трёх фазах (Plan → Decision Gate → Execute) — см. ниже.
Фаза 1 — Plan (без мутаций)
Step 1 — Классифицировать намерение и выбрать путь создания
Input: запрос на создание репозитория; read-only доступ (если доступен) к каталогу/API SpacePlan и memory/repo-type-rules.md.
Action: подтвердить, что это запрос на создание НОВОГО репозитория — если речь о расширении существующего, остановиться и направить в Repo-Touch/Residency Gate. Затем явное ветвление:
- Pack → делегировать
/pack-new, стоп. - Намерение SpacePlan → статус
planId: verifiedустанавливается только после read-only проверки по каталогу, с фиксацией источника и ревизии/fingerprint каталога, по которому проверено; если проверка недоступна — статусplanId: unverified, Decision Gate (Step 5) блокируется. Одобрение пилота не подменяет техническую валидацию. Единственный выход изunverified— явная переклассификация в именованный проект с новым согласованным Plan; автоматический downgrade запрещён. - Именованный проект вне SpacePlan →
create_repository(template_type="project")по умолчанию. Для запроса, подпадающего под активную policy-записьmachine/repo-new-policies.yaml(Step 5) с известнымbounds.repo_class,template_type— конвенция, зашитая в текст ЭТОГО скилла для конкретногоrepo_class(не поле самой policy-записи — 7 обязательных границ Step 5 её не включают): дляrepo_class: personal-subscriber—template_type: "notes". Запрет на namespace-shadowing зарезервированных семейных префиксовPD-*,DS-*,PACK-*,MC-*— если только имя не является константой, зафиксированной в самой policy-записи (та жеpersonal-subscriberфиксируетDS-personal-guide). - Экосистемный DS (governance/instrument/surface) → ручной путь
gh repo create; этот скилл только выдаёт чеклист для этой ветки и НЕ автоматизирует её — ни на этом шаге, ни на Execute (Step 7/8 к этой ветке не применяются, см. там).
Output: классифицированное намерение, выбранный путь создания, и (для SpacePlan) явный статус planId: verified | unverified с доказательством проверки при verified.
Step 2 — Определить класс и имя репозитория
Input: классифицированное намерение и путь из Step 1.
Action: сверить класс и предложенное имя с memory/repo-type-rules.md + ADR-004. Принудительный семейный префикс — только для известной семьи репозиториев. Существующее пользовательское имя сохраняется без изменений, если оно не нарушает применимое правило или зарезервированный namespace.
Output: проверенный класс и финальное предложенное имя, с любым ограничением на имя, зафиксированным в Plan.
Step 3 — Разметить данные, затем писатель/владелец/читатели
Input: проверенный класс и предполагаемое содержимое репозитория.
Action, в двух явных подчастях (разделены нарочно, чтобы ни одна не выпала):
- Разметка данных: классифицировать данные по типам 2.1-2.4 (канон —
DATA-RESIDENCY.md, источник WP-442: шесть типов всего, из них четыре личных; отдельного типа для диалоговых артефактов нет — личные диалоги/заметки в git-репозитории пользователя укладываются в тип 2.4 «неформализуемая личная практика»). Для диалоговых источников (переписка с ИИ) дополнительно применяется профиль обработкиconversation(РП-427 Ф8): отдельные цели согласия, запрет служебного содержимого инструментов по умолчанию, границы объёма/срока хранения, скан секретов и персональных данных — это профиль обработки, не отдельный тип резидентности. Вывестиhomes/sensitivity/quarantineизDATA-DOMAINS-REGISTRY.yaml. Отдельно проверить карантин «вне оси» (секреты, платёжные данные, чужие PII) по эвристикам WP-483 — это не та же ось, что 2.1-2.4, и её нельзя молча сворачивать в неё. - Ответственность: явно назвать писателя, владельца и читателей для каждого класса. Для CI/автоматизации — writer = «система», owner = пилот.
Output: декларация размещения данных (включая флаг карантина вне оси) и полное назначение writer/owner/readers.
Step 4 — Решить публичность и состав скелета
Input: класс, декларация данных, назначение ответственности.
Action: решить публичный/приватный СЕЙЧАС, не позже — если публичный, publication-gate в CI обязателен в скелете (прецедент WP-493). Набросать манифест скелета: README-паспорт (класс, назначение — одно предложение простыми словами, домены данных, writer/owner/readers, проекция gate receipt) и заглушку CLAUDE.md.
Output: решение о публичности, требование publication-gate (если публичный), запланированный манифест скелета.
Фаза 2 — Decision Gate
Step 5 — Получить ограниченную авторизацию
Input: полный неизменный Plan из Steps 1-4, без нерешённого planId: unverified.
Action: показать полный Plan носителю авторизации. По умолчанию — пилот, approval_scope: instance. Для CI/автоматизации approval_scope: policy допустим только если политика явно ограничивает ВСЕ из: классы репозитория, namespace имён, privacy, owner (с проверяемым owner_selector, не произвольным аргументом), домены данных, лимит инстанций/период, срок действия. Запрос вне любой из этих границ → STOP, не тихий откат: отчёт с конкретной нарушенной границей и числами (например «usage_log: 50/50 за 90 дней, следующий слот доступен <дата>»), и явный новый вопрос пилоту — продлить/расширить policy (новая запись decision_ref) или инициировать отдельный instance-проход. Вызывающий скилл не переключает scope молча сам.
Хранение и проверка policy (спецификация, WP-527 01.09 — инвентаризация не нашла ни одного живого CI-канала, которому это нужно сегодня; файл создаётся лениво при первой реальной выдаче политики, не провизионируется заранее; первый реальный потребитель — repo_class: personal-subscriber, WP-527 Ф4):
- Файл:
<governance-репо>/machine/repo-new-policies.yaml, одна запись наpolicy_idс полямиbounds(все 7 границ),decision_ref(approved_by/decision_session/decision_date/wp_ref— ссылка на решение пилота ВНЕ этого файла; без неё запись самоодобрена агентом, который её же и проверяет) иusage_log(append-only, одна строка на каждый успешно созданный НОВЫЙ репозиторий по этой политике: timestamp + itemized-факт; idempotent-reuse на 409 и неудачные попытки вusage_logне попадают). - Проверка при каждом запросе: перечитать файл заново (не кэшировать между вызовами), найти
policy_id, проверить срок действия,decision_refприсутствует, и что запрошенные namespace/privacy/owner_selector/домены попадают в объявленные границы, посчитать записиusage_logза текущий период и сравнить с лимитом. Любой из этих чеков не прошёл → STOP (см. выше), никогда не fail-open. - Атомарность (гонка параллельных policy-исполнений): чтение
usage_log, сравнение с лимитом и последующая дозапись после Execute — под тем же файловым локом, что уже используется для shared-файлов governance-репо (gateway-lock.py acquire <файл политики>на время check+write,releaseсразу после). Без лока два параллельных запроса, оба прошедших чтение до того, как любой записал свой факт, могут вместе превысить лимит. - После успешного Execute (Step 7) — дописать факт в
usage_logтой же политики (внутри того же лока).
Output: явное одобрение или отказ с approval_scope: instance | policy. Исполнение остаётся заблокированным, если одобрение не покрывает именно этот Plan.
Step 6 — Зафиксировать gate receipt
Input: одобренный, неизменённый Plan и решение об авторизации.
Action: создать machine-readable gate receipt со следующими полями — список не сокращать, каждое поле несёт нагрузку для аудита:
approved_by: pilot | <policy_id>
approved_at: <ISO-8601 timestamp>
approval_scope: instance | policy
request_fingerprint: <stable id/hash запроса>
plan_fingerprint: <stable id/hash полного Plan из Steps 1-4>
wp_ref: WP-527
Receipt ссылается на неизменный полный Plan, сохранённый в исходной WP/сессии, по fingerprint — не заменяет и не пересказывает Plan. README и запись в реестре получают на Step 8 проекцию этого receipt, а не полный набор полей: проекция сохраняет approved_by, approved_at, approval_scope, wp_ref — человеку эти четыре поля дают понимание «кто/когда/как/по какому РП», а request_fingerprint/plan_fingerprint остаются только в исходной записи (WP/сессия), где и находится полный Plan для машинной сверки; дублировать их в человекочитаемый паспорт незачем.
Output: gate receipt, привязанный к точному авторизованному Plan; разблокирует Фазу 3.
Фаза 3 — Execute (только после действительного gate receipt)
Step 7 — Создать и зарегистрировать репозиторий
Input: действительный gate receipt, путь создания из Step 1, финальное имя репозитория из Step 2 — кроме ветки «экосистемный DS», для которой Execute (Step 7/8) не выполняется этим скиллом: агент передаёт пилоту/R6 итоговый чеклист (класс, имя, разметка данных, writer/owner/readers, gate receipt) и останавливается ДО этого шага, сама команда gh repo create и последующая регистрация выполняются вручную по этому чеклисту, не автоматически скиллом.
Action (для остальных трёх путей — Pack уже вышел на Step 1, значит здесь SpacePlan и именованный проект): создать репозиторий через выбранный путь (SpacePlan MCP-вызов / create_repository). При успехе зарегистрировать его в DS-ecosystem-development/0.OPS/REPOSITORY-REGISTRY.md — эту запись выполняет агент, не пилот (намеренное разделение с Decision Gate: пилот авторизует, R6 исполняет). Исключение — bounds.repo_class активной policy равен personal-subscriber (или любому будущему классу с тем же свойством «персональный репозиторий подписчика, не инфраструктура экосистемы»): регистрация в REPOSITORY-REGISTRY.md не выполняется — тот реестр про инфраструктуру самой экосистемы; учёт per-подписчика уже ведётся через github_status/personal_list_sources, дублирование не нужно.
Конфликт имени (409): reuse существующего репозитория разрешён только после проверки, что он одновременно (а) принадлежит owner из авторизованного Plan (не просто совпадение имени), (б) private совпадает с Plan, (в) не противоречит ожидаемой сигнатуре template_type (например, для notes — структура inbox/, docs/, README.md). Не совпало хотя бы одно (типичный случай — старый репозиторий с другим значением private, созданный до текущей policy) → STOP, reuse запрещён, отдельная задача миграции — не решается этим скиллом молча.
Output: созданный (или безопасно переиспользованный) репозиторий и запись в реестре (кроме исключения выше), либо зафиксированное частичное состояние при сбое любой из операций.
Step 8 — Развернуть скелет и завершить
Input: созданный репозиторий, состояние реестра, манифест скелета, решение о публичности, gate receipt. Не применяется к ветке «экосистемный DS» (см. Step 7).
Action: развернуть README-паспорт (с проекцией gate receipt), заглушку CLAUDE.md, и publication-gate в CI, если публичный — только на пути реального создания Step 7. На пути безопасного 409-reuse (Step 7) скелет НЕ разворачивается заново: у переиспользуемого репозитория уже есть собственные README/CLAUDE.md, слепая перезапись затёрла бы то, что там реально накопилось. При сбое любой операции фазы Execute — немедленно остановиться и сообщить точно, что создано, а что нет; не пытаться автоматически откатывать — неудачный откат это вторая неавторизованная мутация поверх первого сбоя.
Output: инициализированный репозиторий с обязательным скелетом governance, либо явный отчёт о частичном сбое со списком завершённых и незавершённых артефактов.
Bundled resources
assets/repository-skeleton/README.md— шаблон README-паспорта, используется на Step 8 (плейсхолдеры для класса, назначения одной строкой, доменов данных, writer/owner/readers, проекции gate receipt).assets/repository-skeleton/CLAUDE.md— минимальная заглушка CLAUDE.md, разворачивается на Step 8, чтобы Repo-Touch Gate не встретил пустой репозиторий.
Anti-patterns
- Не позволять ветке SpacePlan на Step 1 трактовать
planId: unverifiedкак «наверное, нормально» — неподтверждённый план блокирует Decision Gate полностью, без обхода пилотом кроме явной переклассификации. - Не сворачивать карантин «вне оси» (секреты, платёжные данные, чужие PII) в обычную проверку размещения 2.1-2.4 на Step 3 — это разные оси с разными последствиями.
- Не позволять одобрению Decision Gate пилотом одновременно засчитываться за шаг записи в реестр — запись реестра на Step 7 всегда выполняет агент, никогда не считать её «уже сделанной», потому что пилот сказал «да».
- Не пытаться автоматически откатывать частичный сбой Step 7/8 — сообщить и остановиться.
- Не выдавать
approval_scope: policyбез всех семи обязательных границ (классы, namespace, privacy, owner, домены данных, лимит инстанций/период, срок действия) — частичная политика не политика, а неограниченное разрешение с лишними шагами. - Не выполнять Step 7/8 (создание, регистрация, скелет) для ветки «экосистемный DS» — там скилл выдаёт только чеклист, исполнение ручное.
Verification
bash .claude/skills/skill-creator/scripts/verify-skill.sh repo-new
Ожидается: PASS по всем структурным проверкам (поля frontmatter, поля gates, наличие секций ## When to use / ## Algorithm, существование bundled resources). У этого скилла пока нет verification_class выше closed-loop структурных проверок — живой смок-тест с реальным созданием репозитория — это WP-527 Ф3 («обкатка на первом реальном создании репо»), не часть этого файла.
Signals
- GitHub stars
- 54
- Forks
- 150
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
repo-new- Source
- github.com/tserentserenov/fmt-exocortex-template