Как агент читает это руководство
01Это руководство публикуется для машин так же, как для людей. Агент может получить любую страницу простым текстом, спросить, где живёт правило, и загрузить весь корпус одним файлом, подобранным под его бюджет.
Машинные файлы
| Адрес | Что это | Когда читать |
|---|---|---|
https://vibevm.org/doc/llms.txt |
индекс: по строке на страницу, первый абзац страницы | сначала, чтобы выбрать страницу |
https://vibevm.org/doc/<package>/<version>/<page>.md |
одна страница простым Markdown, с номерами блоков | чтобы ответить на один вопрос |
https://vibevm.org/doc/<package>/<version>/<page>.xml |
та же страница в исходной форме, со всеми адресами правил и примерами | чтобы процитировать правило или выполнить пример |
https://vibevm.org/doc/llms-small.txt, llms-medium.txt, llms-full.txt |
корпус в трёх размерах, стабильный текст первым | только когда задача охватывает много страниц |
https://vibevm.org/doc/manifest.json |
каждая страница с её языком, аудиториями, статусом и якорями | для программной навигации |
https://vibevm.org/doc/resolve/?uri=spec://… |
резолвер: адрес на входе, страница и блок на выходе | когда сообщение или страница цитирует адрес |
https://vibevm.org/doc/ru/… |
те же файлы для другого языка | когда пользователь читает на этом языке |
03 publishllms.txt(an index with one-line summaries) andllms-full.txtfor the base corpus, plusllms-small.txtandllms-medium.txtunder a token budget, all derived from the same manifest as the navigation, the full corpus ordered by the layer law (stable before mutable); the same files per language and per package; the registryllms.txtis a catalogue of documentations in the arXiv style — title, officiality star, publisher, language, audiences, abstract, link;
04 serve every page as clean Markdown at the address with the.mdsuffix and as raw XML at the.xmlsuffix;
05Сайт также отдаёт манифест: JSON-список всех страниц с их статусами, языками, аудиториями и якорями, по адресу /doc/manifest.json и разрешает адрес spec:// по адресу /doc/resolve/?uri=…; <package> — это группа и имя руководства, org.vibevm.core/vibevm-docs, а <version> — номер или latest.
06 serve the JSON page manifest with officiality statuses, languages, audiences, genres, anchors and summaries (/doc/manifest.json), a resolver endpoint forspec://addresses (/doc/resolve?uri=…), and optionally an MCP server of the site;
Без сети
07Те же страницы живут в машинном хранилище, как только выполнен vibe cache add org.vibevm.core/vibevm-docs. vibe explain "spec://org.vibevm.core/vibevm-docs-ru/<page>#<anchor>" печатает страницу или блок; vibe doc manifest --llms small печатает список страниц из хранилища. Ничто на этом пути не обращается к сети, и потому проприетарную документацию читают именно так.
08 The store is warmed withvibe cache add <coordinate>from a registry, orvibe cache add --offline <coordinate>from a project root whose project-local registry holds the package in-tree; the sources ofvibe-docare the store (lookup,list_all), the lock file (Lockfile::read,slot_abs_path), a registry (resolve_and_fetch) and a checkout (LocalRegistry).
Как сослаться на место
09Каждый блок на странице несёт номер, p12 и так далее; он присваивается при сборке страницы и одинаков в веб-странице, в Markdown и в XML. Ссылка — это адрес страницы плюс этот номер: spec://org.vibevm.core/vibevm-docs-ru/model/boot-lane#p7. Заголовки сохраняют и именованные якоря, и именованный якорь после публикации не меняется никогда; номер блока называет текущий текст и после правки может сдвинуться, как номер строки.
10 Numbered blocks. Every flow block of the pivot — paragraph, list, table, fence, quote,example,rule,note,figure,prompt; a heading keeps its own id and is not numbered (clarified 2026-09-12 at implementation, followingPIPE-NUMBERING) — receives an ordinal number and the idpNNat build time in the Rust pipeline (§10), never by a client script. The number is the block's position in the current text of the page, counted beforewhenfiltering, so thatp12names the same block in the build for any platform and agent and in every translation; gaps in the rendered output are accepted. The number appears in the HTML island, in the.mdand.xmlprojections (as[p12]at the start of the block) and inllms-full.txt, so a human and an agent cite one place. After an edit an old#p12may point at a neighbouring block, as a link to a file line does after an edit; this is accepted and nothing tries to «remember» it. Headings keep their named anchors{#id}above the number; named anchors are immutable and renamed only by tombstone, positionalpNNlive by the current text.
11Правила на странице цитируются из спецификации по адресу и показываются на языке самой спецификации. Когда вы говорите пользователю, что гласит правило, предпочитайте адрес спецификации адресу руководства; когда объясняете почему, предпочитайте страницу руководства.
12 Everyruleyields adocumentsedge without a pin: the citation is live, and the page shows the fact's current text by address at every render.vibe doc check --citationschecks one thing — that the anchor exists; a vanished anchor without a tombstone fails the build. There are no revisions, no text hashes and no «the spec moved ahead»: such checks would need a history the project does not keep by design.
Процедура, которой учит навык
131. На ошибке прочитайте адрес, который называет сообщение, затем страницу, на которую его отображает страница диагностики.
142. На вопросе отвечайте с одной страницы: первый абзац — простой ответ, блоки правил несут точную формулировку.
153. На задаче возьмите блок просьбы со страницы как свою задачу и подставьте имена и пути пользователя. Выполните её, затем выполните строки assert. Задача сделана, когда каждая из них завершилась нулём.
164. Выбирая среди документаций одного пакета, предпочитайте помеченную как официальная и называйте издателя документации сообщества.
175. Никогда не загружайте весь корпус, когда отвечает одна страница.
18 The audience vocabulary of PROP-043 gainsagent;user,authoranddevstay. Text markedaudience="agent"obeys the laws of agent text: a token budget, no narration, and never in a boot prefix — the site serves it in the «for agents» section and first inllms.txt. Audiences are not declared in the manifest; they are derived from the page markup.
Инструменты сервера
19vibe mcp serve предлагает те же операции как инструменты. explain смотрит на один узел карты по адресу; query находит узлы, и это два разных глагола намеренно. select принимает до семи предикатов, uri:, symbol:, kind:, scope:, has:, lacks: и depth:, через пробел, соединённых по И, без операторов. Неизвестный предикат, повторённый предикат или пустой запрос — ошибка, которая называет токен и перечисляет, что ожидалось.
20queryfinds nodes;explainlooks at one. Until 2026-08-06 the map could only be asked about a target already known by name, so «which of these exist?» was unanswerable — not in the host, not in any language stack, not in the engine.queryis that question, and the two are deliberately separate verbs rather than one verb with a mode: a point lookup and a set filter render differently, cap differently, and fail differently.
21 Seven predicates, whitespace separated, joined by AND, and no operators at all:uri:,symbol:,kind:(the filter level's own),scope:(prefix of a spec address),has:/lacks:(an edge verb),depth:(0..3). No disjunction, no parentheses, no precedence — each of those is a permanent versioning liability, and a predicate can be added without renumbering a language that has no operator layer to renumber.
22 An unknown predicate, an unknown verb, a repeated predicate, an out-of-range depth or an empty query is an ERROR that names the offending token and lists what was expected — never a silently ignored clause. Same law as the markup's typed fences, for the same reason: a grammar that ignores what it does not understand promises everything and checks nothing, and whoever trusted the promise is the one who finds out. An empty query is refused rather than read as «everything», because that answer already exists one verb away.
23query_package возвращает полную запись установленного пакета из лока. read_subskill возвращает содержимое активного поднавыка, где бы он ни жил: в дереве проекта или в машинном хранилище. materialise_subskill копирует лениво подтянутый поднавык в дерево проекта и отказывается перезаписывать без force; это единственный инструмент, который пишет.
24query_package— the full lockfile entry for an installed package (kind, version,content_hash, registry, source,files_written, features, active subskills,describesPURL, language). Read-only.
25read_subskill— the concatenated content of an active subskill's files.eager/lazy-pushsubskills read from the project tree;lazy-pullsubskills read from the package cache (PROP-003 §2.5.0), so the agent gets bytes regardless of delivery mode. Read-only.
26materialise_subskill— copy alazy-pullsubskill's content into the project tree. No-op foreager/lazy-push(already on disk); refuses to overwrite withoutforce. The one writing tool.
27Языковые пакеты вида mcp приносят собственные серверы с четырьмя инструментами, tcg_validate, tcg_scope, tcg_complete и tcg_type: тонкими адаптерами над операциями с теми же именами. Каждый принимает обязательный language, typescript или rust, и собственные параметры операции без изменений. Каждый отвечает обогащённым результатом как структурированным содержимым плюс коротким текстом, в котором находки идут первыми.
28 The tools now ship in the per-languagemcp-kind packages (PROP-027:mcp:org.vibevm.ai-native/rust-ai-native-mcp,…/typescript-ai-native-mcp), each serving its own language over the vendoredmcp-coretransport.
29tcg_validate,tcg_scope,tcg_complete,tcg_type— thin schema adapters over the TCG-PROTOCOL ops of the same names, each with:
30language(required; accepts"typescript"and — since the Rust twin landed, exactly as this clause promised —"rust"; any other value is a ToolError NAMING the supported set, so the next language adds an enum value, not new tools);
31 the op's own params per TCG-PROTOCOL §2 (file,position,content, …), passed through verbatim.
32
Responses return the ENRICHED protocol result (TCG-PROTOCOL §3) as
structuredContent, plus a compact human text rendering (findings
first).
Особые случаи и правила
33Текст, написанный для агентов, никогда не входит в стартовую полосу проекта; это руководство берут, когда нужно, а не читают на каждом старте сессии.
34 No documentation page entersSTATIC.xml,INDEX.mdor a boot snippet. Adocpackage has no[boot_snippet]; agent-audience text is never in a boot prefix.
35Сама стартовая полоса — чистое чтение файлов: ничто в ней не выполняется, и руководства в ней нет.
36 Boot remains pure file-reading — the redirect never becomes "runvibe", preserving the zero-dependency cross-agent property ofVIBEVM-SPEC.md§6.1.
37Страница, которая есть на языке источника, но не на языке, который вы запросили, отдаётся на языке источника по запрошенному адресу, с пометкой; не считайте её отсутствующей.
38 Switching the language keeps the place. The language selector leads to the same page in the other language with the same fragment (#pNNor#id), which the block-for-block mirror of §5 makes possible. When the page does not exist in the chosen language, the site serves the source language under the chosen language's address as a statically materialised fallback (<html lang>of the source,rel=canonicalto the source page,noindex), shows a bilingual notice «this page is only in … so far» once per session, and rewrites internal links so navigation stays in the chosen language. The chosen language is remembered in the cookielangfor 365 days — the same name the landing uses, so the domain root and/doc/remember one choice.