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.
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.
- Ç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.
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.
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.
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'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.
Ö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.
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.
Ö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.
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:
Depoda bir
node --version
.nvmrcdosyası var (24); nvm kullanıyorsanız proje dizinindenvm useyeterlidir. - 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.
- 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 - Bağımlılıkları kurun:
Bu adım normal npm bağımlılıklarını ve yukarıda bahsedilen platforma özgü
npm install
claudeCLI ikili dosyasını kurar;postinstallscript'i de otomatik olarakprisma generate'i çalıştırır — ayrıca bir şey yapmanız gerekmez. - Yerel SQLite veritabanınızı oluşturun:
Bu,
npx prisma db push
prisma/schema.prisma'daki şemadanprisma/dev.dbdosyasını oluşturur..envdosyası zatenDATABASE_URL="file:./dev.db"ile gelir (bkz..env.example) — değiştirmenize gerek yok. - Geliştirme sunucusunu başlatın:
npm run dev
http://localhost:3000adresini 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.
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.
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ığı:
- İlk açılışta, SDK'nın kendisinin bir platforma özgü opsiyonel bağımlılık
olarak paketlediği aynı yerel
claudeikili dosyasını çalıştırır veclaude auth status --jsonsorar. - Giriş yapılmamışsa,
claude auth login --claudeaikomutunu 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. - Alternatif olarak, "bunun yerine uzun ömürlü bir jeton kullan" seçeneği
claude setup-token'ı çalıştırır; bu da taşınabilir birCLAUDE_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.
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.
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
npm run typecheck
npm run testBirim 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ı.
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.
Umut Yaldız — github.com/umutyaldiz
Depo: github.com/umutyaldiz/panoptes
MIT © Umut Yaldız — tam metin için LICENSE dosyasına bakın.
Ajan ağacı / dinamik liste / YZ taslak tasarımı bu projeye özgündür.


