Gelişmiş Slash Command: Komutlarınızı Bağlam Farkındalıklı Yapın

! ö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.


Temel mekanizma: !`komut` ile shell çıktısı enjekte etmek

Custom 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.


Pratik desenler

Mevcut dosyanın içeriğini enjekte etmek

---
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, cat komutunu ö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.

Git durumunu enjekte etmek

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.

Projeye özgü bilgileri enjekte etmek

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.

Test sonuçlarını dinamik okuma

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.


Tam örnek: bağlam farkındalıklı kod incelemesi

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.


Komut başarısızlıklarını ele almak

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.


Performans uyarısı: aşırı enjeksiyon yapmayın

! 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.


CLAUDE.md ile iş bölümü

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.


Tam bir .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.


Sonuç karşılaştırması

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.