/skills
Скиллы
Markdown-инструкции, найденные в дюжине агентских каталогов. Совпадение едет подсказкой — «этот скилл может подойти, загрузи его инструментом skill», — так что искать возможности вручную не приходится.
❯ /rag▊
Эмбеддинги, ключевой поиск и слияние рангов — всё на вашем процессоре. Вот что происходит с каждым промптом до того, как он дойдёт до модели, и что происходит, когда какой-то части нет.
0.927
MRR — скиллы
0.836
MRR — MCP-инструменты
120 МБ
модель, одна загрузка
3
корпуса, один движок
── конвейер
Ни одной половине не верят в одиночку: эмбеддинги ловят перефразировку, ключевые слова — идентификатор, который эмбеддинги сглаживают, а reciprocal rank fusion разрешает спор.
01
Квантованный ONNX через fastembed, мультиязычный, 384 измерения. Считается на блокирующем потоке, поэтому цикл событий никогда не ждёт эмбеддинг.
02
Стемминг Snowball для русского и английского: release, releasing и «релиз» сходятся к одной основе ещё до подсчёта.
03
Reciprocal rank fusion по обоим рейтингам, затем косинусный порог (min_dense_score = 0.80) для кандидатов без пересечения по словам. Топ-3 на корпус за ход.
semantic/index.rs — the shape of a hit
// dense + lexical, fused by reciprocal rank
skill releasing dense 0.93 kw 0.71 → rrf 1
mcp playwright.click dense 0.88 kw 0.55 → rrf 2
history 2026-08-29 checkpoints dense 0.81 kw 0.64 → rrf 3
── три корпуса
Скиллы, инструменты и ваша собственная история индексируются одинаково и ищутся одним кодом — разница только в том, что позволено делать совпадению дальше.
/skills
Markdown-инструкции, найденные в дюжине агентских каталогов. Совпадение едет подсказкой — «этот скилл может подойти, загрузи его инструментом skill», — так что искать возможности вручную не приходится.
/mcp · tool_search
Инструменты каждого подключённого сервера проиндексированы по имени и описанию. Совпавшим схема вставляется целиком, остальные остаются строкой-сводкой, пока их не спросят.
/search · history_search
Сессии нарезаются, векторизуются и сохраняются в data_dir/semantic/history.json — инкрементально, с отметкой на сессию, поэтому перезапуск перечитывает метку, а не корпус.
── отложенные схемы
Один сервер Playwright — это около 25 определений инструментов. Слать их все в каждом запросе — верный способ потратить окно контекста до начала работы.
каждый запрос, как обычно
tools: [
{"name":"playwright__browser_click",
"description":"Perform click on a web page…",
"inputSchema":{"type":"object","properties":{…}}},
{"name":"playwright__browser_type", …},
{"name":"playwright__browser_navigate", …},
… 22 more, every request, whether or not
this turn has anything to do with a browser
]каждый запрос, с отложенными схемами
mcp servers:
playwright (25 tools)
github (18 tools)
// the turn mentions a browser →
+ playwright__browser_click (full schema, inlined)
// or the model asks for more:
tool_search("scrape a page")mcp_schemas = "auto" откладывает после двенадцати инструментов, "full" не откладывает никогда, "deferred" — всегда. Выключите RAG целиком — полные схемы вернутся сами: модель не остаётся в неведении о том, что вообще существует.
── ваша история
Агент уже решал с вами задачи. Эта переписка — индекс, а не архив: запросить её могут и вы, и модель.
/search compaction
❯ /search how did we fix the PoW stall
sort: relevance role: any unique: on
1. 2026-08-29 · checkpoints 0.91
"…the solver moved to a blocking thread so the
event loop never waits on SHA-3…"
2. 2026-08-14 · deepseek auth 0.78
↵ opens that session s sort r role u unique── управление
Слой, который нельзя выключить, — это риск. Здесь он выключается четырьмя командами и четырьмя ключами конфига.
config.toml
[semantic]
enabled = true # /rag on|off flips this
top_k = 3 # hints per corpus per turn
min_dense_score = 0.80 # cosine floor without keyword overlap
mcp_schemas = "auto" # auto | full | deferred
── режимы отказа
Каждая зависимость здесь необязательна в рантайме, и на её отсутствие есть заранее описанный ответ.