18 puan yazan junhoyeo 2025-12-23 | 1 yorum | WhatsApp'ta paylaş

TLDR: https://github.com/junhoyeo/tokscale

Arka plan

  • Bu yılın ilk yarısında çıkan Claude Code ile başlayarak OpenAI Codex CLI, Google Gemini CLI gibi çeşitli LLM sağlayıcıları agentic coding tool'ları ciddi şekilde sunmaya başladı. Buna rağmen işlerin çoğunu hâlâ elle yapıyordum
  • Ancak bir arkadaşım OpenCode kurulumunu paylaştıktan sonra bunu çok daha aktif kullanmaya başladım. Birden fazla agent'ı paralel çalıştırıp birbirlerine review yaptırdığımda ya da keşif/uygulama/doğrulama adımlarını ayırdığımda (yani ne kadar çok token kullanırsanız...) performans gözle görülür biçimde artıyor. Sonrasında arkadaşım kendi kurulumunu açık kaynak olarak yayımladı ve Oh-My-OpenCode adıyla 2.5k+ yıldız aldı (https://github.com/code-yeongyu/oh-my-opencode)
  • Arkadaşımla tanıştıktan sonraki bir ay içinde 5 milyardan fazla token kullanıp tam bir fanatik oldum (Claude Max plan hesabının haftalık kullanım limitini sonuna kadar doldurarak kullanıyorum, hatta aslında yan hesap açıp ban da yedim). Düşündüğümden az insanın agentic workflow'ları kullandığını da fark ettim

Fikrin başlangıcı

  • ccusage adlı Claude Code token kullanım takip aracını öğrendim

  • "Claude Code kullanımında dünyada 1 numara geliştirici" (Jinhyeong abi!) hakkında bir yazı okuyup, "Token kullanımında 1. olduğu nasıl biliniyor?" diye düşündüm. Arayınca ccusage'dan alınan verilerle oluşturulmuş küçük bir leaderboard sitesi olan viberanki buldum (https://github.com/sculptdotfun/viberank) (şu an hâlâ bakımı sürüyor mu bilmiyorum)

  • Ancak iki proje de OpenCode, Codex CLI (ccusage kısmen destekliyor), Gemini CLI gibi diğer istemcilerin verilerini desteklemiyordu

  • Tam o sırada token üretim miktarını GitHub Contribution Graph gibi göstermek güzel olur diye aklıma duşta bir fikir geldi. Geliştiriciler GitHub'a alışkın ve bence kendini kamçılayacak hedefler koymak için de uygun bir biçim

  • Aslında kısa sürede biraz hacky bir ürün yapıp tepki görmek ve ilgi toplamak hoşuma gidiyor (önceki yazıya bakabilirsiniz)

  • CLI/TUI biçiminde, Bun ekosisteminde npx karşılığı olan bunx ile rahatça çalıştırılabilen; API sunucusuna submit edip veriyi paylaşarak leaderboard'da adını yazdırabileceğin bir platform yapmaya karar verdim

Proje adı: Tokscale

  • Kardashev Scale'dan (https://ko.wikipedia.org/wiki/Kardashev_Skala) ilham aldım

  • Uygarlıkların teknolojik seviyesini enerji tüketimine göre sınıflandıran bir ölçek (Tip I = gezegen, II = yıldız, III = galaksi)

  • Yapay zeka çağında token'ın yeni enerji olduğunu düşünüyorum. Konsept, "planetary developer"dan "galactic code architect"e çıkan yolculuğu görselleştirmek

  • Elon Musk "Electricity is money" demişti

    • Yapay zeka ve veri merkezi çağında performansın sınırı hesaplama değil, elektrik tedarik miktarı
    • Rekabet avantajı GPU performansından çok elektrik erişimi, soğutma ve verimlilikte
  • Bunu bireysel geliştirici seviyesine indirgersek?

    • LLM API kullanırken ödediğimiz şey = token
    • Daha çok ve daha verimli token kullanan taraf daha fazla kod üretiyor
    • Token = yapay zeka çağının kişisel enerji birimi olacak
  • Yapay zeka elektriği paraya çeviren bir makineyse, agentic coding tool'lar da token'ı koda çeviren makinelerdir

  • Bu yüzden Tokscale = Token + Kardashev Scale

    • Konsept, "planetary developer"dan "galactic code architect"e çıkan yolculuğu görselleştirmek
    • Geliştiricinin yapay zekadan yararlanma düzeyini token tüketimiyle ölçmek

TUI uygulaması

  • Terminal UI'ı OpenTUI (https://github.com/sst/opentui) ile yaptım
  • OpenTUI, SST tarafından geliştirilen bir TUI framework'ü; React'in Ink'inden farklı olarak Solid.js tabanlı ve native Zig engine ile zero-flicker render sunuyor (yakın zamanda OpenCode ile
  • 4 görünüm (Overview, Models, Daily, Stats) + klavye/fare navigasyonu
  • Contribution graph'a uygulanabilen 9 renk teması: Green, Halloween, Teal, Blue, Pink, Purple, Orange, Monochrome, YlGnBu (bunlar GitHub contribution graph topluluğunun ürettiği temalar)
  • Grafikler Unicode blok karakterleriyle (▁▂▃▄▅▆▇█) render ediliyor. Modeller farklı renklerle stack edilerek gösteriliyor

Veri toplama yavaş → Rust native modülü

  • Başta JSON dosyalarını TypeScript ile parse ediyordum ama bu çok yavaştı
  • napi-rs (https://napi.rs/) kullanarak Rust native koda geçtim
  • Yaklaşık 8,5 kat performans artışı elde ettim:
  • Bellek kullanımı da yaklaşık %45 azaldı (streaming parse, zero-copy string işleme)
  • OpenTUI'ye uyacak şekilde bunx desteği eklendi ve npx bırakıldı. Bun runtime zorunlu hâle geldi
    • TypeScript CLI içinde Bun.spawn kullanılarak native Rust modülüyle haberleşen bir subprocess çalışıyor; stdin/stdout üzerinden JSON veri alışverişi yapılıyor
  • (OpenCode'u çok fazla kullandığım için bu bile benim makinede yavaşlamış durumda T_T)

Veri retention sorunu

  • Agentic coding tool'lar tüm kayıtları session olarak adlandırıyor ve bunları . ile başlayan gizli dizinlerde saklıyor
    • Claude Code: ~/.claude/projects/ (JSONL)
    • OpenCode: ~/.local/share/opencode/storage/message/ (ayrı JSON dosyaları)
    • Codex CLI: ~/.codex/sessions/ (event tabanlı JSONL)
    • Gemini CLI: ~/.gemini/tmp/*/chats/ (JSON)
  • Claude Code ile Gemini CLI'da varsayılan 30 günlük retention süresi var; süre dolunca session verileri siliniyor
  • Bunu öğrenince buna üzülen çok kişi oldu. README'ye devre dışı bırakma yöntemini ayrıntılı şekilde yazdım
    • Claude Code: ~/.claude/settings.json içine "cleanupPeriodDays": 9999999999 ekleyin
  • OpenCode ve Codex CLI'da ise tüm session dosyaları kalıcı olarak saklanıyor (silme özelliği zaten yok)

Cursor IDE entegrasyonu

  • Şu anda artık kullanmıyorum ama bir dönem Cursor IDE kullanmıştım (bu da benim değerli verim, entegre etmek gerek)
  • Cursor, yerel session dosyaları yerine API tabanlı CSV export desteklediği için veriyi alabiliyordum
  • Geliştirici araçları üzerinden session token'ı (WorkosCursorSessionToken) varsa kimlik doğrulama yapılabildiğini öğrendim
    • Network sekmesinde cursor.com/api/* isteklerinin Cookie header'ında bulunabiliyor
    • Ya da Application → Cookies bölümünden doğrudan kopyalanabiliyor
  • Bunu temiz yönetmek için tokscale cursor login | status | logout biçiminde yaptım

GitHub entegrasyonu (OAuth)

  • Device Flow kimlik doğrulama yöntemiyle uygulandı
  • tokscale login → tarayıcı açılır → kod girilir → token verilir
  • tokscale submit ile kullanım verileri leaderboard'a yüklenir
  • Gönderilen veriler Seviye 1 doğrulamadan geçer (matematiksel tutarlılık, gelecekte tarih olmaması, tekrar tespiti vb.)

Token fiyatı hesaplama

  • LiteLLM'in fiyat veritabanından (https://github.com/BerriAI/litellm) gerçek zamanlı fiyat bilgisi alınıyor
  • 1 saat TTL ile ~/.cache/tokscale/pricing.json içine disk cache tutuluyor
  • Girdi/çıktı/cache okuma/cache yazma/reasoning token'larının hepsi ayrı ayrı hesaplanabiliyor
  • Kademeli fiyatlandırma da destekleniyor (tiered pricing, 200k token üzeri)

Wrapped 2025

  • Spotify Wrapped'dan ilham alan yıllık özet görseli üretme özelliği (yıl sonunda bekleyin)
  • tokscale wrapped çalıştırıldığında PNG görsel üretiliyor
  • Görsel render için @napi-rs/canvas (https://github.com/Brooooooklyn/canvas), SVG→PNG dönüşümü için @resvg/resvg-js (https://github.com/nicklockwood/resvg-js) kullanılıyor
  • Figtree font'u Google Fonts'tan indirilip cache'leniyor
  • İçerik: toplam token, Top 3 model, Top 3 istemci, Top 3 agent, mesaj sayısı, aktif gün sayısı, maliyet, streak, contribution graph

Mevcut darboğaz ve düşünceler

  • Veriyi her seferinde yerelden kazımak yavaş ve veritabanına yüklemek de ağır
  • Şu anda diff tabanlı incremental submission optimizasyonunu inceliyorum. Tarihe göre hash üretip sadece değişen kısmı yükleyen bir yaklaşım kullanmayı düşünüyorum (geçmiş tarih verilerinin sonradan değişebilmesine kapı açık kalsın diye)

Tüm kodu Oh-My-OpenCode yazdı

  • Gerçekten kodun neredeyse tamamını agent yazdı
  • 423'ten fazla commit, 4 dilli README (EN, KO, JA, ZH-CN) dahil
  • GitHub'a bir sürü ekran görüntüsü yükleyip güzel gösterdim (burada biraz insan dokunuşu olduğunu kabul ediyorum ama projenin tamamını yaparken IDE'yi açıp bizzat kod yazdığım sürenin 30 dakikayı bile bulmadığından eminim)

1 yorum

 
roxie 2025-12-26

Proje tamamlanana kadar LLM'e yaklaşık kaç kez komut verdiğinizi merak ediyorum