Gemini CLI bildirimleri: işi bittiğinde veya sana ihtiyaç duyduğunda ses ya da uyarı al
Gemini CLI, sen başka bir şey okurken “Waiting for confirmation” ekranında keyifle bekler. Sana haber verebilir. Sadece ayar varsayılan olarak kapalıdır ve Windows'ta dokümanların ima ettiğinden farklı davranır.
KISA CEVAP
~/.gemini/settings.json dosyasında "general": { "enableNotifications": true } ayarla (veya /settings → General → Enable Notifications). Gemini CLI bundan sonra onay gerektiğinde ve bir oturum tamamlandığında seni uyarır. Windows Terminal'de ve VS Code terminalinde otomatik mod sadece terminal zilini çalar; gerçek bir masaüstü bildirimi istiyorsan notificationMethod: "osc9" dene. Kendi sesin için bir Notification hook'u (araç izni istemlerinde tetiklenir) ve bir AfterAgent hook'u (bir tur bittiğinde tetiklenir) ekle.
Başlamadan önce: hangi Gemini CLI'ı kullanıyorsun
Gemini CLI dokümantasyonunun üstündeki bir duyuru, ücretsiz katman ve Google One kullanıcıları için Gemini CLI'ın 18 Haziran 2026'da Antigravity CLI ile değiştirildiğini söylüyor. Aşağıdaki her şey Gemini CLI'ın kendisiyle (gemini komutu ve ~/.gemini/settings.json) ilgilidir. Antigravity'ye geçtiysen ayarları başka bir yerde bulunur.
İnsanlar bunu uzun zamandır istiyor. Gemini CLI reposundaki sesli bildirim özellik isteği (#4310) 74 beğeni topladı ve bir maintainer, önceliğini “kaç kişinin önemsediğini yansıtmak için” yükseltti. Daha sonraki bir tartışma (#13313) durumu basitçe özetledi: “I can never tell when it is done.” (Ne zaman bittiğini asla anlayamıyorum.)
Yerleşik bildirimleri aç
Gemini CLI'ın deneysel bir bildirim özelliği var. Varsayılan olarak devre dışıdır. CLI'da /settings → General → Enable Notifications ile veya ayar dosyanda aç:
Açıldıktan sonra Gemini CLI seni iki event için uyarır:
- Eylem gerekli: model senin girdini veya araç onayını bekliyor.
- Oturum tamamlandı: bir oturum başarıyla bitti.
Bildirim başlıkları “Gemini CLI needs your attention” ve “Gemini CLI session complete” şeklindedir. Gemini CLI kendi başına ses çalmaz: terminaline bir kaçış dizisi gönderir ve ne olacağına terminal karar verir.
Bildirim sana nasıl ulaşır (ve Windows neden farklıdır)
İkinci bir ayar, general.notificationMethod, uyarının nasıl gönderileceğini seçer. Değerler auto (varsayılan), osc9, osc777 ve bell şeklindedir.
Bildirimler sayfası, CLI'ın OSC 9 kaçış dizisini kullandığını ve terminal ziline geri döndüğünü söylüyor. Kaynak kod daha net. auto modunda (packages/cli/src/utils/terminalNotifications.ts):
| Terminal | auto modunun gönderdiği |
|---|---|
| iTerm2 | OSC 9 (bir masaüstü bildirimi) |
| Windows Terminal, VS Code terminali, Alacritty, Apple Terminal | Sadece zil (BEL) |
| Diğer tüm terminaller | OSC 777 |
Yani Windows Terminal'de bir toast bildirimi değil, zil alırsın. Zilin ne yapacağı bir Windows Terminal ayarıdır: bellStyle, all, audible, window, taskbar ve none değerlerini kabul eder ve varsayılan değer audible olur. all ile Windows Terminal bir ses çalar ve görev çubuğu simgesini yanıp söndürür; sesi bellSound ile seçebilirsin.
Zil yerine gerçek bir masaüstü bildirimi denemek istiyorsan yöntemi zorla:
Bir terminalin OSC 9'u Windows bildirimine dönüştürüp dönüştürmemesi terminal sürümüne bağlıdır. Hiçbir şey görünmezse auto veya bell değerine geri dön ve bellStyle: "all" kullan. Zil, Gemini CLI'ın kendi kodunun Windows Terminal için seçtiği yoldur.
tmux veya screen içinde Gemini CLI diziyi bir passthrough kaçış dizisine sarar, böylece dizi yine de dıştaki terminale ulaşır.
Hook'larla kendi sesin
Belirli bir ses, bir açılır pencere veya telefonuna bir mesaj istiyorsan hook kullan. Gemini CLI hook komutlarını sabit noktalarda çalıştırır ve bitmelerini bekler. Burada iki event önemli:
Notification, CLI bir sistem uyarısı ürettiğinde tetiklenir. Bugün tek türToolPermission(bir araç onayını bekliyor). Hook hiçbir şeyi onaylayamaz veya engelleyemez; sadece bilgilendiricidir.AfterAgent, modelin son cevabından sonra her turda bir kez tetiklenir. Gemini'nin kendi en iyi uygulamalar sayfası bunu “you only need to check the final completion” (sadece son tamamlanmayı kontrol etmen gerekiyorsa) durumunda öneriyor.
Hook'lar varsayılan olarak açıktır (hooksConfig.enabled). Bir hook stdout'a tam olarak bir JSON nesnesi yazdırır, başka hiçbir şey yazdırmaz (söyleyecek bir şeyin yoksa {} yeterli). Çıkış kodu 0 başarı demektir; 2 engeller (ve sadece engelleyen event'lerde önemlidir); diğer her şey bir uyarıdır ve CLI devam eder. Varsayılan zaman aşımı 60 saniyedir (timeout milisaniye cinsindendir).
Windows (PowerShell)
Windows'ta Gemini CLI hook komutlarını pwsh -NoProfile -Command ile, PowerShell 7 kurulu değilse powershell.exe ile çalıştırır. Bu script'i %USERPROFILE%\.gemini\hooks\ding.ps1 olarak kaydet:
Sonra iki event'i de ona yönlendir:
-ExecutionPolicy Bypass en yaygın hatayı önler: PowerShell'in script çalıştırmayı reddetmesini. Gemini dokümanları kalıcı çözüm olarak Set-ExecutionPolicy RemoteSigned -Scope CurrentUser öneriyor.
macOS ve Linux
Diğer sistemlerde hook'lar bash -c ile çalışır. Tek satırlık bir script işi görür:
Onu çalıştırılabilir yap (chmod +x ~/.gemini/hooks/ding.sh) ve aynı iki event'te "command": "$HOME/.gemini/hooks/ding.sh" kullan.
Biri “onay gerekiyor”, diğeri “bitti” için iki farklı ses mi istiyorsun? İki script yaz. Bir hook event'i stdin'den de okuyabilir: Notification girdisi notification_type, message ve details alanlarını taşır, yani açılır pencerende asıl isteği gösterebilirsin.
Hook'un neden çalışmıyor
/hooks panelkomutuna bak. Gemini CLI'ın yüklediği her hook'u listeler. Devre dışı bırakıldılarsa/hooks enable-allonları yeniden açar.- Güvenilmeyen klasör. Güvenilmeyen bir klasörde Gemini CLI projenin
.gemini/settings.jsondosyasını yok sayar, yani proje hook'ları yüklenmez. Bildirim hook'larını her yerde çalışsınlar diye kullanıcı ayarlarına (~/.gemini/settings.json) koy. - Değişen hook'lar yeni sayılır. Gemini CLI proje hook'larının parmak izini alır; bir hook'un adı veya komutu değişirse yeni ve güvenilmeyen bir hook olarak kabul edilir.
- Stdout'ta başka bir şey var. JSON'un önündeki başıboş bir
echoveya bir PowerShell uyarısı ayrıştırmayı bozar. Logları stderr'e gönder. - Matcher'lar.
NotificationveAfterAgentiçin her şeyle eşleşmesi adına"*"(veya boş bir metin) kullan. Yaşam döngüsü event'leri tam metin matcher'ları, araç event'leri düzenli ifadeler kullanır.
Ya da daha az soru gelsin
Bildirimler daha hızlı cevap vermene yardım eder; Gemini CLI'ın sana ne sıklıkla ihtiyaç duyduğunu da azaltabilirsin. general.defaultApprovalMode değeri default (sorar), auto_edit (düzenlemeler onaylanır, geri kalan her şey sorar) veya plan (salt okunur) olabilir. Shift+Tab bunlar arasında geçiş yapar. tools.allowed onay iletişim kutusunu atlayan araçları listeler (örneğin run_shell_command(git)), tools.confirmationRequired ise her zaman sorması gereken araçları listeler.
YOLO modu (--yolo veya Ctrl+Y) her şeyi onaylar ve sandbox'ı varsayılan olarak açar. Sadece komut satırından etkinleştirilebilir; makineyi paylaşıyorsan security.disableYoloMode onu kalıcı olarak kapatır.
Pet Island'ın yeri
Bir bip sesi bir şey olduğunu söyler; hangi terminal olduğunu veya Gemini'nin ne çalıştırmak istediğini söylemez. Pet Island, Gemini CLI'ı diğer ajanlarının yanında ekranının üstündeki küçük bir adaya koyar: ne zaman çalıştığını, ne zaman onayını beklediğini ve ne zaman bittiğini görürsün; doğru terminale geçmek için tek tık yeter.
Gemini CLI'da onayın kendisi yine Gemini içinde gerçekleşir. Pet Island isteği gösterir ve seni oraya götürür, ama Gemini'nin araçlarını senin yerine onaylamaz. (Buna karşılık Claude Code ve Codex isteklerine doğrudan adadan cevap verilebilir.)
SSS
Gemini CLI'ın bildirimleri var mı?
Evet, varsayılan olarak kapalı olan deneysel bir özellik olarak. ~/.gemini/settings.json dosyasında general.enableNotifications değerini true yap veya /settings → General → Enable Notifications yolunu kullan.
Gemini CLI Windows'ta neden sadece bip sesi çıkarıyor?
Auto modunda Gemini CLI'ın kodu Windows Terminal'e ve VS Code terminaline sadece terminal zilini gönderir. Windows Terminal'in bellStyle ayarı, o zilin ses mi çalacağını, görev çubuğunu mu yanıp söndüreceğini yoksa ikisini birden mi yapacağını belirler.
Bir Gemini CLI hook'u bir aracı otomatik olarak onaylayabilir mi?
Notification hook'u onaylayamaz. Dokümanlar onun uyarıları engelleyemeyeceğini veya izin veremeyeceğini söylüyor. Araçları önceden onaylamak için bunun yerine tools.allowed ayarını veya politika motorunu (policy engine) kullan.
Gemini CLI bittiğinde hangi hook tetiklenir?
AfterAgent. Modelin son cevabından sonra her turda bir kez tetiklenir.
Hook'ları her projede çalışsınlar diye nereye koymalıyım?
Kullanıcı ayarlarına, yani ~/.gemini/settings.json dosyasına. Güvenilmeyen klasörlerde proje ayarları yok sayılır.
Kaynaklar
Bu sayfadaki her ayar ve davranış 26 Ekim 2026 tarihinde bu sayfalarla karşılaştırılarak kontrol edildi. Ajanlar hızlı değişir; bir şey artık uyuşmuyorsa geçerli olan resmi sayfadır.
- Gemini CLI dokümanları: Notifications (deneysel)
- Gemini CLI dokümanları: Hooks
- Gemini CLI dokümanları: Hooks reference
- Gemini CLI dokümanları: Writing hooks (PowerShell örneği)
- Gemini CLI dokümanları: Configuration reference
- Gemini CLI dokümanları: Trusted folders
- Gemini CLI kaynak kodu: terminalNotifications.ts
- Gemini CLI issue #4310: Sesli bildirimler
- Gemini CLI tartışması #13313: Gemini bittiğinde ses çalsın
- Microsoft Learn: Windows Terminal profil ayarları (bellStyle, bellSound)
- Microsoft Learn: Console.Beep