Claude Code'da Agent Skills ve Slash Komutları Rehberi
Daha önce Claude Code'un kurulumunu ve CLAUDE.md ile proje hafızasını ele almıştım. Bu yazıda bir adım öteye geçip Claude Code'u kendi ihtiyaçlarınıza göre nasıl genişleteceğinizi anlatıyorum: Agent Skills. Aynı talimatları defalarca kopyalayıp yapıştırıyorsanız, ya da CLAUDE.md dosyanızdaki bir bölüm artık bir kural değil de adım adım bir prosedüre dönüştüyse, o içerik bir skill olmayı hak ediyor demektir. Skill'ler, resmi code.claude.com/docs dokümantasyonuna göre SKILL.md adında bir dosyaya yazılan talimat setleridir; Claude bunları ya kendisi uygun gördüğünde otomatik yükler ya da siz /skill-adi yazarak doğrudan çağırırsınız. CLAUDE.md içeriğinin aksine, bir skill'in gövdesi yalnızca kullanıldığında yüklenir — yani ne kadar uzun referans materyaliniz olursa olsun, kullanılmadığı sürece neredeyse hiç bağlam maliyeti oluşturmaz.
Bu yazıda önemli bir güncellemeyi de ele alıyorum: Claude Code'daki özel slash komutları (custom commands) artık skills sistemine dahil edildi. Yani .claude/commands/ altına dosya yazma alışkanlığınız hâlâ çalışır, ama önerilen yol artık skill'lerdir. Aradaki farkı, SKILL.md dosya yapısını, frontmatter alanlarını, argüman geçirmeyi, dinamik bağlam enjeksiyonunu ve skill'leri subagent içinde çalıştırmayı gerçek örneklerle inceleyeceğiz.
1. Slash Komutları ve Skills'in Birleşmesi
Claude Code'un resmi dokümantasyonu artık şunu açıkça belirtiyor: "Custom commands have been merged into skills." Yani .claude/commands/deploy.md dosyası ile .claude/skills/deploy/SKILL.md dosyası aynı /deploy komutunu oluşturur ve aynı şekilde çalışır. Mevcut .claude/commands/ dosyalarınız çalışmaya devam eder ve aynı frontmatter alanlarını destekler; hiçbir şeyi taşımanız gerekmiyor. Ancak skill'ler ek özellikler sunar:
- Destek dosyaları için bir klasör: Bir komut artık tek bir
.mddosyası değil, şablonlar, örnek çıktılar ve çalıştırılabilir betikler içeren bir dizin olabilir. - Otomatik çağrılma kontrolü: Bir komutun yalnızca elle mi (
disable-model-invocation), yalnızca Claude tarafından mı (user-invocable: false), yoksa her iki şekilde mi çağrılabileceğini belirleyebilirsiniz. - Subagent içinde çalıştırma:
context: forkile bir skill izole bir subagent bağlamında çalıştırılabilir.
İki dosya türü aynı isimde çakışırsa skill, komuta göre öncelik kazanır. Claude Code skill'leri, birden fazla yapay zekâ aracında ortak çalışan Agent Skills açık standardını takip eder; Claude Code bu standardı çağrılma kontrolü, subagent içinde yürütme ve dinamik bağlam enjeksiyonu gibi ek özelliklerle genişletir.
2. Skill Nedir, Slash Komuttan ve Subagent'tan Farkı Ne?
Üç kavram sık karıştırılıyor. Aradaki farkı netleştirelim:
| Kavram | Tanımlandığı yer | Bağlam | Kim çağırır |
|---|---|---|---|
| Skill | SKILL.md (kişisel/proje/plugin) |
Varsayılan: mevcut konuşma | Siz (/isim) veya Claude otomatik |
| Slash komut (legacy) | .claude/commands/*.md |
Mevcut konuşma | Siz veya Claude (skill'lerle aynı mekanizma) |
| Subagent | .claude/agents/*.md |
İzole, ayrı sistem promptu | Claude'un devrettiği görev ya da Agent/Task aracı |
Skill + context: fork |
SKILL.md |
İzole subagent (skill içeriği görev promptu olur) | Siz veya Claude |
Kısacası: bir skill "ne yapılacağını" tanımlar; bir subagent ise "kim yapacağını" (hangi model, hangi araçlar, hangi sistem promptuyla) tanımlar. context: fork alanı bu ikisini birbirine bağlar — skill'in talimatlarını bir subagent'a görev olarak verir.
3. İlk Skill'inizi Oluşturma
Resmi dokümantasyondaki örnek üzerinden gidelim: git deposunuzdaki commit edilmemiş değişiklikleri özetleyip riskli noktaları işaretleyen bir skill yazalım. Önce kişisel skill klasörünü oluşturun (kişisel skill'ler tüm projelerinizde geçerlidir):
mkdir -p ~/.claude/skills/summarize-changes
Ardından ~/.claude/skills/summarize-changes/SKILL.md dosyasını şu şekilde yazın:
---
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---
## Current changes
!`git diff HEAD`
## Instructions
Summarize the changes above in two or three bullet points, then list
any risks you notice such as missing error handling, hardcoded values,
or tests that need updating. If the diff is empty, say there are no
uncommitted changes.
Buradaki !`git diff HEAD` satırı dinamik bağlam enjeksiyonu kullanır: Claude Code bu komutu skill içeriği Claude'a gönderilmeden önce çalıştırır ve çıktıyı yerine koyar. Yani Claude, komutu kendisi çalıştırmaz; talimatları gerçek diff çıktısı zaten içine gömülmüş olarak alır. Her SKILL.md dosyası iki bölümden oluşur: Claude'a skill'i ne zaman kullanacağını söyleyen --- işaretleri arasındaki YAML frontmatter, ve Claude çalıştığında izleyeceği markdown talimatları. Dizin adı (summarize-changes) yazacağınız komut haline gelir; description alanı ise Claude'un skill'i otomatik ne zaman yükleyeceğine karar vermesini sağlar.
Bir git projesinde claude komutunu çalıştırıp küçük bir düzenleme yaptıktan sonra iki şekilde test edebilirsiniz. Claude'un otomatik çağırmasını sağlamak için tanıma uyan bir soru sorun:
> Ne değiştirdim?
Ya da doğrudan skill adını yazarak çağırın:
> /summarize-changes
Her iki durumda da Claude, değişikliğinizin kısa bir özetini ve risk listesini döndürmelidir.
4. SKILL.md Frontmatter Alanları
Frontmatter'daki tüm alanlar isteğe bağlıdır; yalnızca description önerilir çünkü Claude bunu ne zaman kullanacağına karar vermek için okur. En sık kullanılan alanlar şunlardır:
| Alan | Açıklama |
|---|---|
name |
Skill listelemesinde gösterilen görünen ad; belirtilmezse dizin adı kullanılır. |
description |
Skill'in ne yaptığı ve ne zaman kullanılacağı. Belirtilmezse markdown içeriğinin ilk paragrafı kullanılır. Ana kullanım senaryosunu başa yazın: description ve when_to_use birleşimi listelemede 1.536 karakterde kesilir. |
when_to_use |
Tetikleyici ifadeler veya örnek istekler gibi ek bağlam; description'a eklenir. |
argument-hint |
Otomatik tamamlamada gösterilen ipucu, örn. [issue-number]. |
arguments |
İsimli konumsal argümanlar; $name yer tutucusu için isim listesi tanımlar. |
disable-model-invocation |
true yapılırsa yalnızca siz /isim ile çağırabilirsiniz, Claude otomatik yükleyemez. Yan etkisi olan işlemler (deploy, commit) için önerilir. |
user-invocable |
false yapılırsa / menüsünden gizlenir; yalnızca Claude çağırabilir. Arka plan bilgisi için kullanılır. |
allowed-tools |
Skill aktifken izin sorulmadan kullanılabilecek araçlar. |
disallowed-tools |
Skill aktifken Claude'un kullanamayacağı araçlar; bir sonraki mesajınızda kısıtlama kalkar. |
model |
Skill aktifken kullanılacak model; geçerli oturum boyunca kalıcı değildir. |
effort |
Skill aktifken kullanılacak akıl yürütme seviyesi (low, medium, high, xhigh, max). |
context |
fork yapılırsa skill, çatallanmış (forked) bir subagent içinde çalışır. |
agent |
context: fork aktifken hangi subagent tipinin kullanılacağı. |
paths |
Skill'in yalnızca belirli dosya kalıplarıyla çalışırken otomatik yüklenmesini sağlayan glob desenleri. |
Örnek bir frontmatter bloğu:
---
name: my-skill
description: What this skill does
disable-model-invocation: true
allowed-tools: Read Grep
---
Your skill instructions here...
Skill gövdesini kısa tutmak önemli: bir skill yüklendiğinde içeriği oturumun geri kalanında bağlamda kalır, yani her satır tekrar eden bir token maliyetidir. Resmi dokümantasyon SKILL.md dosyasını 500 satırın altında tutmayı, detaylı referans materyalini ayrı dosyalara taşımayı öneriyor.
5. Skill'ler Nerede Saklanır?
Bir skill'i nereye kaydettiğiniz, onu kimin kullanabileceğini belirler:
| Konum | Yol | Kapsam |
|---|---|---|
| Kurumsal (Enterprise) | Yönetilen ayarlar (managed settings) | Organizasyondaki tüm kullanıcılar |
| Kişisel | ~/.claude/skills/<isim>/SKILL.md |
Tüm projeleriniz |
| Proje | .claude/skills/<isim>/SKILL.md |
Yalnızca bu proje |
| Plugin | <plugin>/skills/<isim>/SKILL.md |
Plugin'in etkin olduğu her yer |
Aynı isimli skill'ler farklı seviyelerde çakışırsa, kurumsal tanım kişiseli, kişisel tanım da proje tanımını geçersiz kılar. Herhangi bir seviyedeki bir skill, aynı isimli bir bundled (yerleşik) skill'in de önüne geçer — örneğin projenizin .claude/skills/ altındaki bir code-review skill'i, yerleşik /code-review'un yerini alır. Plugin skill'leri plugin-adi:skill-adi ad alanı (namespace) kullandığı için diğer seviyelerle asla çakışmaz.
Monorepo kullanan ekipler için önemli bir detay: skill'ler, çalışma dizininizin altındaki iç içe geçmiş .claude/skills/ klasörlerinden de yüklenir. Claude bir alt dizindeki dosyayla çalıştığında o dizinin .claude/skills/ klasöründeki skill'ler de kullanılabilir hale gelir. Aynı isim proje kökünde ve apps/web/.claude/skills/ içinde varsa, iç içe geçen skill dizin nitelikli bir adla görünür: apps/web:deploy. Nitelendirilmemiş adı (/deploy) yazdığınızda kök seviyedeki skill çalışır, ama Claude Code bu skill'in içeriğine iç içe geçen varyantların listesini de ekler ve çalıştığınız dosyaların dizinine uyan varyantı da çağırmasını söyler.
Yeni oluşturduğunuz veya düzenlediğiniz bir skill dosyası, oturumu yeniden başlatmadan mevcut oturumda etkili olur (canlı değişiklik algılama). Ancak oturum başladığında hiç var olmayan yepyeni bir üst düzey .claude/skills/ klasörü oluşturduysanız, bu klasörün izlenmeye başlanması için Claude Code'u yeniden başlatmanız gerekir.
6. Argümanlar ve String Substitution
Hem siz hem de Claude, bir skill'i çağırırken argüman geçirebilir. Skill içeriğinde bu değerlere aşağıdaki yer tutucularla erişilir:
| Yer tutucu | Açıklama |
|---|---|
$ARGUMENTS |
Çağrı sırasında geçirilen tüm argümanlar. İçerikte hiç geçmiyorsa, argümanlar otomatik olarak sonuna eklenir. |
$ARGUMENTS[N] / $N |
0 tabanlı indeksle belirli bir argümana erişim, örn. $0 ilk argüman. |
$name |
Frontmatter'daki arguments listesinde tanımlı isimli argüman. |
${CLAUDE_SESSION_ID} |
Geçerli oturum kimliği; loglama veya oturuma özel dosya adlandırma için kullanışlı. |
${CLAUDE_SKILL_DIR} |
Skill'in SKILL.md dosyasını içeren dizin; skill'e paketlenmiş betikleri çağırmak için kullanılır. |
${CLAUDE_PROJECT_DIR} |
Proje kök dizini; hook'ların ve MCP sunucularının aldığıyla aynı yoldur. |
Örneğin, bir GitHub issue'sunu numarasına göre düzelten bir skill:
---
name: fix-issue
description: Fix a GitHub issue
disable-model-invocation: true
---
Fix GitHub issue $ARGUMENTS following our coding standards.
1. Read the issue description
2. Understand the requirements
3. Implement the fix
4. Write tests
5. Create a commit
/fix-issue 123 yazdığınızda Claude, "Fix GitHub issue 123 following our coding standards..." metnini alır. Birden fazla konumsal argümana ihtiyaç duyan bir skill için $0, $1, $2 kullanılabilir:
---
name: migrate-component
description: Migrate a component from one framework to another
---
Migrate the $0 component from $1 to $2.
Preserve all existing behavior and tests.
/migrate-component SearchBar React Vue komutu $0'ı SearchBar, $1'i React, $2'yi Vue ile değiştirir. Çok kelimeli değerleri tek argüman olarak geçirmek için tırnak kullanılır: /my-skill "hello world" second çağrısında $0 "hello world" olur. Ayrıca birden fazla skill tek mesajın başında art arda yazılabilir: /code-review /fix-issue 123 her iki skill'i de yükler ve sondaki 123 metnini her ikisine argüman olarak geçirir (en fazla ilk skill artı beş tane daha).
7. Dinamik Bağlam Enjeksiyonu
!`komut` sözdizimi, skill içeriği Claude'a gönderilmeden önce kabuk komutlarını çalıştırır. Komutun çıktısı yer tutucunun yerine geçer, yani Claude komutun kendisini değil, gerçek çıktıyı görür. Bir pull request'i özetleyen şu örnekte, gh pr diff ve diğer komutlar önce çalışır ve çıktıları prompt'a eklenir:
---
name: pr-summary
description: Summarize changes in a pull request
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---
## Pull request context
- PR diff: !`gh pr diff`
- PR comments: !`gh pr view --comments`
- Changed files: !`gh pr diff --name-only`
## Your task
Summarize this pull request...
Bu skill çalıştığında sırasıyla şunlar olur: her !`komut` Claude bir şey görmeden hemen önce çalışır; çıktı, skill içeriğindeki yer tutucunun yerine geçer; Claude, gerçek PR verileriyle tam olarak oluşturulmuş prompt'u alır. Bu bir ön işlemedir, Claude'un çalıştırdığı bir şey değildir. Satır içi biçim yalnızca ! işareti satır başında veya bir boşluktan hemen sonra geldiğinde tanınır; çok satırlı komutlar için üç ters tırnakla açılan ```! kod bloğu kullanılır. Bu davranışı organizasyon genelinde kapatmak isteyenler için settings.json içinde "disableSkillShellExecution": true ayarı mevcuttur.
8. Kim Çağırabilir: Görünürlük ve Erişim Kontrolü
Varsayılan olarak hem siz hem Claude herhangi bir skill'i çağırabilir. İki frontmatter alanı bunu kısıtlar:
| Frontmatter | Siz çağırabilir misiniz | Claude çağırabilir mi | Bağlama ne zaman yüklenir |
|---|---|---|---|
| (varsayılan) | Evet | Evet | Açıklama her zaman bağlamda; çağrıldığında tam içerik yüklenir |
disable-model-invocation: true |
Evet | Hayır | Açıklama bağlamda değil; yalnızca siz çağırınca tam içerik yüklenir |
user-invocable: false |
Hayır | Evet | Açıklama her zaman bağlamda; çağrıldığında tam içerik yüklenir |
disable-model-invocation: true, yan etkisi olan veya zamanlamasını sizin kontrol etmek istediğiniz iş akışları için kullanılır — /commit, /deploy, /send-slack-message gibi. Kodunuz "hazır görünüyor" diye Claude'un kendiliğinden deploy etmesini istemezsiniz. user-invocable: false ise eyleme dönüştürülemeyecek arka plan bilgileri için kullanılır; örneğin eski bir sistemin nasıl çalıştığını açıklayan bir legacy-system-context skill'i, Claude'un ilgili olduğunda bilmesi gereken ama sizin doğrudan /legacy-system-context yazarak çalıştırmayacağınız bir içeriktir.
Claude'un hangi skill'leri çağırabileceğini kısıtlamanın üç yolu daha var: /permissions içinde Skill aracını tamamen reddetmek, Skill(isim) (tam eşleşme) veya Skill(isim *) (önek eşleşmesi ve herhangi bir argüman) izin kurallarıyla belirli skill'leri izinlendirmek/reddetmek, ya da tek tek skill'lerin frontmatter'ına disable-model-invocation: true eklemek. Ayrıca settings.json içindeki skillOverrides ayarı, skill'in kendi dosyasını değiştirmeden görünürlüğünü "on", "name-only", "user-invocable-only" veya "off" olarak ayarlamanıza olanak tanır; bu özellikle paylaşılan bir proje deposuna kaydedilmiş skill'ler için kullanışlıdır.
9. Skill'i Subagent İçinde Çalıştırma
Bir skill'in izole bir bağlamda çalışmasını istediğinizde frontmatter'a context: fork ekleyin. Skill içeriği, subagent'ı yönlendiren prompt haline gelir ve konuşma geçmişinize erişimi olmaz. Bu yalnızca açık talimatlar içeren skill'ler için anlamlıdır — "şu API kurallarını kullan" gibi bir görev içermeyen bir rehber skill'i, subagent'a kurallar verir ama uygulanacak somut bir görev vermez ve anlamlı bir çıktı döndürmeden geri döner.
Skill'ler ve subagent'lar iki yönde birlikte çalışır:
| Yaklaşım | Sistem promptu | Görev | Ayrıca yüklenen |
|---|---|---|---|
context: fork ile skill |
Agent tipinden gelir | SKILL.md içeriği |
CLAUDE.md (Explore/Plan agent'ları hariç) |
skills alanlı subagent |
Subagent'ın markdown gövdesi | Claude'un devretme mesajı | Önceden yüklenmiş skill'ler + CLAUDE.md |
agent alanı, hangi subagent yapılandırmasının kullanılacağını belirtir: yerleşik Explore, Plan, general-purpose veya .claude/agents/ altındaki herhangi bir özel subagent. Belirtilmezse general-purpose kullanılır. Codebase'i araştıran bir örnek:
---
name: deep-research
description: Research a topic thoroughly
context: fork
agent: Explore
---
Research $ARGUMENTS thoroughly:
1. Find relevant files using Glob and Grep
2. Read and analyze the code
3. Summarize findings with specific file references
10. Yerleşik (Bundled) Skill'ler
Claude Code, disableBundledSkills ayarıyla kapatılmadığı sürece her oturumda kullanılabilen bir dizi yerleşik skill içerir. Sabit mantık çalıştıran çoğu built-in komuttan farklı olarak, bundled skill'ler prompt tabanlıdır: Claude'a ayrıntılı talimatlar verir ve işi kendi araçlarıyla düzenlemesine izin verirler.
| Komut | Ne işe yarar |
|---|---|
/doctor |
Kurulum sağlığını kontrol eder, sorunları teşhis eder ve giderir. |
/code-review |
Mevcut diff'i doğruluk hataları ve tekrar/basitleştirme fırsatları için gözden geçirir. |
/batch |
Bir kod tabanı genelinde büyük ölçekli değişiklikleri paralel olarak düzenler. |
/debug |
Debug loglamayı etkinleştirir ve sorunları araştırır. |
/loop |
Oturum açık kalırken bir prompt'u tekrar tekrar çalıştırır. |
/run ve /verify |
Uygulamayı başlatıp gerçek davranışını gözlemleyerek bir değişikliğin çalıştığını doğrular. |
/run, /verify ve /run-skill-generator skill'leri Claude Code v2.1.145 ve sonrasını gerektirir. /run-skill-generator, projenizi temiz bir ortamdan başlatıp çalıştırma tarifini (kurulum komutları, ortam değişkenleri, başlatma betiği) .claude/skills/run-<isim>/ altına proje bazlı bir skill olarak kaydeder; bir kez çalıştırdıktan sonra /run, /verify ve depodaki diğer ajanlar keşif yapmak yerine kayıtlı tarifi izler. /doctor, v2.1.205 ve sonrasında disableBundledSkills ayarının tek istisnasıdır ve ayar açıkken bile yazılabilir kalır.
11. Skill Erişimini Değerlendirme ve İyileştirme
Bir skill'in tetiklendiğini görmek, Claude'un onu bulduğunu gösterir; niyet ettiğiniz şeyi yaptığını göstermez. Bir skill'in çalıştığından emin olmak için iki şeyi ayrı ayrı ölçmek gerekir: Claude'un uygun prompt'larda skill'i çağırıp çağırmadığı, ve çağırdığında çıktının beklentinizle örtüşüp örtüşmediği. Temel karşılaştırma yöntemi: birkaç gerçekçi prompt toplayın, her birini skill etkinken ve skillOverrides ile devre dışı bırakılmışken taze bir oturumda çalıştırın, sonuçları karşılaştırın.
Resmi skill-creator plugin'i bu karşılaştırma döngüsünü Claude Code içinde otomatikleştirir:
/plugin install skill-creator@claude-plugins-official
Kurduktan sonra /reload-plugins çalıştırıp plugin'in skill'lerini geçerli oturumda kullanılabilir hale getirin, ardından "evaluate my summarize-changes skill with skill-creator" gibi bir istekle değerlendirmeyi başlatın. Plugin; test senaryolarını evals/evals.json içinde saklar, her test için izole bir subagent başlatır, her iddiayı çıktıya karşı kontrol edip grading.json'a yazar, skill'li ve skill'siz geçiş oranını benchmark.json'da karşılaştırır ve bir versiyon değişikliğinin gerçekten iyileştirme olup olmadığını kör bir A/B testiyle doğrular.
12. Sorun Giderme
- Skill hiç tetiklenmiyor:
descriptionalanının, kullanıcının doğal olarak söyleyeceği anahtar kelimeleri içerip içermediğini kontrol edin; "Hangi skill'ler kullanılabilir?" diye sorarak skill'in listelendiğini doğrulayın; isteğinizi tanıma daha yakın ifade etmeyi deneyin; skill kullanıcı tarafından çağrılabilirse doğrudan/skill-adiyazın. - Frontmatter YAML'i bozuksa Claude Code skill gövdesini boş metadata ile yükler;
/skill-adiyine çalışır ama Claude'un eşleştireceği bir açıklama olmaz.--debugbayrağıyla ayrıştırma hatasını görebilirsiniz. - Skill çok sık tetikleniyorsa: açıklamayı daha spesifik hale getirin, yalnızca elle çağrılmasını istiyorsanız
disable-model-invocation: trueekleyin. - Açıklamalar kısaltılıyorsa: Claude Code bağlama her skill'in adını ve açıklamasını yükler; çok fazla skill'iniz varsa liste, model bağlam penceresinin varsayılan olarak %1'i kadar bir bütçeye sığdırılmak üzere kısaltılır. Bunu
skillListingBudgetFractionayarıyla büyütebilir, en az kullandığınız skill'leriskillOverridesile"name-only"yapabilirsiniz./doctor, listenin bağlam maliyetinin ve en büyük katkı sağlayanların tahminini gösterir.
13. En İyi Pratikler
- Önce description'ı yazın, sonra gövdeyi. Claude'un otomatik çağırıp çağırmayacağı tamamen bu alana bağlıdır; ana kullanım senaryosunu en başa koyun.
- Yan etkili işlemlerde
disable-model-invocation: truekullanın. Deploy, commit, mesaj gönderme gibi eylemlerin zamanlamasını siz kontrol edin. - Gövdeyi kısa, referansı ayrı dosyada tutun.
SKILL.md'yi 500 satırın altında tutup detaylı materyalireference.mdgibi dosyalara taşıyın; Claude bunları yalnızca gerektiğinde okur. - Dinamik bağlamı önden hesaplatın.
git diff,gh pr diffgibi komutları!`komut`ile skill içine gömün; Claude'un tahmin etmesi yerine gerçek veriyle çalışmasını sağlayın. - Riskli araçları
allowed-toolsile sınırlı tutun. Bir deploy skill'ine yalnızca ihtiyaç duyduğuBash(git push *)gibi kalıpları verin, genelBasherişimi vermeyin. - Yayınlamadan önce değerlendirin.
skill-creatorile skill'in tetiklenme oranını ve çıktı kalitesini taze oturumlarda ölçün, tahmine dayanmayın.
Gerçek Dünya Örneği: Ekip İçin Bir Commit Skill'i
Projenizde ekip arkadaşlarınızın tutarlı commit mesajları yazmasını istediğinizi varsayalım. Proje skill'i olarak .claude/skills/commit/SKILL.md dosyasını versiyon kontrolüne ekleyip herkesle paylaşabilirsiniz:
---
name: commit
description: Stage and commit the current changes
disable-model-invocation: true
allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *)
---
## Current status
!`git status --short`
## Instructions
1. Review the changes above and stage the relevant files with git add.
2. Write a commit message that explains why, not what, following the
repository's existing commit style.
3. Create the commit.
4. Run git status to confirm the working tree is clean.
Bu skill disable-model-invocation: true taşıdığı için Claude kendiliğinden commit atamaz; yalnızca ekip biri /commit yazdığında çalışır. allowed-tools alanı sayesinde, skill aktifken bu üç git komutu için izin sorulmaz, ama diğer tüm araçlar için normal izin kurallarınız geçerli kalır.
Sıkça Sorulan Sorular
Claude Code'da slash komutları (custom commands) hâlâ çalışıyor mu?
Evet. .claude/commands/ altındaki dosyalar hâlâ çalışır ve aynı frontmatter alanlarını destekler. Ancak custom commands artık skills sistemine dahil edilmiştir: .claude/commands/deploy.md ile .claude/skills/deploy/SKILL.md aynı /deploy komutunu oluşturur ve aynı şekilde çalışır. Skills, ek bir klasör (destek dosyaları), otomatik çağrılma kontrolü ve subagent içinde çalıştırma gibi ekstra özellikler sunduğu için yeni komutlar için önerilen yöntemdir.
Skill, slash komut ve subagent arasındaki fark nedir?
Bir skill hem otomatik hem de elle çağrılabilen, SKILL.md dosyasında tanımlı bir talimat setidir; varsayılan olarak mevcut konuşma bağlamında çalışır. Slash komut artık skills sisteminin bir parçasıdır ve aynı mekanizmayı kullanır. Subagent ise ayrı bir sistem promptu ve izole bağlamla çalışan, .claude/agents/ altında tanımlanan tam bir ajan yapılandırmasıdır. Bir skill'e context: fork eklenerek subagent içinde çalıştırılması sağlanabilir.
Bir skill'i yalnızca ben çağırayım, Claude otomatik çağırmasın istiyorum, nasıl yaparım?
SKILL.md frontmatter'ına disable-model-invocation: true ekleyin. Bu durumda skill açıklaması Claude'un bağlamına hiç yüklenmez, yalnızca siz /skill-adi yazarak çalıştırabilirsiniz. Tersi durum için, yani yalnızca Claude'un çağırmasını isteyip komut menüsünde görünmemesini istiyorsanız user-invocable: false kullanılır.
Skill dosyasına argüman nasıl geçirilir?
Skill içeriğinde $ARGUMENTS yer tutucusu, komuttan sonra yazılan tüm metni temsil eder. Konuma göre erişim için $ARGUMENTS[0] veya kısaltması $0, $1 gibi ifadeler kullanılır. Frontmatter'da arguments alanına isimli bir liste tanımlanırsa bu isimler skill içinde $isim şeklinde kullanılabilir.
Bir skill neden çalışmıyor ya da hiç tetiklenmiyor?
Önce description alanının kullanıcının doğal olarak söyleyeceği anahtar kelimeleri içerip içermediğini kontrol edin. Frontmatter YAML'i hatalıysa Claude Code skill gövdesini boş metadata ile yükler; --debug bayrağıyla ayrıştırma hatası görülebilir. Çok fazla skill'iniz varsa açıklamalar bağlam bütçesi nedeniyle kısaltılabilir; bunu skillListingBudgetFraction ayarıyla artırabilirsiniz.
Skill'ler nerede saklanır ve hangi kapsamda geçerli olur?
Kişisel skill'ler ~/.claude/skills/<isim>/SKILL.md altında saklanır ve tüm projelerinizde geçerlidir. Proje skill'leri .claude/skills/<isim>/SKILL.md altında saklanır ve yalnızca o proje için geçerlidir. Eklenti skill'leri plugin-adi:skill-adi biçiminde adlandırılır. Aynı isimli skill'ler çakıştığında kurumsal tanım kişiseli, kişisel tanım da proje tanımını geçersiz kılar.
Özet
Agent Skills, Claude Code'u tekrarlayan iş akışlarınıza göre şekillendirmenin resmi yoludur ve artık eski özel slash komutlarının da doğal devamıdır. Bir SKILL.md dosyası; description ile ne zaman kullanılacağını, disable-model-invocation ve user-invocable ile kimin çağırabileceğini, allowed-tools ile hangi araçlara izin sorulmadan erişileceğini, context: fork ile hangi izole subagent'ta çalışacağını belirler. !`komut` ile dinamik bağlam enjekte edebilir, $ARGUMENTS ve türevleriyle parametre alabilirsiniz. Kişisel (~/.claude/skills/), proje (.claude/skills/) veya plugin seviyesinde tanımlayarak kapsamı belirleyebilir, skill-creator ile yayınlamadan önce gerçek prompt'lar üzerinde doğrulayabilirsiniz. Bir sonraki adım olarak, skill'lerinizin CLAUDE.md ile nasıl birlikte çalıştığını görmek için CLAUDE.md ve Auto Memory rehberimi, betikleştirilmiş kullanım için de CLI ve otomasyon rehberimi okuyabilirsiniz.
Bu yazı Ahmet Bilgiç tarafından ahmetbilgic.com için yazılmıştır. Diğer yazılar için: medium.com/@ahmet_bilgic07