Kut
Kut
Türkçe · English
Kişisel ilişki ağın, yalnız senin bilgisayarında. Tanıdığın insanları fotoğraflı bir haritada gör, her görüşmeden sonra tek cümle not düş, kimi ihmal ettiğini ve bu hafta kime yazman gerektiğini hatırla. Hesap yok, bulut yok; verin düz Markdown dosyaları olarak diskinde durur.
Tanıtım sayfası: koraykutlu.github.io/kut · İndir: son sürüm

Kut (formerly "Ağım") is a local, private personal-network app: a photo map of the people you know, contact log, promises, introduction paths and a weekly "who should I reach out to" digest. Python 3 standard library, bound to
127.0.0.1, no accounts, no cloud, plain Markdown data. Interface in Turkish and English (⚙ Settings → Dil · Language). Full English README: README.en.md. Licence: MIT.
Arayüz Türkçe ve İngilizce: varsayılan Türkçe; ⚙ Ayarlar → Dil · Language ile değişir. Notların ve kişi dosyaların değişmez.
Bu README'deki tüm ekran görüntüleri ve GIF (v1.1 arayüzü), demo/demo_veri.py'nin ürettiği tamamen kurgusal verilerle (merkezdeki kişi "Deniz Demo"), içe aktarma örnekleri demo/ornek/ altındaki kurgusal dosyalarla ve uygulama içi "Deniz'in salısı" demosuyla çekilmiştir; gerçek kişi yoktur.
İçindekiler
Neler yapar · Gizlilik · Kurulum · Demo verisiyle deneme · Kullanım ayrıntıları · Okul bağdaştırıcısı ekleme · Testler · Lisans
Related MCP server: Obsidian Readonly MCP
Neler yapar
Ağ haritası
Merkezde sen, çevrende tanıdıkların. Renk kişinin türünü (akademi, iş, yakın, çevre, etkinlik, finans, siyaset), halka yakınlığı gösterir;
bağlar arkadaşlık, mentorluk, yöneticilik, iş ortaklığı, akrabalık, rekabet ya da gerginlik gibi tiplerle çizilir.
Sol menüdeki Dikkat listesi bağlardan olası çıkar çatışmalarını işaretler (ör. rakip firmadaki bir tanıdık, gergin bir üçgen).
Ağın büyüyünce (48+ kişi) harita kendini düzenler: yakınlık eş merkezli halkalar (güçlü içte), tür açısal dilimler ("Akademi · 42"), yerler her açılışta aynıdır; adlar yakınlaştıkça belirir ve çakışmaz,
kişi–kişi bağları soluktur ve bir kişinin üstüne gelince ya da onu seçince onun komşulukları öne çıkar. Sürüklediğin kişi yerinde kalır; ↺ düğmesi hepsini yerine döndürür. Dilime tıklayınca oraya yaklaşır.
Az kişili ağda (47'ye kadar) eski sıcak, kuvvet tabanlı görünüm sürer. Kalabalık ağı denemek için py -3 demo/kalabalik_veri.py --kisi 400 --hedef KLASÖR (kurgusal adlar).

Kişi kartı ve temas ritmi
Her kişi bir Markdown dosyasıdır: kurum, rol, "neden önemli", "ne verebilirim", sonraki adım ve tarihi. Görüşme sonrası tek cümlelik temas eklenir; son temas, görüşme sıklığı beyanın ve yakınlığa göre ihmal eşiği (yakınlık 3: 14 gün, 2: 30, 1: 60) hesaplanır. Altı ilişki puanı (sıcaklık, derinlik, karşılıklılık, süreklilik, köprü, ortak zemin) ve isteğe bağlı özellik puanları (uzmanlık, destek, güvenilirlik...) kayıtlardan hesaplanır, "Puanlar neye göre?" bölümünde ölçütleri görünür.
Profil ve özellikler | Temaslar ve zaman çizelgesi |
|
|
Sözler
Bir kişiye verdiğin ya da ondan aldığın söz ("Ayşe'ye kitabı göndereceğim", "Mehmet bana staj ilanını yollayacak") kişi kartındaki Sözler sekmesinde tutulur:
yön, metin, isteğe bağlı son tarih; Tamamla ya da İptal. Kaynak, kişi dosyasındaki ## Sözler bölümüdür:
- [ ] 2026-10-13 · ben → o · kitabı göndermek (son: 2026-10-17) (ben → o = sen verdin, o → ben = o verdi; tamamlanan [x] ve (tamam: GGG), iptal [-] ve (iptal: GGG);
iptal satırı silinmez, yazımdan önce arsiv/surum/'a kopya alınır). Gecikmiş ya da son tarihi 7 gün içinde olan sözler Bu hafta listesinde "söz" etiketiyle ve
"verdiğin söz: 2 gün gecikti" gibi görünür; Pusula hamleleriyle karışmaz.

Kut'a sor'da "Ayşe'ye kitabı cuma göndereceğim" yazarsan Kut kişiyi, yönü, metni ve tarihi (yarın, cuma, haftaya, ay sonu, 3 gün sonra, 17 Ekim...) yerelde ayrıştırır ve "Ayşe'ye söz olarak ekleyeyim mi? (son: 16.10)" diye sorar; sen onaylamadan hiçbir şey yazılmaz. Soru, olumsuz, geçmiş ve koşullu cümleler (ve belirsiz ad) öneri üretmez. Sözler kişi dosyasının parçasıdır, yani uzak modele yalnız kapıdan geçerek gider; kişi 🔒 Bu kişi yapay zekâya gönderilmez ise hiç gitmez.
Bu hafta
Tarihi gelen sonraki adımlar, ihmal edilenler ve gecikmiş/yaklaşan sözler tek listede; bir tıkla haritada yalnız onlar öne çıkar. Hariç listesindeki kişiler hiçbir öneriye girmez.

Nasıl ulaşırım? Tanıştırma yolu
Birine ulaşmak istediğinde (bir hoca, bir şirketteki biri, bir alandaki herhangi biri) kişi kartındaki ↗ Nasıl ulaşırım? düğmesi ağındaki en sıcak yolu bulur: kim kimi tanıyor, ilk adımı kim atar, ne yazacaksın. Sağ panelde zincir (Sen → Baran → Selin Hoca), her bağın gücü, gerekçe ("Baran ile yakınsın; son temas 3 gün önce"), dikkat edilecekler ("Baran ile 90 gündür konuşmadın; tanıştırma istemeden önce bağı ısıt") ve kopyalanabilir bir mesaj taslağı görünür; haritada yol öne çıkar, kalanı soluklaşır. Amaç alanı taslağı yeniden yazar, Bu adımı takip et öneriyi Pusula → Sonuçlar'a kaydeder. Kişi adı yerine kurum ya da alanla da arayabilirsin (Pusula → Ulaş: «Şişecam», «finans»). Hesap tamamen yereldir; hariç listendeki kişiler yola hiç girmez.
Görüşme brifingi
Birini aramadan ya da buluşmadan önce kartındaki Brifing tek sayfa hazırlar: seninle ilişkisi, son konuşmalar, açık sözlerin (gecikmiş olan başta), sonraki adım, ortak tanıdıklar, görüşmede açabileceğin konular ve Kut'un bu kişi için daha önce önerdikleri. Markdown olarak kopyalanır ya da yalnız brifing yazdırılır.
Kut sana gelir: haftalık özet ve "Nasıl geçti?"
Kut her hafta ilk açıldığında, söyleyecek bir şeyi varsa, bir özet gösterir: bu hafta ilgilenmen gereken en çok üç kişi (neden, tek somut adım, yazmaya hazır taslak) ve söz verdiklerin. Yaptım / Ertele / Atla der, birkaç gün sonra işe yaradı mı? diye sorar; kararına göre öneriler ayarlanır (iki kez atladığın kişiyi dört hafta rahat bırakır, iki kez işe yaramayan yolun yerine başka bir yol ister). Temas olarak kaydet kutusu kişinin temas geçmişine satır ekler.
Özete sol paneldeki Bu hafta → Haftanın özeti'nden her zaman dönebilirsin. Kayıtlar veri/sonuclar.md (okunur tablo, elle de düzenlenir) ve veri/ozet/ altındadır; son 8 haftanın sayıları Pusula → Sonuçlar'da.
Kut kapalıyken de haber verir (isteğe bağlı)
⚙ Ayarlar → Kut sana gelsin açılırsa bilgisayarında zamanlanmış bir görev kurulur (Windows Görev Zamanlayıcı, macOS launchd, Linux systemd) ve haftada bir (ya da her sabah, yalnız o gün bir şey varsa) sistem bildirimi gösterir. Varsayılan kapalıdır, kapatınca görev kaldırılır. Bildirim yalnız sayı taşır («Bu hafta 3 kişi ve 1 söz seni bekliyor»); adlar için ayrı bir anahtar vardır ve uyarısı okunmalıdır: adlar kilit ekranında ve bildirim merkezinde görünebilir, Kut'un PIN kilidini aşar. Not, söz ya da taslak metni bildirime hiç girmez. Bu özellikler ağa çıkmaz.
Çıkarım onay kuyruğu ("Asistan soruyor")
Asistanın (yapay zekâ) kişiler hakkındaki çıkarımları (ilişki özeti, etiket, puan, bağ, kurum/rol, sorular) sen onaylamadıkça kişi dosyasına yazılmaz.
Her biri için Doğru / Düzelt / Yanlış dersin; reddedilen çıkarım tekrar önerilmez. Senin doğrudan söylediğin (görüş, görüşme sıklığı)
çıkarımdan önce gelir ve onu ezmez. Kural motoru (ag_tutarlilik.py, model yok) bağlamla çelişen önerileri silmeden kapatır.
Pusula: hedefler, keşif, strateji
Hedeflerini (başlık, tür, son tarih, öncelik, başarı ölçütü, konu kelimeleri) yazarsın; ilerleme satırı eklenir, tamamlanır, arşivlenir.
Keşfet sekmeleri herkese açık kaynakları (TBMM vekil faaliyetleri, schema.org etkinlik sayfaları) hedeflerinin konu kelimeleriyle eşleştirir;
"Ağa ekle" demeden kimse ağına girmez. Vekil verisi (Vekilpedia) ve etkinlik taraması yeni kurulumda kapalıdır; ⚙ Ayarlar → Kaynaklar'dan açılır (ya da ayarlar.json → kesif.vekilpedia / kesif.etkinlik: true). Eski kurulumlar, daha önce veri indirdiyse, özelliği kaybetmesin diye açık kalır. Stratejik okuma hedefleri ve ağını bir modele okutup kanıtlı, hedefe bağlı "görmediğin hamleler" üretir.
Hamleler | Hedefler |
|
|
Ekran görüntülerindeki "Stratejik okuma" içeriği demo veri üreticisinin yazdığı örnek metindir; model çağrılmamıştır.
Pusula her zaman göz önündedir: üst çubukta vurgulu ◎ Pusula düğmesi (kısayol P) ve sol panelin en üstünde bir Pusula kartı durur. Kart aktif hedeflerini, bu haftanın sıradaki hamlesini (strateji okumasından ilk hamle, ilk adımı ve ilk kanıtıyla) ve tek tıkla Pusula'yı açan düğmeyi gösterir. Hedefin yoksa İlk hedefini yaz, strateji henüz çıkarılmadıysa Bu haftanın stratejisini çıkar der; ikincisi seçili yapay zekâ sağlayıcısına gittiği için başlatmadan önce onay ister (sağlayıcı seçimi, kişi kapısı ve sır süzgeci aynen geçerli). Pusula penceresi yalnız Hamleler, Hedefler, Keşfet · Vekiller, Keşfet · Etkinlikler sekmelerini taşır; kaynak, okul, güncelleme, ses ve kasa kartları ⚙ Ayarlar penceresindedir.
İlk açılış: kurulum ve tanıtım
İlk PIN belirlendikten sonra Kut bir kez bir sihirbaz açar; önce kurulumu yapar, sonra özellikleri tanıtır. Hoş geldin adımı seni profilindeki ilk adla karşılar ve günün saatine göre kısa bir cümle seçer; Önce bir örnekle göster düğmesi kurgusal bir ağı oynatır (Demo verisiyle deneme). Kurulum adımlarının her biri atlanabilir, zaten bilinenler (kayıtlı ad ve fotoğraf, seçili sağlayıcı, kurulu ses, alınmış kasa kişileri, okul ve dersler) otomatik atlanır; Hazır olanları da gez hepsini gösterir: (1) adın ve kim olduğun (Profilim alanları), (2) yapay zekâ sağlayıcısı (Claude Code önerilir; Codex/Gemini seçilirse gizlilik uyarısı ve onay istenir, kurulu olmayanlar soluk), (3) sesli iletişim (mevcut Whisper + EMA Lightning kurulum sorusu; Şimdi değil seçilebilir), (4) kasa bağlıysa Kasadan kişileri al (kasa yoksa bu adım görünmez), (5) okul ve dersler ile İçe aktar penceresine yönlendirme. Ardından sahne ışığı turu başlar: tanıtılan öğe kendi renginde ve tam parlak kalır, gerisi koyu bir örtüyle gölgelenir; yanındaki kartta başlık, kısa açıklama, Geri / İleri / Turu bitir ve adım sayacı vardır (klavye: ← → Esc; prefers-reduced-motion açıksa geçişler kapanır). Sıra: ağ haritası, kişi kartı, Sözler, "Bu kişi yapay zekâya gönderilmez" anahtarı, Doğrula ("Asistan soruyor"), Bu hafta, Kut'a sor ve sesli giriş, Pusula, İçe aktar, Ayarlar, Kilit. Hedef ekranda yoksa (boş ağ, dar pencere) adım sessizce atlanır; kapalı bir panel tur için açılır ve sonra eski haline döner. Tamamlanma ayarlarda tutulur (ayarlar.json → sihirbaz.bitti; yazan uç /api/sihirbaz: kilit + anahtar + yerel Origin). Sihirbazı kapatmak da "bitti" sayılır; ⚙ Ayarlar → Kurulum ve tanıtımı aç (ya da Yalnız özellik turu) ile istediğin zaman yeniden açarsın. Yeni tur adımı eklemek kut/ag_sablon.html içindeki TUR_ADIMLARI dizisine bir satır eklemektir (id, hedef seçici hedef, baslik, metin).
Hoş geldin adımı | Yapay zekâ sağlayıcısı adımı |
|
|
Diğer özellikler
İçe aktarma (WhatsApp, rehber, takvim, LinkedIn, ders listesi): WhatsApp sohbetini (.txt/.zip, "medya olmadan"), .vcf rehberi, takvim dışa aktarmasını (.ics), LinkedIn veri kopyasını (Connections.csv / messages.csv) ya da okulundan kopyaladığın ders listesini İçe aktar penceresine bırakırsın; önce ne olacağını görürsün (önizleme hiçbir şey yazmaz), sonra onaylarsın. Mesaj içerikleri, toplantı açıklaması ve konumu saklanmaz; yalnız kim, ne zaman, hangi kanal. Ayrıntı: Kullanım.
Okul bağdaştırıcısı: profilindeki okul ve derslerden hocaları, ders saatlerini ve kadro sayfasından unvan/e-posta/özgeçmişi (kaynağıyla, yalnız boş alanlara) doldurur. Okul tanımlı değilse kapalıdır; desteklenen okullar arasından seçilir, okulun yoksa bağdaştırıcı eklenebilir (aşağıda). Profilim'e "bu dönem ISE 424, ISE 426 ve MATH 101 alıyorum" yazman yeter: dersler profiline kaydolur. Kut'a sor'da aynı cümle önce yazılmaz; sorunu cevaplar ve "ISE 424, ISE 426 ve MATH 101’i bu dönemki derslerine ekleyeyim mi?" diye sohbette onay düğmesi gösterir (soru, olumsuz ve geçmiş cümleler, ay/gün adları ve para tutarları ders sayılmaz). Onaydan sonra okul seçiliyse hocalar kendiliğinden eklenir (okul seçili değilse önce hangi okulda olduğunu sorar). Okul kaynağından eklenen hocalar yakınlık 0 ile başlar; yakınlığı yalnız sen artırırsın.
Kut'a sor (
/): "Ayşe hocayla bugün konuştum, başvurum onaylanmış, Berk'le artık haftada bir görüşüyoruz" gibi serbest metni temas, beyan, sonraki adım ve bağlara ayırıp kaydeder; her yazımdan önce kişinin eski haliveri/arsiv/surum/'e kopyalanır.PIN kilidi: açılışta PIN sorulur; kilitliyken sunucu hiçbir kişisel veri göndermez (görsel örtü değil, sunucu tarafında).
İkinci beyin köprüsü (isteğe bağlı, salt okur): bir not kasasındaki açık işleri ve kişinin geçtiği satırları gösterir; kasaya hiçbir şey yazmaz.
Yerel ses (isteğe bağlı): Whisper ile konuşmayı yazıya çevirir, EMA Lightning ile cevapları Türkçe okur; hepsi bu bilgisayarda çalışır, ses diske yazılmaz. Kurulu değilse Kut, onayınla indirmeyi teklif eder (boyutlar önceden gösterilir).
Yapay zekâ sağlayıcısı: Claude Code (önerilen), Codex CLI, Gemini CLI ya da yerel Ollama; sihirbazdan ya da Profilim → Yapay zekâ sağlayıcısı'ndan seçilir. Kut API anahtarı istemez ve saklamaz; ayrıntı ve sınırlar Gizlilik'te.
Görünüm: bu bilgisayarda çizilen WebGL gökyüzü, gündüz/gece teması; pencere ve sekme geçişlerinde kısa arayüz sesleri (⚙ Ayarlar → Arayüz sesleri, varsayılan açık, kapatılabilir).
İçe aktarma önizlemeleri (kurgusal demo/ornek/takvim.ics ve demo/ornek/linkedin-Connections.csv ile; önizleme hiçbir şey yazmaz):
Takvim (.ics) | LinkedIn (Connections.csv) |
|
|
Üst çubuktaki ⚙ Ayarlar penceresi kurulum ve tanıtımı, arayüz seslerini, isteğe bağlı dış kaynakları, okul bağdaştırıcısını, güncellemeyi ve sesli iletişimi (kasa bağlıysa kasa kartını da) tek yerde toplar:


Gizlilik
İlke: Kut yalnız senin bilgisayarında çalışır. Bulut, hesap, senkronizasyon, mobil uygulama, telemetri yok. Sunucu yalnız 127.0.0.1'de dinler
(dışarıdan erişilemez; Host/Origin denetimi yapılır) ve sayfa kapandıktan ~20 dk sonra kendiliğinden durur.
Verin veri/ klasöründe düz Markdown olarak durur ve .gitignore ile depodan dışlanmıştır; içe aktarma adayları %LOCALAPPDATA%\agim (macOS/Linux ~/.agim) altında bekler.
Kut sen açmadıkça internete çıkmaz. Yeni kurulumda hiçbir dış kaynak açık değildir. Üst çubuktaki ⚙ Ayarlar penceresi (Kaynaklar kartları), açabileceğin isteğe bağlı kaynakları, neyi nereden indirdiklerini ve açma/kapama düğmelerini tek yerde gösterir (Pusula yalnız hedef, keşif ve stratejiyi taşır):
Kaynak | Ne indirir | Nereden | Varsayılan |
TBMM / Vekilpedia | milletvekilleri, soru önergeleri, kanun teklifleri (CSV, CC BY 4.0), haftada bir | vekilpedia.com | kapalı |
Etkinlikler | yaklaşan etkinlik sayfaları (robots.txt izinli), 12 saatte bir | coderspace.io, lu.ma, eventbrite.com, devpost.com (+ seçili okulun etkinlik sayfası) | kapalı |
Okul bağdaştırıcısı | ders programı, akademik kadro sayfası (yalnız profilinde okul ve ders kodu varsa) | seçtiğin okulun herkese açık sitesi (tablo); istekler arası en az 0,5 sn | yok |
Akademik profiller | okulundan eklenen hocaların kurumu, yayın sayısı, çalışma alanları (yalnız hocanın adı sorulur; sonuç Doğrula'ya öneri olarak düşer) | api.openalex.org, pub.orcid.org | kapalı |
Ağa çıkabilen yollar. Kut'un ağa çıkabilen tüm yolları şunlardır; her biri varsayılan olarak kapalıdır ya da senin açık onayına bağlıdır, listede olmayan hiçbir yol yoktur:
Yol | Nereye | Ne zaman |
Güncelleme denetimi | api.github.com (yalnız GET, veri gönderilmez) | otomatik denetim ilk soruya Evet dersen haftada bir; düğme elle |
Ses kurulumu | PyPI (paketler), Hugging Face (modeller) | yalnız kurulum teklifine Evet dersen ( |
Okul siteleri | seçtiğin okulun herkese açık sitesi | okul seçili ve profilinde ders varsa, sen "Kaynaktan doldur" deyince |
OpenAlex / ORCID | api.openalex.org, pub.orcid.org (yalnız hocanın adı) |
|
Vekilpedia | vekilpedia.com |
|
Etkinlikler | tablodaki etkinlik siteleri |
|
MCP istemcisi | bağladığın asistanın modeli (ör. Anthropic) | yalnız Kut'u bir MCP istemcisine sen eklersen ve asistan aracı çağırınca; kişi kapısından geçer, salt okur |
Uzak model sağlayıcıları | Anthropic (Claude Code), OpenAI (Codex), Google (Gemini); yerel Ollama hiçbir yere çıkmaz | yalnız sen analiz / "Kut'a sor" / strateji kullanınca; Codex ve Gemini seçilirken ayrıca onay istenir |
Ağa çıkmayanlar. İçe aktarmalar (WhatsApp, rehber, takvim .ics, LinkedIn CSV/ZIP, yapıştırılan ders listesi) tamamen yerelde, bu bilgisayarda işlenir; yukarıdaki listede yoktur, çünkü hiçbir istek yapmazlar (takvim ve LinkedIn için hesabına bağlanma, gizli takvim adresi ya da kazıma yoktur). Kaynak dosyadaki talimatlar veridir, komut değildir. Uygulamaya girmeyen geliştirici aracı: paketleme/demo_seslendir.py, demo anlatım seslerini yayın öncesi bir kez Google Gemini TTS ile üretir (anahtar yalnız GEMINI_API_KEY ortam değişkeninden okunur, yalnız sabit demo metinleri gider, kişi verisi gitmez); Kut.exe'ye ve çalışan uygulamaya dahil değildir, Kut onu hiçbir zaman çalıştırmaz. Hazır ses dosyaları (kut/demo_ses/) uygulamayla yalnız çalınmak üzere gelir.
Ayrıntılar ve sınırları:
Herkese açık sayfalar (yukarıdaki tablo). Yalnız herkese açık, girişsiz sayfaları indirir; ağındaki hiçbir bilgi bu isteklerle gönderilmez. Önceden veri indirmiş eski kurulumlarda Vekilpedia ve Etkinlikler açık sayılır; Kaynaklar sekmesinden kapatılır.
İsteğe bağlı yapay zekâ asistanı. Analiz, "Kut'a sor" ve stratejik okuma, bilgisayarında kurulu bir yapay zekâ komut satırı aracı üzerinden bir modele gider (varsayılan ve önerilen: Claude Code,
claude -p; alternatifler aşağıda). Seçili sağlayıcı (Claude Code, Codex CLI, Gemini CLI ya da yerel Ollama) kurulu ya da çalışır değilse bu özellikler çalışmaz (düğmeler seçili sağlayıcının adıyla Türkçe bir uyarı gösterir), geri kalan her şey çalışır. Bunlar yalnız sen kullanınca çalışır; tek istisna: seçili sağlayıcı hazırsa ve onayladığın (aktif) bir hedefin varsa, son stratejik okumadan 7 gün geçince Kut açılışta okumayı kendiliğinden başlatır. Kapatmak içinayarlar.json→"otomatik_strateji": false. Modele giden her kişi verisi önce yerel kapıdan (ag_kapi.py) geçer:remote_allowed: falseolan kişi (ya da dosyası okunamayan) ne istemde ne de modele hazırlanan geçici veri kopyasında bulunur. Kişi kartındaki 🔒 Bu kişi yapay zekâya gönderilmez anahtarı bu alanı yazar/kaldırır (yazımdan önce sürüm kopyası alınır, bellekteki sohbet geçmişi hemen silinir); açıkken kartta rozet görünür, "✦ Analiz" ve belge özetleme o kişi için kapanır (belge yalnız yerelde saklanır);veri/haric.mdile eşleşen kurum/parti kişileri aynı şekilde dışarıda kalır; kopyada ayrıcaharic.md,ag.html,arsiv/, kilit ve ayar dosyaları yoktur;sır filtresi (
ag_sir.py) anahtar, token, parola gibi değerleri (kodlanmış halleriyle)[gizlendi]yapar;Claude Code'da araçları Kut kısıtlar: dosya araçları yalnız süzülmüş geçici kopyada salt-okurdur, yazma, kabuk ve web araçları kapalıdır; kopya çıkışta silinir. Codex ve Gemini'de bu garanti yoktur: bkz. aşağıdaki Araçlı sağlayıcıların sınırı.
Oturumsuz sağlayıcılarda (Codex, Gemini, Ollama) bellekteki sohbet geçmişi her turda bu kapıdan ve sır süzgecinden yeniden geçer; kilitlenince, sağlayıcı değişince ya da kapı listesi (
haric.md,remote_allowed) değişince silinir. Claude modelleriayarlar.jsoniçinden değiştirilebilir (analiz_modeli,sohbet_modeli,strateji_modeli).
Hangi yapay zekâ? Kut tek bir sağlayıcıya bağlı değil; dönemin en iyi seçeneği değişir. Profilim → Yapay zekâ sağlayıcısı (ya da
ayarlar.json→"saglayici") ile seçersin. Hepsi bilgisayarında kurulu, kendi girişini yöneten komut satırı araçlarıdır; Kut API anahtarı istemez ve saklamaz. Claude Code önerilir (Kut onunla geliştirildi ve test edildi).Sağlayıcı (
saglayici)Komut
Veri nereye gider
Notlar
claude(varsayılan, önerilen)claude -pAnthropic
Oturum devamı, salt-okur dosya araçları, PDF/görsel belge okuma tam çalışır
codexcodex execOpenAI
--sandbox read-onlyyazmayı engeller, okumayı engellemez; boş geçici klasörde çalışır; seçerken onay ister; "Kut'a sor" her turda bağlamı yeniden gönderir; PDF/görsel belge okumazgeminigemini -pGoogle
plankipi + "tüm araçlar yasak" politikası, boş geçici klasör; seçerken onay ister; "Kut'a sor" her turda bağlamı yeniden gönderir; PDF/görsel belge okumazollamayerel HTTP
127.0.0.1:11434bilgisayardan çıkmaz
Küçük modellerde sonuç zayıf olabilir; veri bütçesi kısıtlıdır
Claude dışındaki sağlayıcılara Kut dosya aracı vermez; strateji ve "Kut'a sor" için kapıdan geçmiş veri kopyasının metni istemin içinde gider. Hiçbir sağlayıcıya yazma izni verilmez.
Araçlı sağlayıcıların sınırı (Codex, Gemini): kapı yalnız Kut'un gönderdiği veriyi süzer.
Codex'te
--sandbox read-onlyyazmayı engeller ama okumayı engellemez: model kabuk komutuyla bütün diski, gerçek kişi klasörünü veharic.md'deki kişileri okuyabilir. Codex'in kabuğu ya da araçları kapatan-canahtarları resmi belgeden (github.com/openai/codex) doğrulanamadı ve Codex bu makinede kurulu olmadığı için denenemedi; bu yüzden uydurma bayrak kullanılmaz.Gemini'de
--approval-mode plansalt-okur araçları (dosya okuma, arama, web) açık bırakır. Kut ek olarak--admin-policyile*içindenykuralı verir (Gemini CLI 0.62 belgesine göre genel deny araçları modelin görüşünden de çıkarır),GEMINI_CLI_SYSTEM_SETTINGS_PATHiletools.excludeyedeği koyar ve istemdeki@yolifadelerini (Gemini'nin kendi okuyup eklediği) kaçışlar. Bu yapılandırma kaynak kod ve belgeden doğrulandı; ancak bu makinedeki Gemini hesabı oturum açamadığı için (IneligibleTierError) canlı bir model çağrısında denenemedi.İkisi de boş, geçici bir klasörde çalışır, ama bu bir sınır değil önlemdir: belgeye gömülü bir talimat kapı dışı veriyi okuyup uzağa gönderebilir. Bu yüzden Codex ya da Gemini seçilirken açık onay istenir ("Bu araçlar kendi araçlarıyla diskteki dosyaları okuyabilir; Kut'un kişi kapısı yalnız Kut'un gönderdiği veriyi süzer. Hassas ağlar için Claude Code (araçları Kut kısıtlar) ya da yerel Ollama öner."); onaysız seçim reddedilir (
POST /api/saglayici→onay: true). Kapı (ag_kapi.py) ve sır süzgeci (ag_sir.py) hangi sağlayıcı seçili olursa olsun aynen çalışır; Ollama dışındakiler "uzak" sayılır. Kurulu olmayan sağlayıcı seçilemez. Claude dışı sağlayıcılarda model adıayarlar.json→"modeller": {"codex": "...", "gemini": "...", "ollama": "..."}; boşsa aracın kendi varsayılanı (Ollama'da yüklü ilk model) kullanılır.
Sürüm denetimi (GitHub). Yalnız
api.github.com/repos/koraykutlu/kut/releases/latestadresine, sürüm bilgisini almak için bir GET gider; hiçbir veri gönderilmez. Otomatik denetim, ilk açılışta sorulan soruya Evet dersen haftada bir yapılır (ayarlar.json→guncelleme.otomatik; sormadan ve Hayır dersen asla). Ayarlar → Kaynaklar → Güncelleme var mı? düğmesi elle her zaman çalışır.Sesli iletişim kurulumu (Whisper + EMA Lightning). 🎙 ya da 🔈'a ilk dokunduğunda (ya da Ayarlar → Kaynaklar → Sesli iletişim) Kut sorar; Evet demeden hiçbir şey inmez. Evet dersen yalnız PyPI (sabit sürümlü paketler) ve Hugging Face (model dosyaları) adreslerine gidilir; ses, metin ve kişi verin gönderilmez. Kurulum bittikten sonra ses işçileri çevrimdışı çalışır. Ayrıntı: aşağıda Ses. Kurulumun güvenliği ve sınırı:
pipyalıtılmış çalışır (python -I,pip --isolated; ortamdakiPIP_INDEX_URL,PIP_EXTRA_INDEX_URL,PIP_TRUSTED_HOSTvepip.iniyok sayılır,HF_ENDPOINTaktarılmaz).ema-lightning 1.1.2venormalizer-tr 0.7.0--require-hashesile sha256'ya sabitlenir (değerler PyPI JSON API'sinden alındı). Bu iki paket 10-11 Ekim 2026'da yayımlanmış, yani çok yenidir; yayıncılarına güvenmeyi kabul edersin.torch,faster-whisper,ctranslate2ve CUDA kitaplıklarının tekerlek listesi platform başına çok büyük olduğundan yalnız sürümle sabitlenir (hash yok) ve bağımlılıkları (ör.huggingface-hub,numpy) PyPI'dan serbest sürümle gelir. Modeller Hugging Face commit sha'sına sabitlenir (revision=<sha>: EMA7a6ba1a…, Whisper small536b066…, medium08e178d…, large-v3edaa852…); depo sonradan değişse de aynı dosyalar iner. Kurulum iptal edilir ya da hata verirse yarım model indirmeleri (.incompletedahil) silinir; silinemeyen varsa mesaj bunu söyler.Senin seçimin: kendi AI ajanın. Bu klasörü bir ajanla (ör. Claude Code) açarsan ajanın okuduğu dosyalar o ajanın modeline gider; yalnız görev için gerekenleri okumasını söyle.
Kilit (ag_kilit.py): PIN düz yazılmaz (PBKDF2-SHA256, ayarlar.json → kilit); 5 yanlış denemeden sonra bekleme artar; kilitliyken tüm /api istekleri 401 döner.
Kut yeniden başlayınca, ayarlanan süre işlem yapılmayınca (varsayılan 15 dk) ya da 🔒 ile kilitlenir. Unutursan ayarlar.json'dan "kilit" anahtarını sil.
Kilit ekranı korur; diskteki Markdown dosyaları için disk şifrelemesi (BitLocker, FileVault) gerekir.
Ağına yazdığın kişiler senin notlarındır: sağlık, özel hayat, dedikodu yazma; klasörü başkasıyla paylaşma.
Kurulum
Yalnız Python 3 (standart kütüphane) yeter; harici paket yok. Ses özelliği isteğe bağlıdır: Kut onayınla Whisper / EMA ortamını kendisi kurabilir (sistemde Python 3.11–3.13 gerekir).
Windows (.exe)
Python gerekmez.
GitHub Releases sayfasından
Kut.exedosyasını indir ve çift tıkla.Windows "bilinmeyen yayımcı" (SmartScreen) uyarısı gösterirse: Daha fazla bilgi → Yine de çalıştır.
İlk açılışta bir PIN belirlersin.
Verin Belgeler\Kut klasöründe Markdown olarak durur; ayarlar ve günlükler %LOCALAPPDATA%\agim altındadır. Başka bir klasör için: Kut.exe --veri KLASÖR.
Ses (Whisper / EMA) ve yapay zekâ analizi (Claude Code) isteğe bağlıdır; ses için Kut onayınla indirme teklif eder (Kut.exe içinden pip çalışmadığı için bilgisayarında Python 3.11–3.13 olmalı; yoksa python.org/downloads adresini gösterir). Claude Code kurulu değilse ilgili düğmeler Türkçe bir uyarı gösterir, geri kalan her şey çalışır.
Kendin derlemek istersen: powershell -ExecutionPolicy Bypass -File paketleme\paketle.ps1 (çıktı build-exe\dist\Kut.exe).
Yapay zekâ ajanınla kur
Claude Code, Codex ya da benzeri bir ajanın varsa kurulumu ona yaptırabilirsin. Ajana şunu söylemen yeter:
https://github.com/koraykutlu/kut adresindeki Kut'u kur.
Ajan depodaki AGENTS.md dosyasının "Kurulum (ajan için)" bölümünü izler: Python 3.10+ var mı bakar (Windows'ta yoksa Kut.exe'yi önerir),
depoyu klonlar, kişisel verini depo dışında bir klasöre (örneğin <kasa>/notes/ag ya da ~/Documents/Kut) koyar, Windows'ta masaüstü/Başlat kısayolunu kurar,
istersen ikinci beyin kasanı salt okunur köprüyle bağlar. Dış kaynakları senin onayın olmadan açmaz, verini depoya koymaz.
Ajan kasandaki kişileri Kut'a elle taşımaz ve kişiler için yer tutucu/avatar/baş harf resmi üretmez: fotoğraf yoksa foto boş kalır, Kut tür renginde dolu kare çizer.
Kasadaki kind: person notlarını almak için Ayarlar → Kaynaklar → Kasadan kişileri al (ya da ilk açılış sihirbazının kasa adımı) kullanılır (aşağıda "İkinci beyin köprüsü").
Python ile
Python 3'ü kur (Windows: winget install Python.Python.3.12 ya da python.org, "Add to PATH" işaretli), depoyu indir/klonla, sonra:
# Windows
py -3 kut.pyw# macOS / Linux
python3 kut.pywSunucu varsayılan olarak http://127.0.0.1:47318/ adresinde açılır ve tarayıcıyı açar (--tarayicisiz ile açmaz, --port N portu değiştirir,
--veri KLASÖR başka bir veri klasörü kullanır; AGIM_PORT ortam değişkeni de portu belirler, --port önceliklidir).
Windows kısayolu:
baslatma\kur.ps1'e sağ tık → PowerShell ile çalıştır (verini başka bir klasörde tutmak için:powershell -ExecutionPolicy Bypass -File baslatma\kur.ps1 -Veri KLASÖR). Masaüstü ve Başlat menüsüne Kut kısayolu gelir; Kut, Edge/Chrome uygulama penceresinde (ayrı profil) açılır. Varsayılan tarayıcı içinayarlar.json'a"tarayici": "varsayilan"yaz.macOS: Terminal'de bir kez
chmod +x baslatma/Kut.command, sonrabaslatma/Kut.command'a çift tıkla (Python 3 gerekli:python3 --version).
İlk açılışta bir PIN belirlersin; ardından kurulum sihirbazı adını, yapay zekâ sağlayıcını ve diğer isteğe bağlı adımları sorar (hepsi atlanabilir, bkz. İlk açılış: kurulum ve tanıtım). Sonradan değiştirmek için merkezdeki kendi düğümüne tıkla → Profilimi düzenle (ad, fotoğraf, asistanının adı).
Güncelleme
Sürüm numarası ve güncelleme denetimi Ayarlar → Kaynaklar → Güncelleme kartındadır (sürüm kut/surum.py'de). Kut ilk açılışta "Güncellemeleri haftada bir denetleyeyim mi?" diye bir kez sorar; Evet dersen haftada bir GitHub'dan yalnız sürüm bilgisini alır, Hayır dersen kendiliğinden hiç bakmaz. Güncelleme var mı? düğmesi her zaman elle çalışır. Güncelleme yalnız programı değiştirir, veri klasörüne dokunmaz; önceki program geri dönüş için saklanır.
Kut.exe: Şimdi güncelle yeni
Kut.exe'yi GitHub Releases'tan indirir (en çok 50 MB; yalnız github.com ve GitHub'ın yayın CDN adreslerinden), SHA-256 sağlama toplamını doğrular (yayındakidigestalanı ya daKut.exe.sha256dosyası; toplam yoksa ya da uyuşmazsa kurmaz), eskisiniKut.prev.exeolarak yanına koyar, yenisiniKut.exeyapar ve yeniden başlatır. Önceki sürüme dön ikisini geri takas eder. Kut.exe'nin klasörüne yazılamıyorsa (ör. Program Files) elle indir.Git ile kurulum: depoyu
git fetch --tagsile günceller ve yalnız ileri sarar (git merge --ff-only, yayın etiketi). Çalışma ağacı kirliyse, yerel commit'ler ileri sarmayı engelliyorsa ya da klasörgithub.com/koraykutlu/kut'u izlemiyorsa dokunmaz, sadece yeni sürümü bildirir. Önceki commit kaydedilir; Önceki sürüme dön (git reset --hard, yalnız ağaç temizse) onu geri getirir. Elle:git pull --ff-only.Zip / kopya: yalnız bildirim ve sürüm sayfası bağlantısı; yeni dosyaları
veri/hariç üzerine kopyala.Veri göçü: bir sürüm veri biçimini değiştirirse
kut/goc.pygerekli göçü çalıştırır ve önce veri klasörünü<veri>/arsiv/goc/altına zip'ler. Şimdilik göç yoktur, hiçbir şey yazılmaz.
Yayın çıkaranlar için: kut/surum.py'deki SURUM'u artır, paketleme\paketle.ps1 çalıştır, vX.Y.Z etiketli bir GitHub Release oluştur ve build-exe\dist\Kut.exe ile Kut.exe.sha256 dosyalarının ikisini de yükle (dosya adları tam bu olmalı; etiket SURUM ile aynı). Yayın pre-release/draft olmamalı (releases/latest onları görmez).
Demo verisiyle deneme
Uygulama içi demo ("Deniz'in salısı"). Hiçbir şey kurmadan görmek için ilk açılış sihirbazının hoş geldin adımındaki ya da ⚙ Ayarlar → Kurulum ve tanıtım'daki Önce bir örnekle göster düğmesini kullan. Kurgusal bir kişinin ağında altı sahne oynar: ağ, Pusula'nın fark ettiği soğumuş bağ, Kut'a sor, söz yakalama, bağın yeniden ısınması ve kilit. Sahne ışığı turuyla aynı motoru kullanır. Senin verine ve ayar klasörüne dokunmaz: demo geçici bir klasörde ayrı bir veri kopyasıyla çalışır, kapatınca, kilit kapanınca, 45 dakika boşta kalınca ya da çıkışta bu klasör silinir. Ağa ve modele çıkmaz ("Kut'a sor" cevapları hazırdır, söz yakalama yerel kural motorudur). Anlatım sesi isteğe bağlıdır: kut/demo_ses/ altında ses dosyası varsa çalar, yoksa demo sessiz sürer.
Pusula fark etti | Söz verdin, Kut yakaladı | Bağ yeniden ısındı |
|
|
|
Kendi verini girmeden denemek (ya da ekran görüntüsü/video çekmek) için demo/demo_veri.py 31 kurgusal kişi (ikisi dolaylı), ilişkiler, bekleyen çıkarımlar,
iki hedef ve örnek bir strateji okuması üretir. Tüm adlar ve kurumlar uydurmadır; kişilerin fotoğrafı yoktur; harita onları tür renginde dolu kare ve baş harf olarak çizer.
Tarihler bugüne göre göreli üretilir, böylece "Bu hafta" listesi her zaman dolu gelir. İçe aktarmayı denemek için demo/ornek/takvim.ics ve demo/ornek/linkedin-Connections.csv kurgusal dosyalarını İçe aktar penceresine bırakabilirsin (adlar bu demo verisiyle eşleşir; tarihleri sabittir; önizleme hiçbir şey yazmaz, yazma yalnız Onayla ve yaz ile olur).
py -3 demo/demo_veri.py --hedef "$env:TEMP\kut-demo" # --hedef verilmezse geçici klasör açılır ve yolu yazdırılır
py -3 kut.pyw --veri "$env:TEMP\kut-demo" --port 47400Kendi kurulumunu etkilememesi için demoyu ayrı bir ayar klasörüyle çalıştırabilirsin (PIN ve ayarlar %LOCALAPPDATA%\agim, macOS/Linux ~/.agim altındadır):
$env:LOCALAPPDATA = "$env:TEMP\kut-demo-ayar"
py -3 kut.pyw --veri "$env:TEMP\kut-demo" --port 47400Demoda çevrimdışı kalmak ve model çağrısını kapatmak istersen, kut-demo-ayar\agim\ayarlar.json içine
{"otomatik_strateji": false, "otomatik_analiz": false, "kesif": {"etkinlik_kaynaklari": [], "vekilpedia": false}} yaz
(böylece Pusula keşfi hiçbir siteye gitmez ve model çağrısı yapılmaz). İlk açılışta kendi PIN'ini belirlersin.
Kullanım ayrıntıları
+ Kişi ekle / Düzenle: fotoğraf, isim, tür, yakınlık (0 tanımıyor · 1 yazıştık · 2 görüştük · 3 güçlü), kurum, iletişim, sonraki adım + tarihi, "neden önemli", "ne verebilirim".
Temas ekle: kişiyle her konuşmadan sonra tek cümle; son temas ve "Bu hafta" listesi buna göre güncellenir.
Senin beyanın: düzenle penceresinde "Ne sıklıkla görüşüyorsunuz?" (her gün / haftalık / aylık) ve "Senin görüşün". Kayıt tutmasan da puanlar buna göre hesaplanır; asistanın çıkarımları bunu ezmez.
Bağ kur: haritada bir kişiden diğerine Shift + sürükle (ya da kartta Bağ kur → hedefe tıkla), tipi tek tıkla seç: arkadaş, birlikte çalışıyor, mentor, yönetici, iş ortağı, akraba, partner, rakip, gerginlik.
Asistan soruyor / Doğrula: her çıkarım için Doğru / Düzelt / Yanlış; soruları da cevapla. Cevapların sonraki analizlere yön verir.
Fotoğraf: yükleyince görünecek kısmı sürükleyip yakınlaştırarak seç; mevcut fotoğrafa tıklayıp yeniden kırpabilirsin.
Sol panel: kenardaki kulp ya da
[tuşu ile gizle/aç.Özgeçmiş ve belgeler: kişinin Özgeçmiş sekmesine özgeçmiş, profil sayfası, haber, PDF ya da ekran görüntüsü bırak (ya da metni yapıştır). Asistan özetler; özet, özgeçmiş maddeleri, kurum/rol ve iletişim Doğrula'ya düşer, onaylayınca yazılır. Dosya
veri/belgeler/<kişi>/'de kalır; içerik özet için asistan modeline gider (kapıdan geçerek).Kut'a sor (alt çubuk,
/): ağına soru sor ya da bilgi yaz; art arda, birbiriyle ilgisiz kişiler hakkında yazabilirsin. Asistan bunları ayırıp ilgili kişilere temas, beyan, görüş, görüşme sıklığı, sonraki adım, iletişim bilgisi ya da bağ olarak kaydeder; yeni kişiyi açar. Senin söylediğin beyandır, doğrudan yazılır; ad belirsizse sorar. Asistanın kendi çıkarımları yine Doğrula'ya düşer.Asistanın karakteri: Profilimi düzenle → "Asistanının karakteri" (boşsa sıcak, doğrudan, meraklı; "sen" diye hitap eder).
İçe aktar: telefonda WhatsApp sohbeti/grubu → Sohbeti dışa aktar → Medya olmadan (.txt/.zip), rehber → .vcf. Dosyayı sayfaya bırak, gelen adaylardan istediklerini seç. Önce "WhatsApp'taki adın" alanını doldur. Pencerenin sekmeleri aşağıdaki dosya türlerini işler. Hepsi bu bilgisayarda çalışır, ağa çıkmaz, model kullanmaz; ham dosya diske yazılmaz (yalnız WhatsApp'ta "sohbet metnini sakla"yı seçersen); ZIP'ler yol, boyut ve zip bombası denetiminden geçer; yükleme uçları kilit + anahtar + yerel Origin ister. Önizleme hiçbir şey yazmaz; Onayla ve yaz yazar, ikinci kez yüklemek aynı satırı ikinci kez yazmaz.
Kaynak
Dosya
Ne alınır
Ne alınmaz
Sonuç
WhatsApp
.txt / .zip
ad, mesaj sayısı, tarih, konuşma ölçümleri
mesaj içeriği (saklamayı sen seçmedikçe)
seçtiğin adaylar ağa girer
Rehber
.vcf
ad, telefon, e-posta, kurum, rol, fotoğraf
not alanları
seçtiğin adaylar ağa girer
Takvim
.ics ya da Google Takeout .zip (Google, Outlook, Apple)
katılımcı (e-posta + ad), tarih,
SUMMARYyalnız "Başlıkları yaz" açıksa kısaltılmış (varsayılan kapalı, "toplantı" yazılır; sağlık/hukuk/maaş gibi başlıklar açıkken de "toplantı" olur)açıklama, konum, bağlantı, ek, alarm
mevcut kişilere
GG.AA.YYYY · takvim · toplantısatırı ve yalnız ileri gidenson_temas; tanınmayan katılımcılar seçersen yeni kişi (yakınlık 0); e-postası boş kişilerin e-posta önerisi Doğrula'ya düşer. Tekrarlayan etkinlikler yalnız geçmişte, seri başına en fazla 60; 15'ten çok katılımcılı toplantılar yakınlık sayılmaz (istersen sayılır); kendi adresin çıkarılırLinkedIn
veri kopyası .zip,
Connections.csv(başta "Notes:" olabilir),messages.csvbağlantının adı, URL, e-posta, şirket, pozisyon, bağlanma tarihi; mesajlarda yalnız kiminle ve hangi gün
mesaj içeriği ve konusu hiçbir yerde okunup saklanmaz; ZIP'teki diğer dosyalar açılmaz
mevcut kişide yalnız boş linkedin/kurum/rol Doğrula'ya öneri; bağlanma tarihi
## Kaynaklarnotu; mesaj günlerilinkedintemas satırı; yeni bağlantılar yalnız seçersen (yakınlık 0, tür tahmini yok); binlerce bağlantıda arama, süzme ve toplu seçimDers listesi
yapıştırılan metin
ders kodu, ders adı, hoca adı (Prof. Dr., Doç. Dr., Dr. Öğr. Üyesi, Öğr. Gör., Arş. Gör. gibi unvanlar atılır)
yok
dersler profilene, hocalar ağa (yakınlık 0, tür akademi,
## Dersler,hocasibağı); okul sitesine istek yokKendi e-postanı "Takvimdeki e-posta adresin" alanına yazarsan (ya da takvim dosyasında takvim adı e-postaysa) Kut seni katılımcılardan çıkarır ve
ayarlar.json→ben_epostalari'na kaydeder. Başlık tercihiayarlar.json→takvim_baslik(true/false) olarak hatırlanır. İçe aktarma sınırları (v1.1): takvim dosyasında en çok 6 milyon satır ve 200 bin etkinlik işlenir, ayrıştırma + tekrar genişletme en çok 90 sn sürer; tekrarlayan kuralların toplam genişletme bütçesi dosya başına 2 milyon dönemdir (aşılırsa kalan seriler yalnız ilk etkinliğiyle sayılır ve önizleme bunu söyler),INTERVALen çok 10 000'dir, bozuk/taşan tarihli seri tek etkinliğe iner. Takvimden tahmin edilen e-posta adresin (takvim adı ya da her toplantıda görünen tek adres) bu içe aktarmada seni katılımcılardan çıkarmak için kullanılır, ama kalıcı olarak (ben_epostalari) yalnız önizlemedeki ayrı, varsayılan işaretsiz kutuyu işaretlersen kaydedilir; kendin yazdığın adres onaysız kaydedilir. Önizlemeler genel veri kilidini tutmaz (arayüz takılmaz) ve aynı anda tek yükleme işlenir; ikincisi 429 "Başka bir içe aktarma işleniyor" döner.Hariç listesi:
veri/haric.md'ye iletişim kurmak istemediğin kurum/parti adlarını yaz; bunlar hiçbir öneriye girmez ve modele gitmez.Dolaylı kişiler ve odak: seninle doğrudan bağı olmayan, yalnız başkası üzerinden tanıdığın kişiler (yakınlık 0, temas kaydı yok) haritada varsayılan olarak gizlidir. Bir kişiye çift tıkla: o kişi merkeze geçer, yalnız onun bağları görünür; Esc ya da "← Ağıma dön" geri alır. Hepsini görmek için Görünüm → "Dolaylı kişileri de göster".
Giriş animasyonu: pencere ilk açılışta kısa bir giriş oynatır; tık, Esc ya da Enter atlar. Tamamen kapatmak için tarayıcı konsolunda
localStorage.setItem("kut-giris", "0")(animasyonla birlikte açılış sesi de atlanır; sesi tek başına kapatan bir ayar yoktur). Tık ve geçiş sesleri ise Ayarlar → Arayüz sesleri ile kapatılır.İkinci beyin köprüsü:
%LOCALAPPDATA%\agim\ayarlar.json'a"vault": {"yol": "C:\\...\\kasa"}yazarsan sol panelde kasadaki açık işler (tasks/*.md) ve fikirler (notes/fikirler.md), kişi kartında kişinin kasada geçtiği satırlar görünür. Köprü kasaya yazmaz; kişisel notlar, kurallar ve günce okunmaz (ag_vault.py,HARIC). Kasadan kişileri al: Ayarlar → Kaynaklar → Kasadan kişileri al kasadakikind: personnotlarını önizler ("Kasadan N kişi bulundu: X yeni, Y güncelleme"), sen onaylayınca yazar. title → ad, aliases,facts(kurum, rol, son temas) → alanlar; Beyan → Senin beyanların; Temaslar → Temas; Çıkarım (onay bekliyor) → Doğrula kuyruğu (doğrudan yazılmaz); Kaynaklar + kaynak notun yolu → Kaynaklar. Aynı ad/takma adlı kişiyle birleşir (yalnız boş alanı doldurur, beyanını ezmez), yazımdan öncearsiv/surum/'a kopya alınır, tekrar çalıştırmak güvenlidir. Güven etiketi:trust: untrusted,trust: quarantined,trusted: false, tanınmayan hertrustdeğeri ya dastatus/kind: untrustedolan notun Beyan satırları (vefacts.iliski) Senin beyanların'a girmez; "Kasa notu güvenilmez işaretli; şunu doğrula: …" olarak Doğrula kuyruğuna düşer; aynı notunkurum,rol(Doğrula'da kurum/rol önerisi), takma adları, Temaslar satırları veson_temastarihi de doğrudan yazılmaz, Doğrula önerisi olur ve takma adlar onaysız eşleştirmeyi etkilemez (avenox beyin V3_trusted_recordile aynı anlam;quarantinedKut'un ek sıkılığıdır). Etiketi olmayan not avenox'ta olduğu gibi güvenilir sayılır: bunlar kullanıcının kendi V3 kişi notlarıdır;sourceavenox'ta kaynak dosya yoludur, güven etiketi değildir. Adında kasa/şifre/kimlik/finans/müşteri/özel/gizli geçen klasörler vevisibility: privatenotlar hiç alınmaz. Kasaya yazılmaz; yer tutucu resim üretilmez,fotoyalnız notta kasa içindeki gerçek bir resme açık bağlantı varsa kopyalanır.Pusula (P): hedefler
veri/hedefler/<id>.md; keşifag_kesif.py(vekil verisi (açıksa) haftada bir, etkinlikler 12 saatte bir; kaynak listesiayarlar.json→kesif.etkinlik_kaynaklari); stratejiag_strateji.py(veri/strateji/<tarih>.md, hamleleri yaptım / işe yaradı diye işaretlersin, sonraki okuma bunu görür). Aktif hedef ve Claude Code varsa haftada bir kendiliğinden çalışır ("otomatik_strateji": falseile kapanır). Takvim sekmesi (ag_ajanda.py,GET /api/ajanda?bas=&bit=): hamle ve hedef son tarihleri, sözler, kişilerin sonraki adımı ve ihmal eşiği, "katılacağım" dediğin etkinlikler ve geçmiş temaslar ay ızgarasında, hafta görünümünde ya da ajanda listesinde (←/→ ay, T bugün). Yerel ve salt okurdur; model ve ağ yok, hariç listesindeki kişi görünmez. Günü seçince hamlenin ilk adımı, kişinin sonraki adımı ya da etkinliğin adresi yan panelde açılır.Ses: Kut'a sor çubuğunda 🎙 (Ctrl+Boşluk) konuşmayı yazıya çevirir, "🔈 Sesli cevap" cevapları okur. Modeller Kut'un Python'unda değil, kurulu oldukları ortamlarda çalışır (
ag_ses.py→ag_ses_isci.py). Ortam şu sırayla aranır: (1)ayarlar.json→"ses": {"oku_python": "<ema ortamı>\\Scripts\\python.exe", "yaz_python": "<faster-whisper ortamı>\\Scripts\\python.exe", "yaz_model": "large-v3"}ile verilen açık yol; (2) Kut'un kendi kurduğu ortam (%LOCALAPPDATA%\agim\ses); (3) geliştirici kasasındaki eski bilinen yollar; (4) paketleri ve model önbelleği hazır bir sistem Python'u. Ses kaydı diske yazılmaz; kurulum dışında hiçbir şey internete gitmez.Kurulum teklifi (
ag_ses_kur.py): ortam yoksa 🎙 / 🔈'a ilk dokunuşta "Sesli iletişim için Whisper ve EMA Lightning indirilsin mi?" sorulur (Evet · Şimdi değil · Bir daha sorma; sonradan Ayarlar → Kaynaklar → Sesli iletişim kartından da yapılır). Boyutlar önceden gösterilir: EMA paketleri + model ~0,3 GB; Whisper paketleri ~0,1 GB (+ NVIDIA kartı varsa CUDA kitaplıkları ~1,2 GB); Whisper modelismall~0,5 GB,medium~1,5 GB,large-v3~2,9 GB. Varsayılan model: NVIDIA kartı varsalarge-v3(Türkçede en doğru, kartta hızlı), yoksasmall(işlemcidelarge-v3konuşmayı gerçek zamandan çok yavaş yazar;smallhızlı ama daha çok yanlış yazar,mediumarası). Kurulumda sistemdeki Python 3.11–3.13 aranır (py -3.x,python; EMA 3.11+ ister, sabitlenen paketler 3.13'e kadar sınanmıştır) veses/oku/.venvileses/yaz/.venvsanal ortamları kurulur; paketler sabit sürümlüdür (ema-lightning==1.1.2,normalizer-tr==0.7.0,torch==2.6.0,faster-whisper==1.2.1,ctranslate2==4.8.2) ve yalnız tekerlekten (--only-binary) kurulur, modellerses/hfaltına iner. Python bulunamazsa python.org/downloads adresi gösterilir; kendi Python'unu kuran sen olursun. İlerleme yüzdesi gösterilir, iptal edilebilir (iptalde o kurulumda açılan ortam silinir); Kut kurulum sırasında kapanırsa yarım ortam sonraki açılışta temizlenir. Kurulum günlüğü%LOCALAPPDATA%\agim\ses-kurulum.log. Kut'un kurduğunu kaldır düğmesi yalnızses/klasörünü siler. Uçlar:GET /api/ses/kurulum,POST /api/ses/kurulum/baslat|iptal|kaldir|ayar(kilit + anahtar + yerelOrigin;baslatgövdede{"onay": true}ister). "Bir daha sorma"ayarlar.json→ses.kurulum_sorusu: "sorma"yazar.
Veri dosyaları
Tek doğru kaynak Markdown'dır (veri/ klasörü; ayrıntı için AGENTS.md):
Dosya | İçerik |
| merkezdeki kişi (sen): ad, ilgiler, asistan adı, okul |
| kişi: frontmatter ( |
|
|
| onay bekleyen asistan çıkarımları ve soruları |
| Pusula hedefleri |
| iletişim kurulmayacak kurum/partiler |
Kendi ajanın
Bu klasör aynı zamanda bir yapay zekâ ajanının çalışma alanıdır (AGENTS.md talimatları): Claude gibi bir ajanla klasörü açıp
"Ali'yle kahve içtik, staj konuştuk, 2 hafta sonra yazacağım" dersen temas, yakınlık ve sonraki adım kaydedilir; "Bu hafta kimle ilgileneyim?" diye sorabilirsin.
Ajan çıkarımlarını önerinin ötesinde kişi dosyasına doğrudan yazmaz.
Yapay zekâ asistanına bağla (MCP)
Kut bir MCP sunucusu olarak da çalışır: Claude Desktop, Claude Code ya da MCP destekleyen başka bir asistan ağını salt okur araçlarla kullanır. "Yarın Deniz'le görüşeceğim, en son ne konuşmuştuk?" ya da "Bu hafta kimi ihmal ettim?" diye sorarsın; asistan Kut'a bakıp cevaplar. Ek paket gerekmez, port açılmaz, Kut'un penceresi açık olmak zorunda değildir.
Araç | Ne verir |
| ada, kuruma, role ya da etikete göre kişiler (kimlik, yakınlık, son temas) |
| kurum, rol, nereden, görüşün, sonraki adım, açık sözler, son 10 temas |
| tarihi gelen adımlar, ihmal edilenler, gecikmiş/yaklaşan sözler |
| son N günün temasları |
| görüşme öncesi tek sayfa |
Gizlilik. Asistana giden her şey asistanın modeline (ör. Anthropic) gider; bu yüzden MCP de Kut'un kişi kapısından geçer:
🔒 yapay zekâya gönderilmez işaretli ve haric.md ile eşleşen kişiler hiç listelenmez, adlarının geçtiği satırlar atılır, sırlar [gizlendi] olur.
Telefon ve e-posta hiç verilmez. Sunucu hiçbir şey yazmaz. PIN kilidi Kut'un penceresini korur; MCP'yi eklemek, asistana bu araçlarla
okuma izni vermek demektir. İstemediğinde istemcinin ayarından kaldır.
Claude Code:
claude mcp add kut -- py -3 "C:\yol\kut\kut.pyw" --mcp --veri "C:\yol\veri"(macOS/Linux: python3 ~/Kut/kut.pyw --mcp --veri ~/Documents/Kut.)
Claude Desktop: Ayarlar → Geliştirici → Yapılandırmayı düzenle (claude_desktop_config.json):
{"mcpServers": {"kut": {"command": "py", "args": ["-3", "C:\\yol\\kut\\kut.pyw", "--mcp", "--veri", "C:\\yol\\veri"]}}}Şimdilik kaynaktan (Python ile) kurulumda çalışır; Kut.exe pencereli bir uygulama olduğu için stdio sunucusu olamaz.
Desteklenen okullar
Ayarlar → Kaynaklar → Okul bağdaştırıcısı açılır listesi kut/ag_okullar.py kayıt defterinden dolar. Kaynakların her biri robots.txt ve erişilebilirlik açısından canlı istekle denendi (Ekim 2026);
giriş isteyen (OBS/öğrenci girişi), robots.txt'in yasakladığı ya da bot korumalı kaynaklar kullanılmaz.
Okul (anahtar) | Ders → hoca kaynağı | Kadro / profil | Ders kodu örneği |
Yeditepe Üniversitesi ( | yeditepeders.com ders programı (JSON) | fakülte akademik kadro sayfası + profil: unvan, e-posta, fotoğraf, özgeçmiş, ORCID |
|
İstanbul Teknik Üniversitesi ( | obs.itu.edu.tr/public/DersProgram (herkese açık ders programı; CRN şube sayılır) | yok (yalnız ders ve hoca adı) |
|
Okuldan bağımsız: Akademik profiller kaynağı (kapalı gelir) hocanın adıyla OpenAlex ve ORCID'e bakar; ad + kurum tek bir kayıtla eşleşirse "Hakkında" önerisi, eşleşme belirsizse "emin değilim" sorusu olarak Doğrula'ya düşer, kişi dosyasına doğrudan yazılmaz.
Denenip eklenmeyenler: ODTÜ (OIBS robots.txt: Disallow: /), Boğaziçi (kayıt sistemi Disallow: /), Bilkent (STARS yalnız birkaç sabit sayfaya izin veriyor), Sabancı (Banner "Dynamic Schedule" teknik olarak okunuyor ama robots.txt Disallow: /# = tüm site yasak; saygı gösterildi),
YÖK Akademik (bot koruması), AVESIS (profil sayfaları açık ama aramayı JS/ES vekili yapıyor; ders→hoca eşlemesi yok), OBS/OIBS Bologna sistemleri (çoğu üniversitede; ders kodundan arama yok, program ağacı form gönderimiyle geziliyor).
Okul bağdaştırıcısı ekleme
Okulun yok mu? Bağdaştırıcı ekle. Okul özellikleri kut/ag_okullar.py kayıt defteriyle tanımlanır; anahtar, profildeki okul alanının sadeleştirilmiş hâlidir (küçük harf, Türkçe karakter ve aksansız).
Her bağdaştırıcı aynı arayüzü sağlar: anahtar, ad, kisa, alan_adi, dersler(kodlar) → ([{kod, sube, ad, hocalar, saat, bolum}], bulunamayan) ve hoca_profili(ad_veya_url) → unvan/e-posta/fotoğraf/özgeçmiş/ORCID (kaynak sunmuyorsa boş sözlük).
Önce kaynağı kontrol et: ders programı girişsiz ve herkese açık mı,
robots.txtizin veriyor mu (#yorum başlatır:Disallow: /#tüm siteyi yasaklar), kullanım koşulu engelliyor mu? Canlı bir istekle ayrıştırılabildiğini doğrula.Baglastirici'dan türet,dersler()'i yaz (ağ için yalnızal(url)/ag_kaynak._istekkullan: SSRF koruması, zaman aşımı, boyut sınırı, istek hızı sınırı, robots denetimi hazır; sonuçlarıonbellekli()ile sakla).Dosyanın sonunda
kaydet(SinifAdin())de; açılır liste veag_kaynak.OKULLARkendiliğinden güncellenir.kurum_en'e okulun İngilizce adını yaz (OpenAlex kurum eşleşmesi için).Kaynaktan küçük bir HTML/JSON örneği al (kişi adlarını uydur),
tests/fixtures/altına koy ve ayrıştırıcıyıtests/test_okullar.pybenzeri bir testle sına; testlerde ağ çağrısı olmasın.
yeditepe kaydı eski biçimde (ag_kaynak.OKULLAR içinde, ders_json + Drupal kadro bloğu) durur; JSON ders programı ve Drupal kadro sayfası olan bir okul için aynı alanlarla kayıt eklemek de yeter:
OKULLAR["okulum"] = {
"ad": "Okulum Üniversitesi", "kisa": "Okulum",
"ders_json": "https://ornek.edu/data/courses-{donem}.json", # herkese açık ders programı (JSON)
"ders_kaynak": "ornek.edu", "donem": "2026G", "donem_adi": "Güz 2026",
"kadro": {"ABC": ("https://fakulte.ornek.edu", "12")}, # ders kodu öneki → akademik kadro sayfası, bölüm no
"kadro_adi": {"ABC": "Okulum Örnek Mühendisliği"},
"kadro_plugin": "...", "eposta_alani": "ornek.edu",
"profil_ornek": "ornek.edu/akademik-kadro/<n>",
"etkinlik_url": "https://ornek.edu/etkinlikler",
}İlkeler: yalnız herkese açık, girişsiz sayfalar; giriş isteyen ya da bot korumalı (CAPTCHA, engelleme) siteleri aşmaya çalışma; hoca fotoğrafı yalnız resmi kurum alan adından; kaynaktan gelen bilgi kaynağıyla yazılır, yalnız boş alanları doldurur, senin yazdığını ezmez.
Profilinde okul boşsa ya da tanımsızsa bu özellik kapalıdır ve hiçbir okul sitesine istek atılmaz.
Kaynak ekleme
Yeni üniversite:
ag_okullar.py'ye bir bağdaştırıcı eklemek yeter (rehber); Kaynaklar sekmesindeki okul listesine kendiliğinden gelir.Yeni etkinlik kaynağı:
ayarlar.json→kesif.etkinlik_kaynaklarilistesine adres eklenir (sayfada schema.org Event varsa kod gerekmez). Etkinlik taramasıkesif.etkinlikayarıyla açıksa taranır.Yeni isteğe bağlı kaynak türü:
ag_kesif.KAYNAK_AYARLARI'na bir kayıt vekesif.<kimlik>kapısı; kapı kapalıyken ağa çıkılmamalı (örnek:etkinlik_acik()).
Depo düzeni
kut.pyw başlatıcı (kut/ klasörünü yola ekler, sunucuyu açar; `--ozet` zamanlanmış özet görevidir, sunucu açmaz)
kut/ uygulama kodu (ag_*.py), sürüm (surum.py), güncelleme (ag_guncelle.py), veri göçleri (goc.py), arayüz (ag_sablon.html), simge
tests/ birim testleri
demo/ kurgusal demo verisi üreticisi (demo_veri.py) ve içe aktarma örnek dosyaları (ornek/)
docs/ ekran görüntüleri (img/) ve tasarım taslakları (tasarim/)
paketleme/ Kut.exe derleme (kut.spec, paketle.ps1; Kut.exe.sha256 de üretir)
baslatma/ Windows kısayol kurucu (kur.ps1), macOS başlatıcı (Kut.command)
AGENTS.md ajan talimatları (kurulum + uygulama içi asistan)Kişisel verin (veri/, ya da --veri ile verdiğin klasör) depoya girmez.
Testler
py -3 -m unittest discover -s tests # macOS/Linux: python3 -m unittest discover -s testsTestler yalnız standart kütüphaneye dayanır ve gerçek verine dokunmaz (her biri geçici bir veri klasörü kullanır).
Lisans
MIT © koraykutlu
Available Tools
5 toolsbrifingMeeting briefARead-only
One-page brief (Markdown) before meeting someone: talking points, open promises, mutual connections, recent contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Person id returned by kisi_ara |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description goes beyond that by disclosing the return format (Markdown, one page) and the semantic contents of the brief, which is the main thing an agent needs to decide whether to call it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the deliverable first and then its contents. No waste, though the parenthetical "(Markdown)" sits in slightly awkward position.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with no output schema, the description is nearly sufficient: it explains the format and content of what comes back and the schema supplies the id semantics. Missing only explicit routing against sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter's meaning (a person id from kisi_ara) is fully documented in the schema itself. The description adds no further parameter detail, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete deliverable (one-page Markdown brief about a person) and enumerates its sections: talking points, open promises, mutual connections, recent contacts. This is clearly distinct from the sibling lookups (kisi_ara, kisi_karti, son_gorusmeler), though it never names them, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"before meeting someone" implies the intended moment of use, which is genuine context, but there is no explicit statement of when-not to use it or how it relates to kisi_karti or son_gorusmeler. Usage is inferable, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bu_haftaThis weekARead-only
Who to reach out to this week: next steps that are due, people neglected for their closeness level, overdue or upcoming promises.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the composition of the result set (due steps, neglect-by-closeness, promise deadlines), though it says nothing about ordering, limits, or freshness of the data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the outcome ('who to reach out to this week') and then lists the three categories. No filler, no repetition of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with no output schema, the description adequately explains what comes back. The only gap is the relationship to the neighboring `brifing` tool, which is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there is no parameter semantics to document — the baseline of 4 applies. The description correctly implies no inputs are needed since the scope is fixed to 'this week'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a concrete resource (a weekly outreach list) and enumerates its triggers: due next steps, neglected people, overdue/upcoming promises. Clear enough to know what it produces, though it never states how it differs from the `brifing` sibling, which by name sounds adjacent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the content ('this week'), with no explicit when-to-use, prerequisites, or when-not-to-use vs alternatives like `brifing` or `son_gorusmeler`. An agent can infer the planning context but gets no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kisi_araSearch peopleARead-only
Search the user's Kut network by name, organization, role, field or tag. Returns id, name, organization, role, closeness (0-3) and last contact date. Call kisi_karti or brifing next for details. Records may be in Turkish.
| Name | Required | Description | Default |
|---|---|---|---|
| sorgu | Yes | Search text: part of a name, organization, role or tag |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral value beyond that: the exact return fields, the closeness scale (0-3), and the caveat that records may be in Turkish — all things an agent cannot infer from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and scope, then returns, then next-step routing. Every sentence carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the returned fields and the closeness scale, plus the Turkish-language caveat and follow-up tool routing. An agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one parameter, so the schema already defines 'sorgu'. The description lists the match dimensions (name, organization, role, field, tag), which slightly extends the schema's wording by adding 'field', but largely restates it — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search the user's Kut network') and enumerates the searchable dimensions (name, organization, role, field, tag). It also implicitly separates itself from the detail siblings by naming kisi_karti and brifing as the next step rather than as search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent onward: 'Call kisi_karti or brifing next for details,' which tells the agent this is the entry-point lookup and those are the detail tools. It stops short of stating when NOT to use it (e.g. vs. bu_hafta or son_gorusmeler), so it is clear context without full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kisi_kartiContact cardBRead-only
A person's card: organization, role, where you met, closeness, the user's own view, next step, open promises and recent contact notes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Person id returned by kisi_ara |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real value beyond that by enumerating the returned content (organization, role, closeness, next step, open promises, recent notes), which is important because there is no output schema. It stops short of describing edge cases such as an unknown id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; each item in the list conveys distinct returned content. It is a fragment rather than a complete sentence, which slightly weakens the framing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with no output schema, the field enumeration adequately covers the return shape. What is missing is any indication of when to call it versus kisi_ara, brifing, or son_gorusmeler, which matters given four siblings in the same domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema coverage, and the schema already explains that id comes from kisi_ara. The description adds no parameter detail at all, so the baseline of 3 for high-coverage schemas applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates what the card contains (organization, role, where you met, closeness, promises, notes), which makes it clear this is a per-person detail view rather than a list. However, it is a bare noun phrase with no verb, and it never distinguishes itself from siblings like kisi_ara or brifing, leaving the agent to infer that this is a lookup-by-id retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of when not to use it, and no reference to any alternative tool. The only routing hint ('Person id returned by kisi_ara') lives in the schema, not the description, so the description itself supplies nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
son_gorusmelerRecent conversationsARead-only
Contacts logged in the last N days (date, person, channel, one-line note), newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| gun | No | Number of days to look back |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: it names the returned fields (date, person, channel, one-line note) and the sort order (newest first), which matters because there is no output schema. It stops short of noting truncation, pagination, or whether results are scoped to the caller.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence stating scope, then the returned fields in a compact parenthetical and the ordering at the end. Nothing is padded and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations covering safety and no output schema, the description supplies the return shape and ordering the agent would otherwise lack. It omits result limits and whether the log is scoped to the requesting user, which are the only notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (gun is documented as 'Number of days to look back' with min/max bounds), so the schema carries the parameter semantics. The description's 'last N days' phrasing restates the same idea without adding format or edge-case guidance, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete resource (contacts logged in the last N days) plus the fields returned and the ordering, so the agent knows exactly what comes back. It does not, however, explicitly contrast itself with the closest sibling, bu_hafta (the fixed 7-day variant), which an agent could easily confuse with this parameterized one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as bu_hafta or kisi_ara, and no prerequisites or exclusions. The only usage signal is the implicit 'last N days' window, which the agent must infer from the parameter default.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
brifing - First observed
bu_hafta - First observed
kisi_ara - First observed
kisi_karti - First observed
son_gorusmeler
This server cannot be deployed
TDQS
Scored across 5 tools
The five tools mostly target distinct workflows: search, person details, weekly outreach, recent contacts, and pre-meeting briefing. kisi_karti and brifing both center on a single person and could occasionally be confused, but their descriptions clarify when to use each.
All names use lowercase snake_case Turkish, which is readable and consistent in casing. However, the pattern mixes a verb phrase (kisi_ara) with noun phrases (kisi_karti, bu_hafta, son_gorusmeler, brifing), so it lacks a predictable verb_noun convention.
Five tools is well within the appropriate range and each tool earns its place by covering a distinct personal CRM query or briefing workflow. The set is neither thin nor bloated for the apparent scope.
The surface is entirely read-oriented: search, detail, weekly follow-up, recent contacts, and briefing. It lacks tools to create or update contacts, log new interactions, or manage promises and next steps, which are core lifecycle operations for a personal CRM.
Maintenance
Related MCP Connectors
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Read-only MCP server exposing a user ORANO library to their own AI agent.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.5 npm2MIT
- AlicenseCqualityCmaintenanceRead-only MCP server for querying a running Obsidian vault from agentic runtimes, exposing safe Obsidian CLI commands.551MIT
- AlicenseAqualityBmaintenanceRead-only MCP server that exposes your local Notion backups to AI agents — query databases, read pages, search a backed-up workspace. Offline by default: no LLM calls, no telemetry, no cloud.61MIT
- AlicenseNot gradedqualityBmaintenanceRead-only local-first MCP server enabling AI assistants to semantically search private Markdown, PDF, and Tika-backed knowledge bases without data upload.45MIT










