Для VibeVM
P1. Убрать package.specmap.json из читаемого дерева
Что: не материализовать его в vibedeps/ (держать в машинном сторе ~/.vibe/cache/ или отдавать через CLI), либо флаг vibe install --no-specmap.
На чём основано: файл = 1 862 657 токенов — треть объёма пакета ядра (5,6 млн). В кейсе S1 агент его прочитал, и именно это сделало S1 самым дорогим на плече.
Эффект: прямой вычет одного мегабайтного чтения из прогона. Самое дешёвое исправление с самым большим эффектом.
P2. ENTRIES.md и corpus.json — либо вне дерева, либо с предупреждением
Что: ENTRIES.md (84 204 токена) и corpus.json (308 615) лежат в vibedeps как обычные файлы. Либо вынести, либо первой строкой: «это индекс — не читай целиком, ищи по нему».
На чём основано: ENTRIES.md прочитан агентом в G1 (11 чтений файлов, 123 151 токен только на чтения).
Эффект: убирает второй по величине источник случайных трат.
P3. Перевести сниппет fpf-spec из static в dynamic
Что: STATIC.md для ядра = 9 163 токена, из которых 7 966 (87%) — один сниппет со списком 355 id. Сам пакет уже помечает его в vibe.toml как dynamic-candidate: boot snippet of 27539 bytes lists every core pattern. В приоритетной линии оставить правило адресации и таблицу «код → пакет» (856 + 333 токена), а список id держать в INDEX.md.
На чём основано: boot-лейн читают только 10 из 18 прогонов; при этом 87% лейна — это то, что агент и так получает грепом.
Эффект: boot падает с 9,2k до ~1,2k токенов, и он наконец становится таким дешёвым, что его незачем пропускать.
P4. Сделать чтение boot-лейна первым действием, а не развилкой
Что: managed block в AGENTS.md сейчас говорит «To begin a session, read these files in order» и отправляет в boot/STATIC.md, оттуда в boot/INDEX.md — два уровня отсылок. Заменить на одно императивное действие с точным путём.
На чём основано: 8 из 18 прогонов вообще не прочитали STATIC.md и работали грепом, игнорируя адресную схему spec://.
Эффект: включает всё, что заявлено как преимущество представления (адресацию, порядок чтения, проверку существования). Сейчас эти механизмы существуют, но не срабатывают.
P5. Починить эргономику путей
Что: при установке генерировать в корне проекта плоский индекс ссылок вида spec/A.2.6.md → vibedeps/ai.lev.fpf-spec/<ver>/vibevm/vibespecs/contract/A-2-6.md. Плюс сократить вложенность: сейчас путь содержит vibevm дважды.
На чём основано: VibeVM сделал на 37% больше запросов (11,0 против 8,1 на кейс). Причина видна в трейсах: чтобы открыть контракт, агенту нужно применить преобразование id (точки → дефисы), обойти три уровня вложенности и сначала найти каталог версии. Скилл делает это одним glob references/A.2.6*.
Эффект: минус 1–2 запроса на кейс — а именно запросы, а не размер чтения, дают основной прирост цены.
P6. Порядок чтения — первой строкой самого контракта
Что: в начало каждого contract/<ID>.md: «Рабочий слой. Глубина — source/<ID>#depth, открывать только если этот контракт оставляет сомнение».
На чём основано: в S3 VibeVM-плечо четыре раза прочитало source/E-10-ARCH.md (16 624 токена каждый) и лишь один раз сам контракт (7 376). Инструкция «contract before source» есть в fpf-lookup, но скилл не установлен (см. P8) — значит правило не доехало.
Эффект: сохраняет то самое преимущество разреза, которое в прогоне было нейтрализовано обратным порядком чтения.
P7. Дешёвая проверка существования
Что: в boot-сниппет: «если id или правила нет в STATIC/INDEX — ответ «нет», дальше не искать». Плюс явно продвигать vibe why / vibe requirements как server-side проверку вместо перебора файлов.
На чём основано: по кейсу F2 (правило, которого нет) VibeVM потратил 166 910 токенов против 272 594 у скилла — маршрутизатор со списком id реально помогает. Но F1 и F3 упали по бюджету в обоих плечах: искать несуществующее агенты не умеют останавливаться.
Эффект: закрывает целую семью кейсов, где сейчас проигрывают все.
P8. Доставить fpf-lookup до агента
Что: vibe skill install знает только claude, opencode, codex. Расширить список либо явно документировать ручную установку (для Hermes — в ~/.hermes/skills/).
На чём основано: скилл лежит в vibedeps/ai.lev.fpf-common/.../skills/fpf-lookup/SKILL.md, и нашёл его сам только 1 прогон из 18.
Эффект: в P6 и P7 правила уже написаны — они просто не доходят.
P9. Сократить машинную обвязку pub/
Что: pub/toc = 102 790 токенов в 8 файлах, pub/PREFACE.md = 20 068, pub/README.md = 12 017. Скилл держит тот же ToC одним файлом на 67 598 — то есть его можно абриджить вдвое.
На чём основано: те же три слагаемых покрывают 85% pub-объёма; в прогоне они не были нужны ни разу, но лежат в читаемом дереве рядом с контрактами.
Эффект: минус ~100k токенов соблазна в дереве.
P10. Для FPF-ALL (не для ядра): развязать link
Что: сейчас все 37 пакетов объявлены static, отсюда STATIC.md 111 404 байта (~31k токенов) в каждом сеансе. Сниппеты DPF-пакетов — это роутеры «какой DPF для чего», их место в dynamic-лейне.
На чём основано: vibe tree показывает static у всех 37 без исключения; комментарий в vibe.toml ядрового пакета сам признаёт сниппет списка id кандидатом в dynamic.