ua-fallback
Bazı siteler curl ve wget isteklerini sırf bot gibi göründükleri için geri çevirir. Model de bu durumda gayet sağlam bir URL'den vazgeçip başka yol aramaya başlar. Bu mod tam o anı yakalar: istek bir bot filtresine takılınca modele bir kez browser User-Agent ile tekrar denemesini söyler, hangi iki durumda bunu yapmaması gerektiğini de hatırlatır.
Ne yapar
Bash tool'unu izler. Her
curlya dawgetçağrısından sonra iki çıktı stream'ine de bakar ve bot filtrelerinin döndüğü403ya da429status'unu arar. Bu araçların status'u yazdığı biçimlerin hepsini tanır:HTTP/2 403,403 Forbidden,curl: (22) ... error: 403,status: 403,429 Too Many Requests,Rate limit.Komut User-Agent'ı zaten kendisi veriyorsa (
-A,--user-agent,-Uya da birUser-Agentheader'ı) sesini çıkarmaz. O öneri zaten denenmiş demektir.Model tool'un sonucunun hemen ardından şu notu okur:
ua-fallback: example.com answered 403, which is an automated-client filter, not a broken URL. Retry the same request once with a browser User-Agent: -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36'. If that is refused too, one of OpenAI File Downloader, XaiImageApiFetch/1.0, Claude-User may pass. Do not do this while testing an application, an API, an auth flow or a client of your own: a changed User-Agent hides the access-control or compatibility problem you are measuring. A reply you get with another User-Agent is not proof the resource works for ordinary clients, and it is never a way around authentication or a permission.Son iki cümle her notta bilerek var. Tekrar deneme yalnız herkese açık içerik için. Kendi uygulamanı test ediyorsan istek gerçek client'ıyla gitmeli; ödünç bir User-Agent'la gelen başarılı cevap, sıradan client'ların ne gördüğü hakkında hiçbir şey söylemez.
Aynı anda transcript'e tek bir satır düşer. Talimat yoktur, yalnız bulgu:
ua-fallback: example.com answered 403; a browser User-Agent may passsidebar açıksa bulgu onun stream'ine gider, transcript temiz kalır. İlk satırda host ve status görünür (
429sarı,403kırmızı, tekrar deneme ipucu soluk). Altındaki soluk satırdanot while testing your own app, auth flow or clientyazar. Sidebar yoksa satır yukarıdaki gibi transcript'e düşer.Her host bir session'da yalnız bir kez konuşur. Aynı host'tan ikinci ret sessizce geçer, böylece üst üste denemeler context'i şişirmez.
Komut
/ua-fallback açık mı kapalı mı ve bu session'da reddeden host'lar
/ua-fallback on | off açar ya da kapatır; kurulumdan sonra açıktır
Kurulum
claude plugin marketplace add KilimcininKorOglu/claude-code-mods
claude plugin install ua-fallback@kilimcininkoroglu-mods
Function hook'lar henüz early access aşamasında. Claude Code 2.1.288 ve üzerinde varsayılan olarak yüklenir, açılacak bir ayar yok.
Kurulumdan sonra
- Claude Code'u yeniden başlat.
Nereye uzanır
Claude Code 2.1.283 üzerinde claude plugin validate ile doğrulandı:
❯ ./register.ts hooks: session.start, command.run{command=ua-fallback}, tool.call{tool=Bash}
❯ ./register.ts calls: $.command.register, $.sidebar.set (via toPerson), $.store.get (via readSettings), $.store.set (via runCommand), $.ui.log (via toPerson)
Reach L1: yalnız session'ı okur.
1. Okur: her Bash komutunun metnini ve iki çıktı stream'ini; içlerinde bir URL ve bir status arar
2. Çalıştırır: hiçbir şey; kendisi istek atmaz, sunucu iki değil tek istek görür
3. Gönderir: tool'un sonucundan sonra modele bir not, transcript'e bir satır; makineden dışarı bir şey çıkmaz
4. Saklar: $.store içinde açık/kapalı ayarını
5. Düşman girdi: çıktı sabit status desenleriyle karşılaştırılır ve nota çıktıdan hiçbir şey kopyalanmaz; yalnız URL'nin host'u kopyalanır, User-Agent metinleri mod'un içinde sabittir
Sınırlar
- Status, komutun ekrana yazdığından okunur. Yalnız body basan sessiz bir
curl -sokunacak bir şey bırakmaz, not da gelmez. - Kendi metninde "403" geçen bir sayfa da filtrelenmiş istek gibi görünür. Not bir öneridir; response kodunu ölçmez.
- Mod komutu hiç değiştirmez, kendisi de istek atmaz. Çıktıda iz bırakmayan bir filtre bu yüzden gözden kaçar.
- Başarısız bir çağrı (
curl --failvewget403'te sıfırdan farklı exit kodu döner) hata metninden okunur; bulgu hem sana hem modele gider. Not, modelin gördüğü hata metninin arkasına eklenir; hata metni olduğu gibi kalır. - Browser User-Agent'ı
hooks/fetch.tsiçinde sabit duruyor ve zamanla eskiyor. Güncel bir browser sürümü isteyen site onu yine de reddedebilir.
Geliştirme
make install # eslint, typescript-eslint, typescript
make lint # complexity sınırı 10; aşılırsa build kırılır
make typecheck # /plugin-types çıktısı olan .claude/types/ gerekir
make validate
make test # claude plugin test