Bir veritabanı migration’ı başlatıyorsunuz, kalkıp kahve almak için mutfağa gidiyorsunuz ve 45 dakika sonra geri dönüyorsunuz. Claude, 3 dakika sonra bir izin uyarısı ile karşılaştı. O andan beri her şey durdu. Bunun farkında değildiniz.
Claude Code Channels, tam olarak bu durumu çözmek için geliştirilmiş bir özellik.
20 Mart 2026’da araştırma önizlemesi olarak piyasaya sürülen Channels, çalışmakta olan bir Claude Code oturumunu her yerden mesajlaşabileceğiniz bir hale getirir. Bir toplantı öncesinde bir görev başlatın. Telefonunuzdan durumu kontrol edin. İşlem tamamlandığında Telegram’da bir yanıt alın. Dizüstü bilgisayarınız açık kalır ve terminalde çıktı beklemek zorunda kalmazsınız.
Bu, Channels’ın ne olduğu hakkında bir kılavuz değil. Eğer bunu istiyorsanız, resmi belgeler iyi bir şekilde açıklıyor. Burada, bunu gerçek bir Laravel projesinde nasıl kullanabileceğinizi anlatacağım. Kurulum sadece 5 dakika sürer. İş akışlarını bulmak biraz daha uzun sürebilir, o yüzden deneme yanılma sürecinden sizi kurtaracağım.
Channels Tam Olarak Nedir? (Kısa Versiyon)
Bir Channel, yerel olarak Claude Code oturumunuzla birlikte çalışan bir MCP sunucusudur. Harici bir mesajlaşma platformu ile aktif terminal oturumunuz arasında bir köprü işlevi görür.
Anahtar kelime “yerel”. Kodunuz asla makinenizi terk etmez. Telegram’dan bir mesaj gönderdiğinizde, eklenti (dizüstü bilgisayarınızda çalışan) bu mesajı alır ve onu doğrudan açık Claude Code oturumunuza bir olay olarak enjekte eder. Claude, tam erişime sahip bir şekilde dosya sisteminize, MCP sunucularınıza, git geçmişinize, her şeye erişerek işlemi gerçekleştirir. Ardından da aynı kanal üzerinden geri yanıt gönderebilir.
Claude Code
Channels Mesaj Akışı
Telefonunuz
DM
Bot
API
sorgular
MCP
Eklentisi
olay
Claude
Oturumu
okur
Kod
Tabanınız
function alInit(){
if(!document.getElementById(‘al-s0’)){setTimeout(alInit,50);return;}
var AMBER=’#c9aa71′,GREEN=’#4ade80′,STEP=520,CONN=420,HOLD=900,PAUSE=600;
var msgs=[‘message traveling from phone \u2192′,’routing through Telegram Bot API \u2192′,’MCP plugin injecting event into session \u2192′,’Claude working in your local project \u2192′,’codebase access: full \u2014 composing reply…’,’reply delivered back through Telegram \u2713′];
function nd(i){return document.getElementById(‘al-s’+i);}
function ic(i){return document.getElementById(‘al-i’+i);}
function lb(i){return document.getElementById(‘al-l’+i);}
function cn(i){return document.getElementById(‘al-c’+i);}
function aw(i){return document.getElementById(‘al-a’+i);}
function ar(i){return document.getElementById(‘al-arr’+i);}
var st=document.getElementById(‘al-status’);
function setNode(i,color){nd(i).style.borderColor=color;nd(i).style.background=color===AMBER?’rgba(201,170,113,0.12)’:’rgba(74,222,128,0.12)’;ic(i).style.color=color;lb(i).style.color=color===AMBER?’rgba(201,170,113,0.9)’:’rgba(74,222,128,0.9)’;}
function fillConn(i,color,cb){
var c=cn(i),a=aw(i),arrEl=ar(i);
var arrowColor=color===AMBER?’rgba(201,170,113,0.7)’:’rgba(74,222,128,0.7)’;
if(arrEl){arrEl.querySelector(‘polygon’).setAttribute(‘fill’,color);arrEl.style.opacity=’0′;}
c.style.background=color;c.style.transition=’none’;c.style.width=”0%”;
a.style.color=arrowColor;
requestAnimationFrame(function(){requestAnimationFrame(function(){
c.style.transition=’width ‘+CONN+’ms ease’;c.style.width=”100%”;
setTimeout(function(){if(arrEl)arrEl.style.opacity=’1′;cb();},CONN+40);
});});
}
function resetAll(){
for(var i=0;i
for(var j=0;j
st.style.opacity=’0′;
}
function setStatus(msg){st.style.opacity=’0′;setTimeout(function(){st.textContent=msg;st.style.opacity=’1′;},150);}
function loop(){
resetAll();
setTimeout(function(){
setNode(0,AMBER);setStatus(msgs[0]);
setTimeout(function(){fillConn(0,AMBER,function(){
setNode(1,AMBER);setStatus(msgs[1]);
setTimeout(function(){fillConn(1,AMBER,function(){
setNode(2,AMBER);setStatus(msgs[2]);
setTimeout(function(){fillConn(2,AMBER,function(){
setNode(3,AMBER);setStatus(msgs[3]);
setTimeout(function(){fillConn(3,AMBER,function(){
setNode(4,AMBER);setStatus(msgs[4]);
setTimeout(function(){
setStatus(msgs[5]);
for(var k=0;k
setTimeout(function(){setTimeout(loop,PAUSE);},HOLD);
},STEP);
});},STEP);
});},STEP);
});},STEP);
},400);
}
loop();
}
alInit();
Belgelerde açık olan bir oturum varken olayların geldiği konusunda net bir bilgi var. Terminali kapatırsanız, o zaman o sırada gönderilen mesajlar kaybolur. Onlar daha sonra kuyrukta beklemeyecek. Dolayısıyla, siz uzaktayken neyi takip etmek istiyorsanız, Claude Code’u bir tmux veya screen oturumunda çalıştırmanız gerekir. Bu konuda birazdan daha fazla bilgi vereceğim.
Kurulum (Bilmeniz Gereken Minumum)
Başlamadan önce: Channels, Claude Code v2.1.80 veya sonrası, bir claude.ai girişi (API anahtarı doğrulaması çalışmaz) ve Bun runtime’ına ihtiyaç duyar. Node değil, Bun! Bu, çoğu kişi için karışıklık yaratıyor. Eğer eklentiyi kurup hiçbir şey olmuyorsa, neredeyse kesinlikle sebep Bun’dur.
# Öncelikle Claude Code sürümünüzü kontrol edin
claude --version
# Eğer yoksa Bun'u kurun
curl -fsSL https://bun.sh/install | bash
Bun’dan sonra, Telegram kurulumu aktif bir Claude Code oturumunda üç komut içerir:
# Resmi eklentiyi kur
/plugin install telegram@claude-plugins-official
# BotFather token'inizi kaydedin
/telegram:configure YOUR_BOT_TOKEN_HERE
Daha sonra çıkış yapın ve kanallar bayrağı ile yeniden başlatın:
claude --channels plugin:telegram@claude-plugins-official
Telegram’daki botunuza DM gönderin. Size 6 karakterli bir eşleştirme kodu ile yanıt verecek. Terminalinize geri dönün:
/telegram:access pair YOUR_PAIRING_CODE
Bitmiştir. Bağlandınız. Telegram’dan bir mesaj gönderebilirsiniz ve Claude sohbetinize yanıt verecektir.
Ayrıca hemen yapmanız gereken bir şey daha: erişimi güvence altına alın.
/telegram:access policy allowlist
Varsayılan olarak, botunuza mesaj atan herkes eşleşme kodu yanıtı alır. Bu test için iyi bir şeydir ama yabancıların oturumunuza bağlanmasını istemezsiniz. Unutmayın, allowlist komutunu çalıştırın.
Şimdi bu özelliği ne için kullanacağınızdan bahsedelim.
Senaryo 1: Uzun Süreli Artisan Komutları
Tanıtımda belirtilen migration senaryosu en yaygın sıkıntıdır. Zaman alan ve bir noktada onay isteyen bir şey çalıştırıyorsunuz. Bir veri aktarımı. Çok aşamalı bir migration. Büyük bir tablo üzerinde toplu yeniden işleme görevi.
Channels sayesinde iş akışı şöyle görünür: Komutu başlatır ve Claude’ya ne beklemesi gerektiğini söylersiniz:
You: Run the import:customers artisan command against the staging database.
It'll ask for confirmation before it starts writing. Wait for my approval
before you proceed.
Sonra uzaklaşırsınız. Claude onay aşamasına geldiğinde, Telegram’da size mesaj atar:
Claude: The import is ready to begin. It found 14,832 customer records
to process. The command is asking for confirmation before writing.
Should I proceed? (yes/no)
Telefonunuzdan “evet” yanıtını verirsiniz. Claude, terminaldeki istemde gerekli onayı verir ve aktarım gerçekleşir.
Bu, uzun bir görevin ortasında insan kontrol noktası istediğiniz her senaryo için işe yarar. Üretim verisi üzerinden migration. Tabloyu bırakıp yeniden oluşturan veri scriptleri. Otomatik geçmek istemediğiniz her --force komutu.
Senaryo 2: Masa Başında Olmadığınızda Kuyruk Hataları
Eğer bir Laravel uygulaması üzerinde kuyruklanmış işlerle çalışıyorsanız, gece yarısı başarısız iş yaşantısını çok iyi biliyorsunuz. Horizon kırmızı bir şey gösteriyor. Size bir e-posta geliyor. İç çekiyorsunuz ve dizüstü bilgisayarı açıyorsunuz.
Laravel Queue Jobs: 10,000 Görevi Kesintisiz İşleme mimari tarafını iyi şekilde ele alıyor. Channels ise yanıt katmanını ekliyor.
Claude Code’u bir tmux oturumunda geliştirme makinenizde projeniz yüklenmiş olarak çalıştırın:
tmux new-session -d -s claude-session
tmux send-keys -t claude-session \
'cd ~/clients/myapp && claude --channels plugin:telegram@claude-plugins-official --dangerously-skip-permissions' Enter
Artık telefonunuzdan bir şeylerin kötü gittiğini düşünüyorsanız şu şekilde sorgulayabilirsiniz:
You: Check the failed jobs in Horizon. What's failing and why?
Claude, başarısız iş kayıtlarını okur, istisna mesajlarını kontrol eder, ilgili kodu inceler ve size yanıt verir:
Claude: 3 jobs failed in the last hour. All are ProcessInvoicePdf jobs.
The exception is: Unable to find class App\Services\PdfRenderer.
Looks like a namespace change that wasn't reflected in the job class.
The fix is a one-line update in ProcessInvoicePdf.php line 23.
Want me to fix it and restart the queue?
Telegram’dan “evet, düzelt” yanıtını veriyorsunuz. Claude değişikliği yapar ve işin bittiğini size haber verir. Dizüstü bilgisayar gerekmez.
--dangerously-skip-permissions bayrağı burada önemli bir rol oynuyor. Olmazsa, her dosya yazma işlemi duracak ve terminal onayı bekleyecektir ki bu da uzaktan bir sorun çözerken amaçlanan durumu bozar. Burada açıkça bir ticaret yapıyorsunuz: izin güvenliğini kaybediyorsunuz. Sadece buna güvenebileceğiniz makinelerde ve projelerde kullanın, hatalı bir eylemin sonuçlarını kabul edilebilir bir ortamda bulunmalıdır.
Senaryo 3: Masa Başında Olmadığınızda Müşteri Hata Bildirimleri
Bu durum, müşteri çalışmalarında sürekli olarak gerçekleşir. Birisi akşam 7’de bir hata hakkında size mesaj atar. Bilgisayarda değilsiniz. Channels öncesinde seçimleriniz şunlardı: sabaha kadar görmezden gelmek veya dizüstü bilgisayarı açmak.
Bu senaryoya güvenmeden önce net bir şekilde anlamanız gereken bir şey var: Üç koşulun hepsi aynı anda doğru olmalıdır. Makineniz açık olmalıdır. Claude Code, bir tmux oturumunda --channels ile çalışıyor olmalıdır. Ve doğru müşteri projesi o oturumda yüklenmiş olmalıdır. İki aktif müşteriniz varsa, iki ayrı adlandırılmış tmux oturumuna ihtiyacınız var:
tmux new-session -s client-a # client A projesi burada yüklü
tmux new-session -s client-b # client B projesi burada yüklü
Her oturum, doğru dizine yönlendirilmiş Claude Code’u çalıştırır. Müşteri 1 için bir hata belirtildiğinde, o sırada kod tabanı yüklü olan oturuma mesaj atıyorsunuz. Bu, Senaryo 3’ün pratikte çalışması için gereken kurulumdur.
O yapılandırmayı kurduğunuzda, bir müşteri hata bildirdiğinde, onu Telegram üzerinden Claude’ya yönlendirirsiniz:
You: Client just reported that the invoice filter on the dashboard isn't
working. When they select "overdue" from the dropdown, it shows all
invoices instead of filtering. Look at InvoiceController and the
related Vue component and tell me what's wrong.
Claude, iki dosyayı okur, sorunun izini sürer ve size sohbetta durumu bildirir:
Claude: Found it. In InvoiceController@index, the 'overdue' case in the
switch statement is missing a break, so it falls through to the default
'all' query. The fix is adding `break;` on line 67. The Vue component
is fine. Want me to write the fix and a test for it?
Telegram’dan “evet, düzelt ve test yaz ama henüz commit etme” yanıtını veriyorsunuz. Claude her ikisini de yazıyor, sabah oturduğunuzda, yazdığı şeyleri gözden geçirip ya commit ediyorsunuz ya da ayarlıyorsunuz. Teşhis çalışması çoktan tamamlanmıştır. Klavyenizi kullanmadan yarım problem çözülmüş durumda.
Channels burada bir araçtan daha fazlası olmaya başlar; size metin atabileceğiniz bir geliştirici gibi görünür. Her adımı yönlendirmiyorsunuz. Kontrol ediyorsunuz, onaylıyorsunuz ve mevcut olmadan bilgi alıyorsunuz.
Senaryo 4: Özellik Çalışmasına Başlama Öncesi
Bu durum, Ralph Wiggum Tekniği ve git worktrees yaklaşımı ile iyi bir şekilde eşleşir.
Öğle yemeğine veya bir toplantıya gitmeden önce iyi kapsamlı bir işi başlatın. Telegram üzerinden Claude’ya net bir spesifikasyon verin, proje oturumda yüklü:
You: Build the notification preferences page. Users should be able to toggle
email notifications on/off for: new invoice, payment received, invoice
overdue. Save preferences to user_notification_preferences table (create
the migration). Vue component in resources/js/Pages/Settings/Notifications.vue.
Use the existing NotificationService. Don't build the actual email sending,
just the preferences UI and storage.
Claude çalışmaya başlar. Telegram’daki yazma göstergesi aktif olduğunu gösterir. Tamamlandığında (veya bir şey sorması gerektiğinde) sizi mesajla bilgilendirir:
Claude: Done. Here's what I built:
- Migration: create_user_notification_preferences_table
- Model: UserNotificationPreference with fillable and relationship on User
- Controller: NotificationPreferenceController (store/update)
- Route: PATCH /settings/notifications
- Vue component: Notifications.vue with three toggles, auto-saves on change
- I didn't find NotificationService in your app, so I left a TODO comment
where it should be called. Can you point me to the right file?
Açıklamalarınızı yapıyorsunuz. Devam ediyor. Telegram üzerinden gidip gelme, dizüstü bilgisayar kapalı.
MCP sunucu ayarlanması burada büyük bir öneme sahiptir. Claude’un proje konvansiyonlarınız ve kod tabanınız hakkında ne kadar çok bilgisi olursa, her Telegram mesajında o kadar az açıklama yapmanız gerekir. MCP yapılandırmanızı doğru bir şekilde ayarlayın, bu uzak oturumlar çok daha verimli hale gelir.
Oturum Açık Koşulu ve tmux
Anlamak gereken bir şey: Channels, bir bulut hizmeti değildir. Claude Code, mesajlarınız için bekleyen Anthropic sunucularında çalışan bir şey değildir. Bu, makinenizde çalışmaktadır. Terminali kapatırsanız, her şey kaybolur.
Ne zaman bir şey başlatmak ve daha sonra kontrol etmek istiyorsanız, oturumu canlı tutmalısınız. tmux standart çözümdür:
# Sürekli bir oturum başlat
tmux new-session -s claude
# Daha sonra herhangi bir terminalden yeniden bağlanın
tmux attach -t claude
# Veya çalışanları kontrol edin
tmux ls
Claude Code’u kanallar bayrağı ile tmux oturumu içinde başlattığınızda, terminal pencerenizi kapatsanız bile çalışmaya devam edecektir. Oturum, makineniz yeniden başlatılana veya açıkça kapatılana kadar devam eder.
Yine de terminali gerektiren bir şey var: izin istemleri. --dangerously-skip-permissions kullanmıyorsanız ve Claude bir yanıt bekliyorsa, oturum duraklar. Telegram üzerinden onaylayamazsınız. Terminale geri dönmeniz gerekir. Bu, araştırma önizlemesi sırasında bilinen bir sınırlamadır ve belgelerde uzaktan izin onayının yol haritasında olduğunu belirtiliyor.
Channels Nedir Değildir
Mevcut durumu net bir şekilde anlamak önemlidir. Bu bir araştırma önizlemesidir. Henüz çalışmayan veya pürüzlü tarafları bulunan birkaç nokta:
Mesaj geçmişi yok. Telegram Bot API mesaj geçmişini açmaz. Claude, telefonunuz sinyal kesildiğinde yanıt verirse, mesaj kaybolur. Yeniden bağlandığınızda göremezsiniz.
Mevcut durumda yalnızca Anthropic tarafından beyaz listeye alınmış eklentilere izin verilmektedir. Önizleme sırasında --channels yalnızca claude-plugins-official eklentilerini kabul eder. Özel bir Slack kanalı veya Forge dağıtım bildirimleri gibi bir webhook köprüsü oluşturmak istiyorsanız --dangerously-load-development-channels bayrağını kullanmanız gerekir; bu tüm beyaz listeyi devre dışı bırakır.
Yasal olarak dağıtım halen devam ediyor. Güncellemeye rağmen bazı hesaplar buna sahip değil. Eğer --channels bayrağı başlangıçta hiçbir şey kaydetmiyorsa, henüz erişiminiz olmayabilir.
OpenClaw’ı Forge üzerinde kullanıyorsanız, Channels çoğu yerde aynı alanı kapsıyor fakat daha iyi bir yerel destek sunuyor. OpenClaw, platform kapsayıcılığı (iMessage, WhatsApp, Slack) açısından hala bir avantaja sahip, ancak Telegram ve Discord kullanım durumları için Channels daha temiz bir seçenektir.
S.S.S.
Channels’ı kullanmak için özel bir Claude planına ihtiyacım var mı?
Bir claude.ai girişi gerekir. Pro, Max, Team ve Enterprise planlarında çalışır. Konsol ve API anahtarı kimliği doğrulaması desteklenmez. Team ve Enterprise kuruluşlarında yönetilen ortamda öncelikle bir yöneticinin etkinleştirmesi gerekir.
Telegram yerine Discord kullanabilir miyim?
Evet. Kurulum biraz daha karmaşıktır (bir botu Discord Geliştirici Portalında oluşturmanız ve ayrıcalıklı geçiş niyetleri altında Mesaj İçeriği İzni’ni etkinleştirmeniz gerekir), ancak iş akışı aynıdır. /plugin install discord@claude-plugins-official ve /discord:configure YOUR_TOKEN komutlarını Claude Code oturumunuzda çalıştırın, sonra --channels plugin:discord@claude-plugins-official ile yeniden başlatın.
–dangerously-skip-permissions kullanmak güvenli mi?
Bu tamamen ortamınıza bağlıdır. Tam olarak kontrol ettiğiniz bir yerel geliştirme makinesinde, bu sorun olmaz. Üretim veritabanı kimlik bilgileri ve canlı API anahtarları bulunan bir makinede, dikkatli düşünün. Bu bayrak tüm izin kontrol noktalarını ortadan kaldırır. Claude bir talimatı yanlış yorumlarsa, sorun sormadan yerine getirir. Bunun uygulanabilir olduğu alanda kullanın.
Claude Code çalışmadığında gönderdiğim mesajlara ne oldu?
Kaybolur. Kanal eklentisi yerel olarak çalışır ve yalnızca Claude Code aktifken sorgu yapar. Oturum kapatıldığında dinleyen kimse yoktur. Bu nedenle tmux’un önemi büyüktür.
Aynı anda birden fazla kanal eklentisi çalıştırabilir miyim?
Evet. --channels bayrağında boşluk bırakarak ayırabilirsiniz: claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official. Her iki kanal da aynı oturumda aktif olacak.
Gerçekten Önemli Olan Değişim
Buradaki pratik değişiklik, hype kadar büyük değil; ancak gerçektir. “Claude ile bir şey yapmak için terminalde olmam gerekiyor” diyor olmaktan, “Bir şey başlatabiliyorum, uzaklaşıyorum ve nerede olursam olaydan haberdar kalabiliyorum” aşamasına geçiyorsunuz.
Özellikle müşteri çalışması için bu anlamlıdır. Akşam 7’de bir hata geldi. Görmezden gelmek veya masa başına geri dönmek arasındaki seçim yapmak zorunda değilsiniz. Telefonunuzdan inceleme başlatın ve kendi programınızda halledin.
tmux’u kurun, önce Bun gereksinimini halledin ve bot tokeninizi herhangi bir yere paylaşmadan önce allowlist’inizi kilitleyin. Geri kalan tamamen iş akışı ile ilgilidir.
Kaynak: Orijinal Makale
- Channels Tam Olarak Nedir? (Kısa Versiyon)
- Kurulum (Bilmeniz Gereken Minumum)
- Senaryo 1: Uzun Süreli Artisan Komutları
- Senaryo 2: Masa Başında Olmadığınızda Kuyruk Hataları
- Senaryo 3: Masa Başında Olmadığınızda Müşteri Hata Bildirimleri
- Senaryo 4: Özellik Çalışmasına Başlama Öncesi
- Oturum Açık Koşulu ve tmux
- Channels Nedir Değildir
- S.S.S.
- Gerçekten Önemli Olan Değişim


