! önekiyle slash command içinde shell komutları çalıştırın; diff, dosya içeriği ve test sonuçlarını otomatik enjekte edin
Çoğu kişinin slash command'ı şuna benzer:
Mevcut kod değişikliklerinin kalitesini incele ve somut öneriler ver.
Bu çalışır, ama temel bir sınırı vardır: Claude'un "mevcut değişiklik nedir" sorusunu kendi başına çıkarması gerekir. Eğer komutunuz bağlamı doğrudan içine enjekte edebilirse, sonuç tamamen değişir.
Bu yazı, komutu "gözleri olan" bir komuta dönüştürmeyi anlatıyor — tetiklendiğinde dosya içeriğini, git durumunu, proje bilgisini otomatik okuyup hepsini prompt'a tıkıştıran, böylece Claude'un tahmin yürütmesine gerek bırakmayan bir komut.
!`komut` ile shell çıktısı enjekte etmekCustom slash command, prompt'un içine shell komutu gömmeyi destekler. Söz dizimi şöyle: komutu backtick ile sarın ve önüne ünlem koyun — !`komut`. Tetiklenince komut önce çalışır, çıktısı yer tutucunun yerini alır ve Claude'a giden artık tamamlanmış prompt'tur.
Mevcut git diff şu:
!`git diff HEAD`
Bu değişiklikleri incele; mantık hatalarına ve güvenlik sorunlarına odaklan.
Çok satırlı komutlar için
```!ile başlayan fenced code block kullanın:```! node --version git status --short ```
/review tetiklendiğinde Claude'un gerçekten aldığı içerik şudur:
Mevcut git diff şu:
diff --git a/app/models/user.rb b/app/models/user.rb
index 3a2f1c8..9b4e2d1 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -12,6 +12,9 @@ class User < ApplicationRecord
...
Bu değişiklikleri incele; mantık hatalarına ve güvenlik sorunlarına odaklan.
Manuel kopyala-yapıştıra gerek yok. Komut tetiklendiği anda diff zaten içeride.
---
allowed-tools: Bash(cat:*)
---
Mevcut dosyanın tam içeriği şu:
!`cat $ARGUMENTS`
Bu dosyadaki tüm potansiyel performans sorunlarını bul; satır numarası ve somut çözüm öner.
Kullanım: /perf app/models/order.rb
$ARGUMENTS dosya yolunu alır, cat içeriği okur ve enjekte eder. Claude "mevcut dosyaya bak" gibi muğlak bir tarif değil, gerçek kodu görür.
Frontmatter'daki
allowed-tools,catkomutunu önceden yetkilendirir; tetiklendiğinde izin sorulmaz. Bu satır olmadan her çalıştırmada manuel olarak "İzin Ver" demek zorunda kalırsınız. Aşağıdaki örneklerin hepsinin aynı şekilde tanımlanması gerekir.
Mevcut branch ve değişiklik durumu:
!`git status --short`
!`git log --oneline -10`
Yukarıdaki bilgilere dayanarak, değişikliklerin içeriğini ve motivasyonunu kapsayan kısa bir PR açıklaması üret.
Bu /pr komutu sizden "ne değiştirdim" diye anlatmanızı beklemez — kendisi okur.
Projenin teknoloji yığını:
!`cat .claude/context/stack.md`
Mevcut veritabanı şeması (kritik tablolar):
!`head -100 db/schema.rb`
Yukarıdaki bağlama dayanarak, $ARGUMENTS için projenin standartlarına uygun bir migration scripti yaz.
Proje arka plan bilgilerini önceden .claude/context/ dizinine yazın; komut tetiklendiğinde gerektiğinde okur, projeyi her seferinde anlatmak zorunda kalmazsınız.
Son test çalıştırmasının sonuçları:
!`bundle exec rspec --format progress 2>&1 | tail -30`
Yukarıdakiler başarısız testlerdir. Kök nedeni analiz et ve düzeltme öner; testin kendisini değiştirme.
/fix-tests tetiklendiğinde testleri çalıştırıp sonucu yerinde alır. Claude'un gördüğü gerçek hata mesajıdır.
Yukarıdakileri birleştirince /review epey isabetli olabilir:
---
description: Mevcut değişiklikleri incele, diff ve ilgili bağlamı otomatik enjekte et
allowed-tools: Bash(git diff:*), Bash(cat:*)
---
## Bu seferki değişiklik
!`git diff HEAD`
## Etkilenen dosya listesi
!`git diff HEAD --name-only`
## Proje kodlama standardı özeti
!`cat .claude/context/coding-standards.md 2>/dev/null || echo "(standart dosyası yok)"`
---
Yukarıdaki değişiklikleri incele:
1. Mantık doğruluğu: işlenmemiş sınır durumları, mantık hataları
2. Güvenlik sorunları: SQL injection, yetki kontrolü, hassas bilgi sızıntısı
3. Standartlara uyum: proje kodlama standardına uygun mu
4. Okunabilirlik: isimlendirme, yorum, yapı
Her sorun için dosya adı, satır numarası ve somut öneri ver. Sorun yoksa yok de, doldurmaya çalışma.
Bu komut sizden hiçbir hazırlık beklemez — tetiklendiğinde diff, dosya listesi ve kodlama standartlarının tamamı otomatik enjekte edilir.
Shell komutları başarısız olabilir (dosya yok, komut PATH'te yok vs.). Komutun yarıda kesilmemesi için || ile varsayılan değer verin:
!`git diff HEAD 2>/dev/null || echo "(git değişikliği yok ya da git deposunda değiliz)"`
!`cat .env.example 2>/dev/null || echo "(.env.example dosyası yok)"`
!`which rspec > /dev/null 2>&1 && bundle exec rspec --dry-run 2>&1 | head -20 || echo "(RSpec tespit edilmedi)"`
Komut başarısız olduğunda Claude boşluk yerine açıklayıcı bir metin alır ve buna göre cevap stratejisini ayarlayabilir.
! komutlarının çıktısının tamamı context window'a girer. Sık karşılaşılan tuzaklar:
Büyük dosyaları olduğu gibi cat'lemeyin
# Tehlikeli: on binlerce satır enjekte edilebilir
!`cat db/schema.rb`
# Daha iyisi: yalnızca gerekli kısmı al
!`grep -A 5 "create_table \"orders\"" db/schema.rb`
Log dosyalarına satır sınırı koyun
!`tail -50 log/development.log`
Test çıktısını kısaltın
!`bundle exec rspec 2>&1 | tail -40`
Bağlam ne kadar isabetliyse Claude'un cevabı o kadar iyi olur. Tüm code base'i içeri tıkıştırmak onu daha akıllı yapmaz — sadece gürültünün içinde kaybeder.
Sık sorulan soru: proje arka plan bilgisi CLAUDE.md'ye mi konsun, yoksa ! ile dinamik mi enjekte edilsin?
Karar kriteri:
| Bilgi türü | Nereye |
|---|---|
| Her seferinde gereken proje arka planı (teknoloji yığını, dizin yapısı, standartlar) | CLAUDE.md |
| Zamanla değişen durum (mevcut diff, test sonuçları, dosya içerikleri) | ! ile dinamik enjeksiyon |
| Yalnızca belirli bir görev için gereken arka plan (belirli bir modülün tasarım notları) | İhtiyaç duyulduğunda !cat |
CLAUDE.md kalıcı arka plan bilgisidir; ! ise görev anındaki anlık görüntüdür. İkisi birbirini tamamlar; tekrarlamayın.
.claude/commands/ dizini.claude/
├── commands/
│ ├── review.md # İnceleme: diff + standart enjekte eder
│ ├── test.md # Test yaz: hedef dosyayı enjekte eder
│ ├── fix-tests.md # Test düzelt: başarısız sonucu enjekte eder
│ ├── pr.md # PR açıklaması: git log + status enjekte eder
│ ├── explain.md # Kod açıkla: dosya içeriğini enjekte eder
│ └── migrate.md # Migration yaz: schema parçası enjekte eder
├── context/
│ ├── stack.md # Teknoloji yığını açıklaması
│ └── coding-standards.md # Kodlama standartları
└── settings.json
context/ dizini, çeşitli komutların ihtiyaca göre okuyacağı statik arka plan dosyalarını barındırır. Bu yapı doğrudan git'e commit edilebilir ve ekiple paylaşılabilir.
Statik komut:
Mevcut kod değişikliklerini incele.
Claude önce "değişiklik nerede" diye sormak ya da kendi araması gerekir; sonuçlar kararsızdır.
Bağlam farkındalıklı komut:
İşte diff (gerçek içerikle), işte ilgili standartlar (gerçek içerikle), incele lütfen.
Claude doğrudan analize başlar — cevap isabetli, gereksiz laf yok, gidip gelmeden tamamlanır.
Fark Claude'un yeteneğinde değil, ona ne kadar gerçek bilgi verdiğinizdedir.