Установить пакет
01Вы нашли пакет, которому должен следовать ваш проект. Эта страница добавляет его в проект, записывает точную версию и показывает, как проверить, что агент теперь будет его читать.
Установи пакет org.vibevm.world/wal в проект VibeVM в текущей папке, прими план и скажи мне, какая версия записана и что агент прочитает из неё в начале сессии.
навык vibevm, установленный у вашего агента; проект с vibe.toml в текущей папке; доступ по сети к реестрам проекта или пакет, уже лежащий в машинном хранилище
vibe.toml перечисляет пакет среди требований, vibe.lock закрепляет одну версию с отпечатком содержимого, дерево пакета лежит под vibevm/vibedeps/, а vibe tree показывает его стартовый фрагмент в списке чтения
grep -q "org.vibevm.world/wal" vibe.lockvibe check --quiet
Что происходит
03Агент выполняет vibe install org.vibevm.world/wal. vibe обходит реестры проекта по порядку и спрашивает у первого, который знает пакет, его версии; без ограничения он берёт новейший стабильный выпуск. Он разрешает собственные зависимости пакета вместе с остальным графом проекта, скачивает всё, чего ещё нет в машинном хранилище, и сверяет каждый отпечаток. Потом печатает план: какие пакеты будут добавлены в каких версиях и какие файлы изменятся. Пока вы не подтвердили, ничего не записывается. После подтверждения vibe копирует пакеты в vibevm/vibedeps/, записывает требование в vibe.toml и пины в vibe.lock и пересобирает стартовые файлы. Затем агент запускает vibe tree, чтобы показать вам новый список чтения.
04 Resolution — the depsolver: read every node's[requires], pick one version per package. It must stay unified (onevibe.lock, one version per package across the workspace — the diamond problem; PROP-007 §2.4). It cannot be computed per-subtree. But it can be skipped entirely when its inputs are unchanged (§2.2).
Руками
051. Установите по координате. Добавьте @ и ограничение, чтобы попросить диапазон или точную версию:
072. Подтвердите план, когда спросят. --assume-yes отвечает «да» за скрипты и агентов.
083. Проверьте, что записано и что агент будет читать:
Как попросить версию
11vibe install org.vibevm.world/wal@^1.0 принимает любую 1.x; @=1.0.0 — ровно одну; --exact записывает разрешённую версию в манифест точным пином вместо диапазона. Манифест хранит ограничение, о котором вы просили; лок-файл хранит версию, которую вы получили.
12
flow:wal@^0.3 → semver range.
13Префикс вида, как в flow:org.vibevm.world/wal, необязателен; когда он есть, vibe его проверяет: если пакет оказывается другого вида, установка останавливается.
14 resolved exactly; kind validated against the manifest
После клонирования проекта
15vibe install без имён пакетов ставит то, что манифест уже требует, в версиях, которые закрепил лок-файл. Когда ни манифест, ни лок не менялись с прошлой установки, vibe даже не запускает резолвер: лок-файл и есть ответ, а команда только проверяет, что дерево ему соответствует.
16 With the freshness check,vibe installbecomes lockfile-respecting: unchanged[requires]⇒ the locked versions are honoured verbatim.
Особые случаи и правила
17Установка пакета по имени разрешает весь граф заново, но каждая зависимость, которой изменение не касается, сохраняет закреплённую версию; только настоящий конфликт запускает полный пересчёт.
18
When [requires] has changed, resolution runs, but holds the lock for every dependency the change did not touch (§5.3): each registry-resolved root the lock still satisfies is pinned to its locked version, so the re-resolve never drifts an untouched dependency — only the changed one and its subtree move.
19Пакет может объявить скрипт, который выполняется после его установки. Установить пакет — значит согласиться его запустить; скрипт работает внутри собственной папки пакета, и его последствия не отслеживаются. Прочитайте манифест пакета, которому не доверяете, прежде чем ставить его.
20 Current law. Installing the package is the consent to run its declared hooks. There is no[hooks].allowed_groups, first-run prompt, or--allow-hookspermission layer. Safety is the PROP-054 observability model: the manifest is statically inspectable, selected contributions are narrated, and durable run evidence identifies what ran and which package supplied it.
21Уже установленный пакет не ставится второй раз: vibe говорит об этом и указывает на vibe update.
22Публичный реестр, который на отсутствующий пакет отвечает ошибкой аутентификации, обходится стороной и не считается сбоем; добавьте --auth-required в скрипт, который должен заметить, что приватный реестр лежит.
23Пакет, который приносит инструменты, записывается при установке и собирается по требованию: vibe bin build компилирует названные инструменты или все сразу из точно установленного пакета, а vibe bin exec <name> разрешает инструмент через лок-файл проекта до его папки и запускает, при необходимости сначала собрав. Установить пакет — значит согласиться на сборку, и vibe рассказывает, что собирается компилировать. Без сети сборка, которой нужны крейты из сети, падает так же, как падает Cargo, с ручным рецептом в подсказке. Когда вашему коду нужен поставленный крейт, ссылайтесь на него путём в папку пакета и держите vibevm/vibedeps/ вне своего Cargo-workspace, потому что папка не может принадлежать двум workspace сразу.
24 After materialising a slot whose manifest declares[[binary]]entries,vibe installMAY build them (v1: onvibe bin sync, see §4 — the install itself only RECORDS the declarations; an install-time--build-binsopt-in flag is v2 surface).
25
vibe bin build [<name>…] — release build of the named tools (default: all declared) through their exact installed package and Cargo declaration; installation is the consent and the selected work is narrated.
26vibe bin exec <name> [--] <args…>— resolvenamethrough the CURRENT project's lockfile → its slot → the slot-resident artifact (building the declared package target if absent), then execute with the exit code passed through. This is the rustup dispatch model: the project's pinned version is what runs, always.
27 Successor to the historical first-build prompt. Building executes package build scripts and proc-macros, so installation plus explicit target/route selection is the authorisation and the engine narrates the exact provider and target before execution. Lifecycle build does not add an allow-list, first-run prompt or--allow-hooksanalogue; provider identity, artifact records and outcomes supply the audit trail. Existing directvibe bincompatibility remains routed through its declared package rather than silently choosing ambient code.
28
Cargo needs crates.io for third-party deps unless the
local cargo cache is warm: offline boxes get the same honest failure
cargo gives, plus the hint that cargo install --path <slot>/crates/…
(the documented degraded path, which stays valid indefinitely) has the
same network shape — there is no offline shortcut to a first build.
29 A language-native consumer that needs a shipped crate — a proc-macro that compiles into the consumer's own code (thespecmarkcase), or a binary it invokes (theconform/specmapcase) — references it by path into the materialised slot:
30 The consumer excludesvibevm/vibedeps/(and, for a self-hosting repo, the in-repovibevm/vibepacks/source) from its[workspace], so the slot's crates belong to the package's workspace, not the consumer's — Cargo forbids a directory living in two workspaces, and this is the standard resolution for a repo that contains a sub-project with its own workspace.