A portable project-memory gate system for AI agents. Single-file, pure Python stdlib, zero dependencies. A gate that does not bite has no verdict.
Python
1
127 commits
updated Sep 30, 2026
Taşınabilir bir proje hafızası kapı sistemi. Tek dosyalık saf Python motoru (stdlib, sıfır bağımlılık) bir projenin hafıza dosyalarını yönetir ve ölçer.
Durum: geliştirme aşamasında, henüz kurulmadı ve yayımlanmadı. Bu depo CI ölçümü ücretsiz koşabilsin diye publictir — bir yayın değildir. PyPI paketi, marketplace girişi ya da duyuru yoktur.
Üç cümle:
Bu alanda talimat dosyası (CLAUDE.md, AGENTS.md), hafıza katmanı (mem0, Letta, Zep) ve memory-bank kalıbı çok. Onlarda olmayan üç şey:
hafiza.py isir her kapı için bilerek bir açık üretir ve yakaladığını
kanıtlar. Isırmayan kapının "temiz" hükmü geçersizdir.KAÇTI demeli. Demiyorsa komşu bir sınıfı ölçüyordur.ÖLÇÜLEMEDİ PASS'tan ayrı üçüncü bir
hükümdür ve çıkış kodu bile bunu ayırır. (Bu üçüncüsü özgün değil — GNU
Automake'in 77 = SKIP'i ve pytest'in skip/xfail'i aynı geleneğe ait;
yeni olan, bunu bir hafıza/doküman kapısına taşımak.)python3 skill/scripts/hafiza.py kur --kok=<proje> --ad "<Proje Adı>"
python3 skill/scripts/hafiza.py kapi --kok=<proje> # kapıları koş, hüküm ver
python3 skill/scripts/hafiza.py isir --kok=<proje> # kapıların ısırdığını kanıtla
İlerlemiş bir projede kur değil devral kullan. Ayrıntı: skill/SKILL.md.
Çıkış kodları — kapi: 0 yeşil · 1 kırmızı · 2 kullanım hatası ·
3 ölçüm yapılamadı, hüküm yok · 5 yalnız --kapsam-zorla ile: hüküm
yeşil ama kapsam eksik (? ile işaretli en az bir şey ölçülmedi).
isir: 0 hepsi ısırdı · 1 kapı kör ·
2 ölçülemeyen mutant · 4 temiz sürüm zaten FAIL.
skill-kur: 0 kuruldu ya da zaten kurulu · 1 kurulum ölçümü tutmadı (kurulmadı) ·
2 kullanım hatası ya da hedefte FARKLI bir kurulum var (hiçbir şey değişmez).
Yardımcı komutlar
python3 skill/scripts/hafiza.py skill-kur # skill'i ~/.claude/skills/hafiza-kur/ altına kopyalar + ölçer
python3 skill/scripts/hafiza.py surum # sürüm + motorun KENDİ sha256'sı
python3 skill/scripts/hafiza.py hook --kur --kok=<proje> # pre-commit kapısı kurar
python3 skill/scripts/hafiza.py kapi --kok=<proje> --kapsam-zorla # CI için
skill-kur, skill/ dizinini Claude Code'un skill klasörüne kopyalar ve kopya üzerinde
ölçer (motor bit-bit · envanter · kopyadaki motorun surum SHA'sı); --proje <kök> ile
<kök>/.claude/skills/ altına kurar. Hedefte FARKLI bir kurulum varsa durur; --guncelle
eskisini ~/.claude/hafiza-kur-yedek/ altına TAŞIR (silmez). Cowork ve claude.ai bu klasörü
okumaz — orada hafiza-kur.skill'i claude.ai'ye yükle.
kur, ağaçta başka bir aracın defterini tanırsa (CLAUDE.md, AGENTS.md,
DURUM.md, memory-bank/ …) durur ve devral önerir — belge bunu zaten
söylüyordu, artık kod da zorluyor. Bilerek geçmek için --yine-de; geçiş
zincire düşer.
| Dizin | Ne |
|---|---|
skill/ | .skill paketinin tek gerçek kaynağı — SKILL.md + references/ + scripts/ |
skill/scripts/ | Motor (hafiza.py) ve kanıt koşucuları (t_y3.py, t_y42.py). Motorun ikinci bir kopyası yoktur. |
faz0/ | Ölçüm altyapısı. Koda dokunmaz: ortam sınıfı, Windows probu, otomatik sabotaj |
denetim/ | Bağımsız denetim turlarının defteri |
.github/workflows/ | 3 platform × 2 Python + ortam sınıfı + kod kalitesi |
CLAUDE.md | Kalıcı protokol. Çalışmaya başlamadan önce oku. |
Beyana güvenme; bu deponun kuralı bu.
cd skill/scripts
mkdir -p deneme && git init -q deneme
python3 hafiza.py kur --kok=deneme --ad "Deneme"
python3 hafiza.py isir --kok=deneme # taze projede: 67/67 + 2 SINANMADI, exit 2
python3 hafiza.py not --kok=deneme --konu=genel-durum --metin="ilk not"
python3 hafiza.py derle --kok=deneme
python3 hafiza.py isir --kok=deneme # derle sonrası: 69/69, exit 0
python3 t_y3.py # 20 senaryo, temiz hata
python3 t_y42.py # 58 senaryo
Mutant sayısını bağlamsız okuma: 69/69 yalnız derle koşulmuş projede
doğrudur. Taze bir projede M-H1b ve M-DEVIR ön-koşulsuz kalır — bu sağlıklı
bir projedir ve çıkış kodu 2'dir.
Ortam sınıfını ölçmek için (root gerekir):
sudo bash faz0/ortam_olcum.sh # root olmayan kullanıcı · dolu disk · salt-okunur
python3 faz0/sabotaj.py # her fail() tek tek kapatılır -> kapsam envanteri
Bunlar gizlenmiyor; skill/SKILL.md §9'da tam listesi var. En önemlileri:
Yeniden çıpalama engellenemez, yalnız görünür kılınır. Dosya tabanlı bir şemada yazma erişimi olan bir aktöre karşı bütünlük garantisi matematiksel olarak imkânsızdır. Doktrin: tamper-evidence, tamper-proof değil.
Zincir anahtarsızdır. Depo-içi bir zincir, tutarlı biçimde N dosyayı düzenleyen bir aktörü durduramaz; yaptığı, maliyeti 1 hamleden N tutarlı hamleye çıkarmaktır.
Beyanlı gevşeklik gerçek bir kaçış deliğidir. politika_gerekce ile bir
kapı kapatılabilir; gizlenemez ama kullanılabilir. Kaçış yolu olmayan kapı,
kırılan kapıdır.
Disiplin nihayetinde insana/ajana bağlıdır. Fragman yazılmazsa sistem boş döner. Git hook bunu kısmen zorlar, tamamen değil.
Uzun hafıza her zaman iyi değildir. Girdi uzadıkça model başarımı düşer; bu yüzden tavan vardır ve canlı dosya yol taşır, metin taşımaz.
Platform hükmü eşit değildir. capraz.ymldeki adımlar iki sınıftır: KAPI
(continue-on-error YOK — üç platformlu MUTANT bataryası: h1/h4/h10/h12/h14
kenar mutantları, altın çıktı/ölçüt/küme ailesi, yapı kapısı, karmaşıklık
ölçütü ve benzerleri) ve ÖLÇÜM (continue-on-error: true — kanıt koşucuları,
Y-1/Y-3 probları, ortam sınıfı, kalite taraması). Hangi adımın hangi sınıfta
olduğu ve kaçının bu bayrağı taşıdığı capraz.ymlden okunur; sayı burada
yazılmaz (bir kez yazıldı, iki gün içinde bayatladı). Tek belgelenmiş istisna
h9_kesme_mutantidir: chown POSIX'e özgü olduğu için ubuntu kolu KAPI,
macOS/Windows kolları platform sınırı nedeniyle ÖLÇÜM (capraz.ymlde
gerekçesiyle yazılı). Motorda platforma özgü tek
dal sys.platform == "win32" altındadır ve faz0/win_dal_mutanti.py onu ölçer:
envanter ve davranış kapıları temiz, 4/4 mutant ayrı eksende ısırıyor. Ama o
aracın kendi hükmü "YEŞİL SINIRLI": üçüncü kapısı (gerçek win32 üzerinde
canlı koşum) yalnız Windows kolunda çalışır, diğer iki platformda ÖLÇÜLEMEDİ
basar. Yani hüküm vardır ama her platformda aynı ağırlıkta değildir.
Bu madde bir süre "o dal henüz bir mutantla ölçülmemiştir" diyordu. 16 Ağu 2026'da ölçüldü: cümle bayatlamıştı — mutant zaten vardı ve ısırıyordu. Tazeliği kendin sına:
python3 faz0/win_dal_mutanti.py
macOS'a özgü kod yolu ise hiç yoktur; macOS'un bilinen mayını (dosya adlarında NFC/NFD ayrışması) bir kapıyla değil bir kaçınma kuralıyla yönetiliyor: disk adlarına Türkçe diyakritik konmuyor. Kural, kapı değil — ve kuralı zorlayan bir şey yok.
"Gerçek bir projede bir hafta fiilen kullanım" maddesi KESİLDİ (15 Ağu 2026). Sebep zaman değil, ölçütün kendisi: token kazancı ancak bu sistem mevcut defterin yerine geçerse dürüst ölçülebilir. Aday projede mevcut defter kanonik kalacaktı; o şartla maliyet tanım gereği artar, kazanç sıfırdır — sonucu önceden belli olan şey ölçüm değildir, sayı kılığına girmiş bir ÖLÇÜLEMEDİ'dir. Aday projenin bağımsız denetçisi ayrıca iki defterin bir arada yaşamasının orada bilinen bir kusur sınıfını doğuracağını gösterdi. Yani bu araç, hâlâ gerçek bir projede bir hafta boyunca kullanılmış değildir ve bu satır o boşluğun kendisidir.
Karmaşıklık borcu bilinçli olarak açık bırakıldı. Motorun sekiz fonksiyonu projenin kendi eşiğini aşıyor, beşi CC 20'nin üstünde. 14 Ağu 2026'da bu bölme işi KESİLDİ: ölçülebilirliği zayıflatmıyor, yalnız okunabilirliği. Kesim gizlenmiyor, burada duruyor.
Bu araç üç dış denetçiye verildi. İlk ikisinin kararı KUR oldu; üçüncüsü son iki
turunda DÜZELT dedi. Bulgular ve kapatılışları denetim/ ile
skill/references/denetim-yaniti.md içindedir.
İki şeyi ayrı yazmak gerekiyor:
Fable 5 Max); diğer ikisinin
çıktısı bu depoda yok. Yani "üç dış denetçi" ifadesi depodan tek tek doğrulanamaz.🔴 Tur sayısı ölçülemedi, o yüzden burada sayı yazmıyoruz.
denetim/2026-08-01_denetciye-not.md "toplam on iki tur" diyor, dökümünü yedi + üç +
iki olarak veriyor ve üstüne "paketten sonra iki tur daha" ekliyor; bu README bir süre
"on üç" yazdı. Üç ayrı sayı, hiçbiri depodan tek tek sayılamıyor. Aynı belge bunu kendi
üstünde zaten uygulamıştı: "doğrulanamaz bir sayı, güven parası olarak kullanılamaz."
Bu satırın kendisi, aracın vaadinin kendi kapağında sınanmasıdır — bir kapı bunu
yakalamadı, dışarıdan bir denetçi yakaladı (bkz. denetim/2026-08-15_*).
Açık bulgular kapanmadan bu araç "denetimden geçti" diye sunulmaz.
MIT. Tam metin: LICENSE.
Bu bölüm bir süre "henüz seçilmedi, tüm hakları saklıdır" diyordu.
LICENSEeklendikten sonra aynı depo iki farklı lisans durumu söyledi ve bunu hiçbir kapı ölçmüyordu (ölçüldü: 10 Ağu 2026). Belge de bir arayüzdür ve yalan söyleyebilir — bu depo bunu kendi kapağında bir kez yaşadı.
Python
99.1%
A portable project-memory gate system for AI agents. Single-file, pure Python stdlib, zero dependencies. A gate that does not bite has no verdict.
Python
1
127 commits
updated Sep 30, 2026
Taşınabilir bir proje hafızası kapı sistemi. Tek dosyalık saf Python motoru (stdlib, sıfır bağımlılık) bir projenin hafıza dosyalarını yönetir ve ölçer.
Durum: geliştirme aşamasında, henüz kurulmadı ve yayımlanmadı. Bu depo CI ölçümü ücretsiz koşabilsin diye publictir — bir yayın değildir. PyPI paketi, marketplace girişi ya da duyuru yoktur.
Üç cümle:
Bu alanda talimat dosyası (CLAUDE.md, AGENTS.md), hafıza katmanı (mem0, Letta, Zep) ve memory-bank kalıbı çok. Onlarda olmayan üç şey:
hafiza.py isir her kapı için bilerek bir açık üretir ve yakaladığını
kanıtlar. Isırmayan kapının "temiz" hükmü geçersizdir.KAÇTI demeli. Demiyorsa komşu bir sınıfı ölçüyordur.ÖLÇÜLEMEDİ PASS'tan ayrı üçüncü bir
hükümdür ve çıkış kodu bile bunu ayırır. (Bu üçüncüsü özgün değil — GNU
Automake'in 77 = SKIP'i ve pytest'in skip/xfail'i aynı geleneğe ait;
yeni olan, bunu bir hafıza/doküman kapısına taşımak.)python3 skill/scripts/hafiza.py kur --kok=<proje> --ad "<Proje Adı>"
python3 skill/scripts/hafiza.py kapi --kok=<proje> # kapıları koş, hüküm ver
python3 skill/scripts/hafiza.py isir --kok=<proje> # kapıların ısırdığını kanıtla
İlerlemiş bir projede kur değil devral kullan. Ayrıntı: skill/SKILL.md.
Çıkış kodları — kapi: 0 yeşil · 1 kırmızı · 2 kullanım hatası ·
3 ölçüm yapılamadı, hüküm yok · 5 yalnız --kapsam-zorla ile: hüküm
yeşil ama kapsam eksik (? ile işaretli en az bir şey ölçülmedi).
isir: 0 hepsi ısırdı · 1 kapı kör ·
2 ölçülemeyen mutant · 4 temiz sürüm zaten FAIL.
skill-kur: 0 kuruldu ya da zaten kurulu · 1 kurulum ölçümü tutmadı (kurulmadı) ·
2 kullanım hatası ya da hedefte FARKLI bir kurulum var (hiçbir şey değişmez).
Yardımcı komutlar
python3 skill/scripts/hafiza.py skill-kur # skill'i ~/.claude/skills/hafiza-kur/ altına kopyalar + ölçer
python3 skill/scripts/hafiza.py surum # sürüm + motorun KENDİ sha256'sı
python3 skill/scripts/hafiza.py hook --kur --kok=<proje> # pre-commit kapısı kurar
python3 skill/scripts/hafiza.py kapi --kok=<proje> --kapsam-zorla # CI için
skill-kur, skill/ dizinini Claude Code'un skill klasörüne kopyalar ve kopya üzerinde
ölçer (motor bit-bit · envanter · kopyadaki motorun surum SHA'sı); --proje <kök> ile
<kök>/.claude/skills/ altına kurar. Hedefte FARKLI bir kurulum varsa durur; --guncelle
eskisini ~/.claude/hafiza-kur-yedek/ altına TAŞIR (silmez). Cowork ve claude.ai bu klasörü
okumaz — orada hafiza-kur.skill'i claude.ai'ye yükle.
kur, ağaçta başka bir aracın defterini tanırsa (CLAUDE.md, AGENTS.md,
DURUM.md, memory-bank/ …) durur ve devral önerir — belge bunu zaten
söylüyordu, artık kod da zorluyor. Bilerek geçmek için --yine-de; geçiş
zincire düşer.
| Dizin | Ne |
|---|---|
skill/ | .skill paketinin tek gerçek kaynağı — SKILL.md + references/ + scripts/ |
skill/scripts/ | Motor (hafiza.py) ve kanıt koşucuları (t_y3.py, t_y42.py). Motorun ikinci bir kopyası yoktur. |
faz0/ | Ölçüm altyapısı. Koda dokunmaz: ortam sınıfı, Windows probu, otomatik sabotaj |
denetim/ | Bağımsız denetim turlarının defteri |
.github/workflows/ | 3 platform × 2 Python + ortam sınıfı + kod kalitesi |
CLAUDE.md | Kalıcı protokol. Çalışmaya başlamadan önce oku. |
Beyana güvenme; bu deponun kuralı bu.
cd skill/scripts
mkdir -p deneme && git init -q deneme
python3 hafiza.py kur --kok=deneme --ad "Deneme"
python3 hafiza.py isir --kok=deneme # taze projede: 67/67 + 2 SINANMADI, exit 2
python3 hafiza.py not --kok=deneme --konu=genel-durum --metin="ilk not"
python3 hafiza.py derle --kok=deneme
python3 hafiza.py isir --kok=deneme # derle sonrası: 69/69, exit 0
python3 t_y3.py # 20 senaryo, temiz hata
python3 t_y42.py # 58 senaryo
Mutant sayısını bağlamsız okuma: 69/69 yalnız derle koşulmuş projede
doğrudur. Taze bir projede M-H1b ve M-DEVIR ön-koşulsuz kalır — bu sağlıklı
bir projedir ve çıkış kodu 2'dir.
Ortam sınıfını ölçmek için (root gerekir):
sudo bash faz0/ortam_olcum.sh # root olmayan kullanıcı · dolu disk · salt-okunur
python3 faz0/sabotaj.py # her fail() tek tek kapatılır -> kapsam envanteri
Bunlar gizlenmiyor; skill/SKILL.md §9'da tam listesi var. En önemlileri:
Yeniden çıpalama engellenemez, yalnız görünür kılınır. Dosya tabanlı bir şemada yazma erişimi olan bir aktöre karşı bütünlük garantisi matematiksel olarak imkânsızdır. Doktrin: tamper-evidence, tamper-proof değil.
Zincir anahtarsızdır. Depo-içi bir zincir, tutarlı biçimde N dosyayı düzenleyen bir aktörü durduramaz; yaptığı, maliyeti 1 hamleden N tutarlı hamleye çıkarmaktır.
Beyanlı gevşeklik gerçek bir kaçış deliğidir. politika_gerekce ile bir
kapı kapatılabilir; gizlenemez ama kullanılabilir. Kaçış yolu olmayan kapı,
kırılan kapıdır.
Disiplin nihayetinde insana/ajana bağlıdır. Fragman yazılmazsa sistem boş döner. Git hook bunu kısmen zorlar, tamamen değil.
Uzun hafıza her zaman iyi değildir. Girdi uzadıkça model başarımı düşer; bu yüzden tavan vardır ve canlı dosya yol taşır, metin taşımaz.
Platform hükmü eşit değildir. capraz.ymldeki adımlar iki sınıftır: KAPI
(continue-on-error YOK — üç platformlu MUTANT bataryası: h1/h4/h10/h12/h14
kenar mutantları, altın çıktı/ölçüt/küme ailesi, yapı kapısı, karmaşıklık
ölçütü ve benzerleri) ve ÖLÇÜM (continue-on-error: true — kanıt koşucuları,
Y-1/Y-3 probları, ortam sınıfı, kalite taraması). Hangi adımın hangi sınıfta
olduğu ve kaçının bu bayrağı taşıdığı capraz.ymlden okunur; sayı burada
yazılmaz (bir kez yazıldı, iki gün içinde bayatladı). Tek belgelenmiş istisna
h9_kesme_mutantidir: chown POSIX'e özgü olduğu için ubuntu kolu KAPI,
macOS/Windows kolları platform sınırı nedeniyle ÖLÇÜM (capraz.ymlde
gerekçesiyle yazılı). Motorda platforma özgü tek
dal sys.platform == "win32" altındadır ve faz0/win_dal_mutanti.py onu ölçer:
envanter ve davranış kapıları temiz, 4/4 mutant ayrı eksende ısırıyor. Ama o
aracın kendi hükmü "YEŞİL SINIRLI": üçüncü kapısı (gerçek win32 üzerinde
canlı koşum) yalnız Windows kolunda çalışır, diğer iki platformda ÖLÇÜLEMEDİ
basar. Yani hüküm vardır ama her platformda aynı ağırlıkta değildir.
Bu madde bir süre "o dal henüz bir mutantla ölçülmemiştir" diyordu. 16 Ağu 2026'da ölçüldü: cümle bayatlamıştı — mutant zaten vardı ve ısırıyordu. Tazeliği kendin sına:
python3 faz0/win_dal_mutanti.py
macOS'a özgü kod yolu ise hiç yoktur; macOS'un bilinen mayını (dosya adlarında NFC/NFD ayrışması) bir kapıyla değil bir kaçınma kuralıyla yönetiliyor: disk adlarına Türkçe diyakritik konmuyor. Kural, kapı değil — ve kuralı zorlayan bir şey yok.
"Gerçek bir projede bir hafta fiilen kullanım" maddesi KESİLDİ (15 Ağu 2026). Sebep zaman değil, ölçütün kendisi: token kazancı ancak bu sistem mevcut defterin yerine geçerse dürüst ölçülebilir. Aday projede mevcut defter kanonik kalacaktı; o şartla maliyet tanım gereği artar, kazanç sıfırdır — sonucu önceden belli olan şey ölçüm değildir, sayı kılığına girmiş bir ÖLÇÜLEMEDİ'dir. Aday projenin bağımsız denetçisi ayrıca iki defterin bir arada yaşamasının orada bilinen bir kusur sınıfını doğuracağını gösterdi. Yani bu araç, hâlâ gerçek bir projede bir hafta boyunca kullanılmış değildir ve bu satır o boşluğun kendisidir.
Karmaşıklık borcu bilinçli olarak açık bırakıldı. Motorun sekiz fonksiyonu projenin kendi eşiğini aşıyor, beşi CC 20'nin üstünde. 14 Ağu 2026'da bu bölme işi KESİLDİ: ölçülebilirliği zayıflatmıyor, yalnız okunabilirliği. Kesim gizlenmiyor, burada duruyor.
Bu araç üç dış denetçiye verildi. İlk ikisinin kararı KUR oldu; üçüncüsü son iki
turunda DÜZELT dedi. Bulgular ve kapatılışları denetim/ ile
skill/references/denetim-yaniti.md içindedir.
İki şeyi ayrı yazmak gerekiyor:
Fable 5 Max); diğer ikisinin
çıktısı bu depoda yok. Yani "üç dış denetçi" ifadesi depodan tek tek doğrulanamaz.🔴 Tur sayısı ölçülemedi, o yüzden burada sayı yazmıyoruz.
denetim/2026-08-01_denetciye-not.md "toplam on iki tur" diyor, dökümünü yedi + üç +
iki olarak veriyor ve üstüne "paketten sonra iki tur daha" ekliyor; bu README bir süre
"on üç" yazdı. Üç ayrı sayı, hiçbiri depodan tek tek sayılamıyor. Aynı belge bunu kendi
üstünde zaten uygulamıştı: "doğrulanamaz bir sayı, güven parası olarak kullanılamaz."
Bu satırın kendisi, aracın vaadinin kendi kapağında sınanmasıdır — bir kapı bunu
yakalamadı, dışarıdan bir denetçi yakaladı (bkz. denetim/2026-08-15_*).
Açık bulgular kapanmadan bu araç "denetimden geçti" diye sunulmaz.
MIT. Tam metin: LICENSE.
Bu bölüm bir süre "henüz seçilmedi, tüm hakları saklıdır" diyordu.
LICENSEeklendikten sonra aynı depo iki farklı lisans durumu söyledi ve bunu hiçbir kapı ölçmüyordu (ölçüldü: 10 Ağu 2026). Belge de bir arayüzdür ve yalan söyleyebilir — bu depo bunu kendi kapağında bir kez yaşadı.
Python
99.1%