Skip to main content
Glama

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: harita, kişi kartı, bu hafta ve Pusula

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).

Ağ haritası

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

Kişi kartı

Temaslar

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.

Kişi kartında Sözler sekmesi

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.

Bu hafta görünümü

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

Pusula, hamleler

Pusula, 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ı

Sihirbaz, karşılama

Sihirbaz, yapay zekâ sağlayıcısı

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 hali veri/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)

İçe aktar, takvim önizlemesi

İçe aktar, LinkedIn önizlemesi

Ü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:

Ayarlar penceresi

Kilit ekranı

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 (onay: true); sonra çevrimdışı

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ı)

kesif.akademik açıksa (yeni kurulumda kapalı)

Vekilpedia

vekilpedia.com

kesif.vekilpedia açıksa (yeni kurulumda kapalı)

Etkinlikler

tablodaki etkinlik siteleri

kesif.etkinlik açıksa (yeni kurulumda kapalı)

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ı:

  1. 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.

  2. İ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çin ayarlar.json → "otomatik_strateji": false. Modele giden her kişi verisi önce yerel kapıdan (ag_kapi.py) geçer:

    • remote_allowed: false olan 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.md ile eşleşen kurum/parti kişileri aynı şekilde dışarıda kalır; kopyada ayrıca haric.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 modelleri ayarlar.json iç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 -p

    Anthropic

    Oturum devamı, salt-okur dosya araçları, PDF/görsel belge okuma tam çalışır

    codex

    codex exec

    OpenAI

    --sandbox read-only yazmayı 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 okumaz

    gemini

    gemini -p

    Google

    plan kipi + "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 okumaz

    ollama

    yerel HTTP 127.0.0.1:11434

    bilgisayardan çı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-only yazmayı engeller ama okumayı engellemez: model kabuk komutuyla bütün diski, gerçek kişi klasörünü ve haric.md'deki kişileri okuyabilir. Codex'in kabuğu ya da araçları kapatan -c anahtarları 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 plan salt-okur araçları (dosya okuma, arama, web) açık bırakır. Kut ek olarak --admin-policy ile * için deny kuralı verir (Gemini CLI 0.62 belgesine göre genel deny araçları modelin görüşünden de çıkarır), GEMINI_CLI_SYSTEM_SETTINGS_PATH ile tools.exclude yedeği koyar ve istemdeki @yol ifadelerini (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.

  3. Sürüm denetimi (GitHub). Yalnız api.github.com/repos/koraykutlu/kut/releases/latest adresine, 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.

  4. 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ı: pip yalıtılmış çalışır (python -I, pip --isolated; ortamdaki PIP_INDEX_URL, PIP_EXTRA_INDEX_URL, PIP_TRUSTED_HOST ve pip.ini yok sayılır, HF_ENDPOINT aktarılmaz). ema-lightning 1.1.2 ve normalizer-tr 0.7.0 --require-hashes ile 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, ctranslate2 ve 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>: EMA 7a6ba1a…, Whisper small 536b066…, medium 08e178d…, large-v3 edaa852…); depo sonradan değişse de aynı dosyalar iner. Kurulum iptal edilir ya da hata verirse yarım model indirmeleri (.incomplete dahil) silinir; silinemeyen varsa mesaj bunu söyler.

  5. 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.

  1. GitHub Releases sayfasından Kut.exe dosyasını indir ve çift tıkla.

  2. Windows "bilinmeyen yayımcı" (SmartScreen) uyarısı gösterirse: Daha fazla bilgi → Yine de çalıştır.

  3. İ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.pyw

Sunucu 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çin ayarlar.json'a "tarayici": "varsayilan" yaz.

  • macOS: Terminal'de bir kez chmod +x baslatma/Kut.command, sonra baslatma/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ındaki digest alanı ya da Kut.exe.sha256 dosyası; toplam yoksa ya da uyuşmazsa kurmaz), eskisini Kut.prev.exe olarak yanına koyar, yenisini Kut.exe yapar 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 --tags ile 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ör github.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.py gerekli 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ı

Demo, Pusula

Demo, söz yakalama

Demo, 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 47400

Kendi 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 47400

Demoda ç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, SUMMARY yalnı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 giden son_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ır

    LinkedIn

    veri kopyası .zip, Connections.csv (başta "Notes:" olabilir), messages.csv

    bağ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 ## Kaynaklar notu; mesaj günleri linkedin temas 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çim

    Ders 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, hocasi bağı); okul sitesine istek yok

    Kendi 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 tercihi ayarlar.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), INTERVAL en ç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 kasadaki kind: person notları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 önce arsiv/surum/'a kopya alınır, tekrar çalıştırmak güvenlidir. Güven etiketi: trust: untrusted, trust: quarantined, trusted: false, tanınmayan her trust değeri ya da status/kind: untrusted olan notun Beyan satırları (ve facts.iliski) Senin beyanların'a girmez; "Kasa notu güvenilmez işaretli; şunu doğrula: …" olarak Doğrula kuyruğuna düşer; aynı notun kurum, rol (Doğrula'da kurum/rol önerisi), takma adları, Temaslar satırları ve son_temas tarihi de doğrudan yazılmaz, Doğrula önerisi olur ve takma adlar onaysız eşleştirmeyi etkilemez (avenox beyin V3 _trusted_record ile aynı anlam; quarantined Kut'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; source avenox'ta kaynak dosya yoludur, güven etiketi değildir. Adında kasa/şifre/kimlik/finans/müşteri/özel/gizli geçen klasörler ve visibility: private notlar hiç alınmaz. Kasaya yazılmaz; yer tutucu resim üretilmez, foto yalnız notta kasa içindeki gerçek bir resme açık bağlantı varsa kopyalanır.

  • Pusula (P): hedefler veri/hedefler/<id>.md; keşif ag_kesif.py (vekil verisi (açıksa) haftada bir, etkinlikler 12 saatte bir; kaynak listesi ayarlar.json → kesif.etkinlik_kaynaklari); strateji ag_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": false ile 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 modeli small ~0,5 GB, medium ~1,5 GB, large-v3 ~2,9 GB. Varsayılan model: NVIDIA kartı varsa large-v3 (Türkçede en doğru, kartta hızlı), yoksa small (işlemcide large-v3 konuşmayı gerçek zamandan çok yavaş yazar; small hızlı ama daha çok yanlış yazar, medium arası). 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) ve ses/oku/.venv ile ses/yaz/.venv sanal 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, modeller ses/hf altı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ız ses/ klasörünü siler. Uçlar: GET /api/ses/kurulum, POST /api/ses/kurulum/baslat|iptal|kaldir|ayar (kilit + anahtar + yerel Origin; baslat gö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

ben.md

merkezdeki kişi (sen): ad, ilgiler, asistan adı, okul

kisiler/<id>.md

kişi: frontmatter (ad, tur, kurum, rol, yakinlik, son_temas, sonraki_adim, ...) + ## Temas satırları (- GG.AA.YYYY · kanal · cümle)

iliskiler.md

| a | b | tip | not | kaynak | tarih | tablosu

cikarimlar.md

onay bekleyen asistan çıkarımları ve soruları

hedefler/<id>.md

Pusula hedefleri

haric.md

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

kisi_ara

ada, kuruma, role ya da etikete göre kişiler (kimlik, yakınlık, son temas)

kisi_karti

kurum, rol, nereden, görüşün, sonraki adım, açık sözler, son 10 temas

bu_hafta

tarihi gelen adımlar, ihmal edilenler, gecikmiş/yaklaşan sözler

son_gorusmeler

son N günün temasları

brifing

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 (yeditepe)

yeditepeders.com ders programı (JSON)

fakülte akademik kadro sayfası + profil: unvan, e-posta, fotoğraf, özgeçmiş, ORCID

ISE 424-1

İstanbul Teknik Üniversitesi (itu)

obs.itu.edu.tr/public/DersProgram (herkese açık ders programı; CRN şube sayılır)

yok (yalnız ders ve hoca adı)

BIL 100E, BIL 100E-14304

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).

  1. Önce kaynağı kontrol et: ders programı girişsiz ve herkese açık mı, robots.txt izin 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.

  2. Baglastirici'dan türet, dersler()'i yaz (ağ için yalnız al(url)/ag_kaynak._istek kullan: SSRF koruması, zaman aşımı, boyut sınırı, istek hızı sınırı, robots denetimi hazır; sonuçları onbellekli() ile sakla).

  3. Dosyanın sonunda kaydet(SinifAdin()) de; açılır liste ve ag_kaynak.OKULLAR kendiliğinden güncellenir. kurum_en'e okulun İngilizce adını yaz (OpenAlex kurum eşleşmesi için).

  4. 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.py benzeri 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_kaynaklari listesine adres eklenir (sayfada schema.org Event varsa kod gerekmez). Etkinlik taraması kesif.etkinlik ayarıyla açıksa taranır.

  • Yeni isteğe bağlı kaynak türü: ag_kesif.KAYNAK_AYARLARI'na bir kayıt ve kesif.<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 tests

Testler 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 tools
brifingMeeting briefA
Read-only

One-page brief (Markdown) before meeting someone: talking points, open promises, mutual connections, recent contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPerson id returned by kisi_ara

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 weekA
Read-only

Who to reach out to this week: next steps that are due, people neglected for their closeness level, overdue or upcoming promises.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 peopleA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sorguYesSearch text: part of a name, organization, role or tag

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 cardB
Read-only

A person's card: organization, role, where you met, closeness, the user's own view, next step, open promises and recent contact notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPerson id returned by kisi_ara

TDQS

B3.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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 conversationsA
Read-only

Contacts logged in the last N days (date, person, channel, one-line note), newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
gunNoNumber of days to look back

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 5 tool updates
    • First observedbrifing
    • First observedbu_hafta
    • First observedkisi_ara
    • First observedkisi_karti
    • First observedson_gorusmeler

TDQS

A3.5/5.0

Scored across 5 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness2/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.
    5 npm
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Read-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.
    6
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Read-only local-first MCP server enabling AI assistants to semantically search private Markdown, PDF, and Tika-backed knowledge bases without data upload.
    45
    MIT