Добавил вариант MCP с https://fpf.tools, устранил небольшое читерство в предыдущем тестировании скилла (SKILL.md был продублирован в AGENTS.md - так не делют).
Пять вариантов: что это, плюсы и минусы
none - пустая рабочая папка, «пол»
Тот же вопрос, тот же формат ответа, то же правило «отвечай только из материала», но материала нет.
Плюсы
- Доказывает, что банк вопросов не решается из знаний модели: 0/12 на фактических семьях. Без этого замера все остальные цифры ничего не значат.
- Самый дешёвый и быстрый (894 тыс. токенов за 17 клеток, медиана 17 с) — цена «ничего» для контроля.
Минусы
- Это не способ доставки, а контрольная точка: практической пользы нет.
- Для семейств
fabricationиgateкоординаты не применимы по построению: нет материала — нет и отказа от него.
mono - монолит FPF-Spec.md + указатель из пяти строк
Один файл 15,4 МБ (3 273 747 токенов, 117 207 строк) и AGENTS.md из пяти строк: «используй ./FPF-Spec.md, он очень большой, ищи по нему, не читай целиком». Внешнего роутера нет.
Плюсы
- Лучший результат: 17/17, фактические семьи 12/12.
- Лучший баланс цена/результат среди всех носителей: 222 050 токенов на правильную клетку, медиана 4 вызова на клетку.
- Внешний роутер не нужен: внутреннее оглавление файла (~250 КБ) работает как навигация. Монолит ни разу не читали целиком — 64
grep+ 33read_fileза 17 клеток. - Ничего не надо ставить и синхронизировать: один файл в поставке, ноль чтений вне рабочей папки.
- Работает офлайн, редакция заморожена и проверяема хешем.
Минусы
- В поставке лежит файл на 3,27 млн токенов: обновлять его надо целиком и вручную.
- Редакция стареет: свежие паттерны и DPF-сьюты не появятся, пока не подменишь файл.
- Нет цитируемости: в ответе нет ни коммита, ни секции — проверить, откуда взято, можно только глазами.
- Требует, чтобы агент умел искать по очень большому файлу: на слабой модели или без грепа это плечо деградирует.
skill - скилл fpf-core, установленный в окружении агента
SKILL.md + 398 файлов лежат как установленный скилл (~/.qwen/skills/fpf-core/), рабочая папка пуста, AGENTS.md — три строки ссылки. Проверено по журналу: 17 из 17 клеток вызвали инструмент skill и читали references/<ID>.md.
Плюсы
- Механизм реальный, а не имитированный: скилл именно установлен, инструкция на него только ссылается.
- Лучший результат на маршрутизации: 16/17, фактические семьи 12/12.
- Роутер «ситуация → какие файлы грузить» работает: агент идёт по таблице, а не перебирает корпус.
- В поставке 398 небольших файлов вместо одного монолита: паттерн обновляется точечно.
Минусы
- Дороже монолита: 287 888 токенов на правильную клетку (+30 %), медиана 6 вызовов и 72 с против 4 вызовов и 24 с.
- Требует отдельной загрузки скилла и поиска по его таблице; в тяжёлых клетках уходит в длинный перебор:
G2700 тыс. токенов,G1395 тыс.,F1376 тыс. - Поставка сложнее: скилл надо установить в окружение (в прогоне — в
HOMEкаждой клетки). - Роутер и
references/— ещё один формат, который надо держать в актуальном состоянии.
vibe - реальный проект vibevm с пакетом ai.lev/fpf-spec
Носитель уровня пакетного менеджера: AGENTS.md — сгенерированная boot-инструкция, которая велит прочитать STATIC.md (32 КБ) целиком, затем INDEX.md и всё, что тот перечисляет.
Плюсы
- Корректность та же, что у остальных: 12/12 на фактических семьях, 15/15 оцениваемых клеток.
- Версионирование и поставка на команду: пакет, зависимости, lock-файл — то, чего нет ни у монолита, ни у папки скилла.
- Явный разрез «рабочий слой / источник»: теоретически дешевле читать (
contract/вместоsource/), выигрыш измерим (24 442 против 77 139 токенов в одном чтении).
Минусы
- Самый дорогой из файловых: 379 152 токена на правильную клетку, ×1,7 к монолиту, 44 % бюджета того прогона.
- Boot-лейн заставляет читать файлы пакетно (105
read_fileза 17 клеток против 33 у монолита), и всё прочитанное пересылается на каждом следующем запросе. - В дереве пакета мины:
package.specmap.json— 1,86 млн токенов в одном чтении,corpus.json— 309 тыс.,ENTRIES.md— 84 тыс. - Дисциплина boot-лейна на практике не соблюдается:
STATIC.mdчитали 10 из 18 запусков. - Выигрыша в качестве нет, цена выше: смысл держать — версионирование и общая поставка, не удобство агента.
mcp - FPF Library по протоколу MCP (fpf.tools)
Публичный read-only сервис https://mcp.fpf.tools/mcp, 7 инструментов, без ключа. Рабочая папка пуста: корпус не доставляется вообще.
Плюсы
- Единственный способ, где корпус не надо доставлять — агент приходит с пустой папкой, материал приходит по сети.
- Всегда свежая редакция: сервис обновляется по пушам в
ailev/FPF(за час наблюдения сменились три коммита). - Цитируемость: каждый ответ несёт коммит, путь, секцию, диапазон строк и снапшот — ответ проверяем, а не принимается на веру.
- Корпус шире ядра: 856 паттернов, 40 публикаций (ядро + 33 DPF-фреймворка + гайды) — можно искать по всей библиотеке.
- Только чтение и без ключа: нечего ставить, нечем испортить.
Минусы
- Самый дорогой: 610 709 токенов на правильную клетку, ×2,7 к монолиту. С ростом бюджета дорожает нелинейно: аддендум при капе 28 — 874 тыс. токенов на клетку.
- 10 запросов на клетку вместо 4; 8 % обращений отбито сервером (13
mcp_tool_error+ 1invalid_tool_params) — интерфейс инструментов приходится вписывать в инструкцию. - CLI режет вывод инструмента на 32 000 символов, поэтому агент дополнительно работает с собственными дампами: треть обращений — локальные (
grep,shell,read_file,glob,write_file), 38 служебных чтений за прогон. - Редакцию нельзя заморозить: проверяемость есть, воспроизводимость — нет. В аддендуме каждая клетка читала материал двух разных коммитов, и страж по снапшоту это не поймал — поймал только разбор цитат.
- Корректность на одну клетку ниже: 11/12.
R4— модель назвала соседаC.22.2вместоC.22.PFR(с обоснованием, но карточка говорит обратное). - Ограничение «только ядро» self-enforcing не является: 11 из 17 клеток читали гайд
USING-FPF.mdвне ядра, несмотря на явный запрет в инструкции. Ограничение работает только как измеренная координата. - Зависимость от внешнего сервиса: лимиты неизвестны, сетевой сбой запросто превращается в «провал плеча».
Проходимость
| семейство | none | mono | skill | vibe | mcp |
|---|---|---|---|---|---|
| route | 0/3 | 3/3 | 3/3 | 3/3 | 2/3 |
| near_miss | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 |
| section | 0/6 | 6/6 | 6/6 | 6/6 | 6/6 |
| fabrication | н/п | 3/3 | 3/3 | 3/3 | 2/3 |
| gate | н/п | 2/2 | 1/2 | нет данных | 1/2 |
| фактические семьи | 0/12 | 12/12 | 12/12 | 12/12 | 11/12 |
Единственное семейство, где носители реально расходятся, — gate (умение отказаться от FPF там, где он избыточен): монолит 2/2, установленный скилл 1/2, у vibevm и MCP данных нет.
Цена
| плечо | всего токенов | медиана на клетку | запросов на клетку | токенов на правильную клетку |
|---|---|---|---|---|
| none | 893 940 | 48 688 | 3 | — |
| mono | 2 664 600 | 100 805 | 4 | 222 050 |
| skill | 3 454 653 | 131 964 | 6 | 287 888 |
| vibe | 4 549 827 | 270 967 | 8 | 379 152 |
| mcp | 6 717 803 | 385 748 | 10 | 610 709 |