Açık Kaynak 21 Nis 2026 12 dk okuma

Antigravity Telegram Suite: AI Kod Editörünüzü Telefonunuzdan Kontrol Edin

Google Antigravity IDE'yi Telegram üzerinden uzaktan kontrol eden açık kaynak bir bot geliştirdim. Kapalı kaynak alternatiflerin güvenlik risklerinden, CDP ile DOM manipülasyonuna ve LLM düşünce sızıntılarını filtrelemeye kadar tüm teknik hikayeyi anlatıyorum.

Bilgisayarın başından kalkmak zorunda kaldığınızda aktif bir yapay zeka oturumunu yönetememenin ne kadar sinir bozucu olduğunu bilirsiniz. IDE açık, agent çalışıyor, ama siz o anda yalnızca telefonunuzdan bakabiliyorsunuz. İşte tam bu ihtiyaçtan doğan Antigravity Telegram Suite, Google’ın AI destekli kod editörü Antigravity‘yi Telegram üzerinden tamamen uzaktan kontrol etmenizi sağlayan açık kaynak bir araç.

Bu yazıda projenin nasıl doğduğunu, piyasadaki mevcut çözümlerin neden yetersiz kaldığını ve geliştirme sürecinde karşılaştığım teknik zorlukları anlatacağım.

Piyasadaki mevcut çözümler ve güvenlik endişeleri

Bu fikri araştırmaya başladığımda Telegram üzerinden IDE kontrolü sunan birkaç eklentinin zaten var olduğunu gördüm. Çoğunluğu Koreli ya da Çinli geliştiriciler tarafından yazılmış, kapalı kaynak kodlu eklentilerdi. Bunları test ettim ama ciddi endişelerim oluştu:

  • Güvenlik riski: Kapalı kaynak bir eklenti API tokenlarınıza, dosya sisteminize ve IDE oturumunuza tam erişim sahibi oluyor. Arka planda tokenlarınızı mı tüketiyor, bilgisayarınıza mı sızıyor; bunu bilmek mümkün değil.
  • Performans sorunu: VS Code eklentisi olarak yazılanlar Antigravity IDE’yi inanılmaz derecede yavaşlatıyordu. Bir Electron uygulamasının içine başka bir polling mekanizması eklemek doğası gereği ağır.
  • Sınırlı özellikler: Çoğu sadece basit mesaj gönderip alma yapıyordu; model değiştirme, dosya gezgini ya da ekran görüntüsü gibi gelişmiş özellikler yoktu.

Bu eklentileri denerken bir tane açık kaynak kodlu proje dikkatimi çekti: acmavirus’un antigravity-telegram-control eklentisi. Temiz yazılmış, kaynak kodu açık ve güvenilir bir yapıya sahipti. Bu projeyi temel alarak, kapalı kaynak alternatiflerin sunduğu özellikleri ve çok daha fazlasını kendi botuma ekledim. Sonuç olarak bağımsız çalışan, IDE’yi yavaşlatmayan ve tamamen şeffaf bir araç ortaya çıktı.

Neden bağımsız bir bot?

Antigravity, Google’ın geliştirdiği güçlü bir AI agent entegrasyonuyla gelen modern bir kod editörü. Gemini ve Claude gibi modelleri kullanarak doğrudan IDE içinde kod yazabiliyor, dosya düzenleyebiliyor ve terminal komutları çalıştırabiliyorsunuz. Ancak tüm bunları yapabilmek için fiziksel olarak bilgisayarın başında olmanız gerekiyor.

Benim senaryom şuydu: Uzun süren bir agent oturumu başlatıyorum, mesela “Bu projenin tamamına i18n desteği ekle” diyorum. Agent çalışmaya başlıyor ama ben o sırada dışarı çıkmak zorunda kalıyorum. Bu kadar güçlü bir yapay zeka aracını sadece bilgisayar başındayken kullanabilmek bana büyük bir israf gibi geldi.

VS Code eklentisi yerine bağımsız bir Node.js botu tercih etmemin sebebi basit: IDE’nin kendi event loop’uyla çakışmıyor, ayrı bir process olarak çalışıyor ve performans üzerinde sıfır etki bırakıyor.

Mimari ve çalışma prensibi

Projenin temelinde Chrome DevTools Protocol (CDP) var. Antigravity, Electron tabanlı bir uygulama olduğu için --remote-debugging-port parametresiyle başlatıldığında, tarayıcının DevTools arayüzüne WebSocket üzerinden erişim sağlanabiliyor. Bot da bu kanalı kullanarak IDE ile konuşuyor.

Antigravity Telegram Suite mimari diyagramı
Telegram’dan IDE’ye uzanan veri akışı: Telegram App → Bot API → Node.js → CDP/WebSocket → Antigravity IDE

İş akışı kısaca şöyle işliyor:

  1. Telegram’dan bir mesaj gönderiyorsunuz
  2. Bot, CDP üzerinden IDE’nin chat input alanına metni enjekte ediyor
  3. Agent çalışmaya başlıyor ve bot bu süre boyunca Telegram’da “yazıyor…” göstergesiyle durumu bildiriyor
  4. Agent işini bitirdiğinde yanıt DOM’dan çıkarılıp Telegram’a iletiliyor

Geliştirme sürecinde karşılaştığım zorluklar

Bu proje “basit bir bot yapalım” diye başladı ama kısa sürede tarayıcı otomasyonu, DOM manipülasyonu ve gerçek zamanlı durum yönetiminin iç içe geçtiği ciddi bir mühendislik problemine dönüştü.

Mesaj yazılacak alan bulunamıyor

En temel görev olan “IDE’nin chat input alanına metin yazmak” şaşırtıcı derecede zordu. Antigravity’nin DOM yapısı standart bir <textarea> ya da <input> kullanmıyor. Bunun yerine contenteditable div’ler, React tarafından yönetilen karmaşık bileşenler ve dinamik olarak değişen selector’lar var.

Bunu çözmek için çok katmanlı bir metin enjeksiyon stratejisi geliştirdim. Önce document.execCommand("insertText") deneniyor, başarısız olursa HTMLTextAreaElement.prototype setter’ı üzerinden gidiliyor, ardından InputEvent ile KeyboardEvent dizileri tetikleniyor. Gönderme butonu da benzer şekilde önce SVG ikon tespiti ile, sonra Enter tuş simülasyonuyla tetikleniyor.

Agent’ın düşünce sızıntısı

En ilginç buglardan biriydi bu. Gemini modeli kullanıldığında agent yanıtının içinde “Thought for 12s — Prioritizing Tool Usage” gibi dahili düşünce blokları sızıyordu. Bunlar kullanıcıya gösterilmemesi gereken, modelin iç monolog metinleriydi ve doğrudan Telegram’a yansıyordu.

İlk başta regex tabanlı temizleme denedim ama yetersiz kaldı çünkü model her seferinde farklı cümleler üretiyordu. Sonunda DOM seviyesinde filtrelemeye geçtim: Yanıtı çıkarmadan önce “Thought for” butonunu içeren parent elementleri geçici olarak display: none ile gizliyorum, metni innerText ile okuyorum, sonra görünürlüğü geri yüklüyorum. Bu yaklaşım çok daha tutarlı çalışıyor çünkü metin yerine HTML yapısına bakıyor.

IDE bildirimleri yanıtlara karışıyor

Bir başka sürpriz de IDE’nin kendi bildirim metinlerinin agent yanıtlarının içine karışmasıydı. Kullanıcı Telegram’da bir cevap alıyor ama içinde “PowerShell eklentisi yüklemek ister misiniz?” gibi tamamen alakasız IDE bildirimleri bulunuyordu.

Bunu çözmek için bilinen UI öğelerini hedefleyen filtreleme katmanları ekledim. Material Design ikon adlarından (chevron_left, content_copy) durum metinlerine (Worked for Xs) kadar kapsamlı bir temizleme mekanizması oluşturdum.

Yarış koşulları ve erken tetikleme

Agent çalışırken bot bazen agent’ın işi bittiğini zannediyordu, oysa agent sadece bir araç çağrısı arasında kısa bir duraklama yapıyordu. Bu da yarım kalmış yanıtların Telegram’a gönderilmesine yol açıyordu.

Buna karşı “ardışık boşta sayacı” mantığını uyguladım. Agent’ın gerçekten bitip bitmediğini anlamak için art arda 4 kez “boşta” sinyali almam gerekiyor. Bu kontrol, DOM’daki stop ikonunun varlığını ve input alanının aktif/pasif durumunu birlikte izleyerek yapılıyor.

Yalnızca yeni mesajları çıkarabilmek

Her seferinde tüm chat geçmişini göndermek yerine yalnızca yeni mesajları göndermek istiyordum. Ancak DOM sürekli değiştiği için basit bir string karşılaştırması yeterli olmuyordu.

Sonunda üç katmanlı bir strateji geliştirdim: Birincisi, önceki chat state’ini saklayıp yeni gelen metinle karşılaştırarak yalnızca farkı çıkarmak. İkincisi, diff boş gelirse son başarılı yanıtı cache’den döndürmek. Üçüncüsü de tam eşleşme bulunamazsa kademeli olarak küçülen suffix parçalarıyla overlap tespiti yapmak.

Ağ kesintilerine karşı dayanıklılık

Telegram API çağrıları, özellikle uzun süren oturumlar sırasında EAI_AGAIN (DNS çözümleme hatası) ve ETIMEDOUT gibi geçici ağ hatalarıyla başarısız olabiliyordu. Bunu çözmek için üstel geri çekilme (exponential backoff) ile yeniden deneme mekanizması ekledim. Her mesaj gönderimi 3 kez deneniyor ve her denemede bekleme süresi ikiye katlanıyor.

Neler yapabiliyor?

Telegram bot model seçim arayüzü
Telegram üzerinden model seçimi: Tek tuşla Gemini ve Claude arasında geçiş

Tüm bu zorlukları aştıktan sonra ortaya oldukça zengin özelliklere sahip bir araç çıktı:

  • Headless Chat: Telegram’dan doğrudan AI agent’a mesaj gönderme
  • Dosya ve görsel yükleme: Telegram’dan dosya ya da fotoğraf gönderip agent’a inceletme
  • IDE ekran görüntüsü: Uzaktan tüm masaüstünün ekran görüntüsünü alma
  • Model değiştirme: Gemini ve Claude arasında tek tuşla geçiş
  • Dosya gezgini: Proje dosyalarını Telegram içinden görüntüleme ve indirme
  • Workspace yönetimi: Projeler arası geçiş
  • Auto-Accept: Agent’ın Run, Accept, Allow, Continue gibi onay butonlarını otomatik tıklama
  • Çoklu dil desteği: İngilizce ve Türkçe (kolayca genişletilebilir)
  • Çapraz platform: Linux, macOS ve Windows desteği

Auto-Accept: tam otonom agent deneyimi

Uzaktan kontrol güzel ama bir eksik vardı: Agent bir dosya oluşturmak, terminal komutu çalıştırmak ya da bir izin istemek istediğinde IDE’de “Run”, “Accept”, “Always Allow” gibi onay butonları çıkıyor. Fiziksel olarak bilgisayar başında değilseniz bu butonlara tıklayamıyorsunuz ve agent takılıp kalıyor. Bu problemi çözmek için Auto-Accept modülünü geliştirdim.

Nasıl çalışıyor?

Auto-Accept, IDE’nin içine CDP üzerinden bir MutationObserver enjekte ediyor. Bu observer DOM’daki her değişikliği izliyor ve önceden tanımlı buton metinleriyle (Run, Accept, Always Allow, Allow, Retry, Continue) eşleşen butonları otomatik olarak tıklıyor. Tüm bu işlem IDE’nin kendi process’i içinde gerçekleşiyor, bot tarafında ise 10 saniyelik bir heartbeat mekanizmasıyla observer’ın sağlığı kontrol ediliyor. Observer ölürse otomatik olarak yeniden enjekte ediliyor.

Güvenlik mekanizmaları

“Her butona otomatik tıklayan bir bot” cümlesini duyunca ilk akla gelen soru haklı olarak “peki rm -rf / çalıştırırsa?” oluyor. Bu yüzden birden fazla güvenlik katmanı ekledim:

  • Blocked Commands: 18 adet tehlikeli komut kalıbı önceden tanımlı olarak engelleniyor (rm -rf, git push --force, drop database, mkfs gibi). “Run” butonuna tıklamadan önce komut metni çıkarılıp bu listeyle karşılaştırılıyor.
  • Cooldown: Aynı butona 5 saniye içinde tekrar tıklanması engelleniyor. Bu sayede agent’ın aynı onayı tekrar tekrar istemesi durumunda sonsuz döngüye girilmiyor.
  • Circuit Breaker: Retry ve Continue butonları 60 saniye içinde 3 kez tıklanırsa sistem duruyor. Bu, agent’ın bir hata döngüsüne girdiğinin sinyali.
  • Sidebar Guard: “Run”, “Accept” gibi kelimeler IDE’nin kenar çubuğundaki dosya listesinde de geçebiliyor. Observer, sidebar elementlerini filtreleyerek yanlışlıkla dosya açılmasını engelliyor.

Geliştirme süreci

Auto-Accept’in ilk versiyonu aslında bir üçüncü parti VS Code eklentisinin MutationObserver’ına bağımlıydı. Ancak bu yaklaşım iki problem yaratıyordu: Birincisi, harici bir eklentiye bağımlılık demek güncelleme kopmaları ve uyumsuzluk riski demek. İkincisi, eklenti observer’ı ölünce benim botumun haberi olmuyordu.

Sonunda tüm eklenti bağımlılığını kaldırıp kendi MutationObserver’ımı doğrudan CDP üzerinden enjekte eden bağımsız bir modül (autoaccept.js) yazdım. Şimdi bot kendi observer’ını yönetiyor, sağlığını izliyor ve gerektiğinde yeniden enjekte ediyor. Tek bir /autoaccept komutuyla Telegram’dan açıp kapatabiliyorsunuz.

Teknik yapı

Proje beş ana modülden oluşuyor:

  • index.js — Ana bot mantığı, Telegram event loop ve komut yönetimi
  • cdp_controller.js — Chrome DevTools Protocol üzerinden IDE ile tüm iletişim
  • autoaccept.js — Otomatik buton tıklama motoru (MutationObserver enjeksiyonu, güvenlik katmanları, heartbeat)
  • i18n.js — JSON tabanlı çeviri sistemi
  • platform.js — İşletim sistemine özel soyutlama katmanı

Bağımlılıklar minimalde tutuldu: Telegraf (Telegram framework), chrome-remote-interface (CDP client) ve dotenv. Harici bir veritabanı, web sunucusu ya da karmaşık bir altyapı gerektirmiyor.

Nasıl kurulur?

git clone https://github.com/emreturkmencom/antigravity-telegram-suite.git
cd antigravity-telegram-suite
npm install
cp .env.example .env
# .env dosyasını düzenleyin: BOT_TOKEN, ALLOWED_CHAT_ID
npm start

Linux ve macOS için tek satırlık bir kurulum scripti de mevcut:

bash scripts/install.sh

Botun 7/24 çalışmasını istiyorsanız PM2 ile daemonize edebilirsiniz:

npm install -g pm2
pm2 start src/index.js --name antigravity-bot
pm2 save && pm2 startup

Commit geçmişi: bir evrimin özeti

Projenin git geçmişi, yaşanan evrimi çok güzel özetliyor. Her commit, gerçek kullanımda karşılaşılan bir soruna karşılık geliyor:

56756e3 Initial release: Antigravity Telegram Suite (Cross-platform + i18n)
5940cb1 Fix: fallback to full response when diff returns empty
b521ddc Fix: filter IDE notification text from agent responses
540be72 Fix: filter out Gemini internal thought text leakage
fb71ee9 Fix: strip LLM thought blocks at DOM layer
42156c5 Feat: add /cmd to Telegram commands menu
0e9d501 Fix: allow typing when IDE is minimized
b870a68 Fix: robust workspace switching with session cleanup
d0e7e10 Feat: add /autoaccept — auto-click Run/Accept/Allow buttons via CDP
c73e94d Refactor: remove extension dependency from auto-accept
bd2f954 Polish: clean message confirmation, update README

Gördüğünüz gibi projenin büyük kısmı “Fix” commit’lerinden oluşuyor. Çünkü bu tip bir araçta asıl zorluk ilk versiyonu yazmak değil, gerçek kullanımda ortaya çıkan edge case’leri teker teker çözmek.

Gelecek planları

  • Birden fazla kullanıcı desteği ve rol tabanlı erişim
  • Otonom görev kuyruğu (birden fazla görevi sıraya koyabilme)
  • Agent bittiğinde push notification gönderimi
  • Daha fazla dil desteği
  • VS Code ve Cursor gibi diğer editörler için adaptörler

Bağlantılar


Geri bildirim ve iletişim

Bu projeyi denerseniz deneyimlerinizi duymak isterim. Aşağıdaki yorum bölümünden sorularınızı sorabilir, hata bildirimi yapabilir ya da önerilerinizi paylaşabilirsiniz.

Bunun dışında iletişim sayfamdan bana doğrudan ulaşmanız da mümkün. Özel yazılım projeleri, danışmanlık ya da işbirliği teklifleri için her zaman açığım.

Eğer proje işinize yaradıysa GitHub’da bir ⭐ bırakmayı unutmayın!

Paylaş:

🚀 WordPress Temalarımıza Göz Atın

Performans odaklı, SEO uyumlu ve profesyonel WordPress temaları ile projenizi hızla hayata geçirin.

Temaları İncele →
Emre Türkmen

Emre Türkmen

WordPress temaları ve eklentileri geliştiriyor, n8n ve yapay zeka destekli iş otomasyonları tasarlıyorum.

Bir Yanıt Bırakın

E-posta adresiniz yayımlanmayacak. Gerekli alanlar işaretlendi *

Sepetim (0)

Sepetiniz şu an boş.