beast-agent 1.7.0 → 1.9.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.
@@ -0,0 +1,229 @@
1
+ ---
2
+ name: writing-skills
3
+ description: Yeni skill oluştururken, mevcut skill düzenlerken veya deploy öncesi doğrularken kullan — %APPDATA%\beast\skills altına SKILL.md yazılacak/herhangi bir edit olacaksa.
4
+ ---
5
+
6
+ # Skill Yazma
7
+
8
+ ## Genel Bakış
9
+
10
+ **Skill yazmak, süreç dokümantasyonuna uygulanan TDD'dir.**
11
+
12
+ Test senaryoları yaz (paralel ajanla baskı senaryosu), fail izle (baseline
13
+ davranış), skill'i yaz (doküman), geçiş izle (ajan artık uyuyor), refactor
14
+ (loophole kapat).
15
+
16
+ **Çekirdek ilke:** Skill'siz ajanın fail ettiğini izlemediysen, skill'in
17
+ doğru şeyi öğrettiğini bilmezsin.
18
+
19
+ **ZORUNLU TEMEL:** test-driven-development skill'ini anlıyor olmalısın —
20
+ o RED-GREEN-REFACTOR'ü tanımlar, bu skill onu dokümana uyarlar.
21
+
22
+ ## Skill Nedir?
23
+
24
+ **Skill:** Kanıtlanmış teknik, desen veya araç için referans rehber.
25
+ **Skill'dir:** Yeniden kullanılabilir teknik/pattern/araç/rehber.
26
+ **Skill değildir:** Bir problemi bir kez nasıl çözdüğüne dair hikâye.
27
+
28
+ ## Ne Zaman Skill Yaratılır
29
+
30
+ **Yarat:**
31
+ - Teknik sana sezgisel gelmediyse
32
+ - Projeler arası tekrar referans edeceksen
33
+ - Desen genelse (proje-özel değilse)
34
+
35
+ **Yaratma:**
36
+ - Tek seferlik çözümler için
37
+ - Başka yerde iyi dokümante edilmiş standart pratikler için
38
+ - Proje-özel konvansiyonlar (onlar AGENTS.md'ye/proje talimatına)
39
+ - Regex/validasyonla zorlanabilir mekanik kısıtlar (otomatikleştir —
40
+ dokümanı yargı gerektiren kararlara sakla)
41
+
42
+ ## Beast'te Skill Yapısı
43
+
44
+ Yer: `%APPDATA%\beast\skills\<slug>\SKILL.md` (write_file ile yaz; slug
45
+ küçük-harf-tire). Isim+açıklama HER SOHBETE system prompta girer — gövde
46
+ sadece ilgiliyken read_file ile okunur.
47
+
48
+ ```markdown
49
+ ---
50
+ name: skill-adi
51
+ description: [TETİKLEYİCİ — ne zaman okunmalı; aşağıya bak]
52
+ version: 1.0.0
53
+ ---
54
+
55
+ # Skill Adı
56
+
57
+ ## Genel Bakış
58
+ Bu ne? Çekirdek ilke 1-2 cümle.
59
+
60
+ ## Ne Zaman
61
+ Belirtiler ve kullanım durumları; ne zaman KULLANILMAZ
62
+
63
+ ## Çekirdek Desen
64
+ Önce/sonra karşılaştırması veya adımlar
65
+
66
+ ## Hızlı Referans
67
+ Sık işlemler için tablo
68
+
69
+ ## Yaygın Hatalar
70
+ Ne yanlış gider + fix
71
+ ```
72
+
73
+ **Frontmatter kuralları:**
74
+ - `name`: harf, rakam, tire (özel karakter yok)
75
+ - `description`: üçüncü şahıs, SADECE ne zaman kullanılacağını anlatır
76
+
77
+ ## Skill Keşif Optimizasyonu (SDO)
78
+
79
+ **description = NE ZAMAN, ne YAPDIĞI değil.**
80
+
81
+ Test şunu gösterdi: description workflow'u özetlerse ajan TÜM skill'i
82
+ okumadan description'daki kısayolu uygular. Gövde, ajanın atladığı
83
+ dokümana döner.
84
+
85
+ ```yaml
86
+ # ❌ KÖTÜ: workflow özetler — ajan gövdeyi okumadan bunu takip eder
87
+ description: Plan yürütürken kullan — görev başına alt-ajan devreder, aralarında inceleme yapar
88
+
89
+ # ✅ İYİ: sadece tetikleyici koşullar
90
+ description: Bağımsız görevlere bölünmüş implementasyon planı yürütülürken kullan
91
+ ```
92
+
93
+ - Somut tetikleyiciler, belirtiler ve durumlar yaz
94
+ - Sorunu tarif et (race condition, tutarsız davranış), dile özgü belirtiyi değil
95
+ - Arama kelimeleri kullan: hata mesajları, belirtiler ("flaky", "takılıyor"),
96
+ araç adları
97
+ - Üçüncü şahıs yaz (system prompta enjekte edilir)
98
+
99
+ ## Demir Kanun (TDD ile aynı)
100
+
101
+ ```
102
+ FAILING TEST OLMADAN SKILL YOK
103
+ ```
104
+
105
+ Bu YENİ skill'ler VE mevcut skill EDİTLERİ için geçerli. Test etmeden
106
+ skill yazdıysan: sil, baştan başla. "Basit ekleme" istisnası yok.
107
+
108
+ ## RED-GREEN-REFACTOR (skill için)
109
+
110
+ ### RED: Başarısız Test (Baseline)
111
+
112
+ Skill'siz ajanla baskı senaryosu çalıştır (run_background ile taze ajan —
113
+ sistem promptu skill'in yaşayacağı gerçek bağlam, kullanıcı mesajı hataya
114
+ çekecek görev olsun). Birebir belgele:
115
+ - Hangi seçimleri yaptı?
116
+ - Hangi bahaneleri kullandı (verbatim)?
117
+ - Hangi baskılar ihlale yol açtı?
118
+
119
+ ### GREEN: Minimal Skill Yaz
120
+
121
+ Baseline'da belgelenen SPESİFİK bahaneleri karşılayan skill yaz. Hayali
122
+ durumlar için ekstra içerik EKLEME. Aynı senaryoyu skill ile tekrar koştur —
123
+ ajan artık uymalı.
124
+
125
+ ### REFACTOR: Loophole Kapat
126
+
127
+ Ajan YENİ bahane buldu? Açık karşı-argüman ekle. Bulletproof olana kadar
128
+ tekrar test et.
129
+
130
+ **Mikro-test:** tam senaryo pahalıysa önce kelimelik test — tek taze örnek +
131
+ rehberli vs kontrolsüz (rehbersiz) karşılaştırma, 5+ tekrar, her eşleşmeyi
132
+ elle oku. Kontrol grupta hata YOKSA yazılacak rehber de yok — dur.
133
+
134
+ ## Uyum Sağlamayı Ezberle (Disiplin Skill'leri)
135
+
136
+ Kural bilen ajan baskı altında atlarsa:
137
+
138
+ **Her loophole'u açıkça kapat** — kuralı söylemek yetmez, workaround'ları
139
+ tek tek yasakla:
140
+
141
+ ```markdown
142
+ Testten önce kod yazdıysan: SİL. Baştan başla.
143
+
144
+ **İstisna yok:**
145
+ - "Referans olarak" tutma
146
+ - Testleri yazarken uyarlama
147
+ - Silmek silmektir
148
+ ```
149
+
150
+ **"Ruh vs harf" argümanını baştan kes:**
151
+
152
+ ```markdown
153
+ **Kuralın harfini ihlal etmek, kuralın ruhunu ihlal etmektir.**
154
+ ```
155
+
156
+ **Bahane tablosu kur** — baseline testten çıkan HER bahane:
157
+
158
+ ```markdown
159
+ | Bahane | Gerçek |
160
+ |---|---|
161
+ | "Test etmek için çok basit" | Basit kod da kırılır. Test 30 saniye. |
162
+ ```
163
+
164
+ **Kırmızı bayrak listesi** — ajanın kendini kontrolü kolay olsun:
165
+
166
+ ```markdown
167
+ ## Kırmızı Bayraklar — DUR
168
+ - "Sadece bu sefer" bahanesi
169
+ - "Elle test ettim zaten"
170
+
171
+ **Hepsi: kodu sil, TDD ile baştan başla.**
172
+ ```
173
+
174
+ ## Kalıbı Hatanın Türüne Eşle
175
+
176
+ | Baseline hatası | Doğru kalıp | Yanlış kalıp |
177
+ |---|---|---|
178
+ | Baskı altında kuralı atlıyor | Yasak + bahane tablosu + kırmızı bayraklar | Yumuşak yönlendirme ("tercih et", "düşün") |
179
+ | Uyuyor ama çıktı yanlış biçimde | Pozitif reçete: çıktı NE — parçaları ve sırasıyla | Yasak listesi |
180
+ | Zaten ürettiği şeyden eleman eksitiyor | Şablon REQUIRED alanı | Şablon yanına prose hatırlatma |
181
+ | Davranış koşula bağlı olmalı | Gözlenebilir koşullu ("brief varsa ona atıf yap") | Koşulsuz kural + istisna cümleleri |
182
+
183
+ Yasaklar, şekillendirme sorunlarında TERS TEPER — "X yapma" pazarlığa
184
+ açık kalır; reçete pazarlık bırakmaz: çıktı ya söylenen kalıptadır ya değil.
185
+
186
+ **Seçtiğin kalıp için:** nüans cümlesi YOK ("X yapma, önemliyse hariç"
187
+ pazarlığı yeniden açar).
188
+
189
+ ## Token Verimliliği (Kritik)
190
+
191
+ Skill gövdesi okunduğunda bağlama girer:
192
+
193
+ - Sık yüklenen skill'ler: <200 kelime hedef
194
+ - Diğerleri: <500 kelime (yine de öz ol)
195
+ - Detayları araç yardımına bırak; cross-referans kullan ("ZORUNLU:
196
+ test-driven-development skill'ini kullan" — içerik tekrarı yok)
197
+ - Tek mükemmel örnek, çok vasat örnekten iyi
198
+ - Yeniden kullanılabilir ağır referans (100+ satır) ayrı dosyaya
199
+ (`SKILL.md` yanına `referans.md`), inline ilkeler/prensipler kalır
200
+
201
+ ## Anti-Desenler
202
+
203
+ - ❌ **Hikâye anlatımı:** "2025-10-03 oturumunda empty projectDir yüzünden..."
204
+ — çok spesifik, yeniden kullanılamaz
205
+ - ❌ **Çok-dil sulandırma:** example-js.js + example-py.py + example-go.go
206
+ - ❌ **Anlamsız etiketler:** helper1, step3, pattern4
207
+
208
+ ## Test Türüne Göre
209
+
210
+ | Skill türü | Test yöntemi | Başarı kriteri |
211
+ |---|---|---|
212
+ | Disiplin (kural dayatır: TDD, verification) | Baskı senaryosu: zaman+sunk cost+baskı birleşik; bahaneleri yakala | Maksimum baskıda kurala uyar |
213
+ | Teknik (nasıl-yapılır) | Uygulama + varyasyon + eksik bilgi senaryoları | Tekniği yeni senaryoya doğru uygular |
214
+ | Desen (zihinsel model) | Tanıma + uygulama + karşı-örnek | Ne zaman uygulanacağını doğru bulur |
215
+ | Referans (API/komut dokümanı) | Erişim + uygulama + boşluk testi | Doğru bilgiyi bulur ve uygular |
216
+
217
+ ## Deploy Etmeden ÖNCE
218
+
219
+ Her skill için (toplu üretimde her biri AYRI test edilmeden sonrakine geçme):
220
+
221
+ - [ ] Baseline (skill'siz) davranış birebir belgelendi
222
+ - [ ] description "ne zaman" tarzında, workflow özetlemiyor
223
+ - [ ] name kurallara uygun, dosya `%APPDATA%\beast\skills\<slug>\SKILL.md`
224
+ - [ ] Skill ile senaryo artık geçiyor
225
+ - [ ] Yeni bahaneler bulunduysa karşıları eklendi, tekrar test edildi
226
+ - [ ] Bahane tablosu + kırmızı bayraklar var (disiplin skill'i ise)
227
+ - [ ] `/skills` listesinde görünüyor, okunabilirlik kontrol edildi
228
+
229
+ Deploy edilmemiş skill = deploy edilmemiş kod. Test et, sonra konuşlandır.
@@ -102,7 +102,7 @@ Get-Content "$env:APPDATA\\beast\\sessions\\bg-jobs.json" | ConvertFrom-Json | %
102
102
  | Yol | Ne İşe Yarar |
103
103
  |---|---|
104
104
  | \`config.yaml\` + \`.env\` | Model sağlayıcıları + API anahtarları (\`providers.<id>.base_url/key_env/models\`, aktif: \`model.provider/default\`) |
105
- | \`settings.json\` | App ayarları: theme, workspace, modelOverride, customProviders, roleModels, deletedModels, fallout, waTts, email, waAllow, **searchChain (web arama sırası)**, **obscuraEnabled**, activeBotId |
105
+ | \`settings.json\` | App ayarları: theme, workspace, modelOverride, customProviders, roleModels, deletedModels, fallout, waTts, email, waAllow, **searchChain (web arama sırası)**, activeBotId |
106
106
  | \`sessions\\*.jsonl\` | Sohbet oturumları (satır JSON: t:meta kod, t:meta2 paralel-ajan işareti, t:msg mesaj, t:todo, t:notes) |
107
107
  | \`sessions\\bg-jobs.json\` | Paralel ajan iş kayıtları: id, title, status(queued/running/done/error/aborted), error=İPTAL SEBEBİ, groupId |
108
108
  | \`memories\\\` | SOUL.md (kişilik), MEMORY.md (uzun hafıza), USER.md (kullanıcı) |
@@ -110,9 +110,10 @@ Get-Content "$env:APPDATA\\beast\\sessions\\bg-jobs.json" | ConvertFrom-Json | %
110
110
  | \`bots.json\` | Bot kayıt defteri — max 5 bot, ilk kayıt admin 'Beast' (silinemez). Bot adı HARFLE başlamak ZORUNDA |
111
111
  | \`bots/<id>/\` | Botun izole klasörü: config.json, memory.md, yetkiler.json, logs/ |
112
112
  | \`whitelist.json\`, \`wa-auth\\\`, \`wa-chats.json\`, \`wa.log\` | WhatsApp izin listesi, Baileys auth (SİLME), sohbet eşlemesi, log |
113
+ | \`mcp.json\` | MCP server tanımları — dış araçlar (Ayarlar → MCP'den düzenlenir; araçlar modele \`mcp__<server>__<tool>\` adıyla açılır, çağrı onay kapısından geçer, çöken server 3 dk sonra otomatik yeniden denenir) |
113
114
  | \`cron.json\`, \`watchers.json\`, \`bus.json\` | Zamanlanmış görevler, web/batarya izleyicileri, olay abonelikleri |
114
115
  | \`scripts\\\` | Python scriptleri (websearch.py, news.py) |
115
- | \`obscura\\obscura.exe\` | Obscura stealth tarayıcı (web arama zincirinin 2. motoru; açılışta otomatik kurulur) |
116
+ | \`searxng\\settings.yml\` | SearXNG yerel arama motoru ayarları (127.0.0.1:8888 \`beast searxng\` ile kurulur/başlatılır) |
116
117
  | \`py\\python.exe\` | Gömülü Python runtime (makinede Python olmasa bile python_run çalışır) |
117
118
  | \`usage.json\`, \`logs\\\` | Kullanım sayaçları, çalışma logları |
118
119
  | Masaüstü\\Beast-Backups | Şifreli yedekler (.beastbak) — /backup ile alınır |
@@ -121,14 +122,14 @@ Get-Content "$env:APPDATA\\beast\\sessions\\bg-jobs.json" | ConvertFrom-Json | %
121
122
 
122
123
  | Dosya | Sorumluluk |
123
124
  |---|---|
124
- | \`main.js\` | Electron ana süreç: tüm IPC, WhatsApp/Telegram/Discord entegrasyonları, onay kapısı (/approve), /stop /restart, splash, gizli araştırma tarayıcısı, obscura kurulumu |
125
+ | \`main.js\` | Electron ana süreç: tüm IPC, WhatsApp/Telegram/Discord entegrasyonları, onay kapısı (/approve), /stop /restart, splash, gizli araştırma tarayıcısı |
125
126
  | \`agent/engine.js\` | OTURUM MOTORU: send/_run tur döngüsü, paralel ajanlar (run_background, run_background_many, tasks_list, task_status, task_cancel — task_cancel reason ZORUNLU), superyorizon (takılan işi zorla kapatır), iptal sebep disiplini, flushPendingReports |
126
127
  | \`agent/tools.js\` | Araçlar + web_search SIRALI ZİNCİRİ (searchChain: 1 dahili tarayıcı(Google) → 2 Obscura(stealth→DuckDuckGo) → 3 TinyFish(anahtarsa) → 4 python çoklu-motor; sıra Ayarlar→Web Arama'dan değişir), run_command, read/write_file, python_run, http_fetch, deep_search |
127
128
  | \`agent/llm.js\` | Sağlayıcı çağrısı + retry: ağ kopmasında 6 deneme + internet dönene kadar bekler; akış ortası kopmada kaldığı yerden devam |
128
129
  | \`agent/agentdefs.js\` | Özel ajan tanımları: %APPDATA%\beast\agents\\*.md (frontmatter: model/tools/steps/mode + prompt gövdesi); /agent ile bağlanır, run_background(agent:) ile paralel ajana verilir |
129
- | \`agent/obscura.js\` | Obscura: otomatik kurulum (GitHub releases, stealth zip) + DuckDuckGo html/lite arama ayrıştırıcı |
130
+ | \`agent/searxng.js\` | SearXNG entegrasyonu: gömülü Python'a kurulum + 127.0.0.1:8888 başlatıcı + JSON arama motoru |
130
131
  | \`agent/bots.js\` | Bot CRUD, 5 haneli bot kodu, izolasyon; ad-ilk-harf doğrulaması |
131
- | \`agent/skills.js\` | Builtin tohumlar (help, email, python-web-search, pdf, gold-trading) + SKILL.md taraması + taslaklar |
132
+ | \`agent/skills.js\` | Builtin tohumlar (help, email, python-web-search, pdf, gold-trading + superpowers metodoloji paketi: brainstorming/writing-plans/executing-plans/TDD/paralel-ajan/alt-ajan-geliştirme/sistematik-debugging/doğrulama/skill-yazma) + SKILL.md taraması + taslaklar |
132
133
  | \`agent/memory.js\`, \`agent/kb.js\` | Kalıcı hafıza + bilgi bankası |
133
134
  | \`cron.js\` (src kökü), \`agent/watchers.js\`, \`agent/bus.js\` | Cron, izleyici, olay merkezi — /stop bunlara DOKUNMAZ |
134
135
  | \`agent/usage.js\` | Token/maliyet sayaçları |
@@ -139,7 +140,7 @@ Get-Content "$env:APPDATA\\beast\\sessions\\bg-jobs.json" | ConvertFrom-Json | %
139
140
  /help · /version · /new · /open <kod> · /sessions · /stop · /start · /restart · /change [n] · /model <isim> · /think 0-5 · /clear · /notes · /rule <metin> · /rules · /notify on|off · /screenshot · /approve [always] · /deny · /update [now] · /usage · /backup · /status · /skills
140
141
 
141
142
  ## AYAR SEKMELERİ
142
- Provider · Fallout · Skills · Paralel Ajanlar · TTS · E-posta · Entegrasyonlar · Web Arama (Obscura kurulum + arama sırası) · Olaylar · Cron · Maliyet · Loglar · Panel · Limitler · Güvenlik · Güncelleme
143
+ Provider · Fallout · Skills · Paralel Ajanlar · TTS · E-posta · Entegrasyonlar · Web Arama · MCP · Olaylar · Cron · Maliyet · Loglar · Panel · Limitler · Güvenlik · Güncelleme
143
144
 
144
145
  ## PARALEL AJAN HIZLI BİLGİ
145
146
  - CEO modu: konuşan ajan iş YAPMAZ, run_background/run_background_many ile devreder; görev tanımı kendine yeterli olmalı (ajan CEO bağlamını GÖREMEZ).
@@ -235,9 +236,9 @@ web_search aracı çağrıldığında zincir OTOMATİK çalışır — elle moto
235
236
 
236
237
  Gerçek Chromium olduğu için Google'a bot koruması uygulamaz. Arama aep=1 ile açılır: Google'ın KENDİ AI cevabı yanıtın 'ai' alanında HAZIR gelir — "kimdir/nedir" sorularında önce onu kullan, kaynak linkleri de 'results' alanında gelir. Sağ panelde açılır, kullanıcı da görebilir. CAPTCHA/trafik uyarısı gelirse tarayıcı 10 dk atlanır, sıradaki motor devreye girer.
237
238
 
238
- ## 2. Obscura (stealth headlessDuckDuckGo)
239
+ ## 2. SearXNG (yerel metasearchotomatik öncelik)
239
240
 
240
- Rust tabanlı gizli tarayıcı: anti-detect parmak izi + V8 JS. Beast Agent PAKETİNDE hazır gelir ilk açılışta %APPDATA%\\beast\\obscura'ya açılır (indirme yok). Varsayılan AKTİF — tarayıcı engellenirse bot korumasını aşarak DuckDuckGo'dan sonuç getirir.
241
+ Ücretsiz, sınırsız, anahtarsız. \`beast searxng\` ile gömülü Python'a kurulur ve 127.0.0.1:8888'de arka planda çalışır. AYAKTAYSA zincirde nerede olursa olsun OTOMATİK ÖNE alınır (çok kaynaklı: Google/Bing/DDG…); kapalıysa sessizce atlanır.
241
242
 
242
243
  ## 3. TinyFish API (anahtar varsa)
243
244
 
@@ -452,16 +453,45 @@ function writeSeed(seed) {
452
453
  } catch {}
453
454
  }
454
455
 
456
+ /* Dosya tohumları: src/agent/seeds/<klasör>/SKILL.md — Superpowers metodoloji
457
+ paketi gibi kod dışı taşınan builtin skill'ler. Hepsi force: her açılışta
458
+ app sürümüyle güncellenir (kullanıcı düzenlemesi korunmaz, builtin'dir). */
459
+ function fileSeedsDir() {
460
+ return path.join(__dirname, 'seeds');
461
+ }
462
+
463
+ function loadFileSeeds() {
464
+ const out = [];
465
+ let entries;
466
+ try {
467
+ entries = fs.readdirSync(fileSeedsDir(), { withFileTypes: true });
468
+ } catch {
469
+ return out;
470
+ }
471
+ for (const e of entries) {
472
+ if (!e.isDirectory()) continue;
473
+ try {
474
+ out.push({
475
+ folder: e.name,
476
+ force: true,
477
+ body: fs.readFileSync(path.join(fileSeedsDir(), e.name, 'SKILL.md'), 'utf8'),
478
+ });
479
+ } catch {}
480
+ }
481
+ return out;
482
+ }
483
+
455
484
  /* Kaldırılan eski tohumlar: kullanıcı makinesinden de silinir */
456
485
  const RETIRED_SEEDS = ['free-web-search'];
457
486
 
458
487
  function seedIfEmpty() {
488
+ const seeds = SEEDS.concat(loadFileSeeds());
459
489
  if (!scan().length) {
460
- for (const seed of SEEDS) writeSeed(seed);
490
+ for (const seed of seeds) writeSeed(seed);
461
491
  } else {
462
492
  /* force tohumlar her açılışta güncellenir: varsayılan web arama skill'inin
463
493
  içeriği hep güncel kalır (mevcut kurulum dahil) */
464
- for (const seed of SEEDS) {
494
+ for (const seed of seeds) {
465
495
  if (seed.force) writeSeed(seed);
466
496
  }
467
497
  }
@@ -612,6 +642,7 @@ module.exports = {
612
642
  scan,
613
643
  seedIfEmpty,
614
644
  parseFrontmatter,
645
+ loadFileSeeds,
615
646
  addDraft,
616
647
  listDrafts,
617
648
  acceptDraft,