Kurs
Tekrarlayan her Claude Code görevinin aynı maliyeti vardır. Gecelik PR incelemesini, haftalık bağımlılık denetimini veya sürümden önce doküman kontrolünü düşünün. Her biri için bir oturum açık şekilde terminalde olmanız ve çalışmasını izlemeniz gerekir. Dizüstü bilgisayarı kapatırsanız iş sizi bekler.
Rutinler bu maliyeti ortadan kaldırır.
Bir rutin, Claude Code’u Anthropic tarafından yönetilen altyapıda bulutta çalıştırır; böylece dizüstü bilgisayarınız kapalıyken de çalışmaya devam eder. Görevi bir kez yazarsınız, depolarınızı işaret edersiniz ve rutin, açık bir oturum olmadan bir zamanlamayla veya bir olayla tetiklenir.
Bu eğitim size ilk rutininizi adım adım oluşturmayı gösterir. Zamanlanmış bir rutin oluşturacak, çalışmasını izleyecek ve ardından kapsamını ve yeteneklerini genişleteceksiniz.
Daha derine inmek isterseniz, uygulamalı Claude Code in Action kursumuz bağlam yönetimi ve plan modundan özel komutlara, MCP sunucularına, kancalara ve SDK’ya kadar her şeyi kapsar.
Claude Code Rutinleri Nedir?
Rutin, kaydedilmiş bir Claude Code yapılandırmasıdır: bir komut istemi (prompt), bir veya daha fazla depo ve bir dizi bağlayıcı. Bunu bir kez paketlersiniz ve Anthropic tarafından yönetilen bulut altyapısında otomatik olarak çalışır.
Üç bölümün her biri özel bir iş yapar:
- Komut istemi (Prompt). En önemli kısımdır çünkü rutin her adımda onayınızı almadan çalışır. Komut istemi görevin tamamını ve “tamamlandı” tanımını taşımak zorundadır.
- Depolar. Claude her çalışmanın başında bunları klonlar ve işini bu depoların içinde yapar.
- Bağlayıcılar. Hesabınızdaki Slack veya Linear gibi claude.ai bütünleşmeleri; rutin bir çalıştırma sırasında bunlardan okuyabilir ve bunlara yazabilir. Örneğin destek triyajı yapan bir rutin bir Slack kanalını okuyup Linear’da iş oluşturabilir.
Rutinler için bağlayıcılar claude.ai platformunda eklenir; MCP sunucuları da aynı şekilde. Yerel yapılandırmalarınız aktarılmaz.

Bir rutin üç şekilde tetiklenebilir: bir zamanlamayla, bir API çağrısıyla veya bir GitHub olayıyla. Tek bir rutin üçünü de birleştirebilir.
Rutinler ile /loop karşılaştırması
Arada fark vardır; çünkü /loop ile /schedule farklı sorunları çözer.
/loop görevi mevcut oturumunuzda yaşar. Yalnızca Claude Code makinenizde çalışırken ve boşta iken tetiklenir; terminali kapatmak onu durdurur. Bu, şu anda izlediğiniz bir derlemeyi aralıklı kontrol etmek için uygundur.
/loop ve diğer önemli komutlar hakkında daha fazla bilgi için Claude Code Terminal eğitimimizi okumanızı öneririm.
Bir rutin bulutta çalışır ve herhangi bir oturumdan bağımsız olarak varlığını sürdürür:
|
|
Bulut rutini |
|
|
Çalıştığı yer |
Anthropic bulutu |
Makineniz |
|
Makine gereksinimi |
Hayır |
Evet |
|
Oturum gereksinimi |
Hayır |
Evet |
|
Asgari aralık |
1 saat |
1 dakika |
Ayrıca üçüncü, yerel bir seçenek daha vardır. Masaüstü zamanlanmış görevler yerel dosyalarınıza ve araçlarınıza ihtiyaç duyan işler için kendi bilgisayarınızda çalışır. Yalnızca makine uyanıkken çalışırlar, ancak Claude uygulamasının açık olmasını gerektirmezler.
Oluşturacağımız Rutin
Zihinsel model hazır. Şimdi bir rutinin üzerinde çalışacağı bir şey gerekiyor. Bu eğitim için pr-review-demo adında, açık bir çekme isteği (pull request) bulunan küçük bir Python projesi oluşturduk.
Bu projede, fiyatları tamsayı sent cinsinden tutan, üye ve toplu indirimleri uygulayan ve nihai ücrete ulaşmak için eyalet satış vergisi ekleyen bir cartlib paketi vardır. Ana daldaki paket doğrudur.
Açık pull request ücretsiz kargo kuponu ekler ve bilerek yerleştirdiğimiz gerçek bir hatayı içerir. Bu, tek bir dosyada görünmeyen ve yalnızca bir değeri iki dosya arasında izlediğinizde ortaya çıkan dosyalar arası bir birim uyuşmazlığıdır. Bu da rutine eğitimin geri kalanı için gerçek bir iş verir.
Kendi kopyanız üzerinde takip etmek için depoyu çatallayın (fork). Bu depo atılabilir niteliktedir ve kalıplar, bir rutini yönlendirdiğiniz herhangi bir depoya aktarılabilir.
Takip etmek için önkoşullar
Web’de Claude Code etkin olan Pro, Max, Team veya Enterprise planında bir claude.ai hesabına ihtiyacınız var. Rutinler şurada bulunur: claude.ai/code/routines.
/schedule komutu, Anthropic API anahtarı ya da Bedrock, Vertex veya Foundry kimlik doğrulamasıyla değil, claude.ai abonelik girişinizle kimlik doğrular. Ayrıca güncel bir CLI gerektirir; sizinki eskiyse claude update çalıştırın.
Ayrıca iki ayrı GitHub önkoşulu vardır. İlk olarak, /web-setup klon erişimi verir; bunu zamanlanmış rutin kullanır. İkinci olarak, ayrı yüklenecek Claude GitHub Uygulaması, ileride ele alınacak GitHub tetikleyicisini etkinleştirir.
/schedule ile Claude Code Rutinleri Oluşturma
Hedef gösterecek bir deponuz olduğunda, rutini CLI’dan oluşturun. Herhangi bir oturumda /schedule çalıştırın. Bir açıklamayı doğrudan geçebilirsiniz:
/schedule daily PR review at 9 am
Ardından Claude web formunun topladığı aynı alanları adım adım sorar: ad, komut istemi, depo, ortam, bağlayıcılar ve zamanlama. Zamanlamayı yerel saatinizde onaylar ve sizin için dönüştürür; böylece 9 am, bir cron ifadesi yazmanıza gerek kalmadan doğru cron ifadesine dönüşür.

Hesabınızın henüz bir GitHub bağlantısı yoksa Claude sizden /web-setup çalıştırmanızı ister. Bunu çalıştırın, ardından kaldığınız yerden devam etmek için /schedule komutunu tekrar çalıştırın.
Siz olmadan çalışacak bir komut istemi yazma
Rutin başarısının anahtarı komut istemidir.
Normal bir oturum bir konuşmadır; gidişata göre Claude’u düzeltebilirsiniz. Rutinde ise düzeltecek kimse yoktur. Soğuk başlar, sona kadar çalışır ve açıklayıcı soru soramaz. Komut istemi görevi, depoyu ve tamamlanmış çalışmanın nasıl göründüğünü açıkça söylemelidir.
Şu ikisini karşılaştırın. İlki çok şeyi belirsiz bırakıyor:
Review the open PR.
Depoyu ya da inceleme ölçütlerini adlandırmıyor, yorum bırakılacak bir yer yok ve “tamamlandı” tanımı yok. Soğuk bir çalıştırma bu boşlukları dolduramaz. İkinci komut istemi ise hepsini karşılar:
Review the open pull request in pr-review-demo. The cartlib package works entirely in integer cents. Read the checkout flow and the values it pulls from config.py, and check that every amount stays in cents end to end. If any value is mixed in using the wrong unit, leave an inline comment on that line explaining the error and its effect on the customer's total. Then, post a summary comment stating whether the PR is safe to merge.
Bu komut istemi, depoyu adlandırır ve kodun koruması gereken değişmezin adını verir: tüm tutarlar sent cinsinden. Önemli iki dosyayı işaret eder ve “tamamlandı”yı satır içi yorum artı bir birleştirme kararı olarak tanımlar. Bu da çalıştırmaya tek başına ulaşabileceği bir hedef verir. /schedule komutu aracının ne yapması gerektiğini sorduğunda bunu yapıştırın.
Tüm bağlayıcılarınız varsayılan olarak dahildir; bu nedenle yeni bir rutin, hesabınızın bağlı olduğu her şeye zaten erişebilir. Şimdilik bu yeterlidir; ilerideki bir bölümde listeyi daraltacağız.
Akışı tamamladığınızda Claude rutini kaydeder ve havuzda olduğunu; deposu, zamanlaması, modeli ve bir sonraki çalışma zamanıyla birlikte onaylar.

Rutin ayrıca claude.ai/code/routines adresindeki listede görünür. Durum, depo, zamanlama, bağlayıcılar, tam komut istemi ve bir Şimdi çalıştır düğmesi dahil her şeyi tek bir yerde görmek için detay sayfasını açın.

9’da beklemek yerine hemen çalıştırmak için Şimdi çalıştır’a tıklayın.
Çalıştırmayı okuma
Çalıştırma, varsayılan daldan çekilen deponuzun taze bir klonu ile başlar. Commi̇t’lediğiniz her şey oradadır. Yalnızca kendi makinenizde kurduğunuz hiçbir şey yoktur; bu nedenle rutin depoyu ekip arkadaşlarınızın göreceği şekilde görür.
Tamamlandığında, çalışma listesi yeşil bir durum gösterir. Bu yeşil işaret, oturumun altyapı hatası olmadan çalışıp çıktığı anlamına gelir. Ancak, komut isteminizdeki görevin başarıya ulaştığı anlamına gelmez. Yeşil bir işaretin ardına saklanan ve yalnızca dökümde (transcript) görülen üç tür başarısızlık vardır:
- Ortamın engellediği bir ağ isteği.
- Rutin tarafından beklenen ancak erişilemeyen bir bağlayıcı aracı.
- Çalıştırma temizce bitse de yanlış iş yapan görev düzeyi bir hata.

Bu yüzden doğrulamak için çalıştırmayı açın. Herhangi bir çalıştırmaya tıklayarak onu tam bir oturum olarak okuyabilirsiniz; Claude’un ne yaptığını görebilir, diff’i inceleyebilir, bir pull request açabilir veya konuşmayı sürdürebilirsiniz.
Demo deposunda, döküm yakalanan sorunu gösterir. Claude checkout.py’yi okur ve kuponun 500 yerine 5 olarak atandığını bulur. Bunun 5 doların 5 sent olarak uygulanmasına yol açtığını, müşterinin sipariş başına 4,95 dolar fazla ödemesine neden olduğunu açıklar ve tek satırlık düzeltmeyi verir. Ardından GitHub bağlayıcısı üzerinden incelemeyi PR’a gönderir.

CLI’dan Claude Code rutinlerini yönetme
Bir rutin oluşturulduktan sonra, aynı komutla yönetirsiniz. Tümünü görmek için /schedule list çalıştırın; birini değiştirmek için /schedule update, hemen tetiklemek için /schedule run çalıştırın.
Zamanlama ön ayarları saatlik, günlük, hafta içi ve haftalıktır. 2 saatte bir veya her ayın ilk günü gibi özel bir aralık için önce en yakın ön ayarı seçin. Ardından doğrudan bir cron ifadesi ayarlamak için /schedule update çalıştırın. Asgari aralık 1 saattir; daha hızlısı reddedilir.
Rutinler, hesabınızın günlük çalışma kotasına da dahildir ve araştırma önizlemesi sırasında GitHub olaylarının saatlik sınırları vardır. Sınırı aşan olaylar kuyruğa alınmaz, düşer. Mevcut sayılar plana göre değişir ve claude.ai/code/routines’ta görünür.
CLI yalnızca zamanlanmış rutinler oluşturur. Bir GitHub veya API tetikleyicisi eklemek için rutini web uygulamasında düzenleyin.
Claude Code Rutinlerini GitHub ve HTTP ile Tetikleme
Zamanlama, rutininizi saate bağlı olarak tetikler. İki başka tetikleyici ise GitHub’ın veya kendi sistemlerinizin aynı rutini tetiklemesini sağlar. Bir PR inceleme rutini gece çalışabilir, her yeni PR’a tepki verebilir ve aynı anda bir dağıtım betiğinden de başlayabilir.
Her ikisini de şuradaki rutini düzenleyerek eklersiniz: claude.ai/code/routines.
GitHub tetikleyicisiyle pull request’lere tepki verin
GitHub tetikleyicisi, abone olmak istediğiniz depoya Claude GitHub Uygulamasının yüklenmiş olmasını gerektirir. Uygulama yoksa, tetikleyici kurulumu sizi yüklemeye yönlendirir. Şunu unutmayın: daha önceki /web-setup yalnızca klon erişimi verir. Uygulamayı yüklemez veya webhook’lar sağlamaz; dolayısıyla bunu çalıştırmak bu adımı kapsamaz.
Uygulama yüklendikten sonra tetikleyiciyi ekleyin ve bir olay seçin. Olaylar iki kategoriye ayrılır: pull request’ler ve sürümler (releases); bunlardan birinin içindeki belirli bir eylemi seçersiniz. Arayüz, PR açıldı, PR birleştirildi ve Sürüm yayımlandı gibi yaygın olanları ön ayar olarak sunar; geri kalanı için de Özel seçeneği vardır.
Ardından filtrelerle daraltın. Pull request’ler için yazar, başlık, gövde, temel dal, kaynak dal, etiketler, taslak mı ve birleştirildi mi gibi alanlarda filtreleyebilirsiniz. Rutinin tetiklenmesi için tüm koşulların eşleşmesi gerekir.
matches regex işleci tüm alanı test eder, bir alt dizeyi değil. Başlığında hotfix geçen herhangi bir başlığı eşleştirmek için .*hotfix.* yazın. Düz hotfix yalnızca tam olarak bu olan bir başlığı eşleştirir, başka hiçbir şeyi değil.

GitHub tetikleyicisi, ana dala ve belirli bir yazara filtrelenmiş şekilde yeni bir pull request’te tetiklenecek biçimde ayarlanmıştır.
Demo deposu için olayı pull request açılınca olarak ayarlayın ve filtreleri açık bırakın. Artık her yeni PR, daha önce yazdığınız incelemeyi terminalde kimse olmadan tetikler. Kuponun birimini dosyalar arasında izler, hataya satır içi yorum bırakır ve birleştirme kararı paylaşır.
Eşleşen her olay kendi oturumunu başlatır; bu nedenle art arda iki PR iki bağımsız çalıştırma üretir.
Bir rutini HTTP üzerinden tetikleyin
API tetikleyicisi, kendi araçlarınızın bir rutini tetiklemesini sağlar. Tetikleyici seçicisinde API’yi seçin ve Belirteç oluştur’a tıklayın. Belirteç yalnızca bir kez gösterilir ve sonradan getirilemez; bu yüzden uyarı aracınızın gizli anahtar deposuna hemen kaydedin.
Ardından belirteç ve bir text gövde ile rutinin tetikleme uç noktasına POST edin:
curl -X POST https://api.anthropic.com/v1/claude_code/routines/$ROUTINE_ID/fire \
-H "Authorization: Bearer $ROUTINE_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: experimental-cc-routine-2026-04-01" \
-H "Content-Type: application/json" \
-d '{"text": "Sentry alert SEN-4521 fired in prod. Stack trace attached."}'
text değeri düz bir dize olarak iletilir ve ayrıştırılmaz; bu nedenle JSON yerine düz yazı yazın. Yapılandırılmış girdi ham metin olarak gelir ve rutin onu olduğu gibi okur.
anthropic-beta üstbilgisi zorunludur ve API deneyseldir; bu yüzden CI’a bağlamadan önce API başvurusunu kontrol edin. Buradan bir izleme aracı, bir uyarıda bu uç noktayı çağırabilir ve rutinin kendi başına bir taslak düzeltme PR’ı açmasını sağlayabilir.
Claude Code Rutinlerinin Erişimini Kapsamlandırma
Bir rutin kendi başına çalışır; bu nedenle gerçek bir depoya yöneltmeden önce erişebileceği alanı kısıtlayın. Dokümanlar bunu dört kontrol olarak çerçeveler:
- Rutinin kimi temsil ettiği: GitHub kimliğiniz ve bağlayıcılarınız aracılığıyla.
- Hangi dallara itebileceği (push).
- Hangi bağlayıcıları kullanabileceği.
- Ortamın ağ üzerinden erişmesine izin verdiği ana makineler.
Her birini rutinin gerçekten ihtiyaç duyduğu kadar kapsamlandırın.
Rutin kimliği
Kimlik ilk sıradadır; çünkü ekip arkadaşınızın paylaşılan bir depoda fark edeceği budur. Rutin GitHub kimliğiniz veya bağlayıcılarınız üzerinden ne yaparsa sizin adınıza görünür.
Commit’ler ve pull request’ler GitHub kullanıcınızı taşır; Slack mesajları ve Linear biletleri bağlı hesaplarınızı kullanır. Ekip arkadaşlarınız bu commit ve PR’larda sizin adınızı görür; bu nedenle dalları ve başlıkları, bunların bir rutin tarafından oluşturulduğunu belli edecek şekilde adlandırın.
Rutinin itebileceği dallar
Dallar sıradadır. Çalıştırma, izin istemi olmayan tam bir bulut oturumudur; bu yüzden bir dosyayı düzenlemeden ya da bir pull request açmadan önce asla durup sormaz.
Korkuluk (guardrail) yazabileceği daldır. Varsayılan olarak Claude yalnızca claude/ önekiyle başlayan dallara iter; bu da onu main gibi korunan veya uzun ömürlü dallardan uzak tutar.
Depo başına bir ayar olan Kısıtsız dal push’larına izin ver bu sınırlamayı kaldırır. Bunu bilinçli şekilde, yalnızca buna ihtiyacı olan bir depo için açın.
Rutinin kullanabileceği bağlayıcılar
Bağlayıcılar dördünün en risklisidir. Tüm claude.ai bağlayıcılarınız varsayılan olarak dahildir ve Claude, dahil edilen bir bağlayıcıdaki tüm araçları — yazma dahil — bir çalıştırma sırasında sormadan kullanabilir.
Bu yüzden listeyi rutinin ihtiyacı olanlarla sınırlayın. Bir PR inceleme rutininin GitHub’a ihtiyacı vardır, fazlasına çok az. Rastgele bir e-posta veya takvim bağlayıcısı, rutinin işine yaramayan bir erişimdir ve bir PR’a gizlenmiş bir istem enjeksiyonu bu erişimi size karşı kullanabilir.

Ağ erişimi
Ağ erişimi son kontroldür. Varsayılan ortam güvenilir ağ erişimi kullanır; bu, paket kayıtları, bulut sağlayıcı API’leri, konteyner kayıtları ve yaygın geliştirme alan adlarından oluşan yerleşik bir izin listesine ulaşır ve kalanını engeller.
Engellenen bir istek 403 ve x-deny-reason: host_not_allowed ile başarısız olur. Yalnızca rutin kendi hizmetlerinize erişmek zorunda olduğunda genişletin. Aksi halde, hata belirgin bir hata olarak değil, dökümde sessizce görünür.
Sırada Oluşturabileceğiniz Claude Code Rutinleri için Fikirler
Bir rutini oluşturabilir, tetikleyebilir ve kapsamlandırabilirsiniz. Resmi dokümanlardan alınan şu örneklerin her biri, bir işi ona uygun tetikleyiciyle eşler:
- Özel kod incelemesi. PR açıldığında GitHub tetikleyicisi. Ekibinizin inceleme kontrol listesini uygular, güvenlik, performans ve stil için satır içi yorumlar bırakır ve bir özet ekler. Bu, demodur; gerçek standartlarınıza genellenmiştir.
- Bekleyen işler bakımı. Zamanlama tetikleyicisi, her hafta içi akşam. Son çalıştırmadan bu yana açılan sorunları okur, etiketler uygular, her sorunun referans verdiği kod alanına göre sahipler atar ve Slack’e bir özet gönderir.
- Dağıtım doğrulaması. Her üretim dağıtımından sonra CD boru hattınızdan API tetikleyicisi. Yeni derleme üzerinde duman testleri çalıştırır, hata günlüklerini gerilemeler için tarar ve yayın kanalına devam/etme kararı gönderir.
- Doküman sapması. Zamanlama tetikleyicisi, haftalık. Son çalıştırmadan beri birleştirilen PR’ları tarar, değişen API’lere referans veren dokümanları işaretler ve doküman deposuna güncelleme PR’ları açar.
Rutinler, gözetimsiz, tekrarlanabilir ve net bir sonuca bağlı işler için uygundur. Başarı ölçütlerini komut istemine yazabiliyorsanız — PR incelemesinde yaptığınız gibi — görev adaydır. Gerçek zamanlı insan muhakemesi gerektiren işler uygun değildir.
Sonuç
Rutinler, tekrarlayan işlere harcadığınız zamanı değiştirir. Her görevi terminalde çalıştırmak yerine bir kez yazarsınız ve zaten çalıştırılmış olanı gözden geçirirsiniz. Oluşturduğunuz PR incelemesi dizüstü bilgisayarınız kapalıyken tetiklenir ve siz hazır olduğunuzda sonucu okursunuz.
Claude Code ile daha ileri gitmek için aşağıdaki eğitimler bu yazıyla iyi eşleşir:
- Claude Code en iyi uygulamaları, her oturumdan daha fazlasını almak için.
- CLAUDE.md dosyası yazma, rutinlerinize ve oturumlarınıza ortak bağlam vermek için.
- Şartname odaklı geliştirme, otomatikleştirmeden önce belirtmeye değer görevler için.
- Otomatik mod ve kanallar, Claude Code’u daha az gözetimle çalıştırmak için.
Claude Code Rutinleri SSS
Claude Code rutini nedir?
Rutin, kaydedilmiş bir Claude Code yapılandırmasıdır: bir komut istemi, bir veya daha fazla depo ve bir dizi bağlayıcı. Bunu bir kez paketlersiniz ve bir zamanlama, bir API çağrısı veya bir GitHub olayıyla tetiklenerek Anthropic tarafından yönetilen bulut altyapısında otomatik olarak çalışır.
Bir rutin, /loop’tan nasıl farklıdır?
/loop görevi oturum kapsamındadır. Yalnızca Claude Code makinenizde açık ve boşta iken çalışır; terminali kapatmak onu durdurur. Bir rutin ise bulutta çalışır ve herhangi bir oturumdan bağımsız olarak varlığını sürdürür; böylece dizüstü bilgisayarınız kapalıyken de çalışmaya devam eder. Rutin için asgari aralık 1 saat, /loop için 1 dakikadır.
Bir rutini nasıl oluştururum?
Herhangi bir Claude Code oturumunda /schedule komutunu çalıştırın; örneğin, /schedule daily PR review at 9 am. Claude, web formunun topladığı aynı alanlardan (ad, komut istemi, depo, ortam, bağlayıcılar ve zamanlama) sizi geçirir; ardından rutini hesabınıza kaydeder ve şu adreste görünür: claude.ai/code/routines.
Dizüstü bilgisayarım kapalıyken bir rutin çalışabilir mi?
Evet. Rutinler, makineniz yerine Anthropic tarafından yönetilen bulut altyapısında çalışır; bu nedenle, zamanlanmış veya tetiklenmiş bir çalıştırma, dizüstü bilgisayarınız kapalı olsa bile tamamlanır. Bir çalıştırmayı webden takip edebilir veya sonrasında dökümünü kontrol edebilirsiniz.
Bir rutinin neye erişebileceğini nasıl kontrol ederim?
Rutini dört kontrolle kapsamlandırın: temsil ettiği kimlik, itebileceği dallar, kullanabileceği bağlayıcılar ve erişebileceği ağ ana makineleri. Varsayılan olarak Claude yalnızca claude/-ön ekli dallara iter ve tüm bağlayıcılarınız dahildir; bu yüzden bağlayıcı listesini daraltın ve ağ erişimini yalnızca rutin gerçekten ihtiyaç duyduğunda genişletin.
2 yılı aşkın deneyime sahip bir veri bilimi içerik üreticisiyim ve Medium'da en büyük takipçi kitlelerinden birine sahibim. Yapay zeka ve makine öğrenimi üzerine, biraz da alaycı bir üslupla, ayrıntılı yazılar yazmayı seviyorum; çünkü bu konuları biraz olsun sıkıcılıktan çıkarmak gerekiyor. 130'dan fazla makale ve bir DataCamp kursu hazırladım; bir diğeri de yolda. İçeriklerim 5 milyondan fazla kişi tarafından görüntülendi; bunların 20 bini Medium ve LinkedIn'de takipçim oldu.

