Yapay Zekâ Ajanları Neden Kütüphanenizi Yanlış Kullanıyor? FmgLib.MauiMarkup AI Skills

Bir AI ajanından "MAUI ekranını C# markup ile yaz" isteyin; makul görünen ama derlenmeyen kod alırsınız — uydurulmuş metot adları, XAML alışkanlıklarının birebir çevirisi, hot reload'da sıfırlanan durum. Sorun modelde değil: kuralların basit ama tahmin edilemez olmasında. On adet kurulabilir skill paketiyle bunun nasıl çözüldüğünü, kurulumu ve pratikte hangi hataların ortadan kalktığını anlatıyoruz.

Bir yapay zekâ ajanına şunu söyleyin: "Bu ekranı FmgLib.MauiMarkup ile yaz."

Büyük ihtimalle şuna benzer bir şey alırsınız:

new Label()
    .SetText("Merhaba")
    .SetFontSize(30)
    .HorizontalAlign("Center")

Kod makul görünüyor. Bir tanesi bile mevcut değil.

Doğrusu şu:

new Label()
    .Text("Merhaba")
    .FontSize(30)
    .CenterHorizontal()

Bu yazı, bu farkın neden ortaya çıktığı ve nasıl kapatıldığı üzerine. Cevap “daha iyi bir model bekleyin” değil.

Sorun modelde değil

Ajanın uydurduğu metot adlarına bakın: SetText, SetFontSize, HorizontalAlign. Hiçbiri saçma değil — başka kütüphanelerde bunların hepsi gerçek. Model, gördüğü onlarca fluent API'nin ortalamasını alıp makul bir tahmin üretiyor.

Asıl mesele şu: FmgLib.MauiMarkup'ın kuralları basit ama tahmin edilebilir değil.

  • Foo adlı bindable property → .Foo(...) metodu. Set öneki yok.
  • Bar adlı event → .OnBar(...) metodu.
  • Grid.Row attached property'si .Row(...) olur — önek düşer. Ama Shell.TitleColor, .ShellTitleColor(...) olur — önek düşmez.
  • Build() her hot reload'da yeniden çalışır; dolayısıyla durum alanlarda yaşamalı, Build() içinde değil.
  • Kayıt çağrısı yoktur. builder.UseFmgLibMauiMarkup() diye bir şey aramayın.

Bu kuralların hiçbiri tip sisteminden çıkarılamaz. Bir ajan Label sınıfına baktığında TextProperty'yi görür ama uzantı metodunun adının .Text mi .SetText mi olacağını göremez — ikisi de eşit derecede mantıklıdır.

İkinci bir etken daha var: internetteki MAUI kodunun ezici çoğunluğu XAML. Ajan bir MAUI ekranı yazması istendiğinde eğilimi XAML'e doğrudur; C# markup istendiğinde de sık sık XAML alışkanlıklarını birebir çevirir — .xaml + .xaml.cs çifti üretmek, InitializeComponent() çağırmak, ContentTemplate'e lambda yerine hazır bir sayfa vermek gibi.

Yani sorun zekâ eksikliği değil, bilgi eksikliği. Ve eksik bilgi yazıya dökülebilir.

Skill nedir?

Bir “skill”, YAML başlıklı düz bir Markdown dosyasından ibaret:

---
name: mauimarkup-mvvm
description: Structure FmgLib.MauiMarkup apps with MVVM — FmgLibContentPage<TViewModel>,
  typed BindingContext, compiled Getter/Setter bindings, commands, dependency injection…
  Use when writing or refactoring view models, wiring pages to view models…
license: MIT
---

 # MVVM with FmgLib.MauiMarkup
...

İşleyişindeki asıl incelik description alanında: ajan yalnızca açıklamaları sürekli görür, gövdeyi ise ancak eldeki görev o açıklamayla eşleştiğinde okur. Yani on skill kurmak, ajanın bağlamına on doküman yüklemek anlamına gelmiyor. Liste ayrılmış, içerik talep üzerine geliyor.

Bu format Agent Skills standardı; Claude Code, Claude uygulamaları, Agent SDK ve SKILL.md okuyabilen herhangi bir ajan ile çalışıyor.

On skill

Toplam yaklaşık 3000 satır; her biri kütüphanenin bir alanını, ajanın hata yaptığı noktalara odaklanarak anlatıyor.

Skill Ne öğretiyor
mauimarkup (zorunlu) Fluent model, sayfa iskeleti, dört property overload'ı, layout, event'ler, Assign, isim türetme kuralları, Build() disiplini. Beş dosyalık references/ paketi: cheatsheet, binding'ler, layout tabloları, stil & tema, tuzaklar
mauimarkup-xaml-migration Sayfa bazlı geçiş prosedürü, 30 satırlık XAML→C# eşleme tablosu, çeviri değil karar gerektiren yapılar
mauimarkup-mvvm FmgLibContentPage<TViewModel>, tipli BindingContext, derlenmiş Getter/Setter, komutlar, DI, CommunityToolkit.Mvvm
mauimarkup-shell Shell, FlyoutItem, Tab, ContentTemplate lambda'ları, rotalar, pencereler, menüler
mauimarkup-collections ItemsSource/ItemTemplate, template selector, item layout, EmptyView, sonsuz kaydırma, BindableLayout'un ne zaman kullanılmaması gerektiği
mauimarkup-styling Style<T>, kaynak organizasyonu, AppThemeBinding ile koyu tema, visual state'ler, trigger'lar, Animate…To
mauimarkup-localization JSON ve RESX kurulumu, Translate/TranslateFormat, canlı dil değişimi, fallback zinciri, RTL
mauimarkup-thirdparty [MauiMarkup], [MauiMarkupAttachedProp], otomatik üreteç modu, taban sınıf üretimi, New eki kuralı
mauimarkup-hotreload IFmgLibHotReload, handler seçenekleri, dotnet watch ve IDE kanalları, reload-güvenli Build(), teşhis matrisi
mauimarkup-review Dokuz denetim geçişi, hazır ripgrep sorguları, önem derecesi modeli ve raporlama biçimi

Hepsini kurmak sorun değil — kullanılmayan skill'in maliyeti sıfır, çünkü gövdesi hiç okunmuyor.

Yine de bir başlangıç noktası isterseniz:

Durumunuz Kurun
Yeni uygulama başlatıyorsunuz mauimarkup + shell + mvvm + hotreload
Mevcut XAML uygulamasını taşıyorsunuz mauimarkup + xaml-migration + styling
Veri ağırlıklı uygulama mauimarkup + mvvm + collections
Çok dilli yayın üstüne localization
Syncfusion / UraniumUI / SkiaSharp kullanıyorsunuz üstüne thirdparty
Devraldığınız kodu temizliyorsunuz mauimarkup + review

Kurulum

Otomatik. Ajanınıza şunu söylemeniz yeterli:

https://fmglibmauimarkup.vodisoft.com/llms.txt adresini getir ve FmgLib.MauiMarkup AI skill'lerini kur.

Katalog sayfasını bulur, listeyi okur ve dosyaları yerine indirir.

Manuel. Her skill bir klasör ve içinde bir SKILL.md. İki yerden birine koyabilirsiniz:

Kapsam Konum
Kişisel — her projede geçerli ~/.claude/skills/<skill-adı>/SKILL.md
Proje — repoyla birlikte versiyonlanır <repo>/.claude/skills/<skill-adı>/SKILL.md
NAME=mauimarkup-mvvm
mkdir -p ~/.claude/skills/$NAME
curl -fsSL https://raw.githubusercontent.com/VodiSoft/FmgLib.MauiMarkup/master/skills/$NAME/SKILL.md \
     -o ~/.claude/skills/$NAME/SKILL.md

Çekirdek skill'in ayrıca references/ klasörü var; göreli yolların bozulmaması için onu olduğu gibi kopyalayın.

Ekipler için proje kapsamı tercih edilmeli. Klasörü <repo>/.claude/skills/ altına commit ederseniz her geliştirici ve her CI ajanı aynı talimatlarla çalışır. Kurulum farkından doğan “bende düzgün yazıyordu” tartışması ortadan kalkar.

Pratikte ne değişiyor?

Skill'lerin kodladığı düzeltmelerden bazıları — her biri ajanların düzenli olarak yaptığı bir hata:

Skill'siz Skill'li
.SetText(), .HorizontalAlign() uydurur Property adından .Text(), .CenterHorizontal() türetir
.xaml + .xaml.cs çifti üretir Tek .cs dosyası, InitializeComponent() yok
Build() içinde new MyViewModel() View model constructor'da alanda — durum hot reload'ı atlatır
.ContentTemplate(new HomePage()) .ContentTemplate(() => new HomePage())
.TextColor(isDark ? white : black) .TextColor(e => e.OnLight(black).OnDark(white)) — canlı tema binding'i
Her yerde e.Path("UserName") e.Getter(static (VM vm) => vm.UserName) — derleyici denetimli
5000 elemanlı liste için BindableLayout CollectionView, çünkü yalnızca o sanallaştırıyor
builder.UseFmgLibMauiMarkup() ekler Böyle bir kayıt çağrısı olmadığını bilir
Syncfusion kontrolü için elle uzantı yazar [MauiMarkup(typeof(SfButton))] yazıp üretece bırakır

Bu listedeki maddelerin çoğu “derlenmiyor” kategorisinde bile değil — ikinci sütundaki üç madde (tema koşulu, Path yerine Getter, BindableLayout) sorunsuz derlenir ama yanlıştır. Ajanın bulduğu ilk çalışan çözüm ile doğru çözüm arasındaki fark, tam olarak skill'lerin doldurduğu boşluk.

Kurulumu doğrulama

Skill'lerin net cevabı olan bir şey isteyin:

MauiMarkup ile bir giriş sayfası yaz: e-posta alanı, şifre alanı ve ikisi de doldurulmadan etkin olmayan bir gönder butonu.

Doğru cevap tek bir .cs dosyasıdır: IFmgLibHotReload uygular, ağacı Build() içinde kurar, alanları .Assign(out var …) ile yakalar ve içinde hiç XAML geçmez. Bunlardan biri eksikse skill devreye girmemiş demektir — genellikle dosya yanlış klasördedir.

Kütüphane yazarları için asıl ders

Bu işin ilginç tarafı FmgLib'e özgü değil.

Yıllardır dokümantasyonu insanlar için yazdık: kavramları anlatan, örnek veren, gerekçe sunan metinler. Ajanların ihtiyacı olan şey farklı — kısa, kesin, karar verdiren talimatlar. “Property adı metot adıdır” cümlesi bir insan için sıkıcı bir ayrıntıdır; bir ajan için o cümle, uydurma metot adlarıyla dolu bir dosya ile derlenen bir dosya arasındaki farktır.

Üç pratik sonuç çıkarıyoruz:

  1. Skill'ler kütüphane deposunda yaşamalı. API değişikliği ve skill güncellemesi aynı commit'te gitmeli; ayrı bir repo ya da web sayfası kaçınılmaz olarak eskir.
  2. Eskimiş bir skill, hiç skill olmamasından kötüdür. Ajan yanlış bilgiyi kendinden emin biçimde tekrar eder ve siz onu düzeltmek yerine kodu düzeltmeye çalışırsınız.
  3. Skill'in değeri, kapsadığı API'de değil, önlediği hatalarda. Yukarıdaki “Skill'siz / Skill'li” tablosunu skill yazmadan önce yapın: ajana görevi verin, hatalarını not edin, skill'i o hataların üzerine yazın.

Özet

  • Ajanlar kütüphanenizi bilmediği için değil, kurallarınızı tahmin edemediği için yanlış kullanır.
  • Skill = YAML başlıklı Markdown; ajan yalnızca açıklamayı görür, gövdeyi görev eşleştiğinde okur. Kullanılmayan skill maliyet üretmez.
  • On skill, kütüphanenin alanlarını kapsıyor; çekirdek olan mauimarkup her durumda gerekli.
  • Ekip çalışıyorsanız <repo>/.claude/skills/ altına commit edin — herkes ve CI aynı talimatla çalışsın.
  • Doğrulamak için basit bir giriş sayfası isteyin; cevap tek .cs dosyası ve sıfır XAML olmalı.

Sonuç olarak elde ettiğiniz şey, “AI'ya kod yazdırmak” değil: ajanın kütüphanenizin kurallarını bilerek yazması. İkisi arasındaki fark, ürettiği kodu kontrol etmekle yeniden yazmak arasındaki fark kadar.

İletişim

Projenizi konuşalım.

Kapsamı, riskleri ve gerçekçi bir takvimi birlikte çıkaralım. İlk görüşme ücretsizdir ve sizi hiçbir şeye bağlamaz.