tillerhand 3.29.0 → 3.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,7 +23,7 @@ Hangi toplantı ve kararın konseye gideceğini proje profili belirler (`docs/wo
23
23
 
24
24
  | Durum (profil izin veriyorsa) | Konsey türü | Aşama 1 üyeleri | Başkan |
25
25
  |---|---|---|---|
26
- | Plan, faz sonu, canlıya alma toplantısı | **Toplantı konseyi** | rules.md §3'e göre seçilen kurul üyeleri (kendi modelleriyle) | `board-chair` |
26
+ | Plan, faz sonu, canlıya alma toplantısı | **Toplantı konseyi** | rules.md §3'e göre seçilen kurul üyeleri (inceleme rolünün modeliyle) | `board-chair` |
27
27
  | Görev sonu toplantısında RET çıktı | Toplantı konseyi (sadece aşama 2 ve 3) | RET veren üye + o toplantının diğer üyeleri | `board-chair` |
28
28
  | Tek yönlü kapı kararı (Hafif/Standart: sadece veritabanı ve auth; Tam: hepsi; `docs/workflow/decision-protocol.md` §2a) veya her profilde `/board council <soru>` | **Karar konseyi** | 3 × `council-advisor`: `haiku`, `sonnet`, `opus` (aynı soru, farklı model) | `board-chair` |
29
29
 
@@ -14,11 +14,11 @@
14
14
 
15
15
  | Toplantı | Ne zaman | Kim katılır | Model |
16
16
  |---|---|---|---|
17
- | **Plan** | `/plan-task` sonunda, kullanıcı onayından önce | `board-product` + `board-architect` + değişikliğe ilgili üyeler (en fazla 4) | üyenin kendi modeli |
18
- | **Görev sonu** | `/build` sonunda, "bitti" demeden önce | Değişikliğe ilgili üyeler (en fazla 3) | üyenin kendi modeli |
19
- | **Commit (hafif)** | Her `git commit` öncesi (hook zorunlu kılar) | Değişen dosyalara ilgili en fazla 2 üye; sadece değişen satırları (diff) inceler | her zaman `haiku` |
20
- | **Faz sonu** | Faz bitince (`/wrap-up` önerir) veya `/board convene phase-end` | Tüm kurul | üyenin kendi modeli |
21
- | **Canlıya alma** | `/release ilk` | Tüm kurul | üyenin kendi modeli |
17
+ | **Plan** | `/plan-task` sonunda, kullanıcı onayından önce | `board-product` + `board-architect` + değişikliğe ilgili üyeler (en fazla 4) | inceleme rolü (`docs/workflow/models.md`) |
18
+ | **Görev sonu** | `/build` sonunda, "bitti" demeden önce | Değişikliğe ilgili üyeler (en fazla 3) | inceleme rolü (`docs/workflow/models.md`) |
19
+ | **Commit (hafif)** | Her `git commit` öncesi (hook zorunlu kılar) | Değişen dosyalara ilgili en fazla 2 üye; sadece değişen satırları (diff) inceler | her zaman `haiku`, effort `low` |
20
+ | **Faz sonu** | Faz bitince (`/wrap-up` önerir) veya `/board convene phase-end` | Tüm kurul | inceleme rolü (`docs/workflow/models.md`) |
21
+ | **Canlıya alma** | `/release ilk` | Tüm kurul | inceleme rolü (`docs/workflow/models.md`) |
22
22
 
23
23
  Sadece dokümantasyon değişikliği (`.md`, `docs/`) içeren commit'ler denetimden muaftır.
24
24
 
@@ -45,7 +45,7 @@ Kurulda olmayan bir üyeyi çağırma; ilgili alan kurulda yoksa durum bloğunda
45
45
 
46
46
  1. **Limit kontrolü** (`docs/workflow/usage-limits.md`): Seviye sarıysa üye sayısını yarıya indir; kırmızıysa kullanıcıya sor (kurulu hafiflet seçeneği dahil).
47
47
  1b. **Deterministik kapı** (commit, görev sonu, faz sonu; plan toplantısında yok): `node .claude/hooks/gate.mjs --run`. AGENTS.md → Komutlar'daki lint, tip kontrolü ve test ile Semgrep çalışır; sonuç değişiklik imzasıyla saklanır. Kırmızıysa veya boşsa (hiçbir kontrol çalışmadı) commit kapısı açılmaz: önce düzelt ya da Komutlar'ı doldur. Kullanıcı ara commit için açıkça isterse `node .claude/hooks/commit-gate.mjs --skip "kullanıcı isteği"` (her zaman onaya sorulur). Kapı "komut onayı gerekli" derse komutları kullanıcıya göster; onaylarsa `node .claude/hooks/gate.mjs --approve` (yeni veya değişen komut onaysız çalışmaz).
48
- 2. **Üyeleri paralel çalıştır** (Agent aracı, her üye ayrı alt ajan). Her üyeye şunları ver: toplantı türü, kapsam (plan metni / diff aralığı / faz), görev kodu, kabul kriterleri ve kapı çıktısı (varsa). Commit toplantısında `model: "haiku"` ver.
48
+ 2. **Üyeleri paralel çalıştır** (Agent aracı, her üye ayrı alt ajan). Her üyeye şunları ver: toplantı türü, kapsam (plan metni / diff aralığı / faz), görev kodu, kabul kriterleri ve kapı çıktısı (varsa). Çağrıda inceleme rolünün `model` ve `effort`'unu ver (`node .claude/hooks/models.mjs --show`); commit toplantısında `model: "haiku"`, `effort: "low"` ver.
49
49
  2b. **Konsey toplantısıysa** (§2) `.claude/board/council.md` aşama 1-4'ü uygula. Sentezi başkanın kararından kur; görüş ayrılığı satırına azınlık görüşünü yaz.
50
50
  3. **Sentezle** (ana ajan; konseyde başkanın kararına göre):
51
51
 
@@ -68,9 +68,9 @@ Kullanıcı commit denetimini o an için atlamak isterse açıkça söylemesi ge
68
68
 
69
69
  1. Proje tipine ve PRD'ye göre öneri (aşağıdaki tablo). AI eki varsa `board-ai`, kişisel veri varsa `board-privacy` mutlaka önerilir.
70
70
  2. Kullanıcıya **çoklu seçimle** sor (önerilenler işaretli). "Other" ile yeni bir uzman isteyebilir. Örneğin "Erişilebilirlik uzmanı", "Oyun tasarımcısı" veya "Fintech uyum uzmanı". Bu durumda mevcut şablon yapısıyla yeni bir `board-<ad>.md` yaz.
71
- 3. Model dağılımını onaylat. Önerilen karma: Mimar ve Güvenlik güçlü model (`sonnet`), diğerleri `haiku`.
71
+ 3. Model sorulmaz: üyeler inceleme rolünün modeli ve effort'uyla çalışır (`docs/workflow/models.md`).
72
72
  4. Seçilen her üye için `.claude/board/board-<role>.md` dosyasını `.claude/agents/board-<role>.md`'ye kopyala ve **"Bu proje" bölümünü doldur**: ürün özeti, seçilen stack, kritik akışlar, bu role özel riskler. `security-auditor` zaten `.claude/agents/` altında.
73
- 5. `docs/workflow/board.md` → durum, üye tablosu ve commit denetimi satırını doldur.
73
+ 5. `docs/workflow/board.md` → durum, üye tablosu (Model sütununa "inceleme rolü") ve commit denetimi satırını doldur.
74
74
  6. Kullanıcıya kurulu tanıt: Her üye ne yapar, ne zaman devreye girer, tahmini maliyeti nedir (tek satır).
75
75
  7. Yeni ajanlar oturum yeniden başlatıldığında yüklenir. Kullanıcıya bunu söyle; bu oturumda gerekirse üyeyi genel amaçlı alt ajana rol dosyasının içeriğini vererek çalıştır.
76
76
 
@@ -18,7 +18,7 @@ Bu bir **9 adımlı uyum sihirbazı** (0-9). `/start`'ın var olan kod için ola
18
18
  ## Adım 0: Hazırlık
19
19
 
20
20
  1. `docs/workflow/progress.md` → `**Aktif faz:** Başlangıç (uyum)`, `**Başlangıç adımı:** 0/9`.
21
- 2. `/start` Adım 0'daki şu maddeleri aynen uygula: Profil (0), anlatıcı mod (0b), araç (0c), auto memory (0d), ortam kontrolü (1), eklentiler (2), caveman (3), kod haritası (5), bildirimler (6), pano (6b). Var olan projede kod haritası daha da faydalıdır; önerilen seçenek "Kur" olsun.
21
+ 2. `/start` Adım 0'daki şu maddeleri aynen uygula: Profil (0), anlatıcı mod (0b), araç (0c), auto memory (0d), model ve effort (0e, `docs/workflow/models.md`), ortam kontrolü (1), eklentiler (2), caveman (3), kod haritası (5), bildirimler (6), pano (6b). Var olan projede kod haritası daha da faydalıdır; önerilen seçenek "Kur" olsun.
22
22
  3. **Tarama derinliği:** Limiti oku ve sor. Tahmini maliyetleri göster:
23
23
  - **Hızlı tarama (Önerilen, Pro'da):** Yapı, stack, testler, git geçmişi, belgeler. 5 saatlik limitin yaklaşık %10-20'si.
24
24
  - **Derin tarama:** Hızlı taramaya ek olarak seçilen bulgu raporları (`/findings-tech`, `-security`, `-ux` vb.). Rapor başına yaklaşık %8-15 daha. Hangi raporların çalışacağını çoklu seçimle sor.
@@ -7,8 +7,8 @@ argument-hint: [boş | setup | convene <plan|task|phase-end|release|konu> | coun
7
7
 
8
8
  Önce `.claude/board/rules.md` ve `docs/workflow/board.md`'yi oku.
9
9
 
10
- - **Boş:** Kurulun durumunu göster: üyeler, modelleri, son 5 toplantı ve sonuçları, açık kritik bulgular, commit denetimi açık/kapalı. Kurul kurulmamışsa `/board setup` öner.
11
- - **`setup`:** rules.md §5'i uygula. Kurul zaten varsa, ne yapılacağını sor: üye ekle / üye çıkar / model değiştir / "Bu proje" bölümlerini güncel stack'e göre yenile.
10
+ - **Boş:** Kurulun durumunu göster: üyeler, inceleme rolünün modeli (`node .claude/hooks/models.mjs --show`), son 5 toplantı ve sonuçları, açık kritik bulgular, commit denetimi açık/kapalı. Kurul kurulmamışsa `/board setup` öner.
11
+ - **`setup`:** rules.md §5'i uygula. Kurul zaten varsa, ne yapılacağını sor: üye ekle / üye çıkar / "Bu proje" bölümlerini güncel stack'e göre yenile. Model buradan değişmez: üyeler inceleme rolüyle çalışır (`docs/workflow/models.md`).
12
12
  - **`convene <tür>`:** rules.md §4'ü uygula.
13
13
  - `plan`: son onaylanmamış plan
14
14
  - `task`: aktif görevin değişiklikleri (`git diff`)
@@ -7,9 +7,11 @@ Görev: $ARGUMENTS
7
7
  Boşsa `docs/workflow/progress.md` → "Sıradaki adım" veya `docs/product/roadmap.md`'deki ilk işaretsiz görevi al.
8
8
 
9
9
  0. **Limit ve bağlam:** Limiti oku, 5 saatlik yüzdeyi ve başlangıç saatini not et (maliyet günlüğü için). Bağlam %50'yi geçmişse önce `/wrap-up` + `/clear` öner. Seviye sarı/kırmızıysa veya tahmin kalan payı aşıyorsa bunu tek satırla söyle ve başla (`docs/workflow/usage-limits.md` §3; soru sorma). `docs/workflow/progress.md` → "Kaldığı yer" doluysa oradan devam et.
10
+ 0b. **Model ve effort** (`docs/workflow/models.md`): Son seçimi `node .claude/hooks/models.mjs --show` ile oku. İki AskUserQuestion çağrısı yap: önce dört soru, her rolün modeli (Opus / Sonnet / Haiku); sonra dört soru, her rolün effort'u (düşük / orta / yüksek / ekstra yüksek). Her soruda models.md'deki önerilen seçenek ilk sırada ve "(Önerilen)" etiketli; son seçim farklıysa o seçeneğin açıklamasına "son seçim" yaz. Cevabı `node .claude/hooks/models.mjs --set plan=<model>:<effort> code=… review=… docs=…` ile kaydet. Ana oturumun modeli veya effort'u plan rolünden farklıysa tek satırla `/model <ad>` ve `/effort <düzey>` öner. Soru modunda `maliyet` konusu kapalıysa sorma ve `--set` çalıştırma: son seçim geçerli kalır, durum bloğunda "otomatik" yaz.
10
11
  1. Görevi ve kabul kriterlerini bana tek cümleyle tekrar et. `docs/workflow/progress.md` → aktif görevi güncelle.
11
12
  2. Bu görev için onaylanmış bir plan yoksa ve 2'den fazla dosyaya dokunacaksa önce `/plan-task` adımlarını uygula (karar noktaları dahil), onay bekle.
12
- 2b. **Önce kabul testleri:** Görevin kabul kriterleri için testleri (kimlik test adında: `Ö-01.1`) ve gerekiyorsa saldırgan testlerini yaz, çalıştır ve **kırmızı** olduklarını göster. Sonra uygula.
13
+ 2b. **Kod rolüne devret (2b ve 3):** Agent aracıyla alt ajan çalıştır, çağrıda kod rolünün `model` ve `effort`'unu ver. İstemde: görev ve kabul kriterleri, onaylı plan, dokunulacak dosyalar, adım 3'teki kurallar, önce kırmızı testler. Alt ajan kullanıcıya soru soramaz: karar noktasında durup soruyu ve seçenekleri raporlamasını iste; soruyu sen sor, kararı günlüğe yaz, alt ajanı cevapla devam ettir. Alt ajan bitince diff'i ve test çıktısını kendin oku; adım 4'ten sonrası ana oturumda. Kullanıcıya görünen metni (humanizer) son haline sen getir.
14
+ **Önce kabul testleri:** Görevin kabul kriterleri için testleri (kimlik test adında: `Ö-01.1`) ve gerekiyorsa saldırgan testlerini yaz, çalıştır ve **kırmızı** olduklarını göster (alt ajanın kırmızı çıktısını bana göster). Sonra uygula.
13
15
  3. Uygula. Kurallar:
14
16
  - **Uygularken yeni bir karar noktası çıkarsa dur ve sor** (`docs/workflow/decision-protocol.md`). Tahmin edip devam etme.
15
17
  - Skill'ler (`docs/workflow/skills.md`): Kod için `ponytail:ponytail`, kritik akış için `mattpocock-skills:tdd`. Arayüz için seçilen yön skill'i + `impeccable:impeccable` (`DESIGN.md`'ye bağlı kal; yeni tasarım kararı gerekirse `/design`). Kullanıcıya görünen metin için `humanizer:humanizer`.
@@ -29,9 +31,9 @@ Boşsa `docs/workflow/progress.md` → "Sıradaki adım" veya `docs/product/road
29
31
  - API/iş mantığı → gerçek istek at veya testi çalıştır; isteği ve yanıtı göster.
30
32
  - Kanıt üretemiyorsan (cihaz, panel, ödeme gibi) bunu açıkça söyle ve benim yapmam gereken adımları yaz.
31
33
  6. Arayüz değiştiyse `impeccable:impeccable` → `critique` çalıştır; önemli bulguları düzeltip düzeltmeyeceğimi sor.
32
- 6b. **Görev sonu kurul toplantısı** (`.claude/board/rules.md`; kurul kurulduysa): Değişikliğe ilgili en fazla 3 üye. RET varsa görev bitmez; bulguyu ve seçenekleri sor. Toplantıyı `docs/workflow/board.md` günlüğüne yaz.
34
+ 6b. **Görev sonu kurul toplantısı** (`.claude/board/rules.md`; kurul kurulduysa): Değişikliğe ilgili en fazla 3 üye, inceleme rolünün `model` ve `effort`'uyla. RET varsa görev bitmez; bulguyu ve seçenekleri sor. Toplantıyı `docs/workflow/board.md` günlüğüne yaz.
33
35
  7. `AGENTS.md` → "Bitti tanımı" listesini tek tek kontrol et.
34
- 8. Kapsam kalkanını kapat (komut kullanıcıya sorulur): `node .claude/hooks/freeze-guard.mjs --plan-end`. `docs/product/roadmap.md`'de görevi işaretle; PRD'de sadece testi yeşil olan kriterleri işaretle. Testleri JUnit raporuyla çalıştır (`docs/architecture/stack.md` → Kabul testleri) ki pano güncellensin. Limiti tekrar oku ve `docs/workflow/cost-log.md`'ye satır ekle (başlangıç/bitiş 5 saatlik %, süre dk).
36
+ 8. Kapsam kalkanını kapat (komut kullanıcıya sorulur): `node .claude/hooks/freeze-guard.mjs --plan-end`. `docs/product/roadmap.md`'de görevi işaretle; PRD'de sadece testi yeşil olan kriterleri işaretle. Testleri JUnit raporuyla çalıştır (`docs/architecture/stack.md` → Kabul testleri) ki pano güncellensin. Limiti tekrar oku ve `docs/workflow/cost-log.md`'ye satır ekle (başlangıç/bitiş 5 saatlik %, süre dk). Roadmap, cost-log ve progress yazımını tek alt ajan çağrısıyla doküman rolüne ver (`model`, `effort`); sonucu kontrol et (progress.md'nin kalın etiketli satırları durum çubuğu ve pano için aynı biçimde kalmalı).
35
37
  9. Rapor ver:
36
38
  - Ne yapıldı (2-3 satır)
37
39
  - Bu görevde alınan kararlar (kullanıcı / otomatik)
@@ -39,5 +41,6 @@ Boşsa `docs/workflow/progress.md` → "Sıradaki adım" veya `docs/product/road
39
41
  - Benim nasıl test edeceğim (adım adım)
40
42
  - Önerilen commit mesajı
41
43
  - Kontrol edemediğin veya şüpheli olduğun yerler
44
+ - Görevde bir davranışını düzelttiysem ya da tercih söylediysem: aynı AskUserQuestion çağrısında ayrı bir çoklu seçim sorusu olarak "Tercih olarak kaydedeyim mi?" (AGENTS.md → kural 9, varsa; seçilenler `prefs.mjs --add`). Not yoksa sorma.
42
45
  - Sonra ne yapalım? AskUserQuestion ile sor: `/review-changes` ve commit (Önerilen) / sıradaki göreve geç / bu görevde değişiklik iste. Commit'te hafif kurul denetimi otomatik istenir (commit kapısı hook'u). Commit atıldıktan ve testler yeşilken çalışan nokta kaydet: `node .claude/hooks/checkpoint.mjs --save "<görev kodu> bitti, testler yeşil"` (`/rollback` buraya döner).
43
46
  - Durum bloğu
@@ -8,7 +8,7 @@ Türler: $ARGUMENTS (boşsa: tech, business, security, ux, perf, legal)
8
8
  1. **Limit:** Tam set çok pahalıdır (Pro planda 5 saatlik limitin büyük kısmı). Limiti oku. Her tür için tahmini maliyeti göster ve AskUserQuestion ile **çoklu seçimle** sor: hangi türler çalışsın? Seviye sarı veya kırmızıysa en kritik 2 türü (tech + security) öner.
9
9
  1b. **Paket:** `security` seçildiyse `node .claude/hooks/tools.mjs --required guvenlik`. Kapalıysa alt ajanları başlatmadan önce bir kez sor (alt ajanlar oturumun eklentilerini kullanır).
10
10
  2. **Ön bilgiler:** Business ve legal için `docs/findings/config.md` boşsa sektör ve uzman rolünü şimdi bir kez sor; alt ajanlar tekrar sormasın.
11
- 3. **Paralel çalıştır:** Seçilen her tür için ayrı bir alt ajan başlat (Agent aracı, tek mesajda, arka planda). Her ajana şu talimatı ver: "`.claude/findings/protocol.md` adımlarını `.claude/findings/lenses/<tür>.md` ile uygula; raporu yaz; yol haritası sorusunu SORMA, önerdiğin görevleri raporun düzeltme planında bırak."
11
+ 3. **Paralel çalıştır:** Seçilen her tür için ayrı bir alt ajan başlat (Agent aracı, tek mesajda, arka planda; inceleme rolünün `model` ve `effort`'u, `docs/workflow/models.md`). Her ajana şu talimatı ver: "`.claude/findings/protocol.md` adımlarını `.claude/findings/lenses/<tür>.md` ile uygula; raporu yaz; yol haritası sorusunu SORMA, önerdiğin görevleri raporun düzeltme planında bırak."
12
12
  4. **Birleşik özet:** Tüm raporlar bitince `docs/findings/summary-YYYY-AA-GG.md` yaz:
13
13
  - Tür başına sağlık puanı ve önceki ile farkı
14
14
  - Tüm türlerden en yüksek puanlı 10 bulgu (tek liste, puana göre)
@@ -7,6 +7,7 @@ Mod: $ARGUMENTS (boş = sadece A bölümü, her sürüm; `first` = A + B bölüm
7
7
 
8
8
  Kaynak listeler: `docs/operations/release-checklist.md`, `docs/architecture/stack.md` → "Canlıya alma", `docs/security/checklist.md` (ilk lansmanda tamamı), varsa `docs/ai/guide.md` → "Canlıya alma" ve `docs/product/launch.md`.
9
9
 
10
+ 0. **Model ve effort** (`docs/workflow/models.md`): `/build` adım 0b'deki iki ekranı sor ve kaydet. Denetim ajanları (kurul, `security-auditor`) inceleme rolüyle çalışır.
10
11
  1. **Otomatik kontrol edebildiklerini çalıştır:**
11
12
  - `first` modunda önce limiti oku; tam denetim pahalıdır (`docs/workflow/usage-limits.md`). `node .claude/hooks/tools.mjs --required guvenlik` kapalıysa açmayı sor. Kurul kurulduysa **canlıya alma kurul toplantısı** (tüm kurul, `.claude/board/rules.md`) yap.
12
13
  - `first` modunda önce `/findings-all security,legal,perf` öner (tahmini maliyetiyle); raporlardaki Kritik bulgular yayını engeller.
@@ -12,7 +12,7 @@ Konu: $ARGUMENTS (boşsa `docs/product/prd.md` → problem ve değer önerisi)
12
12
  1. Konuyu tek cümleyle tekrar et ve 3-6 arama terimi çıkar (Türkçe ve İngilizce).
13
13
  2. Limiti oku ve derinliği tahmini maliyetle sor:
14
14
  - **Hızlı (Önerilen, Pro'da):** Kategori başına en fazla 5 kaynak. 5 saatlik limitin yaklaşık %10-15'i.
15
- - **Derin:** Kategori başına 10-15 kaynak, üç kategori paralel alt ajanlarla. Yaklaşık %25-35.
15
+ - **Derin:** Kategori başına 10-15 kaynak, üç kategori paralel alt ajanlarla (doküman rolünün `model` ve `effort`'u, `docs/workflow/models.md`). Yaklaşık %25-35.
16
16
  3. Kategorileri çoklu seçimle onaylat: akademik makaleler, GitHub projeleri, ticari ürünler.
17
17
 
18
18
  ## 1. Akademik makaleler
@@ -8,7 +8,7 @@ argument-hint: [boş = commit edilmemiş değişiklikler | main..HEAD | commit h
8
8
  Kendi yazdığın kodu kendin inceleme; bağımsız ajanlara ver.
9
9
 
10
10
  1. `git diff --stat` ile değişen dosyaları gör.
11
- 2. **`code-reviewer`** alt ajanını çalıştır. Ona aralığı ve (biliniyorsa) görev kodunu ver. Görevin `docs/product/specs/` altında spec'i varsa onu da ver: beklenen davranış karşılandı mı, değişmemesi gereken davranış bozuldu mu?
11
+ 2. **`code-reviewer`** alt ajanını inceleme rolünün `model` ve `effort`'uyla çalıştır (`docs/workflow/models.md`; adım 3 de öyle). Ona aralığı ve (biliniyorsa) görev kodunu ver. Görevin `docs/product/specs/` altında spec'i varsa onu da ver: beklenen davranış karşılandı mı, değişmemesi gereken davranış bozuldu mu?
12
12
  3. Değişiklik şunlardan birine dokunuyorsa **`security-auditor`** alt ajanını da paralel çalıştır: auth, yetki, ödeme, webhook, dosya yükleme, kişisel veri, DB erişim kuralları, ortam değişkenleri, AI/LLM çağrıları.
13
13
  Kurul kurulduysa değişikliğe ilgili kurul üyelerini de ekle (`.claude/board/rules.md` §3, en fazla 3; limit sarıysa 1).
14
14
  Aynı anda `ponytail:ponytail-review` ile gereksiz kod, aşırı mühendislik ve yük altında kırılacak yerlere bak. Arayüz değiştiyse `impeccable:impeccable` → `audit` da çalışsın.
@@ -12,7 +12,7 @@ Bu bir **9 adımlı sihirbaz** (0-9). Kullanıcı hiçbir şeyi bilmiyormuş gib
12
12
  **Kararlar anında kaydedilir:** Her kararı verildiği anda `docs/decisions/log.md` → Karar günlüğüne yaz (adım sonunu bekleme). Pano kararları ve adım ilerlemesini oradan canlı gösterir.
13
13
 
14
14
  **Pahalı adımlar** (Adım 4'teki karar konseyi, Adım 6 kurul, Adım 7 tasarım): Başlamadan tahmini maliyeti (`docs/workflow/usage-limits.md` tablosu) ve kalan limiti tek satırla söyle. Adım kaldırılmaz; seçim kullanıcıdadır. Ayrıntılı derinlikte bildir ve yap. Hızlı ve Standart'ta sor: **Yap** / **Hafif yap** / **Sonraya bırak**. Önerilen: Hızlı'da "Sonraya bırak", Standart'ta "Hafif yap".
15
- - Hafif yap: Adım 4'te konsey yerine tek danışman görüşü; Adım 6'da önerilen 3 üye tek onayla, hepsi `haiku`; Adım 7'de tek önizleme turu (stil yönü), renk ve yazı tipi o yönün önerilen setinden.
15
+ - Hafif yap: Adım 4'te konsey yerine tek danışman görüşü; Adım 6'da önerilen 3 üye tek onayla; Adım 7'de tek önizleme turu (stil yönü), renk ve yazı tipi o yönün önerilen setinden.
16
16
  - Sonraya bırak: Adım 4'te tek yönlü kararı yine kullanıcı verir (önerilen + gerekçe ile). Adım 6 ve 7 için Faz 0'a görev eklenir (`/board setup`, `/design genel`).
17
17
 
18
18
  ---
@@ -40,6 +40,7 @@ Bu bir **9 adımlı sihirbaz** (0-9). Kullanıcı hiçbir şeyi bilmiyormuş gib
40
40
  - **Kapalı (Önerilen):** Projenin hafızası `AGENTS.md`, `progress.md` ve karar günlüğünde; görünür ve git'te. Tekrarlayan hatalar `/fix-bug` ile "Öğrenilen kurallar"a önerilir. `.claude/settings.json`'a `"autoMemoryEnabled": false` ekle (dosyayı birleştir).
41
41
  - **Açık:** Tercihlerin oturumlar arasında kendiliğinden hatırlanır; notlar `AGENTS.md` ile çelişebilir. Ayara dokunma.
42
42
  Seçimi `**Profil:**` satırına ekle (örn. `hafıza: kapalı`). Kaynak: code.claude.com/docs/en/memory (2026-10-25).
43
+ 0e. **Model ve effort** (`docs/workflow/models.md`): `/build` adım 0b'deki iki ekranı sor ve kaydet. Planlama işleri ana oturumda, araştırma ve tarama doküman rolünde, kurul inceleme rolünde çalışır; Adım 6'da model ayrıca sorulmaz.
43
44
  1. Ortamı kontrol et ve tek satırla raporla: `node --version`, `git --version` ve kitin yeri. İki kurulum yolu var: kökte `kit/kit.mjs` (template yolu) ya da `.kit.json` → `kit` alanındaki klasör (`init` ile kurulmuş, `type` boş). `kit` alanı `npx:tillerhand@<sürüm>` ise kit npm paketinden kurulmuştur. `local` ise klasörün bu makinedeki yolu git dışı `.kit.local.json` → `kit`'tedir; o dosya yoksa kullanıcıya kit klasörünü sor ya da `npx -y tillerhand@<.kit.json → version>` kullan. Klasörde zaten uygulama kodu varsa (`package.json`, `pyproject.toml`, `src/` vb.) dur ve `/adopt` öner.
44
45
  2. `docs/workflow/skills.md`'deki plugin'lerin skill'leri senin skill listende var mı bak. LSP eklentisi dil sunucusu ister: web ve mobil için `npm i -g typescript-language-server typescript`, backend için `npm i -g pyright` (global kurulum; kullanıcı onayıyla). **Eklentiler:** Proje ayarı eklentileri açar ama indirmez; kurulmamış olanlar yükleme hatası verir ve skill'leri gelmez. Kullanıcıya listeyi göster ve sor: "Proje ayarındaki eklentiler kurulsun mu?" Önce `node .claude/hooks/plugins-sync.mjs` ile eksikleri listele; onay gelirse `node .claude/hooks/plugins-sync.mjs --install` çalıştır. Betik eksikleri proje kapsamında kurar, `false` olanları (paket eklentileri: tasarım, güvenlik, yayın, video) kurup kapatır. Kullanıcıya tek cümleyle söyle: "Paketler kapalı gelir, ilgili komut gerektiğinde açmayı sorar; durum için `/tools`." Sonra kullanıcıdan `/reload-plugins` çalıştırmasını iste. claude CLI yoksa eksik eklentilerin `/plugin install x@y` komutlarını ver ve "Kurup devam edelim mi, eksik skill olmadan mı?" diye sor.
45
46
  3. `caveman:caveman` skill'ini yükle (rapor dili).
@@ -131,7 +132,7 @@ Pahalı adım: önce maliyeti söyle ve derinliğe göre sor (yukarıdaki "Pahal
131
132
  `.claude/board/rules.md` §5'i uygula:
132
133
  1. Tipe, PRD'ye ve seçilen stack'e göre kurul öner. Kurulun ne olduğunu kısaca anlat: Uzman ajanlar planı, görevi, her commit'i ve fazı denetler. Danışmandır; kritik bulguda durdurur; karar her zaman kullanıcıda.
133
134
  2. Üyeleri **çoklu seçimle** onaylat; yeni uzman eklenebileceğini söyle.
134
- 3. Model dağılımını onaylat (önerilen karma: Mimar + Güvenlik `sonnet`, diğerleri `haiku`). Pro planda tam kurul toplantısının tahmini maliyetini söyle (`docs/workflow/usage-limits.md`).
135
+ 3. Üyeler inceleme rolünün modeli ve effort'uyla çalışır (Adım 0e, `docs/workflow/models.md`); ayrıca sorma. Pro planda tam kurul toplantısının tahmini maliyetini söyle (`docs/workflow/usage-limits.md`).
135
136
  4. Commit denetimi açık mı kalsın? Varsayılan açık ve hafif: en fazla 2 üye, `haiku`, sadece diff.
136
137
  5. Ajan dosyalarını üret ve "Bu proje" bölümlerini doldur. `docs/workflow/board.md`'yi doldur.
137
138
  6. Yeni ajanların bir sonraki oturumda yükleneceğini söyle.
@@ -20,6 +20,7 @@ Bu oturumu kapatıyoruz. Bir sonraki oturum (veya `/clear` sonrası) sıfır ba
20
20
  7. `node .claude/hooks/cost.mjs` ve `node .claude/hooks/dashboard.mjs` ile `dashboard.html`'i yenile.
21
21
  7b. Bu oturumda AI'nın bilmediği için hata yaptığı proje bilgisi çıktıysa `AGENTS.md`'ye eklemeyi öner (onayla; sadece Claude Code'a özelse `/revise-claude-md` ile `CLAUDE.md`'ye). Aynı düzeltmeyi kullanıcı iki kez yaptıysa `/hookify <kural>` ile kalıcı kural öner. Kural `AGENTS.md`'de "Öğrenilen kurallar" bölümüne gider; biçim ve kaynak/tarih satırı `/fix-bug` 8. adımdaki gibi (kaynak: bu oturumdaki olay).
22
22
  8. Commit edilmemiş iş varsa commit mesajı öner. Commit'i onayımla at. Testler yeşilse çalışan nokta kaydet: `node .claude/hooks/checkpoint.mjs --save "oturum sonu: <kısa özet>"`.
23
+ 8b. **Kişisel tercihler** (AGENTS.md → kural 9, varsa): Bu oturumda kullanıcı bir davranışı düzelttiyse ya da tercih söylediyse, notları AskUserQuestion ile çoklu seçim olarak sor ve seçilenleri `node .claude/hooks/prefs.mjs --add` ile yaz. Not yoksa bu adımı atla, soru sorma.
23
24
  9. Faz bittiyse sırayla öner: `/findings-tech` (teknik borç taraması), `/board convene phase-end` (tam kurul, tahmini maliyetiyle birlikte), sonra `/retro`.
24
25
  10. Limiti ve bağlamı oku. Kalan 5 saatlik payı, sıfırlanma saatini ve bağlam %50'yi geçtiyse `/clear` önerisini sıradaki adımla birlikte söyle.
25
26
 
@@ -9,6 +9,7 @@ import { execFileSync } from 'node:child_process';
9
9
  import { readStatus, readText, sections, findSection, tally, tableRows } from './status-read.mjs';
10
10
  import { readLimits, summary, level, THRESHOLDS } from './usage.mjs';
11
11
  import { packageStatus, commandMode } from './tools.mjs';
12
+ import { readModels, modelsFile, modelsNote, ROLES } from './models.mjs';
12
13
  import { acceptanceStatus, accounts, flags, unitEconomics, feedback, learning, qaSummary, metrics, githubStatus, readContext, findingReports, FINDING_KINDS, producedAssets, costSummary, councilMinutes, spendAlarms, envWarnings, repeatedBugClasses } from './dashboard-data.mjs';
13
14
 
14
15
  const args = process.argv.slice(2);
@@ -297,7 +298,8 @@ const limitCard = (name, k) => {
297
298
  const limitSection = `
298
299
  <section class="card"><h3>Kullanım limiti</h3><div class="grid2 tight">${limitCard('5 saatlik', 'five_hour')}${limitCard('Haftalık', 'seven_day')}</div>
299
300
  <p class="muted small">${e(summary(limit))}</p>
300
- <h4>Bağlam penceresi</h4>${context ? `<div class="lim"><div class="lim-h"><b>Son oturum</b>${badge(context.percent >= 70 ? 'critical' : context.percent >= 50 ? 'warn' : 'good', `%${context.percent}`)}</div><div class="bar big ${context.percent >= 70 ? 'critical' : context.percent >= 50 ? 'warn' : 'good'}"><span style="width:${Math.min(100, context.percent)}%"></span><i style="left:50%"></i><i style="left:70%"></i></div><div class="muted small">%50'de /wrap-up + /clear önerilir · ${new Date(context.readAt).toLocaleString('tr-TR', { hour: '2-digit', minute: '2-digit' })} itibarıyla</div></div>` : empty('Bağlam bilgisi yok (durum çubuğu yazar).')}</section>
301
+ <h4>Bağlam penceresi</h4>${context ? `<div class="lim"><div class="lim-h"><b>Son oturum</b>${badge(context.percent >= 70 ? 'critical' : context.percent >= 50 ? 'warn' : 'good', `%${context.percent}`)}</div><div class="bar big ${context.percent >= 70 ? 'critical' : context.percent >= 50 ? 'warn' : 'good'}"><span style="width:${Math.min(100, context.percent)}%"></span><i style="left:50%"></i><i style="left:70%"></i></div><div class="muted small">%50'de /wrap-up + /clear önerilir · ${new Date(context.readAt).toLocaleString('tr-TR', { hour: '2-digit', minute: '2-digit' })} itibarıyla</div></div>` : empty('Bağlam bilgisi yok (durum çubuğu yazar).')}
302
+ <h4>Model ve effort · rol bazında</h4><div class="tw"><table><tbody>${Object.entries(readModels(modelsFile(root))).map(([r, v]) => `<tr><td>${e(ROLES[r])}</td><td class="nw">${e(v.replace(':', ' · '))}</td></tr>`).join('')}</tbody></table></div><p class="muted small">${modelsNote(modelsFile(root)) ? `${e(modelsNote(modelsFile(root)))}. ` : ''}/build her görevin başında sorar (docs/workflow/models.md).</p></section>
301
303
  <section class="card"><h3>Token ve maliyet · son 30 gün</h3>${tokenCost?.days.length ? (() => {
302
304
  const latest = tokenCost.days.slice(-14);
303
305
  const maxTokens = Math.max(...latest.map((g) => g.token));
@@ -205,7 +205,9 @@ export function scopeIssue(command, dir, root) {
205
205
  const vk = path.join(os.userInfo().homedir, '.vibe-kit');
206
206
  const touchesApproval = (y) => VIBE_KIT.test(y) || !/^\.\.|^$/.test(path.relative(y, vk)) && !path.isAbsolute(path.relative(y, vk));
207
207
  for (const h of targets) {
208
- if (touchesApproval(h) || touchesApproval(realPath(h))) return { decision: 'ask', reason: `${h}: kapı komut onayı kaydı (kullanıcı klasörü); kabukla değiştirilmez, node .claude/hooks/gate.mjs --approve kullanılır. Kullanıcı onayı gerekli.` };
208
+ if (touchesApproval(h) || touchesApproval(realPath(h))) return { decision: 'ask', reason: /tercihler\.md$/i.test(h)
209
+ ? `${h}: kişisel tercih dosyası (kullanıcı klasörü); kabukla değiştirilmez, node .claude/hooks/prefs.mjs --add / --remove kullanılır. Kullanıcı onayı gerekli.`
210
+ : `${h}: kapı komut onayı kaydı (kullanıcı klasörü); kabukla değiştirilmez, node .claude/hooks/gate.mjs --approve kullanılır. Kullanıcı onayı gerekli.` };
209
211
  const rel = relPath(realPath(h), groot);
210
212
  const k = protectedRule(rel) ?? protectedRule(`${rel}/`);
211
213
  if (k) return { decision: k[0], reason: k[0] === 'deny' ? `${rel}: ${k[2]}`
@@ -253,6 +255,7 @@ const PERMISSION_EQUIVALENT = [
253
255
  ['ask', /freeze-guard\.mjs['"]?\s+['"]?--plan-save\b/i, 'Kapsam kalkanının dosya listesi yazılıyor'],
254
256
  ['ask', /freeze-guard\.mjs['"]?\s+['"]?--plan-end\b/i, 'Kapsam kalkanı kapatılıyor'],
255
257
  ['ask', /commit-gate\.mjs['"]?\s+['"]?--skip\b/i, 'Commit kapısı ve kurul denetimi atlanıyor'],
258
+ ['ask', /prefs\.mjs['"]?\s+['"]?--(add|remove)\b/i, 'Kişisel tercih dosyası (~/.vibe-kit/tercihler.md) değişiyor'],
256
259
  ['ask', /(?<!(?:^|[\s'"=])(?:\.[\\/]|\$\{?CLAUDE_PROJECT_DIR\}?[\\/]?)?\.claude[\\/]?hooks[\\/]?commit-)gate\.mjs['"]?\s+['"]?--approve\b/i, 'Deterministik kapının çalıştıracağı komutlar onaylanıyor'],
257
260
  // Shell counterpart of the PROTECTED rule on file tools: a command that names a rule or guard file and writes/deletes is asked
258
261
  // (.git: the gate command approval and git hooks live there)
@@ -129,7 +129,9 @@ function hook() {
129
129
  const paths = g.files.map(({ path: p }) => realPath(path.resolve(g.dir, p)));
130
130
  // Gate command approval record (gate.mjs, in the user folder ~/.vibe-kit/): the AI must not write it by hand
131
131
  const approval = paths.find((p) => /[\\/]\.vibe-kit([\\/]|$)/i.test(p));
132
- if (approval) decide(g.tool, 'ask', `${approval}: kapı komut onayı kaydı; elle yazılmaz, node .claude/hooks/gate.mjs --approve kullanılır.`);
132
+ if (approval) decide(g.tool, 'ask', /tercihler\.md$/i.test(approval)
133
+ ? `${approval}: kişisel tercih dosyası; elle yazılmaz, node .claude/hooks/prefs.mjs --add / --remove kullanılır.`
134
+ : `${approval}: kapı komut onayı kaydı; elle yazılmaz, node .claude/hooks/gate.mjs --approve kullanılır.`);
133
135
  if (g.tool !== 'claude') {
134
136
  for (const p of paths) {
135
137
  const k = protectedRule(relPath(p, groot));
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+ // Model and effort per role (docs/workflow/models.md). /build, /start, /adopt and /release ask the user, then save the answer here.
3
+ // node .claude/hooks/models.mjs --show current choice (the recommended one if nothing is saved)
4
+ // node .claude/hooks/models.mjs --set plan=opus:high code=sonnet:high review=sonnet:high docs=haiku:high
5
+ // A role left out of --set keeps its current value. File: .claude/state/models.json (git-ignored, this project only).
6
+ // Aliases, not model IDs: in Claude Code opus/sonnet/haiku/fable always point to the newest model of that family.
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+ import { findRoot, isMain } from './shared.mjs';
10
+
11
+ export const ROLES = { plan: 'Planlama ve mimari', code: 'Kod yazma', review: 'İnceleme ve denetim', docs: 'Doküman ve araştırma' };
12
+ export const RECOMMENDED = { plan: 'opus:high', code: 'sonnet:high', review: 'sonnet:high', docs: 'haiku:high' };
13
+ export const MODELS = ['opus', 'sonnet', 'haiku', 'fable'];
14
+ export const EFFORTS = ['low', 'medium', 'high', 'xhigh'];
15
+
16
+ export const modelsFile = (root = findRoot()) => path.join(root, '.claude', 'state', 'models.json');
17
+
18
+ const valid = (role, value) => {
19
+ const [model, effort, extra] = String(value).split(':');
20
+ return Object.hasOwn(ROLES, role ?? '') && MODELS.includes(model) && EFFORTS.includes(effort) && extra === undefined;
21
+ };
22
+
23
+ // Saved choice over the recommended one; a value that does not pass the check (hand edit) falls back to the recommended
24
+ export function readModels(file = modelsFile()) {
25
+ let saved = {};
26
+ try { saved = JSON.parse(fs.readFileSync(file, 'utf8')); } catch { /* none yet */ }
27
+ return Object.fromEntries(Object.keys(ROLES).map((r) => [r, valid(r, saved?.[r]) ? saved[r] : RECOMMENDED[r]]));
28
+ }
29
+
30
+ // pairs: ['code=sonnet:medium', ...]. Returns an error text or null.
31
+ export function setModels(pairs, file = modelsFile()) {
32
+ if (!pairs.length) return `Kullanım: --set ${Object.entries(RECOMMENDED).map(([r, v]) => `${r}=${v}`).join(' ')}`;
33
+ const next = readModels(file);
34
+ for (const pair of pairs) {
35
+ const [role, value, extra] = pair.toLowerCase().split('=');
36
+ if (extra !== undefined || !valid(role, value)) return `Geçersiz: "${pair}". Rol: ${Object.keys(ROLES).join(', ')} · model: ${MODELS.join(', ')} · effort: ${EFFORTS.join(', ')} (örnek code=sonnet:medium)`;
37
+ next[role] = value;
38
+ }
39
+ try {
40
+ fs.mkdirSync(path.dirname(file), { recursive: true });
41
+ fs.writeFileSync(file, JSON.stringify(next, null, 2) + '\n');
42
+ } catch (e) {
43
+ return `Dosya yazılamadı (${e.code ?? e.message}): ${file}`;
44
+ }
45
+ return null;
46
+ }
47
+
48
+ // '' when a saved choice is in use; otherwise why the recommended values are shown
49
+ export function modelsNote(file = modelsFile()) {
50
+ if (!fs.existsSync(file)) return 'kayıt yok: önerilenler';
51
+ try { JSON.parse(fs.readFileSync(file, 'utf8')); return ''; } catch { return 'kayıt okunamadı: önerilenler; --set ile yeniden yaz'; }
52
+ }
53
+
54
+ export const showModels = (file = modelsFile()) => {
55
+ const m = readModels(file);
56
+ const note = modelsNote(file);
57
+ return Object.keys(ROLES).map((r) => `${r}: ${m[r].replace(':', ' / ')} (${ROLES[r]})${m[r] === RECOMMENDED[r] ? '' : ` · önerilen ${RECOMMENDED[r].replace(':', ' / ')}`}`).join('\n')
58
+ + (note ? `\n(${note})` : '');
59
+ };
60
+
61
+ if (isMain(import.meta.url)) {
62
+ const [mode, ...rest] = process.argv.slice(2);
63
+ if (mode === '--set') {
64
+ const error = setModels(rest);
65
+ if (error) { console.error(error); process.exit(1); }
66
+ console.log(showModels());
67
+ } else if (mode === '--show') {
68
+ console.log(showModels());
69
+ } else {
70
+ console.error('Kullanım: --show | --set plan=<model>:<effort> code=… review=… docs=…');
71
+ process.exit(1);
72
+ }
73
+ }
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env node
2
+ // Personal preferences: how this user likes to work (talk, questions, reports, code style, things to avoid).
3
+ // One file for all projects: ~/.vibe-kit/tercihler.md. Git never sees it; the session-start hook loads it every session.
4
+ // node .claude/hooks/prefs.mjs --list numbered list
5
+ // node .claude/hooks/prefs.mjs --add <kategori> "<tercih>" only with the user's approval (asked)
6
+ // node .claude/hooks/prefs.mjs --remove <no> (asked)
7
+ // Categories: konusma, sorular, raporlar, kod, kacin. A project rule goes to AGENTS.md → Öğrenilen kurallar, not here.
8
+ // Why a script: the AI never writes this file directly; one line per preference, no secrets, a size cap.
9
+ // The same rules apply when reading: any program on the machine can write this file, so what is loaded is checked
10
+ // again and is labeled as style preferences that cannot change permissions or rules.
11
+ import fs from 'node:fs';
12
+ import os from 'node:os';
13
+ import path from 'node:path';
14
+ import { findSecrets } from './guard-secrets.mjs';
15
+ import { isMain } from './shared.mjs';
16
+
17
+ export const CATEGORIES = { konusma: 'Konuşma', sorular: 'Sorular ve kararlar', raporlar: 'Raporlar', kod: 'Kod', kacin: 'Kaçınılacaklar' };
18
+ export const MAX_ITEMS = 40;
19
+ const MAX_LENGTH = 200;
20
+ const MAX_BYTES = 64 * 1024;
21
+
22
+ // os.homedir() follows HOME / USERPROFILE; the file name is fixed, so no other file can be written through it
23
+ export const prefsFile = () => path.join(os.homedir(), '.vibe-kit', 'tercihler.md');
24
+
25
+ // A heading is matched by key or title, ignoring case and Turkish letters (## kod, ## Kacinilacaklar)
26
+ const fold = (s) => s.toLocaleLowerCase('tr').normalize('NFD').replace(/[̀-ͯ]/g, '').replace(/ı/g, 'i').trim();
27
+ const categoryOf = (heading) => Object.keys(CATEGORIES).find((k) => fold(k) === fold(heading) || fold(CATEGORIES[k]) === fold(heading)) ?? null;
28
+ const clean = (s) => String(s ?? '').replace(/[\u0000-\u001f\u007f-\u009f]/g, ' ').replace(/\s+/g, ' ').trim();
29
+ const valid = (t) => t && t.length <= MAX_LENGTH && !findSecrets(t).length;
30
+
31
+ // items: preferences that pass the same checks as --add; unknown: non-empty lines that are not a preference
32
+ // (a hand edit the script cannot keep: it refuses to rewrite the file instead of dropping them)
33
+ export function parsePrefs(file = prefsFile()) {
34
+ const items = [], unknown = [];
35
+ let text = '';
36
+ try { if (fs.statSync(file).size > MAX_BYTES) return { items, unknown: ['(dosya 64 KB\'tan büyük)'] }; text = fs.readFileSync(file, 'utf8'); } catch { return { items, unknown }; }
37
+ let category = null;
38
+ for (const line of text.split(/\r?\n/)) {
39
+ const h = line.match(/^##\s+(.+)$/);
40
+ if (h) { category = categoryOf(h[1]); if (!category) unknown.push(line); continue; }
41
+ const m = line.match(/^[-*]\s+(.+)$/);
42
+ if (m && category) { const t = clean(m[1]); if (valid(t) && items.length < MAX_ITEMS) items.push({ category, text: t }); else unknown.push(line); continue; }
43
+ if (line.trim() && !/^#\s/.test(line) && !/^>/.test(line)) unknown.push(line);
44
+ }
45
+ return { items, unknown };
46
+ }
47
+ export const readPrefs = (file = prefsFile()) => parsePrefs(file).items;
48
+
49
+ function writePrefs(items, file) {
50
+ const lines = ['# Kişisel tercihler (TillerHand)', '',
51
+ '> Her oturumda AI\'ya yüklenir, tüm projelerinde geçerlidir. `node .claude/hooks/prefs.mjs --add` ve `--remove` ile değiştir; elle düzenlersen başlıkları ve "- " satırlarını koru.', ''];
52
+ for (const [key, title] of Object.entries(CATEGORIES)) {
53
+ const list = items.filter((p) => p.category === key);
54
+ if (list.length) lines.push(`## ${title}`, '', ...list.map((p) => `- ${p.text}`), '');
55
+ }
56
+ try {
57
+ fs.mkdirSync(path.dirname(file), { recursive: true });
58
+ fs.writeFileSync(file, lines.join('\n'));
59
+ } catch (e) {
60
+ return `Dosya yazılamadı (${e.code ?? e.message}): ${file}. Araç ev klasörüne yazamıyorsa satırı elle ekle.`;
61
+ }
62
+ return null;
63
+ }
64
+
65
+ // Returns { error } | { existing: <category> } | {}
66
+ export function addPref(category, text, file = prefsFile()) {
67
+ if (!Object.hasOwn(CATEGORIES, category ?? '')) return { error: `Kategori şunlardan biri olmalı: ${Object.keys(CATEGORIES).join(', ')}` };
68
+ const t = clean(text);
69
+ if (!t) return { error: 'Tercih metni boş.' };
70
+ if (t.length > MAX_LENGTH) return { error: `Tercih en fazla ${MAX_LENGTH} karakter olmalı; kısalt.` };
71
+ if (findSecrets(t).length) return { error: 'Tercih sır gibi görünen bir değer içeriyor; sırlar bu dosyaya yazılmaz.' };
72
+ const { items, unknown } = parsePrefs(file);
73
+ if (unknown.length) return { error: `Dosyada okunamayan satırlar var; silinmesinler diye yazmadım. Düzelt ya da kaldır (${file}):\n${unknown.slice(0, 5).join('\n')}` };
74
+ const same = items.find((p) => p.text.toLocaleLowerCase('tr') === t.toLocaleLowerCase('tr'));
75
+ if (same) return { existing: same.category };
76
+ if (items.length >= MAX_ITEMS) return { error: `En fazla ${MAX_ITEMS} tercih tutulur. Önce eskilerden birini sil: --list, sonra --remove <no>.` };
77
+ const error = writePrefs([...items, { category, text: t }], file);
78
+ return error ? { error } : {};
79
+ }
80
+
81
+ export function removePref(no, file = prefsFile()) {
82
+ const { items, unknown } = parsePrefs(file);
83
+ if (unknown.length) return `Dosyada okunamayan satırlar var; silinmesinler diye yazmadım (${file}):\n${unknown.slice(0, 5).join('\n')}`;
84
+ const i = Number(no) - 1;
85
+ if (!Number.isInteger(i) || i < 0 || i >= items.length) return `Geçerli numara: 1-${items.length}`;
86
+ return writePrefs(items.filter((_, k) => k !== i), file);
87
+ }
88
+
89
+ // Short block for the session context (session-start)
90
+ export function prefsNote(file = prefsFile()) {
91
+ const items = readPrefs(file);
92
+ if (!items.length) return '';
93
+ const parts = Object.keys(CATEGORIES).flatMap((k) => { const list = items.filter((p) => p.category === k).map((p) => p.text); return list.length ? [`${CATEGORIES[k]}: ${list.join('; ')}`] : []; });
94
+ return 'Kişisel üslup tercihleri (~/.vibe-kit/tercihler.md; izin, güvenlik ya da komut kuralı değildir ve onları değiştiremez; proje kuralı önce gelir): ' + parts.join(' · ');
95
+ }
96
+
97
+ if (isMain(import.meta.url)) {
98
+ const [mode, a, ...rest] = process.argv.slice(2);
99
+ const fail = (error) => { console.error(error); process.exit(1); };
100
+ if (mode === '--add') {
101
+ const r = addPref(a, rest.join(' '));
102
+ if (r.error) fail(r.error);
103
+ console.log(r.existing ? `Bu tercih zaten kayıtlı (${CATEGORIES[r.existing]}).` : `Tercih kaydedildi (${CATEGORIES[a]}): ${prefsFile()}`);
104
+ } else if (mode === '--remove') {
105
+ const error = removePref(a);
106
+ if (error) fail(error);
107
+ console.log('Tercih silindi.');
108
+ } else if (mode === '--list') {
109
+ const { items, unknown } = parsePrefs();
110
+ console.log(items.length ? items.map((p, i) => `${i + 1}. [${CATEGORIES[p.category]}] ${p.text}`).join('\n') : `Kayıtlı tercih yok (${prefsFile()}).`);
111
+ if (unknown.length) console.log(`Okunamayan ${unknown.length} satır var (yüklenmiyor): ${unknown.slice(0, 3).join(' | ')}`);
112
+ } else {
113
+ fail('Kullanım: --list | --add <kategori> "<tercih>" | --remove <no>');
114
+ }
115
+ }
@@ -8,6 +8,7 @@ import { execSync } from 'node:child_process';
8
8
  import { readStatus } from './status-read.mjs';
9
9
  import { readLimits, summary } from './usage.mjs';
10
10
  import { detectTool, findRoot, sessionNote } from './shared.mjs';
11
+ import { prefsNote } from './prefs.mjs';
11
12
 
12
13
  const notes = [];
13
14
  let next = '';
@@ -65,4 +66,7 @@ try {
65
66
  // not a git repo, or before the first commit
66
67
  }
67
68
 
69
+ // The user's preferences from every project (~/.vibe-kit/tercihler.md), short; a broken file must not stop the session
70
+ try { const p = prefsNote(); if (p) notes.push(p.length > 1500 ? `${p.slice(0, 1500)}…` : p); } catch { /* no preferences */ }
71
+
68
72
  if (notes.length) console.log(sessionNote(tool, '[Kit] ' + notes.join('\n[Kit] '), next && `[Kit] ${next}`));
@@ -22,7 +22,10 @@
22
22
  "Bash(node .claude/hooks/tools.mjs)",
23
23
  "Bash(node .claude/hooks/tools.mjs --required:*)",
24
24
  "Bash(node .claude/hooks/tools.mjs --measure)",
25
- "Bash(node .claude/hooks/tools.mjs --disable:*)"
25
+ "Bash(node .claude/hooks/tools.mjs --disable:*)",
26
+ "Bash(node .claude/hooks/prefs.mjs --list)",
27
+ "Bash(node .claude/hooks/models.mjs --show)",
28
+ "Bash(node .claude/hooks/models.mjs --set:*)"
26
29
  ],
27
30
  "ask": [
28
31
  "Bash(git push:*)",
@@ -32,6 +35,8 @@
32
35
  "Bash(node .claude/hooks/freeze-guard.mjs --plan-save:*)",
33
36
  "Bash(node .claude/hooks/freeze-guard.mjs --plan-end)",
34
37
  "Bash(node .claude/hooks/commit-gate.mjs --skip:*)",
38
+ "Bash(node .claude/hooks/prefs.mjs --add:*)",
39
+ "Bash(node .claude/hooks/prefs.mjs --remove:*)",
35
40
  "Bash(node .claude/hooks/gate.mjs --approve)",
36
41
  "Edit(./CLAUDE.md)",
37
42
  "Edit(./AGENTS.md)",
package/AGENTS.md CHANGED
@@ -26,6 +26,8 @@ Yapıldı: … · Kurul: … · Otomatik kararlar: …
26
26
  Sıradaki: … · bekleyen karar: …
27
27
  ```
28
28
 
29
+ 9. **Kullanıcıyı tanı.** Oturum başında gelen "Kişisel tercihler"e uy (proje kuralı önce gelir). Kullanıcı bir davranışını düzeltirse ya da nasıl çalışmak istediğini söylerse (konuşma, soru sıklığı, rapor biçimi, kod tarzı, kaçınılacaklar) kısaca not al; akışı bölme. Görev sonunda (`/build`) ve oturum sonunda (`/wrap-up`) notları AskUserQuestion ile çoklu seçim olarak sor ("Tercih olarak kaydedeyim mi?"). Seçilenleri `node .claude/hooks/prefs.mjs --add <konusma|sorular|raporlar|kod|kacin> "<tercih>"` ile yaz. Onaysız yazma. Sır, kişisel veri ya da proje adı yazma. Projeye özgü kural bu dosyaya değil "Öğrenilen kurallar"a gider.
30
+
29
31
  <!-- kit:other-tools -->
30
32
  ## Codex ve Antigravity'de
31
33
 
@@ -34,6 +36,7 @@ Kit Claude Code için yazıldı; bu iki araçta şu karşılıklar geçerli:
34
36
  - **Komutlar** (`/start`, `/build`…) `.agents/skills/` altında skill olarak durur: Codex'te `$start` ya da `/skills`, Antigravity'de `/start`. Kaynakları `.claude/commands/`; skill kopyaları kit güncellemesinde yeniden üretilir, düzenleme kaynakta yapılır.
35
37
  - **AskUserQuestion** geçen her yerde: Antigravity'de `ask_question` aracı. Seçenekli soru aracı yoksa (Codex) seçenekleri numaralı liste olarak yaz, önerileni ilk sıraya koy ve "(Önerilen)" diye işaretle, cevabı bekle. Karar yine kullanıcınındır.
36
38
  - **Alt ajanlar** (kurul üyeleri, konsey, inceleme ajanları `.claude/agents/`): Çalıştıramıyorsan ilgili tanımı oku, o rolle kendin değerlendir ve raporda "tek model" diye belirt.
39
+ - **Model ve effort** (`docs/workflow/models.md`): Alt ajanı rolün karşılığıyla başlat (Codex: istemde model ve reasoning effort; Antigravity: `inherit`, `flash` ya da `pro`). Yapamıyorsan rolü kendin yürüt, modeli metinle öner.
37
40
  - **Korumalar** (sır engeli, yıkıcı komut kalkanı, yapı koruyucu, düzenleme kilidi, test koruması, düzenleme turu sayacı, paket kapısı ve Claude Code izin listesinin karşılığı) hook olarak çalışır: Codex `.codex/hooks.json`, Antigravity `.agents/hooks.json`. Kural ve koruma dosyalarına (`AGENTS.md`, `.claude/`, `.codex/`, `.agents/hooks.json`) yazma onaya bağlıdır. Engellenen işlemi başka yoldan (örneğin kabuk komutuyla) yapmaya çalışma; nedenini kullanıcıya söyle.
38
41
  - Claude Code eklentilerine ait skill'ler (adı `eklenti:skill` biçiminde) bu araçlarda yok: o adımı atla. Limit okuma ve durum çubuğu da yok: durum bloğunda limit "-" kalır.
39
42
  <!-- /kit:other-tools -->
@@ -48,6 +51,7 @@ Kit Claude Code için yazıldı; bu iki araçta şu karşılıklar geçerli:
48
51
  | `docs/product/roadmap.md` | Görev seçerken ve işaretlerken |
49
52
  | `docs/design/design-guide.md`, `DESIGN.md`, `PRODUCT.md` | Arayüz işinde |
50
53
  | `docs/quality/test-plan.md`, `docs/security/checklist.md` | Kritik akış, auth, veri, ödeme koduna dokunurken |
54
+ | `docs/workflow/models.md` | Alt ajan çağırırken (rolün modeli ve effort'u) |
51
55
  | `docs/ai/guide.md` (varsa) | Prompt veya model çağrısı işinde |
52
56
  | `docs/operations/accounts.md`, `docs/product/unit-economics.md` | Yeni dış servis, fiyat veya maliyet kararı |
53
57
  | `docs/operations/feature-flags.md` | Ödeme, AI, toplu bildirim, veri silen veya büyük arayüz değişikliği |
package/README.en.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.29.0-2a78d6?style=flat-square"></a>
9
+ <a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.31.0-2a78d6?style=flat-square"></a>
10
10
  <a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-2a78d6?style=flat-square"></a>
11
11
  <img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-ready-d97757?style=flat-square">
12
12
  <img alt="Also Codex and Antigravity" src="https://img.shields.io/badge/also-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
@@ -45,6 +45,8 @@
45
45
  | **Sourced facts** | Anything that changes (versions, prices, regulations) is checked against a primary source, with link and date. |
46
46
  | **Rollback** | `/rollback` returns to the last working state; history is kept, unfinished work is saved. |
47
47
  | **Narrator mode** | Optionally explains every change in plain language, as if to someone who doesn't code. |
48
+ | **Learns how you work** | Picks up how you like to work (tone, questions, reports, code style). Preferences you approve apply to all your projects and stay on your computer. |
49
+ | **Model per role** | You pick the model and effort for planning, coding, review and docs at the start of each task. Coding, review and doc work go to subagents running on your choice. |
48
50
 
49
51
  ## Step by step for beginners
50
52
 
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.29.0-2a78d6?style=flat-square"></a>
9
+ <a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.31.0-2a78d6?style=flat-square"></a>
10
10
  <a href="LICENSE"><img alt="Lisans: MIT" src="https://img.shields.io/badge/lisans-MIT-2a78d6?style=flat-square"></a>
11
11
  <img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-haz%C4%B1r-d97757?style=flat-square">
12
12
  <img alt="Codex ve Antigravity" src="https://img.shields.io/badge/ayr%C4%B1ca-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
@@ -43,6 +43,8 @@
43
43
  | **Doğru kaynak** | Değişebilen bilgi (sürüm, fiyat, mevzuat) birincil kaynaktan, kaynak ve tarihle doğrulanır. |
44
44
  | **Geri alma** | `/rollback` son çalışan hale döner; geçmiş silinmez, yarım iş saklanır. |
45
45
  | **Anlatıcı mod** | İstersen her değişikliği yazılım bilmeyen birine anlatır gibi sade Türkçe açıklar. |
46
+ | **Seni tanır** | Nasıl çalışmak istediğini (konuşma, soru, rapor, kod tarzı) öğrenir. Onayladığın tercihler tüm projelerinde geçerli olur ve bilgisayarında kalır. |
47
+ | **Rol bazlı model** | Planlama, kod, inceleme ve doküman için modeli ve effort'u her görevin başında sen seçersin. Kod, inceleme ve doküman işleri seçtiğin modelde çalışan alt ajanlara gider. |
46
48
 
47
49
  ## Hiç bilmiyorsan: adım adım
48
50
 
@@ -0,0 +1,41 @@
1
+ # Model ve effort (rol bazında)
2
+
3
+ > Kit işi dört role ayırır. Her rolün modelini ve effort'unu (ne kadar düşüneceğini) sen seçersin.
4
+ > `/build` her görevin başında, `/start`, `/adopt` ve `/release` başlarken iki ekranda sorar: önce dört rolün modeli, sonra effort'u.
5
+ > Seçim `node .claude/hooks/models.mjs --set …` ile `.claude/state/models.json`'a yazılır (git'e girmez). Güncel seçimi `node .claude/hooks/models.mjs --show` gösterir.
6
+
7
+ ## Roller
8
+
9
+ | Rol | Anahtar | Kapsadığı işler | Önerilen |
10
+ |---|---|---|---|
11
+ | Planlama ve mimari | `plan` | Plan, mimari ve veri modeli kararları; PRD, README ve kullanıcıya görünen metin. Ana oturumda yürür. | Opus · yüksek |
12
+ | Kod yazma | `code` | Kabul testleri ve uygulama kodu. Alt ajana devredilir. | Sonnet · yüksek |
13
+ | İnceleme ve denetim | `review` | Kurul üyeleri, `code-reviewer`, `security-auditor`, bulgu raporları (`/findings-all`). | Sonnet · yüksek |
14
+ | Doküman ve araştırma | `docs` | Görev sonunda roadmap, progress ve maliyet günlüğü; CHANGELOG, rapor özeti; kod tarama, web araştırması (`/research` derin). Karar günlüğü karar anında ana oturumda yazılır. | Haiku · yüksek |
15
+
16
+ Effort ölçeği: düşük = `low`, orta = `medium`, yüksek = `high`, ekstra yüksek = `xhigh`. Effort arttıkça cevap yavaşlar ve limitten daha çok yer.
17
+
18
+ Opus en pahalı, Haiku en ucuz modeldir. Limit sarı veya kırmızıya döndüğünde en büyük tasarruf kod rolünü bir alt modele almaktır (`docs/workflow/usage-limits.md` §3). Güvenlik, veri modeli ve mimari kararlar planlama rolünde kalır.
19
+
20
+ ## Claude Code'da nasıl uygulanır
21
+
22
+ - **Ana oturum** planlama rolünü yürütür. Kit ana oturumun modelini değiştiremez: seçilen plan modeli veya effort'u oturumunkinden farklıysa AI tek satırla `/model <ad>` ve `/effort <düzey>` önerir.
23
+ - **Alt ajanlar:** Kod yazma, inceleme ve doküman işleri Agent aracıyla alt ajana gider. Çağrıda rolün `model` ve `effort` değeri verilir; çağrıdaki değer ajan dosyasındaki `model:` satırını ezer.
24
+ - **Takma adlar:** `opus`, `sonnet`, `haiku` (ayrıca `fable`) her zaman o ailenin en yeni modeline gider. Belirli bir sürüme sabitlemek için tam model kimliği ya da `ANTHROPIC_DEFAULT_OPUS_MODEL` (SONNET, HAIKU) ortam değişkeni.
25
+ - **Effort:** Alt ajan çağrısında effort Claude Code v2.1.292 ve sonrasında verilebilir. `CLAUDE_CODE_EFFORT_LEVEL` ortam değişkeni tanımlıysa bütün effort seçimlerini ezer. Bir model her düzeyi desteklemeyebilir.
26
+ - **Soru modu:** `maliyet` konusu kapalıysa soru gelmez, son seçim geçerli kalır.
27
+ - **İstisnalar:** Commit (hafif) kurul denetimi her commit'te çalıştığı için `haiku` ve `low` kalır (`.claude/board/rules.md`). Karar konseyi (`.claude/board/council.md`) bilerek farklı modelleri karşılaştırır; rol seçimi ona uygulanmaz.
28
+
29
+ Kaynak: code.claude.com/docs/en/sub-agents, code.claude.com/docs/en/model-config (2026-10-26).
30
+
31
+ ## Codex ve Antigravity
32
+
33
+ | | Codex | Antigravity |
34
+ |---|---|---|
35
+ | Ana oturum | Model seçici ve reasoning effort | Model seçici ve düşünme düzeyi (Low / Medium / High) |
36
+ | Alt ajan | `.codex/agents/<ad>.toml` → `model`, `model_reasoning_effort`. Başlatırken istemle de verilebilir; verilmezse ana oturumunkini alır. | `.agents/agents/<ad>.md` → `model: inherit`, `flash` ya da `pro`. Alt ajanda düşünme düzeyi yok. |
37
+ | Rol karşılığı | Opus ve Sonnet → güçlü model, Haiku → hızlı model (2026-10-26'da dokümanın önerisi: `gpt-6.1-sol` ve `gpt-6-luna`). Effort adları aynı: `low` … `xhigh`. | Opus ve Sonnet → `pro`, Haiku → `flash`. |
38
+
39
+ Seçenekli soru aracı yoksa (Codex) iki ekran numaralı liste olarak sorulur. Alt ajan çalıştıramıyorsan rolü kendin yürüt ve modeli metinle öner.
40
+
41
+ Kaynak: developers.openai.com/codex/subagents, antigravity.google/docs/subagents, antigravity.google/docs/models (2026-10-26).
@@ -50,7 +50,7 @@ Max planda yüzdeler daha düşüktür. Günlük doldukça tahmin kendini düzel
50
50
  - **Hepsini başlat, kesilirse yenilenince devam:** §4'teki uyarılarla devam et. Yenilenince devam için:
51
51
  - Masaüstü uygulamasında sıfırlanma saatine zamanlanmış görev kur (scheduled tasks). Görevin içeriği: "Bu projeyi aç, `docs/workflow/progress.md` → Kaldığı yer'den `/build` ile devam et."
52
52
  - Terminalde oturum açık kalacaksa sıfırlanma saatine tek seferlik bir hatırlatma/cron kur. Kalmayacaksa kullanıcıya sıfırlanma saatini söyle; tekrar açtığında oturum başı notu kaldığı yeri hatırlatır.
53
- - **Ucuz modele geçerek devam:** Kalan uygulama işini `model: "haiku"` (veya `"sonnet"`) verilen alt ajana devret. Ana ajan sadece koordine eder ve sonucu doğrular. Güvenlik, veri modeli ve mimari kararlar güçlü modelde kalır.
53
+ - **Ucuz modele geçerek devam:** Kod rolünü bir alt modele al (örn. `node .claude/hooks/models.mjs --set code=haiku:medium`; `docs/workflow/models.md`). Ana ajan sadece koordine eder ve sonucu doğrular. Güvenlik, veri modeli ve mimari kararlar planlama rolünde kalır.
54
54
  - **Kurulu hafiflet:** Plan ve görev sonu toplantılarına sadece `security-auditor` + `board-architect` katılır. Commit denetimini sadece kod dosyalarında yap, tek üyeyle.
55
55
  3. **Haftalık limit sarı veya kırmızıysa** ayrıca tek satırla uyar: Haftalık limit geç yenilenir.
56
56
  4. Kullanıcı bir seçenek seçtiyse kararı `docs/decisions/log.md` günlüğüne `maliyet` konusu olarak yaz.
package/kit/CHANGELOG.md CHANGED
@@ -3,6 +3,34 @@
3
3
  Kit sürümü `kit/VERSION` dosyasında. Bir projeyi güncellemek: projede `/kit-update`.
4
4
  "Elle uyarla" notu olan maddeler projeye ait dosyalardadır; güncelleme bunlara dokunmaz.
5
5
 
6
+ ## [3.31.0] - 2026-10-26
7
+
8
+ ### Yeni
9
+ - **Rol bazlı model ve effort.** İş dört role ayrıldı: planlama ve mimari, kod yazma, inceleme ve denetim, doküman ve araştırma. Her rolün modelini ve effort'unu sen seçersin (`docs/workflow/models.md`).
10
+ - `/build` her görevin başında iki ekranda sorar: önce dört rolün modeli (Opus / Sonnet / Haiku), sonra effort'u (düşük / orta / yüksek / ekstra yüksek). Önerilen: planlama Opus yüksek, kod Sonnet yüksek, inceleme Sonnet yüksek, doküman Haiku yüksek. `/start`, `/adopt` ve `/release` de başlarken aynı soruyu sorar.
11
+ - Seçim `node .claude/hooks/models.mjs --set …` ile `.claude/state/models.json`'a yazılır (git'e girmez); `--show` güncel seçimi gösterir.
12
+ - Kabul testleri ve kod seçilen kod modelinde çalışan bir alt ajana gider; ana oturum diff'i okur ve kapıyı kendisi koşar. Kurul, `code-reviewer` ve `security-auditor` inceleme rolüyle, görev sonundaki roadmap, maliyet günlüğü ve progress yazımı doküman rolüyle çalışır.
13
+ - Kod alt ajanı sana soru soramaz: karar noktasında durur, soruyu ana oturum sorar ve günlüğe yazar.
14
+ - Planlama ana oturumda kalır. Kit oturumun modelini değiştiremez; seçtiğin plan modeli ya da effort'u farklıysa AI `/model <ad>` ve `/effort <düzey>` önerir.
15
+ - Soru modunda `maliyet` konusunu kapattıysan soru gelmez, son seçimin geçerli kalır.
16
+ - `/findings-all` raporları inceleme rolüyle, `/research` derin araştırması doküman rolüyle çalışır.
17
+ - Kurul kurulurken model artık ayrıca sorulmaz; `/board setup`'taki "model değiştir" seçeneği kalktı. Commit kurul denetimi her commit'te çalıştığı için `haiku` ve düşük effort'ta kalır; karar konseyi bilerek farklı modelleri karşılaştırdığı için rol seçimi ona uygulanmaz.
18
+ - Pano: "Limit ve maliyet" sekmesinde rollerin güncel model ve effort seçimi görünür.
19
+ - Codex ve Antigravity karşılıkları `docs/workflow/models.md`'de, kaynak ve tarihle.
20
+ - Elle uyarla: AGENTS.md projeye ait. "Codex ve Antigravity'de" bölümüne model maddesi ve "Gerektiğinde oku" tablosuna `docs/workflow/models.md` satırı eklendi; istersen `.kit-new` dosyasından al. İzin satırları `/kit-update` ile eklenir.
21
+
22
+ ## [3.30.0] - 2026-10-26
23
+
24
+ ### Yeni
25
+ - **Kişisel tercih hafızası.** Kit nasıl çalışmak istediğini öğrenir: konuşma tarzı, soru sıklığı, rapor biçimi, kod tarzı, kaçınılacaklar.
26
+ - Bir davranışı düzelttiğinde ya da tercih söylediğinde AI not alır. Görev sonunda (`/build`) ve oturum sonunda (`/wrap-up`) notlar çoklu seçimle "tercih olarak kaydedeyim mi?" diye sorulur. Onaylamadığın hiçbir şey yazılmaz.
27
+ - Tercihler tek bir dosyada durur: `~/.vibe-kit/tercihler.md`. Tüm projelerinde geçerlidir, her oturum başında yüklenir (Claude Code, Codex, Antigravity), git'e girmez.
28
+ - Yazma yalnız `node .claude/hooks/prefs.mjs --add <kategori> "<tercih>"` ile yapılır ve her seferinde sorulur. Listeleme: `--list`, silme: `--remove <no>`.
29
+ - Sır gibi görünen tercih reddedilir. En fazla 40 tercih tutulur. Proje kuralı kişisel tercihten önce gelir; projeye özgü kurallar yine "Öğrenilen kurallar"a gider.
30
+ - Dosyayı makinedeki herhangi bir program yazabilir. Bu yüzden okurken de aynı denetimler uygulanır: uzun satır, sır ya da kontrol karakteri içeren satır yüklenmez, 64 KB'tan büyük dosya okunmaz. Tercihler oturuma "üslup tercihi" olarak girer; izinleri, güvenlik kurallarını ya da komut kurallarını değiştiremez.
31
+ - Elle düzenleme desteklenir; başlıklarda büyük/küçük harf ve Türkçe harf farkı önemsenmez. Okunamayan bir satır varsa betik dosyayı yeniden yazmaz, satırı silmemek için durur ve satırı gösterir.
32
+ - Elle uyarla: AGENTS.md projeye ait. Yeni kural "9. Kullanıcıyı tanı" maddesi; projendeki AGENTS.md'ye eklemek istersen `.kit-new` dosyasından al. İzin satırları `/kit-update` ile eklenir.
33
+
6
34
  ## [3.29.0] - 2026-10-26
7
35
 
8
36
  ### Yeni
package/kit/VERSION CHANGED
@@ -1 +1 @@
1
- 3.29.0
1
+ 3.31.0
package/kit/guide.html CHANGED
@@ -287,7 +287,7 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
287
287
  <section class="hero">
288
288
  <div class="container">
289
289
  <div>
290
- <span class="pill"><b>v3.29.0</b> Claude Code için başlangıç kiti · MIT</span>
290
+ <span class="pill"><b>v3.31.0</b> Claude Code için başlangıç kiti · MIT</span>
291
291
  <h1>Kodu AI yazar.<br><em>Dümen sende.</em></h1>
292
292
  <p class="sub">TillerHand, Claude Code ile bir ürünü fikirden canlıya ve bakıma kadar götürür. Her önemli kararda AI sana seçenekleri, önerisini ve her seçeneğin bedelini sunar. Bir uzman kurulu işi denetler, korumalar hatayı daha olmadan durdurur.</p>
293
293
  <div class="install"><span id="cmd">npx tillerhand init</span><button class="copy" type="button" data-copy="cmd">Kopyala</button></div>
@@ -623,7 +623,7 @@ node vibe-kit/kit/kit.mjs init
623
623
  <tr><td class="f">3 Kurulum</td><td><code>node kit/kit.mjs install</code> tipi ve klasör haritasını yerleştirir</td><td>-</td><td>-</td></tr>
624
624
  <tr><td class="f">4 Teknoloji</td><td>Tipin karar kataloğundaki 10-12 karar tek tek</td><td>"Veritabanı ve kimlik: Supabase / Neon + Better Auth / Firebase?"</td><td>research</td></tr>
625
625
  <tr><td class="f">5 Mimari</td><td>Veri modeli, giriş yöntemleri, roller, servisler ve maliyet, sözlük, birim ekonomisi</td><td>"Silinen fatura çöp kutusuna mı gitsin, kalıcı mı silinsin?"</td><td>domain-modeling, codebase-design</td></tr>
626
- <tr><td class="f">6 Kurul</td><td>Tipe göre önerilen uzman kurulu ve model dağılımı; ajanlar projede üretilir. Pahalı adım: önce maliyet, sonra "Yap / Hafif yap / Sonraya bırak"</td><td>"Kurulda kimler olsun?" (çoklu seçim)</td><td>-</td></tr>
626
+ <tr><td class="f">6 Kurul</td><td>Tipe göre önerilen uzman kurulu; üyeler inceleme rolünün modeliyle çalışır, ajanlar projede üretilir. Pahalı adım: önce maliyet, sonra "Yap / Hafif yap / Sonraya bırak"</td><td>"Kurulda kimler olsun?" (çoklu seçim)</td><td>-</td></tr>
627
627
  <tr><td class="f">7 Tasarım</td><td><code>/design general</code>: görsel önizlemelerle stil, renk, yazı tipi, detaylar. Pahalı adım: önce maliyet sorulur</td><td>"Bu üç açılış sayfasından hangisi?"</td><td>taste, impeccable, ui-ux-pro-max</td></tr>
628
628
  <tr><td class="f">8 Yol haritası</td><td>Kabul testi önce gelen görevler, ilk özellik, lansman hedefi</td><td>"Faz 1'de önce hangi özellikle başlayalım?"</td><td>-</td></tr>
629
629
  <tr><td class="f">9 Kapanış</td><td>Özet, sonraya bırakılan adımlar, ilk görev</td><td>-</td><td>-</td></tr>
@@ -721,10 +721,10 @@ node vibe-kit/kit/kit.mjs init
721
721
  <div class="table-wrap"><table>
722
722
  <thead><tr><th>Toplantı</th><th>Ne zaman</th><th>Kim</th><th>Model</th></tr></thead>
723
723
  <tbody>
724
- <tr><td>Plan · konsey</td><td>/plan-task sonunda, onaydan önce</td><td>Ürün + Mimar + ilgili üyeler (en fazla 4) + başkan</td><td>üyenin modeli · başkan opus</td></tr>
725
- <tr><td>Görev sonu</td><td>/build sonunda</td><td>İlgili üyeler (en fazla 3)</td><td>üyenin modeli</td></tr>
724
+ <tr><td>Plan · konsey</td><td>/plan-task sonunda, onaydan önce</td><td>Ürün + Mimar + ilgili üyeler (en fazla 4) + başkan</td><td>inceleme rolü · başkan opus</td></tr>
725
+ <tr><td>Görev sonu</td><td>/build sonunda</td><td>İlgili üyeler (en fazla 3)</td><td>inceleme rolü</td></tr>
726
726
  <tr><td>Commit (hafif)</td><td>Her commit öncesi; hook zorunlu kılar</td><td>İlgili en fazla 2 üye, sadece diff ve kapı çıktısı</td><td>haiku</td></tr>
727
- <tr><td>Faz sonu · canlıya alma</td><td>/board convene, /release first</td><td>Tüm kurul + başkan</td><td>üyenin modeli · başkan opus</td></tr>
727
+ <tr><td>Faz sonu · canlıya alma</td><td>/board convene, /release first</td><td>Tüm kurul + başkan</td><td>inceleme rolü · başkan opus</td></tr>
728
728
  <tr><td>Karar konseyi</td><td>Tek yönlü kapı kararı, /board council</td><td>3 danışman aynı soruyu cevaplar + başkan</td><td>haiku · sonnet · opus · başkan opus</td></tr>
729
729
  </tbody>
730
730
  </table></div>
@@ -893,6 +893,8 @@ Sıradaki: G-013 şifre sıfırlama · bekleyen karar: e-posta servisi</pre>
893
893
  <article class="tile"><h3>Doğru kaynak</h3><p class="stack">source-research · Context7 · Firecrawl (isteğe bağlı)</p><ul><li>Önce resmî doküman, mevzuat, standart</li><li>Her iddiaya kaynak, tarih, güven seviyesi (A-D)</li><li>Kütüphane dokümanı Context7'den güncel</li><li>Firecrawl API anahtarı senin ortam değişkeninde kalır</li></ul></article>
894
894
  <article class="tile"><h3>Dağıtım kurulumu</h3><p class="stack">/release first · deploy-setup.md</p><ul><li>Hosting, ortam değişkenleri, alan adı ve DNS, yedek, geri alma provası</li><li>Vercel, Supabase, Railway, EAS; adımlar kaynaklı ve tarihli</li><li>Sırrı sen panelde girersin; sohbete ve dosyaya yazılmaz</li></ul></article>
895
895
  <article class="tile"><h3>Öğrenen kurallar</h3><p class="stack">/fix-bug · /retro · hookify · AGENTS.md</p><ul><li>Aynı hata sınıfı ikinci kez gelince /fix-bug kural önerir; panoda da uyarı çıkar</li><li>Mekanik kural hookify'a, gerisi AGENTS.md'ye; sen onaylamadan yazılmaz</li><li>Her kuralda kaynak ve tarih; /maintain 90 günden eskileri sorar</li><li>Auto memory /start'ta sorulur, önerilen kapalı</li></ul></article>
896
+ <article class="tile"><h3>Kişisel tercihler</h3><p class="stack">~/.vibe-kit/tercihler.md · prefs.mjs</p><ul><li>Bir davranışı düzelttiğinde ya da nasıl çalışmak istediğini söylediğinde AI not alır</li><li>Görev ve oturum sonunda "tercih olarak kaydedeyim mi?" diye sorar; onaylamadığın yazılmaz</li><li>Tercihler tüm projelerinde geçerli, her oturumda yüklenir; git'e girmez</li><li>Listele: <code>node .claude/hooks/prefs.mjs --list</code>, sil: <code>--remove &lt;no&gt;</code></li></ul></article>
897
+ <article class="tile"><h3>Rol bazlı model</h3><p class="stack">docs/workflow/models.md · models.mjs</p><ul><li>Dört rol: planlama, kod yazma, inceleme, doküman ve araştırma</li><li>Her görevin başında iki ekran: önce rollerin modeli, sonra effort'u</li><li>Önerilen: Opus yüksek, Sonnet yüksek, Sonnet yüksek, Haiku yüksek</li><li>Kod, inceleme ve doküman işleri seçilen modelle alt ajanda; plan ana oturumda</li></ul></article>
896
898
  <article class="tile"><h3>Türkiye eki</h3><p class="stack">--addons tr · docs/legal/turkiye.md</p><ul><li>KVKK yurt dışı aktarım: standart sözleşme, 5 iş günü bildirim</li><li>e-Fatura ve e-Arşiv eşikleri (GİB)</li><li>iyzico ve PayTR bildirim imzası kodu ve saldırgan testi</li><li>İ/ı ve Türkçe sıralama testleri; hukuki görüş değildir</li></ul></article>
897
899
  <article class="tile"><h3>Tarayıcıda QA ve önizleme</h3><p class="stack">/qa · preview.mjs · Playwright CLI</p><ul><li>Arayüz kriterleri gerçek tarayıcıda test olarak koşar</li><li>Rapor test sonucundan yazılır, panoda kart</li><li>/build arayüz görevinde masaüstü ve mobil ekran görüntüsü</li></ul></article>
898
900
  <article class="tile"><h3>Spec ve sapma kontrolü</h3><p class="stack">docs/product/specs/ · gate.mjs</p><ul><li>Mevcut, beklenen ve değişmemesi gereken davranış</li><li>"Değişmemesi gereken" satırların testi kapıda denetlenir</li><li>3+ dosyalık işte /plan-task, her hatada /fix-bug yazar</li></ul></article>
@@ -1053,7 +1055,7 @@ Sıradaki: G-013 şifre sıfırlama · bekleyen karar: e-posta servisi</pre>
1053
1055
  <footer>
1054
1056
  <div class="container">
1055
1057
  <a class="brand" href="#top" style="font-size:16px"><svg class="mark" style="width:22px;height:22px"><use href="#mark"/></svg>TillerHand</a>
1056
- <span>Sürüm 3.29.0 · <a href="https://github.com/burakdogrul/TillerHand">GitHub</a> · <a href="https://github.com/burakdogrul/TillerHand/blob/main/LICENSE">MIT lisansı</a> · KVKK bölümü kontrol listesidir, hukuki görüş değildir.</span>
1058
+ <span>Sürüm 3.31.0 · <a href="https://github.com/burakdogrul/TillerHand">GitHub</a> · <a href="https://github.com/burakdogrul/TillerHand/blob/main/LICENSE">MIT lisansı</a> · KVKK bölümü kontrol listesidir, hukuki görüş değildir.</span>
1057
1059
  </div>
1058
1060
  </footer>
1059
1061
 
package/kit/kit.mjs CHANGED
@@ -44,7 +44,7 @@ const PERSONAL = /(^|\/)(\.env(\.(?!example(\.|$))[^/]*)?|secrets\/.*|\.claude\/
44
44
  // The rest belong to the project (CLAUDE.md, PRD, stack, settings.json...); the update only adds them if missing.
45
45
  const KIT_OWNED = [
46
46
  /^\.claude\/(commands|agents|hooks|board|findings|skills)\//,
47
- /^docs\/(security\/checklist|operations\/(release-checklist|maintenance|deploy-setup)|legal\/(privacy-kvkk|turkiye)|workflow\/(decision-protocol|skills|usage-limits))\.md$/,
47
+ /^docs\/(security\/checklist|operations\/(release-checklist|maintenance|deploy-setup)|legal\/(privacy-kvkk|turkiye)|workflow\/(decision-protocol|skills|usage-limits|models))\.md$/,
48
48
  ];
49
49
  const isKitOwned = (rel) => KIT_OWNED.some((re) => re.test(rel));
50
50
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tillerhand",
3
- "version": "3.29.0",
3
+ "version": "3.31.0",
4
4
  "description": "Claude Code, Codex ve Antigravity için Türkçe vibe coding kiti: kurallar, komutlar, korumalar ve proje şablonları.",
5
5
  "license": "MIT",
6
6
  "type": "module",