TGViewer
C# Short Posts 🔞 C# Short Posts 🔞 @dimasshortposts · 306 subscribers
Post #384 738
🚘 Скиллы для агентов: нужно ли писать роутер или агент сам разберётся?

Когда я ковырялся со скиллами для dotnet-агентов, то предположил, что нужно писать свой роутер — «если задача про бенчмарки, вызови microbenchmarking, если про дебаг — вызови clr-debugging»?

Но в комментариях появился аргумент: так оно же уже само все встроено.

Я если честно не знаю, но решил полезть в единственный более менее адекватный опенсорсный агент opencode. Просто хотелось хотя бы у кого-то лично в коде а не на основе предположений посмотреть, как оно там работаетъ.

🤩 Короткий ответ: ТАДАМ! Роутер писать не нужно. LLM сам выбирает скилл.

Но есть множественные нюансы, Петька

Как это работает внутри:

1️⃣ Каждый скилл — это SKILL.md файл с метаданными, в которых есть name и description.
2️⃣ При старте сессии агент сканирует все директории со скиллами (паттерны вроде skills/**/SKILL.md — skill.ts:48-53), обходит внешние директории, конфиг-пути и даже URL-источники (skill.ts:55-179).
3️⃣ Собранные описания форматируются функцией Skill.fmt() (skill.ts:199-217) и вставляются в системный промпт через SystemPrompt.skills() (system.ts:59-71).

🗑 Буквально вот такой там промпт:


Skills provide specialized instructions and workflows for specif
Use the skill tool to load a skill when a task matches its description.

Available skills:
- microbenchmarking: Writing correct BDN benchmarks...
- csharp-scripts: Running one-file C# programs...
- clr-debugging: Analyzing CLR crash dumps...


4️⃣ Дальше у агента есть инструмент skill (tool/skill.ts:9-105) — обычный tool, как bash или read. Когда LLM видит задачу и решает, что один из скиллов подходит — он сам вызывает skill(name="microbenchmarking"). Инструмент подгружает содержимое SKILL.md и возвращает его как контекст.

То есть роутинг — это просто tool use. LLM читает описания скиллов в системном промпте и сам решает, какой вызвать. Точно так же, как он решает вызвать bash или grep — на основе описания.

Теперь про «а если скиллов 10, не запутается ли?». Тут есть два момента.

1️⃣ В системный промпт попадают только описания, не содержимое. Каждый скилл — это одна строчка: имя + description. 10 скиллов = 10 строк. Это не забивает контекстное окно. Содержимое скилла (инструкции, примеры, референсы) подгружается только когда LLM явно вызвал skill tool. Это ленивая загрузка — сначала агент видит меню, потом заказывает конкретное блюдо.

2️⃣ Качество роутинга зависит от качества description. Если у тебя два скилла с описаниями «helps with .NET» и «helps with C#» — агент будет путаться. Если описания конкретные — «Writing correct BenchmarkDotNet micro-benchmarks with proper allocation tracking» — модель попадает точно. Это та же история что и с описаниями kernel functions в Semantic Kernel: чем точнее Description, тем лучше LLM выбирает инструмент.

Есть ещё один слой — AGENTS.md (аналог CLAUDE.md). Туда можно написать правила, которые помогают в неочевидных случаях. Я у себя именно так делаю — в AGENTS.md описываю доп инфу которая поможет точнее понять, какой скилл вызывать если я употреблю неформальное слово типа “ЗАЕБАЛ ПОПРАВЬ УЖЕ КАК НАДО”. Не потому что модель не справляется, просто порой триггеры слегка неочевидные.

🅰️ Итого:

😏 Скиллы сканируются при старте, описания попадают в системный промпт
😏 LLM сам решает какой скилл вызвать через обычный tool use
😏 Содержимое подгружается лениво, только при вызове
😏 Роутер писать не нужно — модель справляется если описания нормальные
😏 Для сложных случаев можно подсказать в AGENTS.md / CLAUDE.md

В любом случае остается проблема замусоривания. Если вы накидали 100500 скиллов с похожими описаниями, но немного разными значениями, а потом благополучно забыли, что и зачем вы сами там понатыкали. Но это уже кожаномешковая проблема скорее.

А хотя… Может написать скилл, который будет периодически форсить юзера пересматривать список скиллов? 🤔
  • 🔥 4
  • 💅 2
More from @dimasshortposts
  1. Sep 26, 2026🧵 Тредик для вопросов по докладу про MAF на дотнексте В докладе многие подробности опусти…
  2. Sep 23, 2026Даже самым хардкорным ребятам надо отдыхать, так что отдыхаем, мои чюваки 🕺 🧑‍💻dp🥁 #he…
  3. Sep 16, 2026🎯 Instrumented Tier0: профилирование кода В прошлый раз мы разобрали два уровня компиляци…
  4. Sep 15, 2026🔜 Готовлюсь к DOTNEXT 2026 В прошлом году за две недели до выступления я зачитывал свой д…
  5. Sep 9, 2026C# Short Posts 🔞 pinned «🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот к…
  6. Sep 9, 2026🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот канальчик, и пора бы описат…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →