Cursor (AI IDE) nasıl çalışır
(blog.sshh.io)- Cursor, Windsurf ve Copilot gibi yapay zeka kodlama araçlarının iç işleyişini anlamak, karmaşık kod tabanlarında verimliliği artırmayı ve tutarlı performans sağlamayı mümkün kılar
- Pek çok kişi AI IDE'lerin sınırlarını anlamadan onları geleneksel araçlar gibi kullanıyor ve bu yüzden performans sorunları yaşıyor
- Bu yazı, Cursor'un iç çalışma mantığını, sistem prompt'unu ve kodlama ile Cursor kurallarını optimize etme yöntemlerini açıklıyor
LLM'den kodlama ajanına
Büyük dil modelleri (LLM)
- LLM'ler temelde bir sonraki kelimeyi tahmin ederek çalışır
- Bir prompt verdiğinizde LLM otomatik tamamlama gibi yanıt üretir
- İlk decoder tabanlı LLM'lerde (ör. GPT-2) istenen çıktıyı almak için belirli prompt'lar yazmak gerekiyordu
- Prompt engineering, modelden istenen cevabı almak için onu bir anlamda 'yönlendirme' tekniğidir
- Instruction tuning'in devreye girmesiyle kullanım kolaylığı arttı
- “Foo metodunu refactor eden bir PR hazırla” gibi komutlar doğrudan çalıştırılabilir hale geldi
- Aslında bu da otomatik tamamlama sürecinin genişletilmiş bir sürümüdür
- Tool calling eklendi
- Model artık dosya okuma, yazma ve komut çalıştırma gibi işlemleri yapabilir
- Örnek:
read_file('index.py')→ istemci dosya içeriğini sağlar → model işe devam eder
Ajan tabanlı kodlama
Cursor gibi AI IDE'ler karmaşık bir wrapper yapısı kullanarak oluşturulur:
- VSCode fork'u → açık kaynak temeliyle başlar
- Sohbet arayüzü eklenir ve uygun LLM seçilir (ör. Sonnet 3.7)
- Kodlama ajanı için araçlar uygulanır
read_file(full_path: str)write_file(full_path: str, content: str)run_command(command: str)
- Prompt optimizasyonu
- “Sen uzman bir yazılımcısın”, “tahmin etme, araç kullan” gibi talimatlar eklenir
→ Sadece bu adımları uygulamak bile pratikte çalışır, ancak söz dizimi hataları, halüsinasyonlar ve tutarsızlık sorunları ortaya çıkabilir
- “Sen uzman bir yazılımcısın”, “tahmin etme, araç kullan” gibi talimatlar eklenir
Ajan tabanlı kodlamayı optimize etme stratejileri ve ipuçları
- İyi bir AI IDE yapmak için LLM'nin hangi işlerde iyi olduğunu anlamak ve prompt'ları ile araçları LLM'nin sınırlarına göre dikkatle tasarlamak gerekir.
- Ana işi basitleştirmek ve alt görevlerde daha küçük modeller kullanmak etkili bir yaklaşımdır
- Karmaşık işleri dağıtarak performans ve tutarlılık artırılabilir
-
Kullanıcı bağlamı ekleme (
@filekullanımı)- Kullanıcı büyük olasılıkla doğru dosyayı veya bağlamı zaten biliyordur
@filesözdizimi eklenir → tüm dosya ya da klasör içeriği bağlam olarak dahil edilir- İpucu:
@folder/@filekullanımını aktif biçimde tercih edin → açık bağlam, yanıt hızını ve doğruluğu artırır
-
Kod aramayı optimize etme
- Kod arama karmaşık olabilir; özellikle anlam temelli arama (ör. “kimlik doğrulama kodu nerede”) zordur
- Kod tabanı bir vektör veritabanında (Vectorstore) indekslenir → arama sırasında LLM otomatik olarak filtreleme ve yeniden sıralama yapar
- İpucu: Kod yorumları ve dokümantasyon önemlidir → embedding modelinin performansını güçlendirir
- Dosyanın başına amacını, anlamını ve ne zaman değiştirildiğini açıklayan bilgiler ekleyin
-
Dosya yazımını optimize etme
- Kusursuz kod yazmak zordur ve maliyetlidir
- Tüm dosya yerine anlamsal diff (Semantic Diff) üretilir → yalnızca değişen kod parçaları sağlanır
- Ayrı bir uygulama modeli, bu anlamsal diff'e göre gerçek dosyayı yazar → söz dizimi hatalarını düzeltir
- İpucu: Uygulama modeline doğrudan prompt verilemez → tüm dosyayı sağlayarak kontrolü artırın
- İpucu: Uygulama modeli büyük dosyalarda yavaşlayabilir ve hata üretebilir → dosya boyutunu 500 LoC'nin altında tutun
- İpucu: Linter geri bildirimi çok önemli bir sinyaldir → güçlü bir linter kullanmak şarttır
- Derleme ve tip denetimli dillerin sunduğu geri bildirim de kullanılabilir
- İpucu: Benzersiz dosya adları kullanın →
page.jsyerinefoo-page.js,bar-page.jsgibi daha açık isimler tercih edin- Belgelerde tam dosya yolunu verin → düzenleme aracındaki belirsizliği ortadan kaldırın
-
Ajan odaklı model kullanımı
- Genel amaçlı kod yazma modelleri yerine ajan odaklı modellerin kullanılması önerilir
- Anthropic modellerinin Cursor gibi IDE'lerde çok iyi performans göstermesinin nedeni budur
- İpucu: Sadece kod yazan değil, ajan tabanlı IDE'lere optimize edilmiş modeli seçin
- Model performansı WebDev Arena leaderboard'unda görülebilir
-
Kendi kendini düzeltme araçlarını kullanma (ileri seviye strateji)
apply_and_check_tool→ pahalı linter çalıştırma + headless browser'da console log ve ekran görüntüsü toplama- MCP(Model Context Protocol) → ajanın özerkliğini ve bağlam sağlama yeteneğini güçlendirir
Cursor sistem prompt'unun ayrıntılı analizi
- Cursor'un en güncel prompt'u (Mart 2025), MCP tabanlı prompt injection tekniğiyle çıkarıldı
- Cursor'un prompt mühendisleri, diğer AI IDE'lerle kıyaslandığında bile son derece güçlü prompt yazma becerilerine sahip.
- Prompt yapısını analiz etmek, kod üretim performansını ve ajan mimarisi tasarlama yeteneğini geliştirebilir
-
Başlıca prompt öğeleri ve anlamları
"<communication>","<tool_calling>"gibi etiketlerin kullanımı- Markdown ile XML etiketleri birlikte kullanılır → insanlar için okunabilir, LLM için işlenmesi kolaydır
"powered by Claude 3.5 Sonnet"- Model tutarlılığını güçlendirir → LLM'nin çalıştığı model hakkında yanlış bilgi vermesini önler
"the world's best IDE"- LLM'nin hata durumunda başka ürünler önermesini engeller
"we may automatically attach some information…follow the USER's instructions…by the <user_query> tag."- Kullanıcı prompt'unu doğrudan vermek yerine özel etiket içine alarak karışıklık önlenir
"Refrain from apologizing"- Gereksiz özürleri engeller (Sonnet modelinin eğilimlerini dengelemek için)
"NEVER refer to tool names when speaking"- Araç adlarını anmama talimatı eklenir → ancak gerçek model bazen bunu görmezden gelebilir
"Before calling each tool, first explain"- Araç çağırmadan önce durumu açıklama → kullanıcı deneyimini iyileştirir
"partially satiate the USER's query, but you're not confident, gather more information"- Aşırı özgüven nedeniyle erken yanıt vermeyi engeller → ek bilgi toplamaya yönlendirir
"NEVER output code to the USER"- Doğrudan kod çıktısı vermeyi yasaklar → kod üretimi yalnızca araçlar üzerinden yapılır
"If you're building a web app from scratch, give it a beautiful and modern UI"- Tek bir prompt ile çekici web uygulamaları üretmeyi teşvik eder (demo amaçlı)
"you MUST read the the contents or section of what you're editing before editing it"- Kod düzenlemeden önce bağlamı okuma zorunluluğu → bağlamsal farkındalığı artırır
"DO NOT loop more than 3 times on fixing linter errors"- Düzeltme döngüsünü sınırlar → sonsuz döngüyü önler
"Address the root cause instead of the symptoms."- Sorunun belirtilerini değil kök nedenini gidermeye yönlendirir
"DO NOT hardcode an API key"- Güvenliği artırmaya yönelik talimat → hardcode etmeyi engeller
"codebase_search","read_file","grep_search","file_search","web_search"- Kod yazmadan önce doğru bağlamı toplamak için çeşitli arama araçları sunulur
"One sentence explanation…why this command needs to be run…"talebi- Araç argümanlarını işlerken muhakemeyi güçlendirir → prompt iyileştirme tekniğidir
"reapply"aracı"Calls a smarter model to apply the last edit"- Son düzenlemeyi daha gelişmiş bir modelle yeniden uygular → düzenleme kalitesini artırır
"edit_file"aracı"represent all unchanged code using the comment of the language you're editing"- Değişmeyen kodu yorum olarak gösterir → düzenleme modelinin çalışma doğruluğunu artırır
- Prompt caching kullanımı
- Sistem prompt'u ve araç açıklamaları statik durum olarak tutulur
- Kod tabanına veya kullanıcıya göre özelleştirme yoktur → prompt caching ile maliyet ve işlem hızı iyileştirilebilir
Cursor kurallarını etkili biçimde yazmak ve kullanmak
- Cursor kuralları yazmanın tek bir doğru yolu olmayabilir; ancak prompt yazma deneyimi ve Cursor'un iç yapısını anlama temelinde bazı yararlı ipuçları sunuluyor
- Kuralları basit komutlar olarak değil, ansiklopedik yönergeler olarak yazmak önemlidir.
-
Kural yazımındaki temel kavramlar
- LLM, kural listesindeki ad ve açıklamalara göre
fetch_rules(…)çağrısı yapar - Kurallar sistem prompt'una eklenmez; gerektiğinde referans alınır
- Bu nedenle komut değil, ansiklopedi tarzı açıklamalar daha etkilidir
- LLM, kural listesindeki ad ve açıklamalara göre
-
Kural yazarken kaçınılması gerekenler
- Kimlik(identity) tanımı yapmayın
- “Sen bir TypeScript uzmanısın” gibi tanımlardan kaçının
- LLM kimliğini zaten gömülü prompt'tan bilir → çakışma riski vardır
- Sistem prompt'unu geçersiz kılmaya çalışmayın
- “Yorum ekleme”, “soru sorduktan sonra kod yaz” gibi komutlar → iç araç kullanımında karışıklık yaratır
- Olumsuz komutlardan kaçının
- “Yapma” yerine “yap” gibi olumlu ifadeler LLM için daha etkilidir
- Olumlu komut örneği: “Dosyayı düzenlerken önce tüm bağlamı kontrol et”
- Kimlik(identity) tanımı yapmayın
-
Kural yazarken önerilenler
- Açık ve sezgisel kural adları ile açıklamalar yazın
- Kod tabanı hakkında çok az bilgiyle bile kuralın ne zaman uygulanacağı anlaşılabilmelidir
- Yinelenen kurallar yazmak mümkündür → arama doğruluğunu artırabilir
- Kuralları ansiklopedik tarzda yazın
- Kesin komutlar yerine durum ve amaca dair açıklamalar verin
- Gerekirse bağlamı güçlendirmek için kod dosyaları bağlanabilir
- Kural taslağı hazırlamak için Cursor'u kullanın
- LLM'ler, başka bir LLM için bağlam yazma konusunda güçlüdür
- Örnek:
@folder/ sık değiştirilen kod yolları ve tanımlarına dair bir Markdown dosyası oluştur
- Aşırı sayıda kural yazmaktan kaçının
- Çok fazla kural verimsizdir ve sezgisel olmayan bir kod tabanına işaret eder
- İdeal kod tabanında ajan, mümkün olan en az kuralla çalışabilmelidir
- Açık ve sezgisel kural adları ile açıklamalar yazın
-
Etkili kural yazımı örnekleri
- ✅ Kural komutları:
- “Dosyayı düzenlemeden önce tüm bağlamı oku”
- “Sunucu kodunu değiştirirken kimlik doğrulama mantığını kontrol et”
- “Hata oluştuğunda önce nedeni düzelt”
- ❌ Kural komutları (kaçınılmalı):
- “Yorumları silme”
- “Düzenlemeden önce bana soru sor”
- “Gereksiz kodu değiştirme”
- ✅ Kural komutları:
-
Kural yazımının temel stratejisi
- Kurallar komut olarak değil, durum açıklaması olarak yazılmalıdır
- Sezgisel adlar ve açıklamalar kullanın → en az kuralla en yüksek performansı alın
- Kesin komutlar yerine durum açıklamalarını ve kod bağlantılarını güçlendirin
Sonuç
- Açık kaynak temelli prompt'lar ve herkese açık model API'leri kullanan, VSCode fork'u olarak başlayan Cursor'un 10 milyar dolara (yaklaşık 13 trilyon won) yakın değerlemeye ulaşması şaşırtıcı
- Cursor şu anda wrapper multiple ölçütüyle 6 kat değerleme alıyor
- Cursor, optimize edilmiş prompt'lar ve güçlü bir tool calling sistemi sayesinde güçlü performans sunuyor
- Cursor'un kendi ajan modelini geliştirme olasılığı düşük görünüyor
- Bunun yerine Anthropic'in Claude Code ve Sonnet tabanlı rakip ürünler çıkarma ihtimali daha yüksek
-
Temel içgörüler
- Kod tabanını, dokümantasyonu ve kuralları doğru biçimde yapılandırmak gelecekte de önemli bir beceri olmaya devam edecek
- Yapay zeka kodlama araçlarının optimizasyon stratejilerini anlamak, verimliliği ve doğruluğu artırabilir
- Cursor düzgün çalışmıyorsa bunun nedeni büyük olasılıkla kullanım biçimiyle ilgili bir sorundur
"Cursor çalışmıyorsa, onu nasıl kullandığınızı yeniden gözden geçirmelisiniz."
4 yorum
Denemek gerekecek sanırım.
İlginçmiş. Sonuçta aynı sudan içtikleri için mi acaba?
İçgörü dolu. Teşekkür ederim.