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.
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.
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.
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
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ğinrandom._osgerçekosmodülüdür (ayrıcadatetime→sys,fractions→sys,collections→_sys,typing→sys). 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):
- 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__/openve dunder erişimi (__globals__,__class__…) reddedilir. Tehlikeli modüller içe aktarılmamış çıplak ad olarak da reddedilir. - Ana süreçte asla
exec/evalyok + 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.) - Varsayılan insan onayı.
--otomatikyalnızca insan onayını atlar; doğrulama ve kum havuzu testi her zaman çalışır. - Kurulu beceriler de kum havuzunda çalışır.
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.
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.)
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 vezaman_asimihatası 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.
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 -qornek.py şunları gösterir: üret → yeniden kullan → kurator-dedup → kötücül-reddet.
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| 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. |
| 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ı |
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.
- yerel-ajanlar — yerel/çevrimdışı ajan altyapısı
- ajan-orkestra — çok-ajanlı orkestrasyon
- gauntlet — ajan değerlendirme/eval cephaneliği
MIT © 2026 eruo005-dev — bkz. LICENSE.