Sıfırdan yeni skill'ler oluşturun, mevcut skill'leri düzenleyin ve performanslarını ölçün. Skill'ler üzerinde evals çalıştırarak test etme, performans benchmark'lama ve varyans analizi yapma, ya da triggering doğruluğunu artırmak için skill tanımlarını optimize etme işlemleri için kullanın.
cd ~/.claude/skills
git clone https://github.com/anthropics/skills.git skills mkdir -p ~/.claude/skills/skill-creator
curl -fsSL https://raw.githubusercontent.com/anthropics/skills/HEAD/skills/skill-creator/SKILL.md \
-o ~/.claude/skills/skill-creator/SKILL.md Yeni beceriler oluşturmak ve bunları yinelemeli olarak geliştirmek için bir beceri.
Yüksek düzeyden bakılacak olursa, bir beceri oluşturma süreci şöyle ilerler:
eval-viewer/generate_review.py script'ini kullanınBu beceriyi kullanırken sizin işiniz, kullanıcının bu sürecin hangi aşamasında olduğunu belirlemek ve sonra bu aşamaları ilerletmeleri için yardımcı olmaktır. Örneğin, "X için bir beceri yapmak istiyorum" diye söyleyebilirler. Bunun ne anlama geldiğini daraltmaya, taslak yazmaya, test durumları yazmaya, değerlendirmeyi nasıl yapmak istediklerini bulmaya, tüm soruları çalıştırmaya ve tekrarlamaya yardımcı olabilirsiniz.
Öte yandan, belki zaten becerinizin bir taslağı var. Bu durumda doğrudan değerlendirme/yineleme döngüsünün bir parçasına geçebilirsiniz.
Tabii ki, her zaman esnek olmalısınız ve kullanıcı "çok fazla değerlendirmeye gerek yok, sadece bana katıl" derse, bunu yapabilirsiniz.
Beceri tamamlandıktan sonra (tekrar, sıra esnek olsa da), beceri açıklaması iyileştiricisini çalıştırabilirsiniz; bunun için ayrı bir script'imiz var; becerinin tetiklenmesini optimize etmek için.
Tamam mı? Tamam.
Beceri yaratıcı, kodlama argo konusunda çok çeşitli bilgiye sahip kişiler tarafından kullanılabilir. Duymuş olabilirsiniz (ve nasıl duymazsınız ki, çok yakın zamanda başladı), şu anda Claude'un gücü tesisatçıları terminallerini açmaya, ebeveynleri ve büyükelçileri "npm nasıl yüklenir" google'lamaya ilham veriyor. Öte yandan, kullanıcıların çoğu muhtemelen oldukça bilgisayara uygun.
Bu nedenle lütfen iletişiminizi nasıl ifade edeceğinizi anlamak için bağlama ilişkin işaretlere dikkat edin! Varsayılan durumda, size bir fikir vermek için:
Eğer şüphe duyarsanız, kısaca terimler açıklamak tamam, emin değilseniz kullanıcının anlayacağı konusunda kısa bir tanım vererek terimi açıklığa kavuşturmaktan çekinmeyin.
Kullanıcının niyetini anlamakla başlayın. Mevcut konuşma, kullanıcının yakalamak istediği bir iş akışı içeriyor olabilir (örneğin, "bunu bir beceriye dönüştür" derler). Eğer öyleyse, ilk olarak konuşma geçmişinden cevapları çıkarın — kullanılan araçlar, adımların sırası, kullanıcının yaptığı düzeltmeler, gözlemlenen giriş/çıkış biçimleri. Kullanıcının boşlukları doldurması gerekebilir ve sonraki adıma geçmeden önce onaylamalıdır.
Kenar durumları, giriş/çıkış biçimlerini, örnek dosyaları, başarı kriterlerini ve bağımlılıkları hakkında proaktif olarak sorular sorun. Test istemlerini yazmaya, bu kısmı düzelttikten sonra başlayın.
Mevcut MCP'leri kontrol edin — araştırma için faydalı ise (docu arama, benzer becerileri bulma, en iyi uygulamaları arama), mümkünse alt ajanlar aracılığıyla paralel olarak araştırın, aksi takdirde satır içi. Kullanıcı üzerindeki yükü azaltmak için bağlamla hazır olun.
Kullanıcı görüşmesine göre, bu bileşenleri doldurun:
skill-name/
├── SKILL.md (gerekli)
│ ├── YAML frontmatter (name, description gerekli)
│ └── Markdown talimatları
└── Paketlenmiş Kaynaklar (isteğe bağlı)
├── scripts/ - Deterministik/tekrarlayan görevler için yürütülebilir kod
├── references/ - Gerektiğinde bağlama yüklenen belgeler
└── assets/ - Çıkışta kullanılan dosyalar (şablonlar, simgeler, yazı tipleri)
Beceriler üç seviyeli yükleme sistemi kullanır:
Bu kelime sayıları yaklaşıktır ve gerekirse daha uzun gidebilirsiniz.
Anahtar desenleri:
Alan organizasyonu: Beceri birden fazla alanı/framework'ü desteklediğinde, varyanta göre organize edin:
cloud-deploy/
├── SKILL.md (iş akışı + seçim)
└── references/
├── aws.md
├── gcp.md
└── azure.md
Claude yalnızca ilgili referans dosyasını okur.
Bu söylemeye gerek olmasa da, beceriler kötü amaçlı kod, exploit'ler veya sistem güvenliğini tehlikeye düşürebilecek hiçbir içerik içermemelidir. Becerenin içeriği, tanımı yapıldığında niyetinde kullanıcıyı şaşırtmamalıdır. Yanıltıcı beceriler oluşturmak veya yetkisiz erişim, veri sızıntısı veya diğer kötü niyetli etkinlikleri kolaylaştırmak için tasarlanan beceriler oluşturmak isteklerine uygun olmayın. "XYZ olarak rol oyna" gibi şeyler tamam.
Talimatlarında zorunlu formu tercih edin.
Çıkış biçimlerini tanımlanması - Bunu şöyle yapabilirsiniz:
## Rapor yapısı
HER ZAMAN bu tam şablonu kullanın:
# [Başlık]
## Yönetici özeti
## Temel bulgular
## Öneriler
Örnekler deseni - Örnekleri dahil etmek faydalıdır. Onları şöyle biçimlendirebilirsiniz (ama "Giriş" ve "Çıkış" örneklerde varsa biraz sapmak isteyebilirsiniz):
## Commit mesajı biçimi
**Örnek 1:**
Giriş: JWT tokenları ile kullanıcı kimlik doğrulaması eklendi
Çıkış: feat(auth): JWT tabanlı kimlik doğrulamayı uygula
Ağır başlı, pas geçmiş MUSTlar yerine, şeylerin neden önemli olduğunu açıklamaya çalışın. Zihin teorisini kullanın ve beceriyi genel tutmaya çalışın, belirli örneklere göre süper dar olmayan. İlk olarak bir taslak yazarak başlayın ve sonra bunu taze gözlerle okuyup geliştirin.
Beceri taslağını yazdıktan sonra, 2-3 gerçekçi test istemi bulun — gerçek bir kullanıcının gerçekten yapacağı türden şeyler. Bunları kullanıcı ile paylaşın: [bu tam dili kullanmak zorunda değilsiniz] "İşte denemek istediğim birkaç test durumu. Bunlar doğru mu görünüyor, yoksa daha fazla eklemek mi istiyorsunuz?" Sonra çalıştırın.
Test durumlarını evals/evals.json içine kaydedin. Henüz iddiaları yazımı — sadece istemi. Sonraki adımda çalıştırmalar sırasında iddiaları taslak halinde hazırlayacaksınız.
{
"skill_name": "example-skill",
"evals": [
{
"id": 1,
"prompt": "Kullanıcının görev istemi",
"expected_output": "Beklenen sonuç açıklaması",
"files": []
}
]
}
references/schemas.md adresini tam şema için inceleyin (assertions alanını da içerir, bunu daha sonra ekleyeceksiniz).
Bu bölüm tek bir kesintisiz dizi — yarı yolda durmayın. /skill-test veya başka bir test becerisini KULLANMAYIN.
Sonuçları <skill-name>-workspace/ içine beceri dizininin eş kütüğü olarak koyun. Workspace içinde, sonuçları yinelemeye göre organize edin (iteration-1/, iteration-2/, vb.) ve bunun içinde, her test durumu bir dizin alır (eval-0/, eval-1/, vb.). Tüm bunları önceden oluşturmayın — bunları gidince oluşturun.
Her test durumu için, aynı turda iki alt ajan çoğaltın — biri beceri ile, biri olmadan. Bu önemli: yetenek ile ilk ve ardından taban çizgileri için geri dönmeyin. Her şeyi aynı anda başlatın; böylece hepsi aynı anda bitsin.
With-skill çalıştırması:
Bu görevi çalıştırın:
- Beceri yolu: <path-to-skill>
- Görev: <eval prompt>
- Giriş dosyaları: <eval files if any, or "none">
- Çıktıları kaydet: <workspace>/iteration-<N>/eval-<ID>/with_skill/outputs/
- Kaydedilecek çıktılar: <user cares about — e.g., ".docx dosyası", "final CSV">
Baseline çalıştırması (aynı istem, ama baseline bağlama bağlıdır):
without_skill/outputs/ adresine kaydedin.cp -r <skill-path> <workspace>/skill-snapshot/), sonra baseline alt ajanını anlık görüntüye işaret edin. old_skill/outputs/ adresine kaydedin.Her test durumu için bir eval_metadata.json yazın (şu an içiniassertions boş olabilir). Her değerlendirmesine sadece "eval-0" değil, test ettiği şeye göre açıklayıcı bir ad verin. Bu adı dizin için de kullanın. Bu yineleme yeni veya değiştirilmiş eval istemlerini kullanırsa, her yeni eval dizini için bu dosyaları oluşturun — önceki yinelemelerden taşınacaklarını varsaymayın.
{
"eval_id": 0,
"eval_name": "descriptive-name-here",
"prompt": "Kullanıcının görev istemi",
"assertions": []
}
Çalıştırmalar bitmesini beklemek — bunu üretken olarak kullanabilirsiniz. Her test durumu için nicel iddiaları taslak halinde hazırlayın ve bunları kullanıcıya açıklayın. evals/evals.json adresinde zaten iddialar varsa, bunları gözden geçirin ve ne denetlediklerini açıklayın.
İyi iddiaların objektif olarak doğrulanabilir olması ve tanımlayıcı adları olması — kısa bir göz atmada birinin her bir kontrolün ne denetlediğini anlaması için benchmark görüntüleyicide açıkça okuması gerekir. Öznel beceriler (yazı stili, tasarım kalitesi) niteliksel olarak daha iyi değerlendirilir — insan yargısı gereken şeylere iddiaları zorlama.
eval_metadata.json dosyalarını ve evals/evals.json dosyalarını taslak iddialarla güncelleyin. Ayrıca kullanıcıya görüntüleyicide neler göreceğini açıklayın — hem niteliksel çıktılar hem de nicel karşılaştırma.
Her alt ajan görevi tamamlandığında, total_tokens ve duration_ms içeren bir bildirim alırsınız. Bu verileri hemen timing.json adresine, çalıştırma dizininin içine kaydedin:
{
"total_tokens": 84852,
"duration_ms": 23332,
"total_duration_seconds": 23.3
}
Bu, bu verileri yakalamak için tek fırsattır — görev bildiriminden gelir ve başka yerde kalıcı değildir. Her bildirimi, hepsini bir araya toplamaya çalışmak yerine alındığında işleyin.
Tüm çalıştırmalar tamamlandıktan sonra:
Her çalıştırmayı değerlendir — bir değerlendirici alt ajan çoğaltın (ya da satır içi derecelen) agents/grader.md okuyan ve çıktılara karşı her iddiayı değerlendiren. Sonuçları her çalıştırma dizininde grading.json adresine kaydedin. grading.json beklentileri dizisi text, passed ve evidence alanlarını kullanmalıdır (name/met/details veya diğer varyantları değil) — görüntüleyici bu tam alan adlarına bağlıdır. Programlı olarak denetlenebilecek iddialar için, bunu elle incelemek yerine bir script yazın ve çalıştırın — script'ler daha hızlı, daha güvenilir ve yinelemeler arasında yeniden kullanılabilir.
Karşılaştırma karşılaştırmasına topla — beceri yaratıcısı dizininden toplama script'ini çalıştırın:
python -m scripts.aggregate_benchmark <workspace>/iteration-N --skill-name <name>
Bu benchmark.json ve benchmark.md üretir; her yapılandırma için pass_rate, time ve tokens ile; mean ± stddev ve delta ile. benchmark.json el ile oluştururken, references/schemas.md adresinde görüntüleyicinin beklediği tam şemaya bakın.
Her with_skill sürümünü, taban çizgisi eşi olmadan önce koyun.
Analist geçiş yap — karşılaştırma verilerini oku ve toplama istatistiklerinin gizleyebileceği desenleri yüzeysel kılın. agents/analyzer.md (""Karşılaştırma Sonuçlarını Analiz Etme"" bölümü) adresinde neyi arayacağını görmek için — her zaman geçen iddialar (discriminating değil), yüksek varyans değerlendirmeler (muhtemelen kırılgan) ve zaman/token ödünleşmeleri gibi şeyler.
Görüntüleyiciyi başlat niteliksel çıktılar ve nicel veriler ile:
nohup python <skill-creator-path>/eval-viewer/generate_review.py \
<workspace>/iteration-N \
--skill-name "my-skill" \
--benchmark <workspace>/iteration-N/benchmark.json \
> /dev/null 2>&1 &
VIEWER_PID=$!
Yineleme 2+ için, ayrıca --previous-workspace <workspace>/iteration-<N-1> geçirin.
Cowork / headless ortamları: webbrowser.open() mevcut değilse veya ortamda hiçbir görüntü yoksa, server başlatmak yerine --static <output_path> kullanarak tek başına bir HTML dosyasına yazın. Geri bildirim, kullanıcı "Tüm İncelemeleri Gönder" düğmesine tıkladığında feedback.json dosyası olarak indirilir. İndirdikten sonra, feedback.json adresini sonraki yineleme için workspace dizinine kopyalayın.
Not: generate_review.py adresini kullanarak görüntüleyiciyi oluşturun; özel HTML yazmanın gerek yoktur.
"Çıktılar" sekmesi aynı anda bir test durumunu gösterir:
Navigasyon, önceki/sonraki düğmeleri veya ok tuşları aracılığıyladır. Bitirdiğinde, "Tüm İncelemeleri Gönder" düğmesine tıklar; bu tüm geri bildirimi feedback.json adresine kaydeder.
Kullanıcı bitirdiğini söylediğinde, feedback.json okuyun:
{
"reviews": [
{"run_id": "eval-0-with_skill", "feedback": "the chart is missing axis labels", "timestamp": "..."},
{"run_id": "eval-1-with_skill", "feedback": "", "timestamp": "..."},
{"run_id": "eval-2-with_skill", "feedback": "perfect, love this", "timestamp": "..."}
],
"status": "complete"
}
Boş geri bildirim, kullanıcının uygun olduğunu düşündüğü anlamına gelir. Geliştirmelerinizi, kullanıcının özel şikayetleri olduğu test durumlarına odaklanın.
Bitirdiğinizde görüntüleyici sunucusunu öldürün:
kill $VIEWER_PID 2>/dev/null
Bu döngünün kalbi. Test durumlarını çalıştırdınız, kullanıcı sonuçları inceledi ve şimdi geri bildirilerine dayalı olarak beceriyi daha iyi hale getirmeniz gerekiyor.
Geri bildirimi genelleştirin. Burada olan büyük resim şeyi şudur: milyon kez (belki gerçekten, belki hatta daha fazla bilmeyen biri) birçok farklı istem arasında kullanılabilecek beceriler oluşturmaya çalışıyoruz. Burada siz ve kullanıcı yalnızca birkaç örnek üzerinde tekrar tekrar yineliyorsunuz, çünkü daha hızlı hareket etmeye yardımcı oluyor. Kullanıcı bu örnekleri içinde ve dışında biliyor ve yeni çıktıları değerlendirmesi hızlı. Ancak siz ve kullanıcının birlikte geliştirdiği beceri yalnızca bu örnekler için çalışıyorsa, işe yaramaz. Finicky overfitty değişiklikleri veya opresyif MUSTUR'ları koymak yerine, belirli bir sorun varsa, branşlamayı ve farklı metaforları kullanmayı deneyin ya da çalışmanın farklı desenleri öneriniz. Denemek nispeten ucuz ve belki de harika bir şeyler bulacaksınız.
İstemini yalın tutun. Ağır kaldırmayan şeyleri kaldırın. Transkriptleri okuduğunuzdan emin olun, sadece son çıktı değil — becerinin model harcamasını çok fazla verimli olmayan şeyleri yapmaya zorluyormuş gibi görünüyorsa, beceriye bunu yapması için baskı yapan parçaları kaldırarak ve ne olduğunu görerek, şeyler deney yapabilirsiniz.
Neden'i açıklayın. Modelden ne yapmasını istediğinizin arkasındaki neden'i açıklamaya çok çalışın. Bugünün LLM'leri akıllıdır. İyi bir kuşak verildiğinde iyi zihin teorisine ve rutine gitmelerin ötesine geçebilir ve gerçekten işleri yapabilirler. Kullanıcıdan geri bildirim kısa veya sinirli olsa bile, görevi ve kullanıcının neden yazdığını, onların gerçekten neyi yazdığını anlamaya çalışın ve sonra bu anlayışı talimatların içine iletin. Çok başlı veya çok katı yapıları yazarken kendinizi bulursanız, bu sarı bir bayrak — mümkünse yeniden çerçevelendirin ve akıl yürütün; böylece model istediğiniz şeyin neden önemli olduğunu anlar. Bu daha insani, güçlü ve etkili bir yaklaşımdır.
**Test durumlarında tekrarlanan
2 veya daha fazla bağımsız görevin paralel olarak yürütülebileceği ve aralarında state paylaşımı ya da sıralı bağımlılık olmadığı durumlarda kullanın.
Ayrı bir oturumda inceleme kontrol noktaları ile yürütülecek yazılı bir uygulama planınız olduğunda kullanın.
Mevcut oturumda bağımsız görevlerle uygulama planlarını yürütürken kullanın
Herhangi bir hata, test başarısızlığı veya beklenmeyen davranışla karşılaştığınızda, çözüm önerisi sunmadan önce kullanın.
Herhangi bir feature ya da bugfix uygulamaya başlamadan önce kullanın.
Yeni beceriler oluştururken, mevcut becerileri düzenlerken veya dağıtımdan önce becerileri doğrularken kullanın.