Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛠️ Beceri Ustası

Kendi becerilerini yazan, test eden, kuran ve bakımını yapan Türkçe-öncelikli bir yapay zeka ajanı. A Turkish-first AI agent that writes, tests, installs, and maintains its own skills.

Python License: MIT Tests Offline Güvenlik


✨ Nedir bu? / What is this?

TR: Çoğu ajan, önceden yazılmış sabit bir araç kümesiyle gelir. Beceri Ustası farklı: bir görevi çözecek becerisi yoksa, o beceriyi kendisi yazar — kodu üretir, AST doğrulayıcıdan geçirir, bir kum havuzunda (sandbox) test eder, onaylanırsa kurar ve bir daha gerektiğinde yeniden kullanır. Yetenekler böylece birikir (compounding). Ayrıca bir Kurator, kütüphaneyi temiz tutar: yinelenenleri ayıklar, bozuk/kullanılmayan becerileri budar.

EN: Most agents ship with a fixed toolset. Beceri Ustası is different: when it lacks a skill, it writes one — generates the code, runs it through an AST validator, tests it in a sandbox, installs it on approval, and reuses it later. Capabilities compound. A Kurator (curator) keeps the library tidy.

🧵 Ahi geleneği / The Ahi metaphor

Bu proje, Anadolu'nun Ahilik (lonca / usta–çırak) geleneğinden ilham alır: bir çırak yeni bir zanaatı öğrenir, ustasına gösterir, onay alır ve artık o zanaatın ustası olur. Beceri Ustası da her yeni beceriyi öğrenir, doğrular, onaylatır ve kütüphanesine kalfalıktan ustalığa geçirerek ekler.


🔁 Kendini genişleten döngü / The self-extending loop

   görev ──▶ kütüphanede beceri var mı?
              │
       ┌──────┴───────┐
      var            yok
       │               │
   sandbox'ta      LLM beceri yazar
   çalıştır            │
       │          ① AST doğrula  ─── reddedilirse ─▶ kurulmaz
       │               │
       │          ② sandbox'ta test et ── geçmezse ─▶ kurulmaz
       │               │
       │          ③ insan onayı (varsayılan)
       │               │
       │          ④ kur  ─────────┐
       ▼                          ▼
     cevap ◀──────────── sandbox'ta çalıştır

🔒 Güvenlik modeli / Safety model — EN ÖNEMLİ KISIM

Bu araç bir LLM'in ÜRETTİĞİ kodu çalıştırır. Dürüst olmak gerekirse:

AST doğrulayıcı + kısıtlı ad alanı BİR GÜVENLİK SINIRI DEĞİLDİR. Bunlar yalnızca en iyi çaba (best-effort) SERTLEŞTİRME katmanlarıdır. Bir kırmızı-takım denetimi, izin verilen "zararsız" modüllerin dunder OLMAYAN öznitelikler üzerinden os/sys'i yeniden dışa aktarabildiğini ve böylece doğrulayıcıyı atlatıp canlı bir RCE oluşturduğunu gösterdi — örneğin random._os gerçek os modülüdür (ayrıca datetimesys, fractionssys, collections_sys, typingsys). Bu beş modül izin listesinden çıkarıldı, ama saf-Python bir AST izin listesi prensip olarak güvenilir bir hapis değildir.

GERÇEK sınır = OS-düzeyi izolasyon ve araç VARSAYILAN OLARAK KAPALI-DURUMDADIR (fail-closed). Araç, üretilen becerileri yalnızca şu durumlarda çalıştırır:

  • bubblewrap (bwrap) kuruluysa (Linux): alt-süreç otomatik olarak ağsız (--net-none), tüm namespace'leri ayrılmış, jail dışında yazılabilir bağlama içermeyen gerçek bir kum havuzunda çalıştırılır. (Tavsiye edilen yol.)
  • veya --guvensiz (CLI) / guvensiz_ortam=True (API) ile açıkça onay verirseniz — bunu YALNIZCA tek kullanımlık/izole bir ortamda (konteyner veya VM) yapın.

Aksi halde (ör. bwrap'siz bir macOS), KumHavuzu hiçbir kod çalıştırmaz ve hata_turu="izolasyon_yok" döner. Üretim için konteyner/VM kullanın.

Hâlâ uygulanan sertleştirme katmanları (sınır değil, savunma derinliği):

  1. AST izin-listesi doğrulayıcısı (ilk kapı, sertleştirme). dogrulayici.py, üretilen kodu çalıştırmadan statik olarak ayrıştırır; os/sys/subprocess/ socket/shutil, ağ kütüphaneleri, eval/exec/compile/__import__/open ve dunder erişimi (__globals__, __class__ …) reddedilir. Tehlikeli modüller içe aktarılmamış çıplak ad olarak da reddedilir.
  2. Ana süreçte asla exec/eval yok + kısıtlı ad alanı. Beceri, bir alt-süreçte, hapsedilmiş geçici çalışma dizininde, asgari ortamla ve zaman aşımıyla, os/sys'in bulunmadığı kısıtlı bir ad alanında çalıştırılır; içe aktarma özel bir __import__ ile sınırlanır. (Bu, allowlist'i atlatan bir saldırıyı durdurmaya YETMEZ; yalnızca ek bir engeldir.)
  3. Varsayılan insan onayı. --otomatik yalnızca insan onayını atlar; doğrulama ve kum havuzu testi her zaman çalışır.
  4. Kurulu beceriler de kum havuzunda çalışır.

📦 İzin verilen içe aktarmalar / Allowed imports

Doğrulayıcının (kırpılmış) izin listesi — yalnızca saf hesaplama modülleri:

math, json, re, string, decimal, itertools, functools, textwrap, unicodedata, heapq, bisect.

Eskiden izinli olup os/sys sızıntısı nedeniyle çıkarılanlar: random, datetime, fractions, collections, typing, statistics (statistics.random._os gerçek os'tur). Bu liste, koşucu şablonundaki çalışma-anı __import__ izin listesiyle senkron tutulur.

📁 acik_dosya — hapsedilmiş dosya yardımcısı / jailed file helper

Beceri ad alanına, open yerine acik_dosya(ad, kip="r", ...) yardımcısı enjekte edilir. Bu yardımcı, yalnızca hapsedilmiş geçici çalışma dizini içindeki yollara izin verir; ../ ile dizin dışına çıkma denemeleri PermissionError ile reddedilir. (Yine de gerçek sınır OS izolasyonudur.)

⏱️ Kaynak sınırları / Resource limits (DoS koruması)

Her beceri çağrısı iki sıkı sınırla kuşatılır:

  • Zaman aşımı — varsayılan 5 sn (KumHavuzu(zaman_asimi=5.0)). Sonsuz döngü (while True), kontrolsüz özyineleme veya patlayıcı karmaşıklık taşıyan bir beceri, alt-süreç bu süreyi aşar aşmaz öldürülür ve zaman_asimi hatası döner. Böylece tek bir kötücül ya da hatalı beceri CPU'yu süresiz işgal edemez.
  • Çıktı boyutu — varsayılan 10 MiB (_VARSAYILAN_AZAMI_SONUC_BOYUTU). Örneğin {str(i): i for i in range(5_000_000)} gibi yüzlerce MB'lık bir sonuç üreten bir beceri, çıktı bu eşiği aşar aşmaz kesilir (boyut_asildi) — ne ebeveyn süreçte tamponlanır ne de belleği tüketir.

EN: These bounds exist to make the sandbox resilient to denial-of-service and resource exhaustion: a hostile or buggy skill cannot hang the host with an infinite loop (the 5 s timeout kills it) nor exhaust memory by streaming a giant result (the 10 MiB output cap truncates it). Both limits are configurable via the KumHavuzu constructor when a workload legitimately needs more head-room.

⚠️ Bu kaynak sınırları DoS'a karşı sertleştirmedir, bir hapis değildir ve yukarıdaki RCE'yi kapatmaz. Gerçek sınır OS izolasyonudur (bwrap veya konteyner/VM) ve araç varsayılan olarak kapalı-durumdadır. Üretilen kodu gözden geçirin ve yalnızca tek kullanımlık/izole ortamlarda çalıştırın. Bkz. LEGAL.md.


🚀 Hızlı başlangıç (çevrimdışı) / Quickstart (offline)

git clone https://github.com/eruo005-dev/beceri-ustasi
cd beceri-ustasi
python3 -m venv .venv
.venv/bin/python -m pip install -U pip
.venv/bin/python -m pip install -e ".[test]"

# Tam turu ağ olmadan gör (SahteLLM):
.venv/bin/python ornek.py

# Testler:
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 .venv/bin/python -m pytest -q

ornek.py şunları gösterir: üret → yeniden kullan → kurator-dedup → kötücül-reddet.

Gerçek bir LLM ile / With a real LLM

llm.py içindeki istemci, OpenAI-uyumlu herhangi bir uç nokta ile konuşur — yani yalnızca OpenAI değil. OPENAI_BASE_URL'i değiştirerek Groq, Together, yerel llama.cpp sunucusu, Ollama (/v1 uç noktası), vLLM, LM Studio, OpenRouter ve OpenAI sohbet-tamamlama (chat-completions) API'sini taklit eden başka herhangi bir sağlayıcıyı kullanabilirsiniz. Aşağıdaki OpenAI yalnızca bir örnektir.

export OPENAI_API_KEY=...          # OpenAI-uyumlu herhangi bir uç nokta
export OPENAI_BASE_URL=...         # (isteğe bağlı) örn. yerel sunucu
export BECERI_MODEL=gpt-4o-mini    # (isteğe bağlı)

beceri-ustasi calistir "metni tersine çevir" --girdi '{"metin": "merhaba"}'
beceri-ustasi beceriler
beceri-ustasi kurator
beceri-ustasi kurator --uygula

Örnek OPENAI_BASE_URL değerleri / Example base URLs:

# Groq
export OPENAI_BASE_URL=https://api.groq.com/openai/v1
export BECERI_MODEL=llama-3.3-70b-versatile

# Together
export OPENAI_BASE_URL=https://api.together.xyz/v1

# Yerel llama.cpp / Ollama / LM Studio (anahtar gerekmeyebilir)
export OPENAI_BASE_URL=http://localhost:11434/v1   # Ollama
export OPENAI_API_KEY=ollama                        # yer tutucu

🩺 Sorun giderme / Troubleshooting

Belirti Olası neden ve çözüm
ImportError / ModuleNotFoundError Paket kurulu değil ya da yanlış yorumlayıcı kullanılıyor. Python 3.9+ gerekir; sürümü python3 --version ile doğrulayın. Sanal ortamı kurup paketi düzenlenebilir kipte yükleyin: python3 -m venv .venv && .venv/bin/python -m pip install -e ".[test]". Komutları daima .venv/bin/python ile çalıştırın.
Beceri zaman_asimi ile başarısız oluyor Beceri varsayılan 5 sn'lik sınırı aştı. Genellikle sebep bir sonsuz döngü (while True), kontrolsüz özyineleme ya da aşırı karmaşıklıktır. Beceri kodunu sadeleştirin; meşru bir ihtiyaç varsa KumHavuzu(zaman_asimi=...) ile sınırı yükseltin.
boyut_asildi (çıktı kesildi) Beceri 10 MiB'tan büyük bir sonuç üretti. Çıktıyı küçültün ya da KumHavuzu çıktı sınırını artırın.
izolasyon_yok (kod çalıştırılmadı) OS-düzeyi izolasyon yok ve açık onay verilmedi. Araç kapalı-durumdadır: bu güvenli, beklenen davranıştır. Linux'ta bubblewrap (bwrap) kurun (otomatik ağsız kum havuzu), bir konteyner/VM içinde çalıştırın, ya da YALNIZCA tek kullanımlık/izole bir ortamda --guvensiz (CLI) / guvensiz_ortam=True (API) geçin. Bkz. Güvenlik modeli.
AST doğrulama reddi (dogrulama hatası) Üretilen kod izin verilmeyen bir içe aktarım, yerleşik çağrı ya da dunder erişimi içeriyor. Red mesajındaki gerekçeyi okuyun; kodu yalnızca izinli modüller (math, json, re, string, decimal …; random/datetime/collections/fractions/typing/statistics artık YASAK) ve dunder/getattr/eval içermeyen güvenli bir alt küme kullanacak şekilde gözden geçirin. Bu bir sertleştirme kapısıdır (güvenlik sınırı değil) — bkz. Güvenlik modeli.

🧩 Mimari / Modules

Modül Görevi
beceri.py Beceri veri modeli + .beceri.py dosyalarına serileştirme
kutuphane.py Dizine dayalı kütüphane; bul(gorev) ile Türkçe-doğru eşleştirme
dogrulayici.py AST izin-listesi doğrulayıcısı (guvenli_mi)
calistirici.py KumHavuzu — alt-süreç kum havuzu (timeout + jail + asgari ortam)
uretici.py BeceriUretici — LLM ile beceri fabrikası (üret→doğrula→test→onay→kur)
kurator.py Kurator — dedup, budama, (isteğe bağlı) iyileştirme
ajan.py UstaAjan — bul-ya-da-üret, çalıştır, yeniden kullan
llm.py OpenAIUyumluLLM (httpx) + SahteLLM (çevrimdışı)
metin.py Türkçe-doğru küçültme, belirteçleme, benzerlik
cli.py beceri-ustasi komut satırı

⚖️ Veri & Hukuk / Data & Legal

Bu araç LLM tarafından üretilen kodu yerel olarak çalıştırır. Kullanım koşulları, KVKK, telif ve sorumluluk reddi için lütfen LEGAL.md dosyasını okuyun. This tool runs LLM-generated code locally — see LEGAL.md.


🔗 İlgili Projeler / Related projects


📜 Lisans / License

MIT © 2026 eruo005-dev — bkz. LICENSE.

About

🛡️ Kendi becerilerini yazıp test eden, kuran Türkçe yapay zeka ajanı — güvenlik öncelikli (kum havuzu, fail-closed). | Turkish self-extending-skills AI agent that writes/tests/installs its own skills, safety-first.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages