NuGet Paketlerinde Agent Skills: Paketle Gelen Uzmanlık

NuGet paketlerinin içine Agent Skills (SKILL.md) gömülmesiyle, paket güncellemeleriyle birlikte kullanım talimatları da makineye iner. dotnet restore ve dotnet-inspect gibi araçlarla skill’ler proje grafiğinde keşfedilir.

Agent skill’ler bugüne kadar ağırlıklı olarak git depoları üzerinden dağıtıldı..NET ekibi ise bu dağıtım kanalına bir seçenek daha ekliyor: skill dosyalarını doğrudan NuGet paketlerinin içine koymak. Fikir basit ama sonucu önemli — bir paketin yeni sürümüyle birlikte, o sürüme birebir uyan kullanım talimatları da makinenize iniyor. Bu yazıda yaklaşımın nasıl çalıştığını, hangi araçlarla keşfedildiğini ve ekibin deneylerinden çıkardığı uyarıları derliyorum.

Sorun: model eğitimi paket yayınlarına yetişemiyor

Agent skill’leri Anthropic 2025’te tanıttı ve kısa sürede AI destekli geliştirmenin standart parçası hâline geldi. Richard Lander’ın yazısına göre skill’ler esasen iki problemi çözüyor: modelin bilgi boşluklarını doldurmak ve bir işin “bizim yöntemimizle” nasıl yapılacağını tarif etmek.

NuGet tarafında bu iki problem fazlasıyla görünür. Beş dakika önce yayımlanmış bir paket sürümünün yeni API’leri, hiçbir modelin eğitim verisinde yer almaz. Üstelik sorun yalnızca yeni paketlerle sınırlı değil; paket kayıt defterlerinin çok uzun bir kuyruğu var ve modellerin bu paketlerin büyük bölümü hakkında kayda değer bir bilgisi olmaması oldukça olası.

Peki ajanlar bugün ne yapıyor? Ekibin gözlemi şu: temel davranış olarak ajanlar NuGet önbelleğindeki içeriği bulup bir paketi öğrenmeyi zaten beceriyor. README.md dosyalarını okuyor, hatta assembly metadata’sı üzerinde reflection yapan tek kullanımlık programlar yazabiliyor. Frontier modeller bu konuda etkileyici biçimde yaratıcı ve şaşırtıcı çıkarımlara ulaşabiliyor — ama bu mutlaka ucuz olmuyor.

Asıl soru da burada: Bu yaratıcılık metadata’dan dokümantasyon geri mühendisliği yapmaya mı harcanacak, yoksa sizin gerçek iş probleminize mi? “Neden ikisi birden olmasın?” demek kolay; ancak kullanımınızın aylık bir token bütçesine sığması gerektiğinde iş zorlaşıyor..NET ekibinin çözmeye giriştiği problem tam olarak bu.

SKILL.md formatı değişmiyor

Skill’ler, YAML başlığı taşıyan ve SKILL.md adıyla kaydedilen markdown dosyalarıdır. Formatın resmî spesifikasyon sitesi agentskills.io. NuGet üzerinden dağıtılan skill’ler de aynı formatı kullanıyor; yani ayrı bir “paket skill’i” türü yok.

Kaynakta verilen örnek, ajanı proje bağımlılıklarında güvenlik açığı taramasına yönlendiriyor:

---
name: vulnerable-nuget-package-check
description: Check a.NET project for vulnerable NuGet packages dependencies.
---
The.NET SDK includes a `dotnet package` command, which can list vulnerable direct or indirect package dependencies for a given.NET project.
Run the following command for a project:
```bash
dotnet package list --vulnerable --include-transitive
```

Geleneksel dağıtım: iki git yaklaşımı

Skill’ler git depolarında iki biçimde dağıtılıyor. En yaygını, skill’leri normal bir “kod” deposunun içine koymak. Bu iyi bir başlangıç noktası, çünkü depoda çalışan herkes aynı deneyimi alıyor; skill kompozisyonu takımın inceleyebildiği, hatta geri alabildiği bir PR akışıyla değişiyor. dotnet/runtime deposu bu yöntemi kullanıyor ve ajanın prompt’a göre farklı skill’leri otomatik devreye alması iyi bir deneyim sunuyor.

İkinci yaklaşım, dotnet/skills gibi marketplace depoları. Bu depolar skill’lerini marketplace.json üzerinden duyuruyor; kullanıcı /plugin marketplace add dotnet/skills benzeri bir komutla marketplace’i kuruyor. Buradaki add, aslında git clone üzerine ince bir sarmalayıcı — dolayısıyla bir skill marketplace deposunun küçük kalması gerekiyor.

Skill’leri doğrudan deponuza koymanın avantajı, her zaman orada olmaları. Örneğin Copilot Web Agent kullanırken, yerel olarak kurulmuş marketplace skill’leri siz onları depoya commit etmediğiniz sürece makinenizin dışında var olmaz. Yazar, bu seçeneklerden birinin diğerinden iyi ya da kötü olmadığını, sadece farklı olduklarını vurguluyor.

Paket içinde skill: restore zaten indiriyor

NuGet paketlerinin sunduğu fırsat şu: güncellenmiş skill’ler güncellenmiş ikililerle aynı yerde durabilir. Böylece bir paketin her sürümü, kendi kullanımına tam uyarlanmış skill’ler taşıyabilir. Bu, pakete gömülü README.md dosyalarına çok benziyor — yalnızca amacı ve hedef kitlesi farklı.

dotnet restore kütüphaneleri edinmek için paketleri zaten makinenize çekiyor. Dolayısıyla pakette yer alan SKILL.md dosyaları da ek bir adıma gerek kalmadan yerelinize iniyor. Yazıda markout paketi üzerinden gösterilen akış şöyle:

$ cat../../artifacts/obj/dotnet-inspect/project.assets.json | grep SKILL.md
"skills/markout-built-in-shapes/SKILL.md",
"skills/markout-composite-cells-cards/SKILL.md",
"skills/markout-conditional-composition/SKILL.md",
"skills/markout-output-formats/SKILL.md",
"skills/markout/SKILL.md",

Paket skill’leri project.assets.json içinde listelendiği için, belirli bir paket grafiğinde skill olup olmadığını tespit etmek kolaylaşıyor. Ekip yine de bundan daha iyi bir kullanıcı deneyimi hedeflemiş ve SKILL.md dosyalarını keşfetmeye yönelik araçlar üzerinde çalışmış.

dotnet-inspect ile keşif

dotnet-inspect, bir paket grafiğindeki skill’leri sorgulamayı sağlıyor:

$ dotnet-inspect package markout -S Skills
path    size
skills/markout-built-in-shapes/SKILL.md 9457
skills/markout-composite-cells-cards/SKILL.md   6764
skills/markout-conditional-composition/SKILL.md 4978
skills/markout-output-formats/SKILL.md  7744
skills/markout/SKILL.md 8551

Araç bir proje dosyasını da girdi olarak kabul ediyor; bu durumda doğrudan paket bağımlılıklarındaki geçerli Agent Skills belgelerini paket, sürüm, yol, boyut, ad ve açıklama sütunlarıyla tablo hâlinde listeliyor:

$ dotnet-inspect project scratch.csproj -S Skills

Hedeflenen deneyim şu: ajan, mevcut skill kümesini ister proje dosyasından ister doğrudan kayıt defterinden belirleyebiliyor; sonucu doğrudan kendi bağlamına veya bir dosyaya yazdırabiliyor. Bu dosya daha sonra aranabiliyor, hatta depoda saklanabiliyor.

dotnet-package-skills ile depoya kopyalama

dotnet-package-skills ise skill’leri depoda tutmaya odaklanıyor. install komutu, çözüm dosyasını tarayıp global packages dizinindeki paketlerden geçerli skill’leri .agents/skills altına kopyalıyor:

$ dotnet-package-skills install
Source:      /Users/rich/git/dotnet-inspect/dotnet-inspect.slnx
NuGet global-packages directory: /Users/rich/.nuget/packages/
Destination: /Users/rich/git/dotnet-inspect/.agents/skills
Scanned 23 packages (direct).
Copied 5 skills:
markout (Markout 0.40.1)
markout-built-in-shapes (Markout 0.40.1)
markout-composite-cells-cards (Markout 0.40.1)
markout-conditional-composition (Markout 0.40.1)
markout-output-formats (Markout 0.40.1)
Ignored 22 packages without valid bundled skills

Bu, skill’leri depoya eklemenin ve her zaman erişilebilir olmalarını sağlamanın kolay bir yolu. Ancak güncellik sizin sorumluluğunuzda: PackageRef girdileri güncellendikçe skill’lerin de güncel kalmasını sağlamanız gerekiyor. Yazar, bu iki işi aynı anda yapan bir skill yazmanın faydalı olabileceğini not düşüyor.

NuGet MCP ise ajanlara hem yerel projeniz hem de kayıt defteriniz hakkında derin bir NuGet anlayışı kazandıran faydalı bir araç; fakat henüz skill’ler için güncellenmiş değil. Ekip bunu yakında ele almayı planladığını belirtiyor.

Deneylerden çıkan dersler: etkinlik ve maliyet

Yazının en dikkat çekici bölümü, ekibin deneylerinden çıkardığı uyarılar. Önce temel tespit: paketle dağıtılan skill’ler özel bir skill türü değil. Format aynı olduğu için alışılmış skill değerlendirme (eval) pratikleri aynen geçerli.

Agent skill’lerin faydası iki başlığa indirgenebiliyor: etkinlik (doğru cevabı verebilme) ve verimlilik (cevabı ucuza verebilme). Ancak skill’ler bu faydaları her zaman sağlamıyor; sağlayabiliyorlar. Kötü yazılmış veya test edilmemiş skill’ler tam tersi sonucu da üretebiliyor.

Modellerle çalışırken maliyet büyük bir etken. Paketinize bir SKILL.md koyduğunuzda kullanıcının ajan maliyeti artıyorsa, bu kötü bir sonuç. Dolayısıyla paket bakımcılarının skill eval yapması gerekiyor; kullanıcıların etkisiz ya da pahalı olduğunu bildirdiği skill’ler iyileştirilmeli veya kaldırılmalı.

Ekibin gözlemi şöyle: Frontier modellerde etkinliği artırmak için fazla alan bulunamamış, çünkü bu modeller zaten yaratıcı biçimde çözüm üretebiliyor. Daha zayıf modellerde ise skill uyumunun düşük olması nedeniyle ciddi etkinlik düşüşü ve değişkenlik gözlenmiş.

Pareto verimliliği: “zarar verme”

Ekip, bu dengeyi yönetmek için Pareto verimliliği fikrini düzeltici bir araç olarak kullanmış. Temel ilke “zarar verme”. Erken dönem düşünce, skill’lerle “mini” seviyedeki modelleri frontier seviyeye çıkarmakmış; hoş bir fikir ama yazarın deneyiminde genel olarak pratik değil.

Sebep açık: tek bir skill kümesi tüm modellere dağıtılıyor. Anthropic Haiku için verimliliği %50 artırıp Opus için %10 düşürmek kötü bir takas; Opus kullanıcıları için ajan işini pahalılaştırmış oluyorsunuz ve Opus token’ları çok daha pahalı. Bu nedenle ekibin birincil odağı frontier modellerle test etmek olmuş. Yalnızca ucuz modellerle test etmek — ne kadar cazip görünürse görünsün — bulgulara göre bir anti-pattern sayılıyor ve önerilmiyor.

Sırada ne var: rehberlik ve güvenlik

Ekip, paket bakımcıları için rehberlik hazırlıyor. Skill eval’e zaten aşina olan bakımcılar bir adım önde olacak; çünkü NuGet üzerinden dağıtılan skill’lerde değişen çok şey yok. Odak, bütçeyi aşmadan yüksek kaliteli skill sunmanın ve skill’lerin gerçekten değer üretip üretmediğini belirlemenin yolunu bulmak.

Güvenlik tarafında önemli bir değişim var. Bakımcılar paketlerle uzun süredir markdown dağıtıyor; ancak bu içerik şimdiye kadar edilgen bir varlıktı. Ajanlar bunu değiştiriyor. Tüketiciler için önceki tavsiye geçerliliğini koruyor: “yalnızca güvendiğiniz bakımcıların paketlerini kullanın”. Yine de markdown’ın ajanlar tarafından tüketilmesi, dikkate alınması gereken yeni bir tehdit vektörü ekliyor.

Özetle skill dağıtımı, NuGet paketleri için önemli yeni bir seçenek. Yazarın değerlendirmesine göre bu yaklaşım, paketlerin kendi kendini belgeleyen ve bir uygulamaya verimli biçimde entegre edilebilen birimler hâline gelmesi fırsatını sunuyor.

Kaynaklar ve İleri Okuma

Bu yazı yapay zeka (büyük dil modelleri) ile hazırlanmış, insan editör tarafından incelenmiştir. İçerik üretim sürecimiz.
Aşkın KILIÇ

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için YouTube ve GitHub hesaplarımı takip edin.

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

✉

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Kategoriler
Ara
Paylaş
WhatsApp
İçindekiler
← GitHub Copilot, JetBrains Air&...
→
📩

Gitmeden önce!

Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

📬 Haftalık bülten: Teknoloji + AI haberleri
Beni Takip Et Yeni Azure / AI / DevOps yazılarını GitHub ve RSS üzerinden takip edin.