Özellik detayı · 1 / 8

Persona Sistemi

Aynı soru, 7 farklı kişilik. Tek komutla geç.

Kanka 7 hazır persona ile gelir. Persona = sistem prompt + tonalite + örnek diyalog. Markdown dosyalarla tanımlanır, runtime'da değişir, anında etkili olur.

TL;DR
  • 7 hazır persona — kanka, hoca, abi, patron, akademisyen, stajyer, paranoyak
  • Tek komutla değiştir: /kisilik <isim>
  • ~/.kanka/aktif-kisilik dosyasında saklanır (oturumlar arası kalıcı)
  • Kendi persona'nı markdown olarak yazabilirsin — TypeScript şart değil
  • before_agent_start hook'u ile sistem prompt'a dinamik enjekte edilir

7 hazır persona

Her persona bir markdown dosyasıdır — frontmatter + örnek diyaloglar. Aşağıdaki 7 persona kanka ile birlikte gelir:

PersonaStilNe zaman?
🤝 kankaSamimi, rahat, profesyonelVarsayılan. Günlük iş.
🧑‍🏫 hocaÖğretici, 'neden' açıklayanÖğrenirken, junior dev
🧔 abiSenior dev, direkt, kısaHızlı iş, gereksiz açıklama yok
💼 patronPragmatik, MVP odaklıDeadline, demo, hızlı iterasyon
🎓 akademisyenDetaylı, kaynak gösterenKarmaşık konular, derinlik
🐣 stajyerÖğrenme modunda, soru sorarPair programming, sen mentor
🔒 paranoyakGüvenlik öncelikli, OWASP refleksiProduction öncesi audit

Aynı soru, farklı cevap

Soru: "Fibonacci yazsana" — 4 personanın yanıtları:

kanka:· text
Tamamdır kanka, hemen yazalım.
function fib(n) { return n < 2 ? n : fib(n-1) + fib(n-2); }
hoca:· text
Önce 'recursion' kavramına bakalım. Fonksiyon kendi kendini
çağırırsa recursive olur. Base case + recursive case = 2 parça.
Fibonacci için: F(0)=0, F(1)=1, F(n) = F(n-1) + F(n-2)...
abi:· text
function fib(n) { return n < 2 ? n : fib(n-1) + fib(n-2); }
Bu kadar.
patron:· text
Production'da memoize'lı versiyon kullan.
Naive recursive O(2^n), memoized O(n). Şu yeter:
const memo = new Map(); function fib(n) { if (memo.has(n)) return memo.get(n); ... }

Komutlar

/kisilikMevcut persona + tüm listeyi göster
/kisilik hocaAktif persona'yı 'hoca'ya değiştir
/kisiliklerDetaylı katalog (açıklama + dosya yolu)
/kişilikTürkçe karakter alias (aynı işlevde)

Kendi persona'nı yaz

İstediğin tonlu bir persona oluşturmak için tek ihtiyacın bir markdown dosyası:

~/.kanka/personas/koc.md· markdown
---
name: koc
description: Motivasyon odaklı, momentum kuran, "sen yapabilirsin" diyen koç
emoji: 🏆
---

## Kişiliğin

- Türkçe konuşur, enerjik ve teşvik edici
- Her çıkmazda alternatif önerir, "olmaz" demez
- Küçük zaferleri kutlar, büyük resimde kalır
- Pozitif ama gerçekçi — palavra atmaz

## Üslup örnekleri

- ✅ "Bunu başardın kanka! Şimdi bir adım daha — şu refactor da bitsin."
- ✅ "Bug var diye stres yapma. Hadi adım adım çözelim."
- ❌ "Süperrr 🥳🥳🥳" (abartılı emoji)

## Çalışma tarzı

- Her PR sonrası kısa pat (sırtına vurma)
- Frustrated görürse 5 dakika mola öner
- Long task öncesi: "Bu 2 saat sürer, kahveni hazırla"
💡
İpucu
~/.kanka/personas/ altındaki dosyalar her oturum başında otomatik yüklenir. /kisilik koc ile aktif et, hazır.

Nasıl çalışır?

Persona değiştiğinde, kanka before_agent_start hook'u ile sistem prompt'a o personanın içeriğini dinamik olarak enjekte eder. Her turn'de yeniden:

src/extensions/kisilik.ts (özet)· ts
pi.on("before_agent_start", async (event) => {
  const aktif = aktifKisilikOku(); // ~/.kanka/aktif-kisilik
  if (aktif === DEFAULT_PERSONA) return undefined;

  const persona = personalardanBul(aktif);
  return {
    systemPrompt: `${event.systemPrompt}\n\n---\n\n${persona.icerik}`,
  };
});
Pitfall: Generic prompt + 'switch persona' runtime talimatı çok güvenilmez. Dinamik enjeksiyon çok daha tutarlı — model gradient drift'i en aza iner.

Tipik kullanım

kanka kullanımı
$kanka
>/kisilik hoca
Aktif kişilik: 🧑‍🏫 hoca ✓
 
>useEffect hook'u nasıl çalışır?
 
Önce useEffect'in 3 temel parametresini anlayalım...
(1) Effect callback — render sonrası çalışır
(2) Dependency array — değişikliği takip eder
(3) Cleanup function — unmount/re-render önce
 
>/kisilik abi
Aktif kişilik: 🧔 abi ✓
 
>aynı soru
Render sonrası side effect. Deps array'i kontrol et.
Empty array = sadece mount'ta. Cleanup return ile.

Sıkça Sorulanlar

Persona değişikliği önceki konuşmayı etkiler mi?

Hayır, sadece sonraki turn'lerden itibaren etkili. Geçmiş mesajlar context'te kalır ama yeni sistem prompt'la birlikte yeniden değerlendirilir.

Aynı anda birden fazla persona kullanabilir miyim?

Bir oturumda bir aktif persona vardır. Ama farklı oturumlarda (`/fork`, `/clone`) farklı personalar kullanabilirsin.

Persona dosyam çalışmıyor, nasıl debug edeyim?

Frontmatter (---) eksikse, name alanı yoksa, markdown gövde boşsa sessizce atlanır. /kisilikler ile dosya yolunu gör, içeriği kontrol et.

Persona seçimim oturumlar arası kalır mı?

Evet, ~/.kanka/aktif-kisilik dosyasında saklanır. Kanka'yı kapat-aç, son seçimin korunur.

🎭 Persona Sistemi'ni dene

npm üzerinden 30 saniyede kur, hemen kullan.

$npm install -g @thorrangonak/kanka
GitHub →
← Tüm özelliklere dön