setup-os — рождение Claude Code OS за один разговор
Основан на vault-ресерче: Claude Code OS, Karpathy LLM-wiki, GSD, token-economy.
Принцип
Веди человека ПО ЭТАПАМ. Каждый этап: (1) объясни одной фразой зачем, (2) спроси нужное через AskUserQuestion, (3) создай файлы сам (не предлагай — делай), (4) покажи что создано, (5) «дальше?». Строй один раз — потом не повторять.
Все на caveman+humanizer. Структура каждого шага: что сделано · что нужно · следующий шаг.
Карта этапов
0 Разведка → есть ли уже ~/.claude, vault? первый запуск? preinstall прошел?
A0 Установка → прогон слоев bootstrap.sh + ОПРОС ИНТЕГРАЦИЙ (попапы: GitHub/Firecrawl/...) [нуб-путь]
A Глобал OS → ПОЛНЫЙ ГРИЛЛ P1–P5 → ~/.claude/{CLAUDE.md, settings.json, references/, manifests}
B База знаний → Obsidian vault по Карпаты (raw/ wiki/ outputs/ + конституция + AGENTS.md рой) [ОБЯЗАТ]
C Template+боты→ claude-starter repo + skill bootstrap-project
D Проект → per-project структура (code/ agents/ specs/ ...) + gsd-new-project
E Автоматизация→ ingest-hook, weekly health-check cron, parity Claude↔Codex
Можно начать с любого этапа (спроси с какого), но дефолт — по порядку. A+B — ядро онбординга (B обязателен, на нем P5).
Грилл драйвит assets/interview-rubric.md (банк вопросов P1–P5); пишет по assets/composition-principles.md (Карпаты). Триггер: ручной /setup-os ИЛИ nudge от SessionStart-хука onboarding-detect.sh на свежей машине.
Этап 0 — Язык + разведка
Шаг 0.1 — Язык общения (САМЫЙ ПЕРВЫЙ вопрос, до установки и любого этапа). AskUserQuestion: «На каком языке вести установку и общаться дальше? / Which language should I use?» → [Русский] [English] [Español] [Other]. С этого момента ВЕСЬ онбординг (попапы, грилл, объяснения) — на выбранном языке.
- Стамп
~/.claude/.athena-lang(код языка, 1 строка) — резюм знает язык. - Выбор = незыблемое правило: пишется в
references/owner.md(Язык) иCLAUDE.md(Правила НИКОГДА: «язык общения не менять без явной просьбы»). - Артефакты системы остаются English-first (паспорта/контракты/код). Выбор задает ЯЗЫК ОБЩЕНИЯ, не язык артефактов.
Шаг 0.2 — Разведка (молча, до вопросов).
ls -la ~/.claude/ 2>/dev/null; ls ~/.claude/CLAUDE.md 2>/dev/null
ls "$HOME"/* knlow* "$HOME/Мозг" 2>/dev/null # vault?
which gh claude gsd 2>/dev/null
Реши: чистая установка или дооформление. Не перезаписывай существующее без бэкапа (cp X X.bak).
Проверь шаг 0: which claude chezmoi brew. Чего-то нет → попап «Сначала запусти preinstall.sh в Терминале (нужен пароль Mac)» + стоп (шаг 0 руками — sudo, агент не может).
AskUserQuestion: «С чего начинаем?» → [Полный setup с нуля] [Только база знаний] [Только проектный scaffolder] [Дооформить существующее]. Полный setup → Этап A0 (установка) перед гриллом.
Этап A0 — Установка системы (нуб-путь: движок + опрос интеграций)
Дирижируешь установкой ТЫ.
bootstrap.sh— детерминированный движок (идемпотентный,--only), ты гонишь его слои по порядку и между ними спрашиваешь попапами. Цель: чистый Mac → рабочая система, юзер только отвечает на вопросы.
1. Разрешение (снимает E1 — классификатор External Code). AskUserQuestion: «Разрешаешь прогнать установочные скрипты Athena?» → [Да, доверяю] [Нет]. «Нет» → стоп.
2. Прогон слоев (каждый — 1 фраза зачем, затем run):
| Слой | Команда | Зачем (юзеру) |
|---|---|---|
| 0 | ./bootstrap.sh --only=0 |
база (идемпотентно — частью сделал preinstall) |
| 1 | ./bootstrap.sh --only=1 |
Сознание: дотфайлы агента |
| 1b | ./bootstrap.sh --only=1b |
плагины → попап подтверждения untrusted (снимает E6) |
| 2 | ./bootstrap.sh --only=2 |
реестр способностей |
| 3–6 | --only=3..6 |
проекты · знания · секреты/MCP · smoke |
После каждого слоя — стамп в ~/.claude/.athena-onboarding-progress (резюм с места обрыва).
Если chezmoi спросит overwrite (E7, runtime-дрейф settings.json) — попап «отвечай overwrite».
3. ОПРОС ИНТЕГРАЦИЙ (ядро нуб-пути — ставить-или-skip, никаких тихих дыр).
Один AskUserQuestion multiSelect «Что подключаем? (что не выберешь — пропустим, добавишь позже)». По каждой выбранной — мини-поток. Словарь (вопрос → ставлю → fallback при skip):
| Интеграция | Если «да» | Если skip |
|---|---|---|
| GitHub | gh auth login (откроет браузер) |
проекты работают локально |
| Firecrawl | спроси ключ → Keychain/~/.secrets/.env (НЕ git) |
веб-каскад падает на WebSearch |
| Supabase | MCP-reauth по mcp-reauth.md |
— |
| Higgsfield | MCP-reauth | — |
| Приватный overlay | спроси git URL → ATHENA_PRIVATE_REPO в athena.config.sh → пере-прогон слоя 1 |
generic-only (дефолт) |
| Vault знаний | → Этап B (Карпаты) | skip-с-логом причины |
Секреты — правило НИКОГДА: значение пишем в Keychain / ~/.secrets (chmod 700) / .env. В репо/git — никогда. Только карта в secrets-map.md.
Gate полноты: каждая интеграция = подключена ИЛИ явный skip-с-причиной (стамп). После A0 → Этап A (грилл P1–P5).
Этап A — Глобальный OS через ПОЛНЫЙ ГРИЛЛ (~/.claude/)
Не single-screen — полный грилл P1–P5 (стиль /grill-me). Драйвит банк вопросов assets/interview-rubric.md; пишешь по assets/composition-principles.md (метод Карпаты, синтез-на-записи). Цель: из ответов идеально собрать конфиг, не дамп сырья.
Поток каждой фазы: объясни 1 фразой зачем → AskUserQuestion (батч по домену из rubric) → синтезируй ответ в атомарный конфиг → запиши в целевой файл → покажи → чекпойнт-стамп → «дальше?».
| Фаза | Собирает | Пишет (target) | Tier |
|---|---|---|---|
| P1 Идентичность | роль/занятость, язык (уже зафиксирован на шаге 0.1 — подтвердить), локация+ограничения, домены экспертизы | references/owner.md |
hot |
| P2 Проекты+стек | проекты (имя/статус/критичность), стек, что клонировать/ставить | owner.md, projects.manifest, tools.manifest |
hot |
| P3 Стиль+правила | model-стенс, коммуникация/caveman, структура ответа, НИКОГДА/ВСЕГДА, gate пакетов | CLAUDE.md (слоты {{ }}) |
hot |
| P4 Операц-преференсы | security-постура, design/UX-вкус+анти-паттерны, deploy, swarm, web-каскад | references/{security,design,deploy,agents,scrapegraph}.md |
cold |
| P5 Инфра | vault (Карпаты — Этап B), session-lifecycle, self-learning, secrets-МАП | CLAUDE.md+references/+secrets-map.md+vault |
cold |
Запись (РАЗДЕЛЕНИЕ — личное/секреты вне CLAUDE.md, только указатели):
~/.claude/CLAUDE.md— копияassets/CLAUDE.template.md(проверенный скелет) + заполнить hot-слоты{{ }}из P3 (язык, model-стенс, доп НИКОГДА/ВСЕГДА). Глубину P4/P5 НЕ инлайнить — указатель@references/*. ≤200 строк.~/.claude/references/owner.md(assets/owner.template.md) — P1/P2. В CLAUDE.md строка@references/owner.md.~/.claude/references/secrets-map.md(assets/secrets-map.template.md) — P5 МАП: ТОЛЬКО где лежит, не значения. Файл в.gitignore. Чеклист на ручное заполнение Keychain/.env.~/.claude/settings.json(assets/settings.template.json) —permissions.denyсекретов + SessionStart-хукonboarding-detect.sh. Smoke: Read .env блокнут.~/.claude/references/— P4 cold-файлы (deploy/security/design/agents/scrapegraph).~/.claude/rules/+agents/— если ecc/ уже есть, не трогать.
Gate полноты (Карпаты): каждый домен P1–P5 — заполнен ИЛИ явно пропущен-с-причиной (стамп в ~/.claude/.athena-onboarding-progress). Нет тихих дыр. Secrets: только МАП, значений НЕ спрашивать/НЕ писать в репо (правило НИКОГДА).
Чекпойнт/резюм: «полный грилл» = полное покрытие, НЕ один присест. После каждой фазы — стамп; можно паузить, резюмить с последней фазы (это и есть fast-path). По завершении → маркер ~/.claude/.athena-onboarded (глушит детектор-хук). «Позже» → ~/.claude/.athena-onboarding-snooze.
ЖЕСТКОЕ правило модели (вшито в CLAUDE.template): перед каждой задачей выверять оптимальную модель по качеству-на-токен. Убедись что блок в записанном CLAUDE.md.
Покажи дерево. Подтверди → переходи к Этапу B (Карпаты-vault — обязателен, P5 на нем держится).
Этап B — База знаний по Карпаты (LLM-wiki) — ОБЯЗАТЕЛЬНО
Не опциональный этап: P5-инфра грилла держится на нем. Метод Карпаты — mandatory (детали
references/karpathy-method.md). Пропустить можно ТОЛЬКО явным «нет vault» с логом причины (gate полноты).
Спроси: путь к vault (дефолт ~/Мозг или ~/Knowledge). Существует Obsidian vault — подключаем, нет — создаем.
Структура (метод Карпаты, синтез-на-записи, без vector DB):
<vault>/
raw/ # источники, immutable, НЕ редактировать
wiki/ # LLM владеет, синтезирует, перезаписывает (= тематические разделы)
outputs/ # ответы/отчеты
_МАСТЕР-ИНДЕКС.md # index: страница → 1 строка summary. Читать ПЕРВЫМ
_ROUTING.md # триггер → раздел, совпадение ≥70%
Лог обработки.md # append-only журнал ingest
CLAUDE.md # конституция вики (шаблон assets/vault-CLAUDE.template.md)
AGENTS.md # реестр вики-роя (шаблон assets/AGENTS.template.md)
В корне vault CLAUDE.md импортит @AGENTS.md. AGENTS.md = таблица роя:
| Агент | Роль | Модель | Когда |
|---|---|---|---|
| kb-ingest | raw → wiki-страницы + кросс-ссылки [[]] + индекс + лог | Haiku/Sonnet | новый файл в raw/ |
| kb-router | триггер → раздел по _ROUTING.md | Haiku | классификация |
| kb-synth | свод/переписать концепт-страницу | Opus | спорный синтез |
| kb-health | противоречия/сироты/пробелы | Sonnet | weekly |
Если vault уже = Мнемозина — НЕ дублировать, формализовать существующее (index/routing/рой уже есть).
Объясни человеку workflow: кинул в raw/ → /kb-ingest → знание рябью идет по страницам. RAG не используем — синтез на записи.
Этап C — Template-repo + bootstrap-бот (строй один раз)
- Создай
~/claude-starter/— эталон.claude/(CLAUDE.md проектный + settings.json + rules/ + agents/ + .mcp.json пустой).gh repo create claude-starter --templateопционально. - Создай skill
bootstrap-project(~/.claude/skills/bootstrap-project/SKILL.md) — один вызов строит дерево проекта + копирует конфиги. Шаблон assets/bootstrap-project.template.md.
Дальше новый проект = gh repo --template claude-starter → /bootstrap-project → gsd-new-project.
Этап D — Создание конкретного проекта
Спроси: имя · тип (web/RN/python/lib) · нужна ли база знаний внутри.
Создай per-project:
<project>/
CLAUDE.md # проектная конституция (стек, команды, gotchas, "@AGENTS.md")
.claude/{settings.json, rules/, agents/, skills/, commands/}
specs/ # цели, DoD, ограничения (specs ПЕРВЫМИ)
src/ (или code/) # код
agents/ # проектные субагенты
evals/ # тесты/трейсы (гейт)
docs/
.gitignore # .env, runs/, secrets
Затем gsd-new-project для фазового плана. Проектный CLAUDE.md ≤150 строк, специфика → rules/skills.
Этап E — Автоматизация (освобождает время)
- Ingest-hook: новый файл в
<vault>/raw/→ авто-kb-ingest. (settings.json hook или watcher.) - Weekly health-check: cron-агент Вс — ищет противоречия/сироты в vault, шлет отчет (
/scheduleили CronCreate). - Parity Claude↔Codex:
bash ~/.agents/registry/scripts/propagate_skills.sh— зеркалить новый skill на оба харнесса + VPS. - Предложи каждое, ставь по согласию.
Финал
Покажи итоговое дерево (~/.claude/ + vault + claude-starter). Чек-лист:
- CLAUDE.md ≤200 стр, секреты в deny
- vault: raw/wiki/outputs + index + routing + конституция + AGENTS рой
- claude-starter + bootstrap-project работают
- автоматизация (ingest/health/parity) поставлена
Мнемозина (подсистема памяти/знаний) — оффер свежей сборки. Если в projects.manifest есть memory-подсистема — в конце предложи попапом (AskUserQuestion) поставить ее. На «да» тяни свежак из github: нет папки → git clone <url> (дефолтный HEAD = последняя версия); есть → git -C <path> pull --ff-only. Затем ее install.sh, если есть (из install-команды манифеста). Пусто/нет в манифесте/«нет» → скип. URL — из манифеста, не хардкодь.
Застампь версию каркаса (база для будущего athena-update): git -C ~/athena rev-parse HEAD > ~/.claude/.athena-version.
Предложи что улучшить дальше. Залогируй setup в vault Лог обработки.md.
Файлы-шаблоны (создать рядом со SKILL.md)
assets/interview-rubric.md— банк вопросов грилла P1–P5 (драйвит Этап A)assets/composition-principles.md— как идеально писать конфиг (Карпаты, бюджет, hot/cold)assets/CLAUDE.template.md— лин глобальный скелет + P3-слоты{{ }}assets/owner.template.md— личные данные (P1/P2-слоты)assets/vault-CLAUDE.template.md— конституция вики Карпатыassets/AGENTS.template.md— реестр вики-рояassets/secrets-map.template.md— карта секретов (gitignored, map-only)assets/settings.template.json— deny секретовassets/bootstrap-project.template.md— тело bootstrap-скиллаreferences/karpathy-method.md— метод подробно (из vault-нот)chezmoi/dot_claude/hooks/onboarding-detect.sh— SessionStart-детектор первого запуска (nudge)