opencode, proje klasöründe opencode komutuyla başlatılan ve AGENTS.md dosyasındaki talimatları okuyan bir kodlama ajanıdır. Kotlin ve Android projelerinde Gradle, Jetpack Compose ve coroutine akışlarını anlaması için doğru bağlam verildiğinde, küçük ve test edilebilir değişiklikleri hızla uygular. Daha fazla ayrıntı için opencode sayfasına bakabilirsiniz.
opencode neden Kotlin ve Android işine uygun
opencode, aynı terminal oturumunda ./gradlew çıktısını okuyup hataları yorumlayabilir. Örneğin Unresolved reference veya Type mismatch hatalarında eksik import veya yanlış tür dönüşümünü tespit edip düzeltebilir. Compose dosyalarındaki @Composable fonksiyonları, State ve remember kullanımını ayırt eder; yan etki içeren kodu LaunchedEffect veya DisposableEffect içine almayı önerebilir. ViewModel içindeki MutableStateFlow yapısını sadeleştirip StateFlow olarak dışarı açmayı, repository katmanında Result döndürmeyi ve JUnit ile Espresso test iskeletlerini Kotlin DSL’e uygun şekilde yazmayı başarır. Ayrıca modern Gradle özelliklerini tanır: version catalog, Kotlin DSL ve KSP eklentileriyle ilgili değişiklikleri yapabilir. Terminal tabanlı olduğu için Android Studio’nun aksine headless CI ortamında veya uzak makinede de benzer döngüyü sürdürür. Yine de ajanın önerdiği her Gradle değişikliğini siz onaylamalısınız; çünkü build scriptlerindeki küçük bir hata tüm projeyi kilitleyebilir.
Projeyi ajana hazırlama ve AGENTS.md
Ajana en büyük faydayı sağlayan şey, proje köküne ekleyeceğiniz AGENTS.md dosyasıdır. opencode bu dosyayı her oturumda okur ve değişmez kurallar olarak uygular. Dosya kısa, komut odaklı ve Android’e özgü olmalıdır; genel yapay zeka tavsiyeleri değil, sizin projenizin gerçekleri yer almalıdır. opencode nasıl kullanılır rehberindeki adımlar da bu kurulum için iyi bir temel oluşturur.
# AGENTS.md
## Komutlar
- Derle: `./gradlew assembleDebug`
- Unit test: `./gradlew testDebugUnitTest`
- Lint: `./gradlew lintDebug`
- Enstrümantasyon testi: `./gradlew connectedDebugAndroidTest`
## Klasör düzeni
- `app/src/main/java/com/example/app` → UI ve ViewModel
- `app/src/test` → JUnit testleri
- `app/src/androidTest` → Espresso testleri
- `app/src/main/res` → Compose tema ve string kaynakları
## Kurallar
- Yeni ekranlar yalnızca Jetpack Compose ile yazılır; XML layout açma.
- ViewModel'ler `StateFlow` döndürür, `MutableStateFlow` yalnızca private kalır.
- Coroutine'leri `viewModelScope` ile başlat; `GlobalScope` kullanma.
- Veri katmanı arayüzleri repository olarak tasarla; test edilebilir olsun.
- Her değişiklikten sonra `./gradlew testDebugUnitTest lintDebug` çalıştır.
Bu kurallar, ajanın XML’e dönmesini, GlobalScope kullanmasını veya LiveData’ya geçmesini engeller. AGENTS.md dosyasına proje modül yapısını da ekleyin; örneğin :core:network, :feature:login gibi modül adlarını ve sorumluluklarını yazın. Flavor ve build type kullanıyorsanız ilgili productFlavors isimlerini ve hangi test türünün hangi variantta çalıştığını belirtin. Dosyayı projeyle birlikte sürümleyin ve ekiple birlikte güncel tutun; ajan her oturumda bu dosyayı referans alacağı için tutarlılık kritik önem taşır.
Çalışma döngüsü: planla, küçük adım at, test et, diff’i incele
Android projelerinde büyük bir refactor veya yeni ekran isteğini tek seferde istemek risklidir. Build süreleri uzun olduğu için her değişikliği ayrı ayrı test etmek gerekir. opencode ile verimli çalışma döngüsü şöyledir: önce istenen değişikliği küçük, test edilebilir parçalara bölün; her parçada ajanın dosyaları değiştirmesini isteyin; ardından ./gradlew testDebugUnitTest lintDebug çalıştırın; son olarak git diff çıktısını gözden geçirin. Ajan bir adımda hata yaparsa, hatayı geri alıp promptu daraltarak yeniden deneyin. Bu döngüyü her adımda tekrarlayın; böylece hatalar erken yakalanır ve geri dönüş maliyeti düşer.
Kotlin ve Android için tipik çalışma promptları şunlardır:
- Compose ekranındaki
LazyColumn’da her öğeye sabitkeyekle ve tıklamayıonClickcallback olarak yukarı taşı. - Ürün listesini getiren repository fonksiyonunu
Resultdöndürecek şekilde değiştir; ViewModel’destateInkullan. - Bu ViewModel için JUnit testi yaz; ana dispatcher’ı
StandardTestDispatcherile değiştir. - Espresso testinde
RecyclerViewyerine ComposeLazyColumn’daki metni doğrulayan bir assertion ekle. - Gradle bağımlılıklarını version catalog’a taşı; kullanılmayan
implementationsatırlarını temizle.
Her prompttan sonra test ve lint sonucunu isteyin; ajan başarısız olursa hatayı kendisine geri verin ve düzeltmesini isteyin. Daha karmaşık görevlerde, örneğin bir ekranın tamamını yazarken, promptu üç aşamaya bölün: önce state ve ViewModel, sonra UI composable’ları, en son da testler. Böylece her aşamada doğrulama yaparsınız ve ajan bağlam kaybetmez.
Tipik Kotlin ve Android görevleri ve dikkat edilmesi gerekenler
Aşağıdaki tablo, sık karşılaşılan görevler için iyi prompt örneklerini gösterir.
| Görev | İyi prompt |
|---|---|
| Compose state yönetimi | Bu ekranda remember { mutableStateOf(...) } ile tutulan state’i ViewModel’e taşı ve collectAsStateWithLifecycle kullan. |
| Coroutine hata yönetimi | Repository’deki suspend fonksiyona try/catch ekle, hatayı Result olarak döndür ve ViewModel’de kullanıcıya mesaj göster. |
| ViewModel testi | Bu ViewModel için MainDispatcherRule kullanarak 3 test yaz; başarı, hata ve yüklenme durumlarını doğrula. |
| Espresso senkronizasyonu | Bu testte API yanıtını bekleyen IdlingResource ekle ve test kararlılığını sağla. |
| Gradle build hızı | Build scan çıktısına göre yapılandırma cache’i etkinleştir ve gradle.properties dosyasını düzenle. |
Bu görevlerde ajan genellikle başarılıdır ancak şu noktalara dikkat edin. Compose state’i taşırken ajan bazen rememberSaveable yerine remember önerebilir; ekran döndürmede state kaybını önlemek için bunu kendiniz düzeltin. ViewModel’de stateIn kullanımında başlangıç değeri olarak SharingStarted.WhileSubscribed yerine Eagerly seçerse, testlerde farklı davranış gösterir. Espresso ile Compose testlerinde onNodeWithText yerine onView önerebilir; AGENTS.md’de Compose test kuralını netleştirin. Ajan, kullanılmayan kaynak dosyalarını silerken strings.xml içindeki değerleri de kaldırabilir; silmeden önce referans kontrolü isteyin. Ayrıca build.gradle.kts dosyalarında implementation ve api arasındaki farkı karıştırabilir; özellikle modül bağımlılıklarını değiştirirken diff’i satır satır inceleyin.
Kotlin ve Android test ve doğrulama
Ajan, unit testlerde ./gradlew testDebugUnitTest çıktısını yorumlayıp başarısız assertion’ları düzeltebilir. JUnit 4 ve coroutine test desteği için kotlinx-coroutines-test bağımlılığı eklemesini isteyin; MainDispatcherRule ve runTest kullanımı ile asenkron kodun kararlılığı artar. StateFlow testlerinde Turbine kütüphanesini kullanarak her emisyonu sırayla doğrulayabilirsiniz; ajan bu deseni hızla uygular. Espresso testlerinde enstrümantasyon ortamı gerektiğinden, ajan yalnızca test kodu üretmeli, çalıştırmak için bağlı cihaz veya emülatör sizin tarafınızda olmalıdır. Compose UI testleri için createAndroidComposeRule kullanın ve onNodeWithText gibi matcher’larla senkronizasyonu sağlayın; ajan bu kuralları doğru yazabilir ancak gerekli @get:Rule anotasyonunu atlayabilir. Her değişiklikten sonra ./gradlew lintDebug çalıştırın; ajan en yaygın lint uyarılarını giderebilir ancak mimari kural ihlallerini siz onaylayın. Gerekirse ./gradlew test yerine yalnızca değişen modülün testini çalıştırarak geri bildirimi hızlandırın. Gradle managed devices veya test sharding kullanıyorsanız bu komutları da AGENTS.md’ye ekleyin; ajan ilgili raporları okuyup özetleyebilir.
Bir projede birden çok ajan: AgentVera
AgentVera, paralel kodlama ajanları için en iyi araçlar arasında yer alan ve opencode dahil birden fazla komut satırı ajanını aynı pencerede gerçek terminal panellerinde çalıştıran bir masaüstü uygulamasıdır. Kotlin ve Android projelerinde en değerli üç özelliği, her ajanın kendi git worktree’sinde çalışarak dosya çakışmalarını önlemesi, bir ajan bitince ikinci bir modelin kod incelemesi yapıp dosya:satır bağlantıları vermesi ve her turun checkpoint’ini alarak tek tıkla geri alıp adım adım yeniden oynatmasıdır. Böylece Compose UI ile ViewModel üzerinde aynı anda iki ajan çalıştırabilir, inceleme sonrası güvenle birleştirme yapabilirsiniz.
Sonuç
opencode, AGENTS.md ile doğru yapılandırıldığında Kotlin ve Android projelerinde özellikle Compose refactorleri, ViewModel state yönetimi, coroutine testleri ve Gradle temizliği için güvenilir bir eş olur. Her adımda test ve lint çalıştırarak, diff’i inceleyerek ve gerektiğinde AgentVera ile paralel ajanları worktree’lerde koşturarak üretkenliği artırabilirsiniz. Ajan size kod üretir; mimari kararları ve cihaz testlerini siz doğrularsınız.