How to use from
Docker Model Runner
docker model run hf.co/Tayrrr/KaliSupport:Q6_K
Quick Links

YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

Kali Agent (LocalAI)

Yerel bir LLM (BaronLLM Llama-3.1) ile Kali Linux sanal makinesini SSH üzerinden süren otonom bir sızma testi (pentest) ajanı. Beyin Windows'ta, "kollar" Kali'de. Artık sesli komutla da kontrol edilebilir (offline STT, Türkçe).

Eğitim ve yetkili sızma testi senaryoları içindir. Sadece izin aldığın sistemler üzerinde çalıştır.


Mimari Özet

              [Kullanıcı: klavye veya mikrofon]
                          |
                          v
  +------------------- Windows --------------------+
  |  agent.py (REPL + ReAct loop)                  |
  |    |                                           |
  |    +-- voice.py     (faster-whisper STT, ops.) |
  |    +-- ollama.Client -> BaronLLM (Modelfile)   |
  |    +-- tool_call.py (parse + dispatcher)       |
  |    +-- safety.py    (komut filtresi)           |
  |    +-- ssh_client.py                           |
  |    +-- logger.py    (JSONL session logu)       |
  +-----------------------|------------------------+
                          | paramiko / SSH (anahtar)
                          v
              +--------- Kali VM ---------+
              |  bash + nmap/sqlmap/...   |
              +---------------------------+

ReAct döngüsü her adımda şu akışı izler:

Thought: <kısa, tek paragraf>
Action: run_cmd
Action Input: <tek satır bash>

Komut Kali'de çalıştırılır, çıktı Observation: olarak modele geri verilir. Görev Final Answer: ile veya --max-steps limitiyle biter. Manuel modda her adımda Enter ile onay alınır.


Klasör Yapısı

LocalAI/
  agent.py          # Ana orkestrator, REPL, ReAct döngüsü
  config.py         # .env'den dataclass'lara mapping
  ssh_client.py     # paramiko sarmalayıcısı (Kali SSH)
  tool_call.py      # ReAct parser + ToolDispatcher
  safety.py         # Yıkıcı komut filtresi (block/warn)
  voice.py          # Sesli komut: faster-whisper + sounddevice
  logger.py         # Oturum başına JSONL log
  Modelfile         # Ollama: BaronLLM + sistem promptu + parametreler
  requirements.txt
  .env / .env.example
  test_ssh.py       # SSH bağlantısı için izole test
  logs/             # session-YYYYMMDD-HHMMSS.jsonl

Kurulum

1. Kali VM tarafı

sudo apt update && sudo apt install -y openssh-server
sudo systemctl enable --now ssh
ip a    # bridged adapter ise LAN IP'sini not al

Windows'ta üretilmiş public key'i (~/.ssh/id_ed25519.pub içeriği) Kali'de:

mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA... kerem@windows" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

2. Windows tarafı

cd C:\Users\kerem\Documents\LocalAI
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt

Python 3.12 / 3.13 / 3.14 destekleniyor. faster-whisper arka planda ctranslate2 derler; wheel mevcut değilse Visual Studio Build Tools gerekebilir.

3. Ollama + model

# Ollama kurulu degilse: https://ollama.com/download
ollama serve                                # arka planda calissin
# baronllm-llama3.1-v1-q6_k.gguf dosyasini proje koküne koyduktan sonra:
ollama create KaliSupport -f .\Modelfile
ollama list                                  # KaliSupport gorulmeli

4. .env

.env.example dosyasını kopyalayıp düzenle:

Copy-Item .env.example .env
notepad .env

Doldurulması zorunlu alanlar:

  • KALI_HOST — Kali VM'in LAN IP'si
  • KALI_SSH_KEY — Windows'taki private anahtarın tam yolu
  • OLLAMA_MODEL — ollama list'te gördüğün isim (örn. KaliSupport)

5. SSH'i tek başına doğrula

python test_ssh.py

pong görüyorsan bağlantı sağlam.


Çalıştırma

REPL (varsayılan)

python agent.py

REPL komutları:

Giriş Anlamı
<metin> Görev metni; ajan ReAct'e başlar
:v veya voice Mikrofonu aç, konuşmayı transkript et, görev olarak gönder
:r veya reset Mesaj geçmişini temizle (model konteksini sıfırla)
:q / quit / exit Çık

Voice-first mod

Her prompt'ta otomatik mikrofon açılsın (yine de Enter'a basıp metin de yazabilirsin):

python agent.py --voice

Otomatik mod (her adımı sormadan)

python agent.py --auto
python agent.py --auto --voice

Tek seferlik görev

python agent.py "192.168.1.20 portlarini tara ve 80 acıksa dirb yap"

Manuel mod adım onayı

Tuş Etki
Enter / e Komutu çalıştır
d Komutu düzenle
s Bu adımı atla (modele "skipped" döner)
q Loop'u durdur

Voice (Sesli Komut)

Nasıl çalışıyor

  1. :v yazınca mikrofon akışı (sounddevice, 16 kHz mono float32) açılır.

  2. Ekrana akan . ve # karakterleri mini bir VU-meter gibi davranır (. sessizlik, # ses var).

  3. Konuşmaya başlayınca kayıt başlar; VOICE_SILENCE_SECONDS (varsayılan 1.5sn) kesintisiz sessizlikten sonra otomatik kapanır.

  4. Ses parçası faster-whisper ile yerelde transkript edilir (varsayılan model: small, dil: tr).

  5. Transkript ekrana yazılır; onay/düzenleme menüsü gelir:

    Tuş Etki
    Enter / e Aynen görev olarak gönder
    d Önce düzenle, sonra gönder
    r Yeniden dinle
    q İptal

Ortam değişkenleri (.env)

Değişken Varsayılan Açıklama
VOICE_ENABLED true false -> :v komutu kapalı, kütüphaneler yine de yüklenmeyebilir
VOICE_PREWARM true Agent başlangıcında modeli yükle. Açıkken startup ~5-30 sn uzar, ama ilk :v'de bekleme olmaz
VOICE_MODEL small tiny / base / small / medium / large-v3. Türkçe için minimum small öneririm
VOICE_DEVICE cpu cpu / cuda / auto. CUDA seçersen compute_type'ı da güncelle
VOICE_COMPUTE_TYPE int8 CPU: int8. GPU: float16 veya int8_float16
VOICE_LANGUAGE tr tr, en, ... auto -> dili Whisper tahmin eder
VOICE_SAMPLERATE 16000 16 kHz Whisper'in beklediği değer; değiştirme
VOICE_SILENCE_THRESHOLD 0.012 RMS eşiği. Klavye/fan yüzünden tetiklenirse yükselt; konuşma duyulmuyorsa düşür
VOICE_SILENCE_SECONDS 1.5 Kayıt durduran kesintisiz sessizlik süresi
VOICE_MAX_SECONDS 60 Sert üst sınır
VOICE_INITIAL_TIMEOUT 8 Konuşma hiç başlamazsa kaç saniye sonra iptal
VOICE_INPUT_DEVICE (boş) Boş = sistem default. Sayı ya da isim parçası verilebilir
VOICE_CONFIRM true false -> transkript görünür ama onay sormadan görev olarak gider

Mikrofon listesi

python -m voice devices

Çıktıdaki numarayı VOICE_INPUT_DEVICE'a yaz, ya da ismin bir parçasını (örn. Realtek).

Sadece STT'yi test et

python -m voice listen

Konuş, transkript ekranda. Ajan, SSH, hiçbiri açılmaz; mikrofon + Whisper bütünleşmesini izole etmek için ideal.

Voice kapanırsa

:v'yi her tuşladığında "voice kapali" diyorsa:

python -c "import voice; print(voice.VoiceInput(__import__('config').VoiceConfig.from_env()).is_available())"

Çıkan mesaj:

  • sounddevice yuklu degil → pip install sounddevice (PortAudio sürücüsü Windows'ta gömülü gelir)
  • faster-whisper yuklu degil → pip install faster-whisper
  • VOICE_ENABLED=false → .env'de true yap
  • Mikrofon akisi acilamadi → python -m voice devices ile başka cihaz dene

Performans ipuçları

  • CPU + small + int8 ortalama bir laptop'ta ~5-10 sn'lik bir görev için 1-3 sn transkript verir.
  • GPU yetmezse VOICE_DEVICE=cpu kalsın; BaronLLM zaten 4-6 GB VRAM kullanıyor, paylaşmaktansa CPU'da Whisper koşturmak daha sağlıklı.
  • Daha hızlı istiyorsan: VOICE_MODEL=base. Daha doğru: medium (CPU'da yavaşlar ~2x).

İlk çalıştırma: model indirme

İlk :v'de (veya VOICE_PREWARM=true ile agent başlangıcında) faster-whisper modeli HuggingFace Hub'dan indirilir. Boyutlar (yaklaşık):

Model İndirme Bellek
tiny 75 MB ~150 MB
base 150 MB ~300 MB
small 466 MB ~700 MB
medium 1.5 GB ~2.5 GB
large-v3 2.9 GB ~5 GB

İndirilen dosyalar C:\Users\<sen>\.cache\huggingface\hub\ altında saklanır.

HF rate limit / hız: anonim indirme yavaş olabilir. Hızlandırmak için bir HuggingFace token üret (huggingface.co/settings/tokens) ve PowerShell'de:

$env:HF_TOKEN = "hf_xxxxxxxxxxxxxxxxxx"
python agent.py

Ya da .env dosyasına HF_TOKEN=hf_... ekle (python-dotenv zaten yükler).

Mikrofon ayarı: konuşmama tetiklenmiyor / kayıt durmuyor

Recording sonu basılan [voice] kayit bitti: 9.7s, rms=0.011 (esik=0.012) satırı en kritik tanı çıktısı:

  • rms < esik ise kayıt boyunca eşiğin altındasın; transkript boş gelebilir. Çözüm: mikrofona daha yakın konuş, ya da VOICE_SILENCE_THRESHOLD'u düşür (örn. 0.005).
  • Kayıt hiç durmuyor (sürekli #): arka plan gürültüsü yüksek; eşiği yükselt (0.020+) ya da VOICE_MAX_SECONDS'i kısalt.

Konfigürasyon Referansı

Ollama

Değişken Açıklama
OLLAMA_HOST http://127.0.0.1:11434
OLLAMA_MODEL Modelfile'dan ürettiğin isim
OLLAMA_NUM_GPU GPU katmanı sayısı. CUDA OOM alırsan düşür
OLLAMA_NUM_CTX Bağlam penceresi (token). 4096 tipik nmap çıktıları için yeterli
OLLAMA_TEMPERATURE Pentest komutları için 0.3-0.5 öneririm
OLLAMA_KEEP_ALIVE Birim zorunlu. 30m, 1h, 0 (anında unload), -1 (sonsuz). Birimsiz sayı yazarsan config.py otomatik dakikaya çevirir

SSH

Değişken Açıklama
KALI_HOST / KALI_PORT / KALI_USER Kali VM bağlantısı
KALI_SSH_KEY Private key tam yolu
KALI_SSH_KEY_PASSPHRASE Boş bırak ya da parola
KALI_SSH_PASSWORD Public key oturana kadar fallback
SSH_COMMAND_TIMEOUT Saniye. nmap full scan için 600+ tut

Safety

Değişken Açıklama
SAFETY_MODE enforce (varsayılan; block kuralları durdurur) / audit (her şey geçer, sadece loglanır)

safety.py içinde tanımlı kurallar (özet):

  • rm -rf /, rm -rf ~, kritik /etc üzerine yazma
  • mkfs, dd of=/dev/sd*, wipefs
  • Fork bomb (:(){ :|:& };:)
  • shutdown / reboot / systemctl poweroff
  • ~/.ssh veya authorized_keys silme; sshd durdurma
  • userdel root/kali
  • curl ... | bash (warn)

Kuralları elle test:

python safety.py "rm -rf /"
python safety.py "nmap -sV 192.168.1.10"

Loglar

Her oturum yeni bir JSONL dosyası: logs/session-YYYYMMDD-HHMMSS.jsonl. Olay tipleri:

  • session_start / session_end
  • info / warn / error
  • model — modelden dönen metin (thought/response)
  • tool_call — ajanın istediği tool ve argümanlar
  • command — Kali'de çalışan komutun stdout/stderr/exit_code
  • safety_match — kuralla eşleşen komutlar
  • voice_* — voice yaşam döngüsü (voice_record_start, voice_transcript, voice_cancelled, ...)

Ham logları görmek için:

Get-Content .\logs\session-*.jsonl -Tail 30 | ConvertFrom-Json | Format-Table ts,type,message

Sorun Giderme

Belirti Sebep / Çözüm
time: missing unit in duration "1" OLLAMA_KEEP_ALIVE birim içermiyor. 30m, 1h, -1 yaz. (config.py artık otomatik düzeltir)
Ollama'ya ulasilamadi ollama serve çalışmıyor veya OLLAMA_HOST yanlış
Ollama'da '<model>' modeli yok ollama create <ad> -f Modelfile çalıştır
Kimlik dogrulama basarisiz: kali@... Public key Kali'deki ~/.ssh/authorized_keys'te değil; ya da KALI_SSH_KEY private değil
Komut zaman asimina ugradi SSH_COMMAND_TIMEOUT'u artır
[voice kapali] sounddevice yuklu degil pip install sounddevice
Mikrofon akisi acilamadi python -m voice devices ile mevcut cihazları gör; uygun olanı VOICE_INPUT_DEVICE'a yaz
Konuşunca hiçbir şey kaydedilmiyor (...........) VOICE_SILENCE_THRESHOLD çok yüksek; 0.005 deneyebilirsin
Sürekli # çıkıyor, kayıt durmuyor Mikrofon arka plan gürültüsü yüksek; eşiği yükselt veya VOICE_MAX_SECONDS düşür
:v sonrası uzun süre tepkisiz Model indiriyor (ilk seferde 466 MB / small). VOICE_PREWARM=true ile bunu agent başlangıcına taşı; veya HF_TOKEN set et
unauthenticated requests to the HF Hub uyarısı Anonim indirme; HF_TOKEN set edilirse kaybolur ve indirme hızlanır
CUDA OOM OLLAMA_NUM_GPU'yu düşür; voice'u CPU'da bırak (VOICE_DEVICE=cpu)

Geliştirici Notları

Kod stili

  • Python 3.12+ syntax (X | Y, dict[str, Y])
  • Tüm fonksiyon imzalarında tip ipucu
  • Yan etki içeren her modül if __name__ == "__main__": self-test'iyle gelir:
python tool_call.py     # ReAct parser testi
python safety.py        # safety kural testi
python -m voice listen  # STT entegrasyon testi
python test_ssh.py      # SSH end-to-end

Yeni tool eklemek

tool_call.py içinde ToolDispatcher.register("benim_tool", fn) ile dinamik kayıt:

def my_tool(args: dict[str, str]) -> str:
    return f"Observation gibi geri dönecek string"

dispatcher.register("my_tool", my_tool)

Modelin bu tool'u tetiklemesi için Modelfile'daki sistem promptuna kullanım örneği eklemen gerekir.

Yol haritası

  • TTS (sesli yanıt) — modelin Final Answer'ını sesli okusun
  • Wake-word (her zaman dinle, "Kali" deyince devreye gir)
  • Çoklu tool (run_python, read_file, download)
  • Web dashboard (logs/*.jsonl üzerinden canlı izleme)

Lisans

Kişisel/eğitim amaçlı. Bağımlı oldukları kütüphanelerin lisansları geçerlidir (paramiko BSD, ollama-python MIT, faster-whisper MIT, sounddevice MIT).

Downloads last month
5
GGUF
Model size
8B params
Architecture
llama
Hardware compatibility
Log In to add your hardware

6-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support