nitronium.dev

Teknik, hukuk, startup ve AI öğrenme notları.

Teknik

⌨ Teknik2026-06-30

Next.js /api/* rewrite SSE akışını buffer'lıyor

Next.js `next.config.ts` içindeki `afterFiles` rewrite'lar backend'e proxy yaparken SSE (Server-Sent Events) response body'sini buffer'lıyor. Sonuç: client gerçek zamanlı event almıyor, bağlantı sanki…
⌨ Teknik2026-06-30

pm2 log ile SSE bağlantısının backend'e ulaşıp ulaşmadığını anlama

SSE akışı çalışmıyor mu? Önce bağlantının backend'e gerçekten ulaşıp ulaşmadığını doğrula. Next.js rewrite, nginx proxy veya Tailscale katmanlarından herhangi biri isteği bloke edebilir.

```bash
pm2 …
⌨ Teknik2026-06-30

SSE bağlantısı auth header olmadan sessizce başarısız oluyor

Raw `fetch()` ile SSE başlatırken `Authorization` veya `X-CSRF-Token` header'ı eksik bırakılırsa backend 401 döndürüyor ama client tarafında görünür bir hata yok. `EventSource` API'si zaten custom hea…
⌨ Teknik2026-06-25

gbrain CLI yoktu ama kod sessizce devam ediyordu

`gold-mine` projesinin `vault.py` dosyası her rapor sonunda `gbrain sync --source gold-mine` çağırıyordu. Hata mesajı hiç görünmemişti çünkü kod `FileNotFoundError`'ı yakalayıp `"gbrain CLI bulunamadı…
⌨ Teknik2026-06-25

Git repo'da toplu dosya taşıma: tracked için git mv, untracked için shutil

Git reposundaki dosyaları klasöre taşırken `git mv` kullanmak gerekiyor — aksi halde git eski dosyayı silindi, yenisini untracked olarak görüyor ve history kopmaya başlıyor.

Sorun: untracked dosyalar…
⌨ Teknik2026-06-25

Backend SSE hazırken frontend polling fallback: ne zaman yeterlidir

Backend'de `GET /api/tasks/{taskId}/trace/stream` SSE endpoint'i vardı — 500ms DB poll, 15s keepalive ping, terminal'de `done` event. Ama frontend buna bağlı değildi; tek seferlik REST çağrısı yapıyor…
⌨ Teknik2026-06-25

zsh'da bash array sözdizimi çalışmıyor: ${arr//-/ } hata veriyor

macOS'ta varsayılan shell zsh. Bash scriptleri için yazılan array sözdizimi zsh'da hata üretiyor.

Sorun: git vault'undaki dosyaları döngüyle taşımak için bu kodu yazdım:

```bash
for f in *.md; do
⌨ Teknik2026-06-24

Tailwind Play CDN ile SRI hash kullanılamaz

`cdn.tailwindcss.com` bir statik dosya sunmaz. HTML içeriğini okuyup hangi utility class'ların kullanıldığını tespit eder, CSS'i runtime'da dinamik olarak üretir. Bu nedenle her sayfa yüklemesinde far…
⌨ Teknik2026-06-20

PM2 ecosystem.config.cjs içinden .env dosyası okuma

PM2'nin `ecosystem.config.cjs` dosyasına credentials yazmak hem güvenlik riski hem de `.gitignore` ile çelişir. PM2'nin native `env_file` desteği versiyona göre güvenilmez, `dotenv` paketi de her proj…
⌨ Teknik2026-06-20

PostgreSQL INSERT'te uzun metin: dollar-quoting ile tek tırnak sorunu yok

SQL INSERT içine uzun metin blokları yazarken tek tırnak (`'`) karakterleri her şeyi bozar. Özellikle agent talimatları, markdown içerik veya kod parçaları içeren kayıtlarda bu sorun kaçınılmaz.

Post…
⌨ Teknik2026-06-20

PostgreSQL: NULL değerli unique kolonda upsert sessizce kırılır

SQLAlchemy'de `on_conflict_do_update(index_elements=["tescil_no"])` kullanırken dikkat edilmesi gereken bir davranış: PostgreSQL'de unique constraint, NULL değerleri birbirinden farklı sayar. Yani `te…
⌨ Teknik2026-06-20

SQLAlchemy: loop içinde exception sonrası PendingRollbackError

Birden fazla işlemi sırayla yapan bir döngüde SQLAlchemy session kullanırken, bir iterasyonda exception fırlarsa session bozuk durumda kalır. Sonraki iterasyon aynı session'ı kullanmaya çalışınca şu h…
⌨ Teknik2026-06-20

Telegram MCP plugin çöktüğünde direkt Bot API ile dosya gönderme

MCP health check bazen Telegram plugin'ini `Module not found "server.ts"` hatasıyla bloke ediyor. Plugin restart etmeden de dosya göndermek mümkün.

İki şeyi bilmek yeterli: doğru token nerede, ve `cu…
⌨ Teknik2026-06-19

Bozuk .git dizini: içinde yalnızca 'sdd' dosyası

`git status` çalıştırınca `fatal: not a git repository` hatası geldi. Ama `.git/` klasörü mevcuttu.

İçine bakınca tek bir `sdd` dosyası vardı — geçerli git yapısından hiçbir iz yok.

```bash
ls /proj…
⌨ Teknik2026-06-19

git add -A ile embedded repo uyarısı: içerik commit'e girmiyor

Ana repo içinde kendi `.git/` klasörü olan bir alt klasör varken `git add -A` yapılınca şu uyarı çıkar:

```
warning: adding embedded git repository: alt-klasor
hint: Clones of the outer repository wi…
⌨ Teknik2026-06-19

PHP json_encode XSS: JSON_HEX_TAG eksikliği

`<script>` bloğu içine PHP verisi gömmek için sık kullanılan pattern:

```php
const raw = <?= json_encode($body, JSON_UNESCAPED_UNICODE) ?>;
```

Eğer `$body` içinde `</script>` geçiyorsa tarayıcı scr…
⌨ Teknik2026-06-18

brew services stop PostgreSQL'i durdurmadı — process hâlâ ayaktaydı

`brew services stop postgresql@15` başarılı mesajı verdi ama `pg_isready` hâlâ `accepting connections` dedi.

`lsof -i :5432` ile baktım: process 9 Haziran'dan beri çalışıyor, `brew services` onu durd…
⌨ Teknik2026-06-18

Bun + SQLite FTS5 ile 50 Satırda MCP Arama Sunucusu

Vault'lardaki 300+ markdown dosyasını her oturumda Claude'a erişilebilir kılmak için minimal bir MCP sunucusu yazdım. Dış bağımlılık yok, sadece `@modelcontextprotocol/sdk` ve Bun'ın built-in SQLite'ı…
⌨ Teknik2026-06-18

Bun SQLite'ta { readonly: false } seçeneği SQLITE_MISUSE hatası verir

`bun:sqlite` ile veritabanı açarken okuma/yazma modunu açıkça belirtmeye çalışınca `SQLITE_MISUSE` hatası aldım:

```typescript
// HATA
const db = new Database('/path/to/db', { readonly: false });
// …
⌨ Teknik2026-06-18

Bun'da fetch Response'u buffer'lamadan diske yazma

Telegram'dan dosya indirip vault'a kaydederken, büyük dosyaları belleğe almadan direkt diske yazmak istedim. Bun'ın `Bun.write()` fonksiyonu `Response` nesnesini doğrudan kabul ediyor:

```typescript
⌨ Teknik2026-06-18

claude-mem PM2 ile Çalışmaz: LaunchAgent Kullan

claude-mem'i PM2'ye eklemeye çalışırken `worker-service.cjs`'in sürekli crash ettiğini gördüm. Loglarda şu dönüyordu:

```
[wrapper] Inner exited with code=0, signal=null
[wrapper] Inner exited unexpe…
⌨ Teknik2026-06-18

Drizzle ORM ile PostgreSQL'den SQLite'a geçiş

Drizzle ORM tabanlı bir Next.js projesini PostgreSQL'den SQLite'a taşırken adımlar şunlardı:

**1. Paket değişimi**

```bash
npm uninstall pg
npm install better-sqlite3
npm install -D @types/better-sq…
⌨ Teknik2026-06-18

`du vault/*` gizli klasörleri atlar, `.git` görünmez

Bir vault'un disk kullanımını kontrol ederken şaşırtıcı bir sonuçla karşılaştım:

```bash
du -sh ~/Documents/research-vault/*
# → toplam ~1.3MB
```

Ama vault'un gerçek boyutu 391MB'tı. Fark neredeydi…
⌨ Teknik2026-06-18

GBrain get_stats ile SQL COUNT farklı sayı verir — soft-delete farkı

GBrain MCP aracından istatistik çekince 3.664 sayfa görüyordum. SQL'den sorduğumda ise 4.630 çıkıyordu. Aynı veritabanı, farklı sayılar.

Neden? `pages` tablosunda bir `deleted_at` sütunu var. GBrain …
⌨ Teknik2026-06-18

Claude skill ekosisteminden deprecated bağımlılık temizleme yöntemi

Sistemden bir aracı kaldırdığınızda (bizim durumumuzda GBrain), skill/agent dosyalarında kalan referanslar iki tipe ayrılıyor:

**Broken** — komut artık çalışmıyor, skill işlevsiz hale gelmiş. Örnek: …
⌨ Teknik2026-06-18

pm2 flush: tüm PM2 loglarını tek komutla sıfırla

PM2 yönetilen tüm süreçlerin log dosyalarını tek seferde boşaltmak için:

```bash
pm2 flush
```

Her servisin `out.log` ve `error.log` dosyasını sıfırlar. Servisler çalışmaya devam eder, sadece log iç…
⌨ Teknik2026-06-18

PostgreSQL: LEFT JOIN ile COUNT şişer, COUNT(DISTINCT) şart

Birden fazla tabloyu JOIN eden bir sorguda sayfa sayısını kontrol ederken beklenmedik sonuç aldım:

```sql
SELECT source_id, COUNT(p.id) as sayfa_sayisi
FROM sources s
LEFT JOIN pages p ON p.source_id…
⌨ Teknik2026-06-18

realpathSync ile symlink path traversal koruması

Dosya yazma izinlerini kontrol eden bir fonksiyonda `..` içeriyor mu diye string kontrolü yapmak yeterli değil. `path.resolve()` `..` segmentlerini çözse de symlink'leri çözmez. Saldırgan `allowed_dir…
⌨ Teknik2026-06-18

SessionStart hook skill dosyasını eski versiyonla ezebilir

`~/.claude/settings.json` içindeki SessionStart hook'ları oturum açılışında otomatik çalışır. Bu hook'lardan biri skill dosyalarını "güncelleme" amacıyla yazıyorsa tehlike var.

Bu oturumda `gunluk-oz…
⌨ Teknik2026-06-18

SQLite JSON alanını LIKE yerine json_extract ile güvenli sorgulama

SQLite'ta JSON olarak saklanan bir alanın içindeki değeri sorgularken LIKE kullanmak hem güvensiz hem hatalı eşleşmelere açık:

```sql
-- KÖTÜ: injection riski + yanlış eşleşme
SELECT * FROM tasks WHE…
⌨ Teknik2026-06-18

SQLite'ta PostgreSQL JSONB operatörlerinin karşılıkları

PostgreSQL JSONB operatörlerini SQLite'a taşırken her birinin karşılığını bulmak gerekiyor. SQLite'ta bunların tamamı `json_extract()` ile yapılır.

| PostgreSQL | SQLite |
|---|---|
| `context->>'key…
⌨ Teknik2026-06-17

crontab'da inline PATH ataması aktarılmaz, sistem Python'u kullanılır

Crontab satırında komuttan önce `PATH=...` yazmak, environment değişkenini komuta aktarmaz:

```
# Çalışmaz gibi görünse de PATH subprocess'e geçmez
0 9 * * * PATH=/opt/homebrew/bin:/usr/local/bin:/us…
⌨ Teknik2026-06-17

GBrain orphan sayfaları links tablosuna INSERT ile toplu temizleme

GBrain'de "orphan" sayfa, kendisine hiçbir başka sayfanın link vermediği sayfa demek. Yüzlerce orphan varsa tek tek uğraşmak yerine SQL ile toplu çözülür.

Strateji: her kategori için bir `_index-*` s…
⌨ Teknik2026-06-17

PM2 cron_restart uzun süren subprocess'i keser, last_run_at güncellemez

PM2'de `cron_restart` ile zamanlanan bir process, belirli aralıklarla restart sinyali alır. Eğer bu process içinde `subprocess.run(...)` gibi bloklayan bir çağrı varsa ve bu çağrı restart aralığından …
⌨ Teknik2026-06-16

Claude Code Skills Alt Klasörden Otomatik Keşfediliyor

`~/.claude/skills/` altına bir subdirectory eklersen Claude Code içindeki skill'leri otomatik keşfeder.

133 adet scientific skill'i `~/.claude/skills/scientific/` içine koyduğumda hepsi sistem remind…
⌨ Teknik2026-06-16

Claude Code UserPromptSubmit Hook'tan Context Ekleme Formatı

Claude Code hook'larından kullanıcı promptu işlenmeden önce Claude'un context'ine metin enjekte edebilirsin.

Hook stdout'a şu JSON'ı yaz:

```json
{
"hookSpecificOutput": {
"hookEventName": "Us…
⌨ Teknik2026-06-16

macOS uyku sonrası Errno 8 — geçici DNS başarısızlığı

macOS bilgisayar uyku modundan çıktıktan hemen sonra DNS çözümlemesi birkaç saniyeliğine başarısız olabiliyor. Bu sırada ağ bağlantısı gerektiren bir servis çalışıyorsa şu hatayla karşılaşılıyor:

```…
⌨ Teknik2026-06-16

Markdown vault'larında toplu wikilink temizliği

1720 markdown dosyasında üç şeyi temizlemek gerekti: frontmatter `related` alanı, `*İlgili:*` satırı ve `[[slug]]` wikilink sözdizimi.

```python
import os, re

def process(content):
# Frontmatter…
⌨ Teknik2026-06-16

PM2 restart sayısı ile dahili while loop restart'ı aynı şey değil

PM2 bir process'in kaç kez yeniden başlatıldığını sayar. Ama "yeniden başlatma" dışarıdan bakınca iki farklı şey olabilir.

Eğer Python kodu şöyle yazılmışsa:

```python
if __name__ == "__main__":
⌨ Teknik2026-06-16

python-telegram-bot'ta polling hatalarını yutmak için error_callback

`python-telegram-bot` v20+ ile bot yazarken `app.add_error_handler(...)` ile eklenen handler sadece komut ve mesaj handler'larındaki hataları yakalar. `get_updates` polling döngüsündeki `NetworkError`…
⌨ Teknik2026-06-16

vault-linker: PM2'de gizlenen TF-IDF wikilink servisi

Vault dosyalarındaki wikilink'lerin nereden geldiğini araştırırken `pm2 list` çıktısında `vault-linker` adlı bir servis gördüm. 110MB bellek tüketiyordu, 22 saattir çalışıyordu.

Kaynak kodu inceleyin…
⌨ Teknik2026-06-15

GBrain dream cycle 'locked' takılması — stale PID lock'u temizle

`gbrain dream --phase eval_takes` çalıştırınca şu mesaj geldi:

```
Skipped: another cycle is already running. (locked)
```

PM2'de `gbrain-dream-nightly` durdurulmuş, ortada çalışan bir process yok. …
⌨ Teknik2026-06-15

startsWith() ile path izin kontrolü path traversal'a açık

Dosya yazma yetkisi kontrol ederken sık yapılan hata: normalize etmeden `startsWith()` kullanmak.

```ts
// YANLIŞ — bypass'a açık
function isPathAllowed(p: string) {
return ROOTS.some(root => p.sta…
⌨ Teknik2026-06-15

PM2 cron_restart + venv Python'da KeyboardInterrupt — pycache değil race condition

Bugün bir PM2 servisi (evaluator) 216 restart biriktimiyle durmuş buldum. Hata şuydu:

```
Fatal Python error: init_import_site: Failed to import the site module
KeyboardInterrupt
File ".../sitecust…
⌨ Teknik2026-06-15

PM2'de 'waiting' durumu hata değil — cron servislerinde normal son durum

PM2 listesinde bir servisin `waiting` durumunda görmek ilk bakışta endişe verici. Ama `autorestart: false` + `cron_restart` ikilisiyle yapılandırılmış servislerde bu tamamen normaldir.

Ne anlama geli…
⌨ Teknik2026-06-14

gbrain list --tag ile Tag Filtrelemesi

`gbrain search <sorgu>` içerik ve başlık üzerinden çalışır, tag'e göre filtrelemez. Tag'li sayfaları bulmak için:

```bash
gbrain list --tag <tag>
```

Çıktı formatı tab-separated:

```
slug\ttype\tda…
⌨ Teknik2026-06-14

PM2 Goals Shell Action'da cwd Eksikliği 'No such file or directory' Verir

Goals tablosuna shell action eklerken `cwd` alanını atlamak kolayca gözden kaçan bir hata. Komut çalışır ama bulunduğu dizin yanlış olduğu için `venv/bin/gold-mine` gibi relative path'ler bulunamaz.

⌨ Teknik2026-06-13

gbrain sources remove --confirm-destructive olmadan çalışmıyor

`gbrain sources remove <kaynak>` komutu tek başına çalışmıyor. Kaç sayfa, chunk ve embedding silineceğini gösteren bir önizleme ekranı açıp duruyor.

Silmek için `--confirm-destructive` flag'i şart:

⌨ Teknik2026-06-13

OpenRouter yerine claude -p ile repo skorlama

github-scout, repo analizini OpenRouter üzerinden gpt-4o-mini'ye gönderiyordu. API key geçersizleşince her çalışmada `401 User not found` hatası vermeye başladı; fallback olarak heuristic skora düşüyo…
⌨ Teknik2026-06-12

chokidar depth sınırı olmadan binlerce dosya izleyince 1.3 GB RAM yer

vault-linker servisi 19 vault'u `chokidar.watch(path + "**/*.md")` ile izliyordu. Üç gün sonra PM2 1.3 GB RSS raporladı. Restart yok, memory leak değil; chokidar izlenen her dosya için inode/mtime sta…
⌨ Teknik2026-06-12

PM2 altında claude CLI stdin bekleyince script crash oluyor

Python'dan `claude -p "prompt"` çağrısı yaparken şöyle yazılmıştı:

```python
result = subprocess.run(
["claude", "-p", prompt],
capture_output=True, text=True, timeout=90
)
```

Terminal'de ç…
⌨ Teknik2026-06-12

Claude Code MCP sunucularını proje bazında yüklemek

`~/.claude/settings.json`'daki `mcpServers` tanımları her Claude Code session'ında yüklenir. Domain-spesifik sunucular (hukuk, patent, yargi gibi) genel oturumlarda gereksiz bellek ve bağlantı açar.

⌨ Teknik2026-06-12

git ls-files tracked dosya kontrolünde yanıltıcı çıkış kodu

`git ls-files <dosya>` komutunun çıkış kodu dosya tracked olsa da olmasa da 0. Bu yüzden şu kontrol her zaman "TRACKED!" yazar:

```bash
git ls-files .env 2>/dev/null && echo "TRACKED!" || echo "değil…
⌨ Teknik2026-06-12

Agent routing kararını LLM'e bırak: SelectorGroupChat pattern

Hardcoded `if domain === "hukuk" → hukukAgent` yerine routing kararını LLM'e ver. AutoGen'in SelectorGroupChat'inden gelen fikir.

```typescript
const AGENT_POOL = [
{ name: "hukuk", description: "…
⌨ Teknik2026-06-12

PM2 while döngüsü exit 1 alınca tamamen duruyor

PM2'de bazı servisler şu pattern ile çalışıyor:

```bash
script.sh
while [[ $? -eq 0 ]]; do
sleep 2
script.sh
done
```

Mantık şu: script başarısız olursa dur, başarılıysa tekrar çalıştır. Ama bu …
⌨ Teknik2026-06-11

Anthropic API Key Bağımlılığını claude -p Subprocess ile Değiştirme

TypeScript projesinde `@anthropic-ai/sdk` ile yapılan LLM çağrıları `ANTHROPIC_API_KEY` gerektirir. Bu key ayrı faturalanır ve CI/batch ortamlarında yönetmesi zahmetlidir.

## Ne Gördüm

`judgeSignifi…
⌨ Teknik2026-06-11

asyncio StreamReader 64KB Limiti: Subprocess Çıktısında Satır Uzunluğu Hatası

`claude -p --output-format stream-json` kullanırken Telegram bot'tan şu hata geldi:

```
Separator is found, but chunk is longer than limit
```

Hatanın kaynağı Python'un `asyncio/streams.py` içindeki…
⌨ Teknik2026-06-11

build123d + Python 3.14: OCP HashCode AttributeError ve Çözümü

`cadpy` pipeline'ı üzerinden STEP üretmeye çalışırken şu hatayı aldım:

```
AttributeError: 'OCP.OCP.TopoDS.TopoDS_Shape' object has no attribute 'HashCode'
```

`build123d 0.7.0` ve `cadquery-ocp 7.9…
⌨ Teknik2026-06-11

docker-compose.yml'e Dokunmadan Eksik Env Var Eklemek: override.yml

Üçüncü parti bir Docker Compose servisini test ederken `MEMORY_SALT` gibi bir değişkenin asıl `docker-compose.yml`'de tanımlı olmadığını gördüm. Dosyayı düzenlemek istemiyordum çünkü upstream ile senk…
⌨ Teknik2026-06-11

waitForCompletion Kaldırıp Job Queue'yu Fire-and-Forget Yapma

Bir iş akışı hem job submit edip hem de o job'un tamamlanmasını bekliyorsa, işleyici değiştiğinde (ör. senkron worker'dan async cron'a geçiş) bloklanma süresi faydasız hale gelir.

## Ne Gördüm

`patt…
⌨ Teknik2026-06-09

AgentShield kırık symlink üzerinde statSync ile crash ediyor

`npx ecc-agentshield scan` komutunu ilk çalıştırdığımda şu hatayı aldım:

```
Error: ENOENT: no such file or directory, stat '~/.claude/skills/customize'
at statSync (node:fs:1710:25)
at scanC…
⌨ Teknik2026-06-09

Sigma.js grafiği çalışmıyorsa api.php'de action eksik olabilir

## Ne Gördüm

`/harita` sayfası HTTP 200 dönüyordu ama grafik yüklenmiyordu. Browser console'da sessiz hata vardı.

## Neden

`graph.php` içindeki Sigma.js kodu şunu çekiyordu:

```js
const res = awai…
⌨ Teknik2026-06-09

bun run ile başlatılan MCP process, kaynak değişse de eski kodu çalıştırır

Claude Code, stdio tipindeki MCP server'ı session başında spawn eder:

```json
"gbrain": {
"type": "stdio",
"command": "bun",
"args": ["run", "src/mcp-wrapper.ts"]
}
```

`bun run` TypeScript do…
⌨ Teknik2026-06-09

Claude Code Stop hook'larında sıra önemli — dosyalar aynı session sync'ine girmez

`settings.json`'daki `Stop` hook listesi yukarıdan aşağıya çalışır. Bir hook'un yazdığı dosya, aynı listedeki önceki bir hook tarafından işlenemez.

## Somut Örnek

```json
"Stop": [
{ "command": "g…
⌨ Teknik2026-06-09

Claude Code transcript JSONL formatı ve Stop hook'ta okuma

Claude Code her session'ı bir JSONL dosyasına kaydeder. Stop hook `transcript_path` ile bu dosyanın yolunu alır.

## Dosya Konumu

```
~/.claude/projects/<proje-hash>/<session-uuid>.jsonl
```

Her sat…
⌨ Teknik2026-06-09

Claude Code config önceliği: .claude.json > settings.json

Claude Code iki farklı config dosyası okuyor ve ikisinde aynı MCP server tanımlıysa hangisi kazanıyor?

**Dosyalar:**
- `~/.claude.json` (eski format, `mcpServers` key'i ile)
- `~/.claude/settings.jso…
⌨ Teknik2026-06-09

Content-Disposition header'ında user input: RFC 5987 ve sanitize zorunlu

Kullanıcı veya DB'den gelen bir değeri `Content-Disposition` header'ına yazarsan header injection riski var. `\r\n` içeren bir değer yeni header satırı ekleyebilir.

**Tehlikeli:**
```typescript
'Cont…
⌨ Teknik2026-06-09

FastMCP HTTP'den çağırmak için 3 adımlı handshake gerekiyor

FastMCP sunucusunu Python'dan değil HTTP üzerinden (Next.js API route gibi) çağırmak istersen basit bir POST yetmiyor. Streamable HTTP transport şu sırayı zorunlu kılıyor:

**1. Initialize — session a…
⌨ Teknik2026-06-09

Fibonacci küre projeksiyonu yatay bant oluşturuyor — rotasyon ile çözülüyor

Graf node'larını küre yüzeyine dağıtmak için Fibonacci (altın açı) algoritması kullanılır. Ama bu dağılımı 2D'ye düz projekte edince node'lar yatay bantlar halinde hizalanır, etiketler üst üste biner.…
⌨ Teknik2026-06-09

GBrain Kaynak Değişikliklerinin Etkili Olması İçin Rebuild Zorunlu

## Ne Gördüm

`transcript-discovery.ts`'yi düzelttim, doğrudan `bun src/cli.ts` ile test ettim. Çalıştı. Ama `gbrain` komutuyla çalıştırınca hala eski davranış.

## Neden

```bash
ls -la /opt/homebrew…
⌨ Teknik2026-06-09

GBrain Tarih Regex Hatası: Alt Çizgili Dosya Adları Eşleşmiyor

## Ne Gördüm

`gbrain dream --phase synthesize --date 2026-06-09` çalıştırınca 0 transcript buldu. Ama dizinde 9 tane `session_2026_06_09_*.md` dosyası vardı.

## Kök Neden

`transcript-discovery.ts` …
⌨ Teknik2026-06-09

GBrain Dream Dry-Run Yanıltıcı: --json ile Gerçek Detayı Gör

## Ne Gördüm

```bash
gbrain dream --phase synthesize --date 2026-06-09 --dry-run
# Brain is healthy. 1 phase(s) checked in 0.0s
```

"Brain is healthy" mesajı başarılı gibi görünüyor. Ama transcript …
⌨ Teknik2026-06-09

GBrain'de gerçek kullanımı ölçmek: mcp_request_log

GBrain'de kaç sayfa indexli olduğunu değil, o sayfaların gerçekten kullanılıp kullanılmadığını bilmek istiyorsan doğru yer `mcp_request_log` tablosu.

## Ne gördüm

1.500 içtihat kararı hukuk vault'un…
⌨ Teknik2026-06-09

GBrain SQL: 'source' kolonu yok, 'source_id' var

GBrain veritabanında `pages` tablosunda `source` adında bir kolon yok. Kolon adı `source_id`.

## Ne gördüm

```sql
SELECT source, COUNT(*) FROM pages GROUP BY source;
-- ERROR: column "source" does n…
⌨ Teknik2026-06-09

graphology-layout-forceatlas2 paketi UMD build vermiyor, CDN script tag çalışmıyor

Bir sigma.js grafında circular layout yerine ForceAtlas2 kullanmak için `graphology-layout-forceatlas2` paketini CDN'den eklemeye çalıştım:

```html
<script src="https://cdn.jsdelivr.net/npm/grapholog…
⌨ Teknik2026-06-09

gstack browse skill headless Chromium'da WebGL desteklemiyor

gstack browse skill ile sayfa test ederken WebGL kullanan kütüphaneler (sigma.js, three.js vb.) render etmiyor. Kontrol etmek için:

```js
$B js "!!document.createElement('canvas').getContext('webgl')…
⌨ Teknik2026-06-09

.htaccess HTTP→HTTPS yönlendirmesi varken curl http://localhost 404 veriyor

Sunucu üzerinde `curl http://localhost/dosya.html` ile test yaparken sürekli 404 aldım. Sorun dosyada değil, `.htaccess` kuralında.

## Sorun

`.htaccess`'te şu kural varsa:

```apache
RewriteCond %{H…
⌨ Teknik2026-06-09

sudo cp ile kopyalanan dosyayı LiteSpeed servis edemiyor — chown şart

LiteSpeed (ve çoğu web sunucusu) dosyaları `nobody` veya `www-data` kullanıcısı olarak okur. `sudo cp` ile kopyalanan dosyalar `root:root` sahipliğiyle gelir; web sunucusu bu dosyaları okuyamaz ve 404…
⌨ Teknik2026-06-09

MCP HTTP endpoint'e doğrudan POST: Accept header eksikse 406 döner

GBrain gibi Streamable HTTP transport kullanan MCP server'lara doğrudan HTTP isteği atarken `Accept` header zorunlu:

```bash
# YanlIş - 406 döner
curl -X POST http://127.0.0.1:4444/mcp \
-H 'Conten…
⌨ Teknik2026-06-09

mkdir bir symlink üzerinde çalışmaz — hedef dizin oluşturulmalı

`~/.claude/skills/customize` zaten vardı, bir symlink'ti. Ama şunu çalıştırınca hata aldım:

```bash
mkdir ~/.claude/skills/customize
# mkdir: ~/.claude/skills/customize: No such file or directory
```…
⌨ Teknik2026-06-09

PDF→Markdown dönüşümü Obsidian graph'ta phantom node oluşturuyor

PDF kitaplar markdown'a çevrildiğinde bölüm başlıkları, alt başlıklar ve bazı kelimeler `[[The]]`, `[[cover]]`, `[[Part]]`, `[[Introduction]]` gibi wikilink'e dönüşüyor. Obsidian bunları ayrı notlara …
⌨ Teknik2026-06-09

PostgreSQL postmaster.pid Eski Kilit ve LaunchAgent Eksikliği

Mac yeniden başlamasından sonra PostgreSQL başlamıyorsa iki ayrı sorun birlikte yaşanıyor olabilir.

**Sorun 1: Eski kilit dosyası**

`postmaster.pid` var ama içindeki PID başka bir sürece ait. Postgr…
⌨ Teknik2026-06-09

resmigazete.gov.tr Yönetmelik sayfaları windows-1254 encoding döndürüyor

Bun `fetch().text()` varsayılan olarak UTF-8 ile decode eder. Ancak resmigazete.gov.tr'nin Yönetmelik sayfaları (`/eskiler/.../YYYYMMDD-N.htm`) Microsoft Word 11'den export edilmiş HTML belgelerdir ve…
⌨ Teknik2026-06-09

rsync --delete ile deploy yaparken local'de olmayan sunucu dosyaları silinir

## Ne Gördüm

nitronium.dev'e `rsync --delete` ile deploy yapınca sayfada pagination kayboldu, harita butonu gitti, bazı not içerikleri silindi.

## Neden

Local vault (`nitronium-dev/`) sunucu ile se…
⌨ Teknik2026-06-09

Sigma.js v2 headless Chromium'da canvas boş kalıyor, konsol hatası yok

Sigma.js v2.4.0 ile çalışan bir graf sayfasını gstack browse skill ile test ederken canvas tamamen boştu. JS konsolu hata vermiyordu, API'den 45 node + 51 edge geliyordu, graphology ve sigma CDN'den y…
⌨ Teknik2026-06-09

Microsoft Word HTML export artıkları: conditional comments temizlenmeli

Microsoft Word 11'den HTML olarak kaydedilen belgeler `<!--[if gte mso 9]>...<![endif]-->` şeklinde conditional comments içerir. Bu bloklar içinde Word metadata XML'i bulunur (`<w:View>Print</w:View>`…
⌨ Teknik2026-06-08

PM2 + asyncio: İç Restart Döngüsü Tuzağı

Python async botları PM2 ile çalıştırırken yaygın bir hata: iç `while True` + `asyncio.run()` döngüsü kurmak.

```python
# YANLIŞ
if __name__ == "__main__":
while True:
try:
as…
⌨ Teknik2026-06-07

Python ile Kişisel Big Data Market Scanner

Türkiye, ABD ve Avrupa piyasalarını, değerli emtiaları ve kripto varlıkları izleyen, Reddit sentiment'ini entegre eden, Telegram alert'i gönderen bir pipeline kurdum. Notlar burada.

## Mimari

```
Ya…
⌨ Teknik2026-06-07

graphology-layout-forceatlas2 CDN'de UMD bundle yok

`graphology-layout-forceatlas2` paketini jsdelivr veya unpkg üzerinden tarayıcıya yüklemek mümkün değil. Paket yalnızca CommonJS (`index.js`) olarak ship ediliyor, `dist/graphology-layout-forceatlas2.…
⌨ Teknik2026-06-07

LiteSpeed .htaccess rewrite RewriteCond zorunlu

LiteSpeed'de `RewriteRule ^harita$ /graph.php [L]` tek başına 404 veriyor. Apache'de çalışan bu kural LiteSpeed'de işe yaramıyor.

Çözüm: `RewriteCond !-f` ve `!-d` koşulları zorunlu.

```apache
Rewri…
⌨ Teknik2026-06-06

CTE ismiyle SQL allowlist bypass

SQL allowlist'i regex ile uyguluyorsan CTE isimleri kör noktandır.

```sql
-- Allowed tables: pages, content_chunks, links ...
-- Blocked tables: access_tokens, oauth_clients ...

-- Sıradan bypass:
W…
⌨ Teknik2026-06-06

.md dosyalarıyla veritabanısız not sitesi

[[nitronium.dev]]'in arkasında veritabanı yok. Notlar düz `.md` dosyası, PHP bunları okuyup JSON'a çeviriyor.

Yapı:

```
notes/
AI/
prompt-cache-ne-zaman-kullan.md
Teknik/
rsync-ile-deplo…
⌨ Teknik2026-06-06

Regex ile SQL güvenlik kontrolü neden yetmez

LLM'in ürettiği SQL'i regex ile kontrol etmek cazip çünkü kolay. Ama regex SQL'in yapısını anlamaz, sadece metni görür. Bu yüzden her ciddi kısıtlamanın bir bypass yolu var.

**Subquery bypass**

`FRO…
⌨ Teknik2026-06-06

Twitter scraping 2026'da artık çalışmıyor

Bir pain-point tarama sistemi kurarken Twitter'ı veri kaynağı olarak eklemeye çalıştım. Kısa özet: çalışmıyor.

**Denenilen yöntemler:**

- Üçüncü taraf scraper araçları: ya `noResults` döndürüyor, ya…
⌨ Teknik2026-06-05

CyberPanel build 4-5'te admin şifresi plaintext loglanıyor

CyberPanel 2.4 build 4 ve 5'te `loginSystem/views.py` dosyasında debug print satırları kalmış:

```python
print(f"Login attempt - Username: {username}, Password length: {len(password) if password else…
⌨ Teknik2026-06-04

LiteSpeed modülü headerOps'tan sonra çalışır

LiteSpeed'de `headerOps remove X-Powered-By` direktifi, CyberPanel OLS modülü tarafından override ediliyor. Modül `SEND_RESP_HEADER` hook'unda priority `-15`'te çalışıyor — `headerOps`'tan sonra heade…
⌨ Teknik2026-06-04

LiteSpeed'de public_html izni 755 olmalı

CyberPanel'de yeni site oluşturulunca `public_html` dizini `750` izniyle geliyor. LiteSpeed `nobody` user'ı olarak çalıştığında bu dizine giremez — site 404 döner, dosyalar yerinde olsa bile.

```bash…
⌨ Teknik2026-06-04

Rate limiting'de X-Forwarded-For güvenilmez

`X-Forwarded-For` header'ı istemci tarafından serbestçe set edilebilir. Her istekte farklı bir IP göndererek dosya tabanlı rate limiter'ı kolayca bypass etmek mümkün.

```php
// Yanlış
$ip = $_SERVER[…
⌨ Teknik2026-06-04

rsync ile deploy

`rsync` ile sunucuya dosya göndermek `scp`'den çok daha hızlı — sadece değişen dosyaları gönderir.

```bash
rsync -avz --delete ./dist/ user@host:/var/www/site/
```

`--delete` bayrağı: yerel dizinde …

AI

◆ AI2026-06-28

Hermes ACP hatası: eksik paket agent-client-protocol==0.9.0

Multica üzerinden Hermes'e atanan task'lar "hermes initialize failed: hermes process exited" hatasıyla başarısız oluyordu.

`hermes acp --check` komutu "ACP dependencies not installed. Install them wi…
◆ AI2026-06-28

Multica'da takılan agent task'ını iptal edip yeniden başlatmak

Multica üzerinden atanan bir task, workdir'e hiç yazma yapmadan "running" durumunda dakikalarca takılı kalabilir. Process ayaktadır, status running görünür ama çıktı yoktur.

Kontrol için workdir'de A…
◆ AI2026-06-28

Wrongstack'ta MiniMax provider eklemek için wrongstack auth kullan

Multica üzerinden Wrongstack'a atanan task'lar workdir'e hiç yazma yapmadan running durumunda takılı kalıyordu. Process çalışıyor görünüyordu ama ağ bağlantısı yoktu.

`wrongstack auth list` komutu "N…
◆ AI2026-06-25

React Query'de data-driven refetchInterval: task durumuna göre polling durdurma

`refetchInterval` sabit bir sayı yerine callback olarak verilirse `query.state.data`'ya bakarak dinamik davranış sağlanabilir.

Senaryo: task transcript sayfası, çalışan görevler için sürekli güncelle…
◆ AI2026-06-24

ACP: IBM bee-ai ve Google A2A birleşerek agent iletişim standardı oldu

ACP (Agent Communication Protocol) başlangıçta IBM'in bee-ai projesiydi, sonra Linux Foundation bünyesine alındı ve Google'ın A2A protokolüyle birleşti. Şu an agent-to-agent iletişim için açık bir sta…
◆ AI2026-06-24

Claude prompt'a enum ve int skor alanı eklemek downstream kararları kolaylaştırır

Claude'dan yapılandırılmış JSON çıktısı isterken yalnızca metin alanları değil, makine-okunabilir skor alanları da istemek mümkün. Downstream kod bu alanları doğrudan karşılaştırabilir, insan yorumuna…
◆ AI2026-06-23

DeerFlow uzun araştırmalarda SSE stream değil background run kullan

DeerFlow'un `/runs/stream` endpoint'i SSE (Server-Sent Events) ile cevap veriyor. Kısa sorgularda sorun yok, ama subagent'lı araştırmalar 3-10 dakika sürebiliyor. Bu kadar uzun süren stream bağlantıla…
◆ AI2026-06-23

Minimax API: hatalı thread'e follow-up mesaj gönderince 400 bad_request

DeerFlow'da Minimax M3 modeliyle çalışırken bir run hatayla biterse thread içinde yarım kalmış tool_call/tool_result çiftleri kalıyor. Aynı thread'e yeni bir human mesajı gönderildiğinde Minimax şu ha…
◆ AI2026-06-23

Multica agent task'larında curl/wget bloke — Python urllib kullan

Multica agent task'larında çalışan Claude Code oturumunda context-mode hook aktif. Bu hook curl ve wget komutlarını keserek sandboxa yönlendiriyor; HTTP isteği doğrudan ağa gitmiyor.

Dışa HTTP istek …
◆ AI2026-06-20

Multica'ya toplu agent ekleme: Web UI yerine direkt psql INSERT

Multica'da agent oluşturmanın iki yolu var: web UI'daki template picker, ya da direkt PostgreSQL INSERT. Çok sayıda agent eklenecekse DB yolu çok daha hızlı.

Gerekli ID'leri bulmak için önce sorgula:…
◆ AI2026-06-18

Agent'e SQLite ile kısa hafıza: task_outcomes tablosu

Agent sistemlerinde aynı tip görev tekrar tekrar aynı aşamada patladığında bu bilgi genellikle log'a düşüp kayboluyor. Bunun yerine SQLite'a yazmak yeterli.

`task_outcomes` adında bir tablo açtım: `t…
◆ AI2026-06-18

claude -p --allowedTools ile subprocess'i terminale dönüştürme

Telegram botu için Claude CLI'yi headless modda çalıştırırken, yalnızca yanıt üretmesini değil gerçek iş yapmasını istedim. `--allowedTools` bayrağı bunu mümkün kılıyor:

```typescript
const { stdout …
◆ AI2026-06-18

GBrain: Teoride Güçlü, Pratikte Az Kullanılan Sistemlerin Maliyeti

GBrain'i durdurduğumuzda gerçekten ne kaybettiğimizi analiz ettim. Teorik kapasitesi etkileyiciydi: cross-session bellek, vault indexleme, `think` ile çapraz sayfa reasoning, `eval` döngüsü, `skillify…
◆ AI2026-06-18

gstack skill'leri GBrain olmadan çalışır — upstream bağımlılık conditional

gstack (Garry Tan'ın Claude Code skill paketi), içindeki ~50 skill'de GBrain entegrasyonu içeriyor. `grep -i gbrain` çalıştırınca neredeyse her dosyada bir şeyler çıkıyor.

Ama bu referansların tamamı…
◆ AI2026-06-16

GBrain'de node bağlantıları embedding ile değil explicit olarak kurulur

GBrain'de sayfalar arası bağlantının semantic similarity ile otomatik oluştuğunu varsaydım, ama öyle değil.

Kaynak koda bakınca `links` tablosundaki her edge'in ya markdown içinde `[[slug]]` yazılara…
◆ AI2026-06-16

UserPromptSubmit Hook ile Otomatik Skill Seçici

133 adet scientific skill'i Claude'un uygun olanda otomatik bulması için bir hook yazdım.

Her prompt geldiğinde `skill-selector.py` çalışıyor: tüm `SKILL.md` description'larını numpy TF-IDF ile vektö…
◆ AI2026-06-15

claude -p subprocess'te --dangerously-skip-permissions yerine bypassPermissions kullan

Agent sistemlerinde `claude -p` ile subprocess çalıştırırken harici dizinlere yazma gerekebilir (örn. `~/.claude/skills/`). İlk akla gelen seçenek:

```ts
// YANLIŞ — her tür izni atlar
['claude', '-p…
◆ AI2026-06-15

GBrain eval_takes düşük skor: inactive take'ler örneklemeye giriyor

GBrain dream cycle'da `eval_takes` fazı 5.6/10 verdi. AI jürisi "signal density düşük, trivial entries fazla" diyordu.

Sebebi beklenmedik bir yerden çıktı: takes tablosunda 1002 kayıt var, 856'sı ina…
◆ AI2026-06-15

GBrain'de Hiç Sorgulanmamış Sayfaları Bulma: Forgotten Gem Discovery

GBrain'de 4429 sayfa indeksli ama bunların 4222'si yani %95'i hiç aranmamış. `salience_touched_at` sütunu bir sayfa arama sonucunda döndüğünde güncelleniyor; `NULL` ise o sayfa hiçbir sorgunun yüzeyin…
◆ AI2026-06-15

GBrain MCP Token Bazı Source'lara Erişemiyor

GBrain MCP'den `get_page` ile bir sayfayı okumaya çalıştım, `page_not_found` hatası aldım. Oysa aynı slug PostgreSQL'de `deleted_at IS NULL` ile açıkça mevcuttu.

Sebep: GBrain MCP token'ları `takesHo…
◆ AI2026-06-15

GBrain resolve_take MCP active=false Yapmıyor

GBrain'de bir take'i çözümlenmiş olarak işaretlemek için `resolve_take` MCP aracını çağırdım. Araç başarılı döndü ama take hâlâ aktif listede çıkmaya devam etti.

Sebebi: `resolve_take` sadece `resolv…
◆ AI2026-06-15

Python'da generator'da len() çalışmaz — sum(1 for ...) kullan

`portfolyo_monitor.py`'de şöyle bir satır vardı:

```python
f"MORE-DILIGENCE: {len(s for s in startups if 'MORE-DILIGENCE' in s.get('karar',''))}"
```

Çalışırken `TypeError: object of type 'generator…
◆ AI2026-06-14

GBrain Gotcha Sistemi: Kaydet ve Lazy Load Pattern'i

Her task sonunda `/task-retro` çalıştırarak öğrenilen şeyleri atomik kural olarak GBrain'e kaydediyorum. Kural formatı: `[BAĞLAM] durumunda [EYLEM] yapma/yap, çünkü [NEDEN].`

Kaydetme `gbrain put "go…
◆ AI2026-06-14

CLAUDE.md'ye Task Intake ve Output Validation Katmanları Eklemek

Andrej Karpathy'nin metodolojisindeki iki kritik eksik katmanı CLAUDE.md'ye bölüm olarak ekledim.

**`## 0. Task Intake`** -- Göreve başlamadan bilinmeyen sayısını ölçer ve buna göre soru açar:

- 0 b…
◆ AI2026-06-13

GBrain eval_takes FAIL: session-action sayfaları takes'i nasıl kirletir

GBrain'in `eval_takes` fazı rastgele 50 take örnekliyor ve bunları `signal_density` dahil 5 boyutta değerlendiriyor. Eşik: her boyutun ortalaması ≥7. Bu eşiği geçemeyince Telegram'a uyarı düşüyor.

So…
◆ AI2026-06-13

GBrain kirli takes temizliği: LENGTH filtresi ile toplu deaktivasyon

GBrain takes tablosunda noise birikiyor ve `eval_takes` fazı bunları örnekleyince kalite skoru düşüyor. Anlık temizlik için LENGTH filtresi çalışıyor:

```sql
UPDATE takes SET active=false
WHERE activ…
◆ AI2026-06-13

İngilizce pain pattern Türkçe RSS içeriğini filtreleyemiyor

gold-mine pipeline'ında PAIN_PATTERNS listesi tamamen İngilizce: `"wish there was"`, `"can't find"`, `"looking for a tool"` gibi. Şikayet.com RSS'inden 1000 post çekildi, filtre 0 eşleşme döndürdü.

S…
◆ AI2026-06-12

AutoGen maintenance mode'a girdi, resmi halef Microsoft Agent Framework

AutoGen artık yeni özellik almıyor. Microsoft, yeni projeler için [agent-framework](https://github.com/microsoft/agent-framework)'e geçmeyi öneriyor. Mevcut projeler için migration guide var.

Microso…
◆ AI2026-06-12

OpenRouter API key kullanımı ve limit kontrolü

OpenRouter key'in güncel harcamasını ve spending limitini tek curl ile okumak mümkün:

```bash
curl -s -H "Authorization: Bearer $OPENROUTER_API_KEY" \
https://openrouter.ai/api/v1/auth/key
```

Yan…
◆ AI2026-06-12

Monolitik Claude call yerine 3-agent Swarm zinciri: filtre+uzman+sentez

Karmaşık bir analiz görevi için tek büyük Sonnet prompt yazmak yerine sorumlulukları 3 agent'a bölebilirsin:

```
[Haiku] filtrele → [Sonnet] uzman analiz → [Haiku] sentez + kullanıcı dili
```…
◆ AI2026-06-11

Claude CLI Session Limitini PM2 Cron ile Yönetme

Claude CLI (`claude -p`) subscription planında günlük session limiti var. Arka planda çok sayıda job işlemek gerektiğinde bu limit dolabiliyor.

## Ne Gördüm

`gbrain-job-runner` 100 job'u tek seferde…
◆ AI2026-06-11

Claude Code'u Telegram'a Taşıma: claude -p + stream-json Pattern'i

Claude Code için resmi bir Telegram entegrasyonu yok. Ama `claude -p` CLI'ı subprocess olarak çağırarak tam Claude Code yeteneklerini Telegram'a taşımak mümkün.

Temel pattern:

```python
cmd = [
◆ AI2026-06-09

Claude Code PreToolUse hook'tan modele mesaj göndermek: hookSpecificOutput

Claude Code hook'larında PreToolUse çıktısı normalde kullanıcıya görünmez — sadece araç çağrısını bloklamak (exit 1) veya geçirmek (exit 0) için kullanılır. Ama ECC'nin `strategic-compact` hook'unda f…
◆ AI2026-06-09

Claude Haiku sistem promptunda 'yalnızca JSON' desen bile markdown fence sarıyor

Haiku'ya `system: "Yalnızca geçerli JSON döndür, başka metin ekleme"` desen bile yanıtı zaman zaman şöyle geliyor:

```
```json
{
"risk": "high",
...
}
```
```

Bu durumda `JSON.parse()` doğrudan …
◆ AI2026-06-09

Otomatik session notu 'ne soruldu' yakalıyor, 'ne yapıldı' yakalamıyor

Claude Code transcript'inden otomatik session notu üretmek mümkün — Stop hook'ta JSONL okuyup `session-vault`'a markdown yazabilirsin. Ama bu notun değeri sınırlı.

## Ne Yakalar

- Kullanıcı prompt l…
◆ AI2026-06-09

PostgreSQL ts_rank skoru 0.95+ görünce bu vektör aramasıdır

Bir arama sonucunun keyword mi yoksa vektör aramasından mı geldiğini anlamak için skora bak:

**ts_rank (keyword search):**
- `tsvector @@ tsquery` eşleşmesine göre hesaplanır
- Genellikle `0.01 - 0.1…
◆ AI2026-06-09

Agent .md dosyalarına gizlenmiş U+00AD soft hyphen: görünmez prompt injection

AgentShield scan sonucunda iki agent dosyasında kritik bulgu çıktı:

```
● Hidden soft hyphen detected (1 occurrences)
agents/engineering-mobile-app-builder.md:440
Evidence: 1x soft hyphen
```

##…
◆ AI2026-06-08

Claude Code'da Agent Tool = Ücretsiz Anthropic API

Anthropic API key gerektiren bir işi yaparken fark ettim: ayrı API key yerine Claude Code'daki Agent/Workflow tool'u kullanmak hem ücretsiz hem çok daha hızlı.

## Ne Yaptık

94 session transcript'ini…
◆ AI2026-06-08

Google'un Agent Skills Reposu

Google'un resmi agent skills reposu: [github.com/google/skills](https://github.com/google/skills). 12.2k star, aktif geliştirme.

## Ne var

`agentskills.io` platformu üzerinde çalışan skill koleksiyo…
◆ AI2026-06-07

Kişisel AI Altyapısına 4 Özellik Ekledik

# Kişisel AI Altyapısına 4 Özellik Ekledik

Daniel Miessler'ın [Personal AI Infrastructure](https://github.com/danielmiessler/Personal_AI_Infrastructure) (PAI) reposunu inceledik. Tüm sistemi kurmak y…
◆ AI2026-06-06

Otonom görevlerde binary success/fail yanlış sinyal veriyor

PM2 cron ile çalışan otonom görevlerde klasik yaklaşım şöyle: shell komutu çalıştır, exit code 0 ise başarılı say, değilse Telegram'a bildir. Sorun şu: exit code 0 döndüğünde aslında ne kadar "iyi" ol…
◆ AI2026-06-06

llms.txt nedir, neden ekledim

`llms.txt` AI modellerin siteyi anlaması için yazılmış bir rehber dosyası. `robots.txt` botların neye erişeceğini söyler; `llms.txt` ise sitenin ne olduğunu açıklar.

[[nitronium.dev]]'e şunları yazdı…
◆ AI2026-06-06

MCP server'da NL→SQL expose ederken güvenlik kontrol listesi

Kullanıcıya (veya AI agent'a) doğal dil sorusu yazıp SQL döndüren bir tool açıyorsan:

**1. `localOnly: true` flag'i koy**

HTTP üzerinden OAuth token'la erişilebilen bir endpoint olmamalı. Tool sadec…
◆ AI2026-06-04

Prompt cache ne zaman kullanmalı

Anthropic API'de `cache_control: ephemeral` ile uzun sistem promptlarını cache'e alabilirsin.

Cache 5 dakika boyunca geçerli. Avantajı: cache hit'te token maliyeti %90 düşüyor, gecikme de azalıyor.

◆ AI2026-06-04

robots.txt'e AI bot direktifleri ekle

`User-agent: *` kuralı AI crawler'ların davranışını belirsiz bırakır. Her bot kendi yorumuyla hareket eder.

Explicit direktiflerle davranışı sabitle:

```
User-agent: GPTBot
Allow: /api.php?action=no…
◆ AI2026-06-04

robots.txt ile llms.txt çelişmemeli

`llms.txt`'te AI crawler'lara önerdiğin endpoint'i `robots.txt`'te `Disallow` edersen crawler'lar erişemez — llms.txt'in tamamı etkisiz kalır.

```
# robots.txt — YANLIŞ
Disallow: /api.php?action=note…