# Создать первый проект {#root}

@status:doc/work @audience:user

[p01] Проект — это папка, в которой работает ваш агент. Эта страница создаёт такую папку, добавляет в неё первый общий набор правил и показывает, что появилось на диске и почему агент теперь будет это читать. Десять минут, никаких предварительных знаний.

[p02]
```prompt
Создай проект VibeVM с именем hello-vibe в текущей папке, установи в него пакет org.vibevm.world/wal из реестра по умолчанию и покажи мне список чтения, который агент получает в начале сессии.
```

- needs: навык vibevm, установленный у вашего агента; доступ по сети к github.com/vibespecs или пакет, уже лежащий в машинном хранилище

outcome: папка `hello-vibe` с `vibe.toml`, `vibe.lock`, каталогом `vibevm/` и файлами `CLAUDE.md`, `AGENTS.md` и `GEMINI.md`, которые заканчиваются блоком `<vibevm>`; `vibe check` не находит ошибок

- assert: `test -f hello-vibe/vibe.toml`
- assert: `test -f hello-vibe/vibe.lock`
- assert: `grep -q "org.vibevm.world/wal" hello-vibe/vibe.lock`
- assert: `vibe check --path hello-vibe --quiet`

## Что происходит {#what-happens}

[p03] Агент выполняет `vibe init hello-vibe`: команда создаёт папку с [манифестом](../glossary/index.xml#manifest), пустым [лок-файлом](../glossary/index.xml#lock-file), двумя стартовыми файлами, которые вы будете править сами, и тремя файлами инструкций для агентов. Затем он выполняет `vibe install org.vibevm.world/wal --path hello-vibe`. vibe читает [реестры](../glossary/index.xml#registry) из манифеста, находит пакет, подбирает версию, скачивает его в машинное [хранилище](../glossary/index.xml#store) и показывает план. После подтверждения он копирует пакет в `hello-vibe/vibevm/vibedeps/`, записывает лок-файл и генерирует стартовые файлы, которые агент будет читать. Наконец агент запускает `vibe tree`, чтобы показать этот список чтения, и `vibe check`, чтобы убедиться, что проект согласован.

> [p04] **Decision.** For every entry-point node, `vibe install` generates two artifacts under the node's `vibevm/vibespecs/boot/`:
>
> <spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-009#ARTIFACTS-PAIR>

## Руками {#by-hand}

[p05] 1. Создайте проект. Имя становится папкой:

[p06] Example `init` is copied from the source page at projection time.

[p07] 2. Установите пакет. Установка показывает план и просит подтверждения; в скрипте вопрос снимает `--assume-yes`:

[p08] Example `install` is copied from the source page at projection time.

[p09] 3. Посмотрите, что записано:

[p10] Example `list` is copied from the source page at projection time.

[p11] 4. Посмотрите список чтения, который получает агент:

[p12] Example `tree` is copied from the source page at projection time.

[p13] 5. Проверьте проект:

[p14] Example `check` is copied from the source page at projection time.

## Что появилось на диске {#what-appeared}

[p15] Откройте `hello-vibe/vibe.toml`: он называет проект и после установки перечисляет `org.vibevm.world/wal` среди требований с диапазоном версий. Откройте `hello-vibe/vibe.lock`: он закрепляет точную версию и [отпечаток](../glossary/index.xml#fingerprint) содержимого. Под `hello-vibe/vibevm/vibedeps/` лежит опубликованное дерево пакета, без изменений. Под `hello-vibe/vibevm/vibespecs/boot/` лежат два ваших стартовых файла и сгенерированный `INDEX.md`; сгенерированный `STATIC.md` появится рядом, как только какой-нибудь пакет попросит читать себя первым и целиком, а `wal` этого не просит. А в конце `CLAUDE.md`, `AGENTS.md` и `GEMINI.md` стоит блок, который указывает на них агенту.

> [p16] **Decision.** `vibe` owns exactly one **managed block** inside each agent instruction file — a contiguous region bounded by an opening and a closing marker.
>
> <spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-012#ONE-BLOCK-LAW>

[p17] Откройте новую [сессию агента](../glossary/index.xml#agent-session) в `hello-vibe` и спросите, каким правилам он следует: он назовёт пакет, который вы только что поставили, потому что прочитал полосу, прежде чем отвечать.

## Особые случаи и правила {#edge-cases}

[p18] Повторный `vibe install` без имён пакетов ставит всё, что требует манифест; это команда после клонирования существующего проекта.

[p19] Если в папке уже есть `CLAUDE.md`, vibe дописывает свой блок в конец и не трогает ваш текст. Если он находит два блока или сломанный, он останавливается с ошибкой и ничего не меняет, пока вы не почините файл.

> [p20] **Malformed** (§2.2) — `vibe` **aborts the whole operation** with an error naming the file and the exact defect, and changes nothing. It does not proceed until the user repairs the file by hand. vibevm **never guesses** which of two blocks is canonical and **never auto-deletes** a stray marker — a malformed managed block is always a human's call.
>
> <spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-012#CLASS-MALFORMED>

[p21] Отказаться от плана установки — не ошибка: ничего не записывается, а хранилище сохраняет скачанное на следующий раз.

