Skip to content

Repository files navigation

Panoptes

Kendi Claude Code ajan ağacınızı kurun ve yerel projelerinize karşı çalıştırın.

Umut Yaldız tarafından geliştirildi.

Yunan mitolojisinde Panoptes, yüz gözlü devdi — her şeyi gören, hep uyanık olan. Bu uygulamada tanımladığınız her alt ajan bir göz daha demek: kod tabanınızın bir kısmına odaklanan küçük bir gözlemci, bulduklarını size bildiren. Yeterince fazlasını bir araya getirip bir ağaç halinde düzenlediğinizde, projenizi her açıdan aynı anda izleyen bütün bir sistem elde edersiniz. Uygulamanın logosu, favicon'u ve masaüstü simgesi de bu yüzden hepsi aynı basit göz çizimidir.

🇬🇧 For the English version of this file, see README-en.md.


Panoptes nedir

Yerel, tek kullanıcılı bir masaüstü aracı (Next.js uygulaması, isteğe bağlı olarak Electron masaüstü uygulaması olarak paketlenebilir) ve şunları yapmanızı sağlar:

  • Kendi YZ ajan hiyerarşinizi kurun — sabit bir roster yok, elle düzenlenecek config dosyası yok. Her şey arayüz üzerinden oluşturulur ve düzenlenir.
  • Bu ağaçtaki herhangi bir ajanı bilgisayarınızdaki bir proje dizinine karşı çalıştırın, işini canlı olarak izleyin; diske herhangi bir şey yazılmadan önce plan onay kapıları devreye girer.
  • Yapılandırılmış, renk kodlu raporlar alın — ham metin yığını değil.
  • Kendi Claude Pro/Max/Team/Enterprise aboneliğinizle giriş yapın — ayrı bir hesap ya da API anahtarı faturalandırması gerekmez.

Panoptes ne değildir

  • Çok kiracılı ya da barındırılan bir servis değildir. Her kullanıcı kendi bilgisayarında, kendi yerel SQLite veritabanıyla kendi örneğini çalıştırır. Paylaşılan bir sunucu yoktur.
  • Claude Code'un yerini almaz. Claude Code'u da çalıştıran aynı SDK olan @anthropic-ai/claude-agent-sdk üzerine inşa edilmiş, tek bir iş akışına odaklanmış bir arayüzdür: bir ajan ağacı kurun, projeye karşı çalıştırın, sonuçları inceleyin.

Ana kavram: ajan ağacı

Sabit bir ajan listesi yerine, beş tür düğümden oluşan kendi ağacınızı kurarsınız — Direktör → Süpervizör → Orkestra Şefi → Operasyon → Alt Ajan. Hiçbiri zorunlu değildir; her "rol" katmanı (Direktör, Süpervizör, Orkestra Şefi) aynı zamanda kendi başına bir kök olabilir ya da bir üstteki katmanı atlayabilir:

Direktör "İnsan Kaynakları"                    ← opsiyonel, en üst seviye devreden
└── Süpervizör "Personel Operasyonları"        ← opsiyonel, sadece gruplama rolü
    └── Orkestra Şefi "İzin ve Devam Takibi"     ← devreder, kendisi asla araştırmaz
        ├── Operasyon "İzin Talepleri"              ← salt gruplama, ilgili alt ajanları barındırır
        │   ├── Alt Ajan "İzin Bakiyesi Denetleyici"     ← gerçek işi yapan
        │   └── Alt Ajan "Tarih Çakışması Bulucu"
        └── Operasyon "Giriş-Çıkış Kayıtları"
            └── Alt Ajan "Geç Kalma Tespit Edici"

Orkestra Şefi "Bordro İncelemesi"          ← ayrı, tamamen bağımsız bir ikinci ağaç
└── Operasyon "Fazla Mesai Denetimi"
    └── Alt Ajan "Fazla Mesai Hesaplayıcı"

Dikkat edilmesi gereken birkaç nokta:

  • Direktör en üst seviyede opsiyonel bir katmandır. Bir Direktör oluşturduğunuzda, Konsol'daki görev kutusu varsayılan olarak görevleri ona gönderir; Direktör de kendi Süpervizör/Orkestra Şefi ağacını okuyup görevi hangi ekiplerin gerçekten ilgilendirdiğine karar verir ve sadece onlara, tasarruflu şekilde devreder — tüm ağacı değil.
  • İstediğiniz kadar Direktör/Süpervizör/Orkestra Şefi olabilir, her biri bağımsız olarak adlandırılır, her biri isteğe bağlı olarak bir üst katmanın altında ya da tek başına bir kök olarak durabilir. Hiçbir şey sizi tek bir üst düzey ağaca zorlamaz.
  • Bir Direktör ya da Orkestra Şefi kendisi hiçbir şeyi araştırmaz. Tek aracı Agent'tır — görevi okur, kendi listesindeki hangi düğümlerin ilgili olduğuna karar verir ve devreder. Görevde gerçekten birbirinden bağımsız birden fazla iş varsa, aynı turn içinde birden fazla düğüme devreder, böylece bunlar sırayla değil paralel çalışır. Devretme zincirlenebilir: bir Direktör bir Orkestra Şefine devredebilir, o da kendi Alt Ajanlarından birine devredebilir — tek bir çalıştırma içinde.
  • Bir Direktörün ya da Orkestra Şefinin listesi her çalıştırmada canlı olarak hesaplanır, veritabanındaki kendi alt ağacından — asla statik bir config dosyasından değil. Operasyonlarından birinin altına yeni bir Alt Ajan ekleyin, bir sonraki çalıştırma bunu zaten bilir. Ajan Yönetimi ekranında, tam olarak neyin bir araya getirildiğini gösteren bir "etkin listeyi önizle" butonu vardır.
  • Sadece Direktör, Orkestra Şefi ve Alt Ajan düğümleri doğrudan çalıştırılabilir. Süpervizör ve Operasyon salt gruplamadır — ağacı organize ederler, kendileri bir iş yapmazlar.
  • Bir Alt Ajanın liste kapsamı kesinlikle kendi Orkestra Şefinin alt ağacıdır, bir Orkestra Şefinin listesi de kesinlikle kendi alt ağacındaki Alt Ajanlardır. İki bağımsız Orkestra Şefiniz varsa, biri asla yanlışlıkla diğerinin özel Alt Ajanlarına devredemez — aynı izolasyon bir Direktörün altındaki kardeş Orkestra Şefleri için de geçerlidir.

Ajan Yönetimi ekranı — Direktör, Süpervizör, Orkestra Şefi, Operasyon ve Alt Ajan içeren bir ağaç

YZ destekli ajan yazımı

Yeni bir düğüm eklediğinizde, sistem promptunu elle yazmak zorunda değilsiniz. Ne istediğinizi düz bir dille anlatın — "bu kod tabanındaki her izin talebinin, o tarihteki resmi tatillerle çakışıp çakışmadığını kontrol eden bir ajan" — ve Panoptes, Claude'dan tüm tanımı taslak olarak hazırlamasını ister: açıklama, prompt, araçlar, model, izin modu, hafıza kapsamı. Herhangi bir şey kaydedilmeden önce taslağı gözden geçirir ve düzenlersiniz; taslak oluşturma adımının kendisi asla veritabanına yazmaz. YZ'nin hiç karışmasını istemiyorsanız, "Bunun yerine elle oluştur" doğrudan boş bir forma geçer.

Yapılandırılmış rapor gösterimi

Raporlar ham bir metin yığını olarak gösterilmez. Bir ajanın çıktısı hafif bir kurala uyuyorsa (## Bölüm, **Etiket:** metin, - madde satırları — YZ tarafından taslak olarak hazırlanan promptlar bunu kullanmaya yönlendirilir), Panoptes bunu etiketin ne anlama geldiğine göre renk kodlu, etiketli bloklara ayrıştırır:

  • 🔴 gül kurusu — kök neden / hata / sorun
  • 🟡 amber — uyarı / risk / dikkat noktası
  • 🟢 zümrüt — başarı / onaylandı / çözüldü
  • varsayılan — nötr (kanıt, etki, diğer her şey)

Bu kurala uymayan raporlar öncekiyle tamamen aynı şekilde gösterilir — tek, düz bir blok, olduğu gibi. Hiçbir şey geriye gitmez.

Konsol: Direktöre görev verme

Konsol'daki görev kutusu, Claude Code'un kendi mesaj kutusuna benzeyecek şekilde tasarlanmıştır: tek bir büyüyen metin alanı, Enter ile gönderim (yeni satır için Shift+Enter), sağ altta yuvarlak bir gönder butonu. Ayrıntılı bir ajan seçici yoktur — bir Direktörünüz varsa görev varsayılan olarak ona gider, o da kendi Süpervizör/Orkestra Şefi ağacını tarayıp görevi hangi ekiplerin ilgilendirdiğine karar verir. Birden fazla Direktörünüz varsa aralarından seçim yapabilirsiniz; hiç Direktörünüz yoksa Konsol eski davranışına döner (herhangi bir kök Orkestra Şefi/Alt Ajan seçilebilir) ve size bir Direktör oluşturmanızı önerir. "Gelişmiş: farklı bir ajan seç" bağlantısı, ağacınızdaki herhangi bir düğümü elle hedeflemenize her zaman izin verir.

Konsol ekranı — karşılama mesajı, Direktöre gönderilen bir görev ve sonuç alanı

Örnek promptlar (bir Direktörünüz varken, hiçbir ajan seçmeden yazabilirsiniz):

  • "Bu projedeki tüm izin taleplerinin geçerli bir onay imzasına sahip olup olmadığını kontrol et ve bir özet rapor ver."
  • "Giriş-çıkış kayıtlarını gözden geçir ve fazla mesai hesaplamalarındaki tekrarlanan sorunları bul — ikisi de bağımsız iş, paralel çalıştır."

Oturum açtığınızda, bilinen hesap bilginizden (e-posta) türetilmiş, her sayfa yenilemede rastgele değişen bir karşılama cümlesiyle karşılanırsınız ("Merhaba, X 👋" gibi) — Panoptes'in ayrı bir "görünen isim" alanı yoktur, bu yüzden isim en iyi çaba ile e-posta adresinden türetilir.

Bir çalıştırma bittiğinde önce Sonuç kartı görürsünüz — plan onayı bekleniyorsa onay/red butonları, aksi halde asıl önemli olan nihai metin (rapor formatındaysa renkli, değilse düz metin) ve yanında bir Kopyala butonu. Ham SSE olay akışı ("Canlı Kayıt") varsayılan olarak kapalıdır; merak edenler "Canlı kaydı göster" ile araç çağrılarını, devretmeleri ve delege şeritlerini görebilir.

Zamanlı Görevler

Bazı görevleri tek seferlik bir tarihte/saatte ya da düzenli bir tekrar kalıbıyla (her gün, her hafta belirli bir günde, her ay belirli bir günde) otomatik olarak çalıştırmak isteyebilirsiniz — örneğin haftalık bir rapor. Zamanlı Görevler sekmesi tam olarak bunun için var: bir proje, bir ajan (genelde bir Direktör), bir görev metni ve bir zamanlama seçip oluşturursunuz. Uygulama açık kaldığı sürece arka planda çalışan basit bir zamanlayıcı (yaklaşık her 30 saniyede bir kontrol eder), zamanı gelen görevleri sırayla çalıştırır ve sonuçları normal Koşu Geçmişi'nde ("zamanlı" rozetiyle işaretlenmiş olarak) kaydeder.

Zamanlı Görevler ekranı — her Cuma 14:00'te çalışan bir görev

Örnek promptlar:

  • Tek seferlik: "15 Ağustos saat 09:00'da, bu projedeki bağımlılık güncellemelerini özetleyen bir rapor oluştur."
  • Her gün: "Her gün saat 08:00'de, bir önceki günün hata loglarını özetle."
  • Her hafta: "Her hafta Cuma günü saat 14:00'te, bu haftaki değişiklikleri özetleyen bir rapor oluştur."
  • Her ay: "Her ayın 1'inde, geçen ayki performans metriklerini özetle."

Önemli bir güvenlik özelliği — kasıtlı bir tasarım kararı, geçici bir kısıtlama değil: zamanlı görevler kimsenin onaylamadığı, gözetimsiz çalıştırmalardır. Bu yüzden ExitPlanMode, Write ve Edit bu çalıştırmalarda her zaman otomatik olarak reddedilir — plan onayı gerektiren bir ajanı zamanlarsanız, çalıştırma dosyaya hiçbir şey yazmadan "reddedildi" durumuyla sonuçlanır. Bu, zamanlı görevleri salt-okunur/rapor üretimi işleri için tasarım gereği güvenli kılar; gözetimsiz dosya yazma/düzenleme asla desteklenmez.


Gereksinimler

Kurulumdan önce bilgisayarınızda şunlar olmalı:

  • Node.js 24 ya da üzeri — projenin gerektirdiği minimum sürüm budur (Node 24, güncel Active LTS). Kontrol etmek için:
    node --version
    Depoda bir .nvmrc dosyası var (24); nvm kullanıyorsanız proje dizininde nvm use yeterlidir.
  • npm — Node.js ile birlikte gelir, ayrıca kurmanıza gerek yok. Node 24 ile gelen npm sürümü yeterlidir. Kontrol etmek için: npm --version.
  • Bir Claude Pro, Max, Team ya da Enterprise aboneliği — Panoptes kendi Claude hesabınızla giriş yapmanızı sağlar (bkz. aşağıdaki Kimlik Doğrulama bölümü). Ayrı bir API anahtarı ya da faturalandırma gerekmez.
  • (Opsiyonel) Git — bu depoyu klonlamak için. Kaynağı zip olarak indirdiyseniz gerekmez.

Genel (global) olarak kurmanız gereken hiçbir npm paketi yoktur. electron, electron-builder, prisma, typescript, vitest gibi her şey npm install ile projeye özel olarak (node_modules içine) kurulur; npm script'leri (npm run dev, npm run package vb.) bunları doğrudan oradan çalıştırır. npm install -g ... gerektiren hiçbir adım yoktur. Aynı şekilde, claude CLI ikili dosyasını da ayrıca kurmanıza gerek yok — @anthropic-ai/claude-agent-sdk'nin platforma özgü opsiyonel bağımlılığı olarak npm install sırasında otomatik gelir (bkz. Kimlik Doğrulama).

İşletim sistemi desteği: macOS, Linux ve Windows'ta çalışır — SDK, işletim sisteminize ve mimarinize (darwin-arm64, darwin-x64, linux-x64, linux-arm64, win32-x64, win32-arm64) uygun ikili dosyayı npm install sırasında otomatik seçer.

Başlarken

  1. Bu depoyu klonlayın (ya da zip olarak indirip açın) ve dizine girin:
    git clone https://github.com/umutyaldiz/panoptes.git panoptes
    cd panoptes
  2. Bağımlılıkları kurun:
    npm install
    Bu adım normal npm bağımlılıklarını ve yukarıda bahsedilen platforma özgü claude CLI ikili dosyasını kurar; postinstall script'i de otomatik olarak prisma generate'i çalıştırır — ayrıca bir şey yapmanız gerekmez.
  3. Yerel SQLite veritabanınızı oluşturun:
    npx prisma db push
    Bu, prisma/schema.prisma'daki şemadan prisma/dev.db dosyasını oluşturur. .env dosyası zaten DATABASE_URL="file:./dev.db" ile gelir (bkz. .env.example) — değiştirmenize gerek yok.
  4. Geliştirme sunucusunu başlatın:
    npm run dev
  5. http://localhost:3000 adresini açın. Önce bir "Claude ile Giriş Yap" ekranı göreceksiniz — aşağıdaki Kimlik Doğrulama bölümüne bakın.

Ajan Yönetimi sekmesi ağacınızı kurduğunuz yerdir. Konsol sekmesi ise bir proje dizini seçtiğiniz ve ağacınıza (varsayılan olarak Direktörünüze) bir görev yazdığınız yerdir. Zamanlı Görevler sekmesi tek seferlik ya da tekrarlayan, arka planda otomatik çalışan görevler tanımladığınız yerdir.

Sorun mu yaşıyorsunuz? npm run typecheck ve npm run test her ikisi de hatasız çalışmalı; biri başarısız olursa Node sürümünüzün yukarıdaki gereksinimi karşıladığından ve npm install'ın sonuna kadar (hatasız) tamamlandığından emin olun.

Dil

Arayüz varsayılan olarak Türkçe'dir ve gezinme çubuğunun sağ üstündeki TR / EN anahtarıyla (giriş ekranında da mevcuttur) istediğiniz zaman İngilizce'ye geçirilebilir. Seçim tarayıcıda (localStorage) hatırlanır ve sayfa yenilenmeden hemen uygulanır. Her etiket, placeholder, buton ve kayıt mesajı çevrilidir — YZ taslak sihirbazı da dahil, o da Claude'dan taslağını hazırladığı ajanın isim/açıklama/promptunu o an seçili olan dilde yazmasını ister.


Kimlik doğrulama

Bu konuda net olmakta fayda var, çünkü burada fazla söz vermek kolay.

Bu uygulamada özel bir "Claude ile Giriş Yap" OAuth uygulaması yoktur, SDK'nın içinde gizli bir tane de yoktur — @anthropic-ai/claude-agent-sdk, bir tarayıcı OAuth akışı başlatıp bir callback almak için genel bir API sunmaz. Panoptes'in gerçekte yaptığı:

  1. İlk açılışta, SDK'nın kendisinin bir platforma özgü opsiyonel bağımlılık olarak paketlediği aynı yerel claude ikili dosyasını çalıştırır ve claude auth status --json sorar.
  2. Giriş yapılmamışsa, claude auth login --claudeai komutunu bir alt süreç olarak çalıştırır. Bu CLI komutu tarayıcınızı kendisi açar ve yetkilendirme URL'sini yazdırır — Panoptes sadece çıktısını giriş ekranına akıtır ve durum "giriş yapıldı"ya dönene kadar sorgular. Bu kod tabanında hiçbir yerde özel bir redirect/callback rotası yoktur.
  3. Alternatif olarak, "bunun yerine uzun ömürlü bir jeton kullan" seçeneği claude setup-token'ı çalıştırır; bu da taşınabilir bir CLAUDE_CODE_OAUTH_TOKEN üretir (Anthropic tarafından sadece çıkarım (inference) kapsamlı olarak belgelenmiştir) — Panoptes'i etkileşimli bir tarayıcısı olmayan bir yerde çalıştıracaksanız kullanışlıdır.

Kimlik bilgileriniz bu uygulamanın kendi kodu tarafından hiçbir zaman işlenmez, saklanmaz ya da iletilmez. Bunlar claude CLI'nin her zaman koyduğu yerde yaşar — ~/.claude/.credentials.json (ya da $CLAUDE_CONFIG_DIR/.credentials.json). Bu dosyada zaten geçerli bir oturum varsa (örn. bu makinede zaten Claude Code kullanıyorsanız), Panoptes bunu otomatik olarak alır — giriş ekranı hiç görünmez.

Kullanım/hız sınırı gösterimi (sağ üstteki hesap rozeti, "Kullanım" açılır penceresi) Query.usage_EXPERIMENTAL_MAY_CHANGE_DO_NOT_RELY_ON_THIS_API_YET() metodunu çağırır — Anthropic'in metoda verdiği ismin kendisi ne kadar kararlı olduğunu söylüyor. Gösterilen sayıları en iyi çaba (best-effort) olarak değerlendirin. Sadece talep üzerine (açılır pencereyi açtığınızda) çekilir, arka planda asla otomatik sorgulanmaz, çünkü gerçek, küçük de olsa faturalandırılan bir istektir.


Masaüstü uygulaması (Electron)

npm run electron:dev     # geliştirme modu — `next dev` + Electron'u birlikte çalıştırır
npm run package          # gerçek bir kurulum dosyası oluşturur (mac/.dmg, win/nsis, linux/AppImage)

npm run package şu adımları sırayla çalıştırır: next build (output: "standalone" ile) → electron/main.ts'i derler → statik varlıkları ve taze, boş, şeması uygulanmış bir SQLite şablonunu resources/ içine hazırlar → electron-builder'ı çalıştırır.

Paketlenmiş uygulama, standalone Next.js sunucusunu boş bir yerel port üzerinde ayrı bir alt süreç olarak başlatır, /api/health'i bekler, sonra ona işaret eden bir pencere açar. SQLite veritabanı işletim sisteminizin uygulama verisi dizini altında yaşar (örn. macOS'ta ~/Library/Application Support/Panoptes) — asla salt-okunur uygulama paketi içinde değil — ve ilk açılışta paketlenmiş şablondan oluşturulur.


Proje yapısı

src/
  instrumentation.ts       # Next.js sunucu-başlangıcı kancası — zamanlayıcıyı başlatır
  app/
    page.tsx              # Konsol — proje seç, Direktöre (veya seçtiğiniz ajana) görev yaz
    agents/page.tsx        # Ajan Yönetimi — ağacı kur/düzenle
    scheduled/page.tsx      # Zamanlı Görevler — tek seferlik/tekrarlayan görevler
    login/page.tsx          # Giriş ekranı
    api/
      run/                # SSE çalıştırma uç noktası + plan onay uç noktası
      agent-nodes/         # Ağaç CRUD + YZ taslak + liste önizleme
      scheduled-tasks/      # Zamanlı görev CRUD + "şimdi çalıştır"
      projects/            # Proje dizini CRUD
      auth/                # status / login / logout / usage
  components/
    report/                # Yapılandırılmış, renk kodlu rapor gösterimi
    agent-tree/             # Ağaç tarayıcı, düğüm düzenleyici, YZ taslak sihirbazı
  lib/
    agentNode.ts            # DB tabanlı ajan yükleme + dinamik liste oluşturma (çok seviyeli devretme dahil)
    agentDraft.ts            # YZ destekli taslak meta-ajanı
    schedule.ts              # Zamanlama hesaplama mantığı (saf fonksiyon, birim testli)
    scheduler.ts             # Arka plan zamanlayıcı döngüsü (~30sn'de bir kontrol)
    runAgentHeadless.ts       # Gözetimsiz çalıştırma — plan onayı/yazma her zaman reddedilir
    auth/                   # claude CLI sarmalayıcı + kullanım/hesap özeti
    i18n/                   # Türkçe/İngilizce sözlük + dil bağlamı
    runHistory.ts, runRegistry.ts, prisma.ts
electron/
  main.ts, preload.ts        # Electron ana süreci + paketleme
prisma/
  schema.prisma             # AgentNode (kendine referans veren ağaç), Project, Run, ScheduledTask

Testler

npm run typecheck
npm run test

Birim testleri saf mantığı kapsar: ajan ağacı için üst/tür doğrulama grameri (Direktör dahil), AgentNode → SDK AgentDefinition eşlemesi, çok seviyeli dinamik liste oluşturma, zamanlama hesaplama (schedule.ts) ve rapor ayrıştırma/ton sınıflandırması.

Katkıda bulunma

Issue ve PR'lar memnuniyetle karşılanır. Bu küçük, odaklanmış bir araç — lütfen değişiklikleri yukarıdaki "kendi ağacınızı siz kurarsınız, biz sabit bir tane sunmayız" felsefesiyle uyumlu tutun.

Yazar

Umut Yaldız — github.com/umutyaldiz

Depo: github.com/umutyaldiz/panoptes

Lisans

MIT © Umut Yaldız — tam metin için LICENSE dosyasına bakın.

Teşekkürler

Ajan ağacı / dinamik liste / YZ taslak tasarımı bu projeye özgündür.

About

Panoptes — build your own tree of Claude Code agents and run them against your local projects.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages