AgentSkillsCN

error-recovery

针对工具错误与常见问题,制定恢复策略。由 PostToolUseFailure 钩子负责执行。

SKILL.md
--- frontmatter
name: error-recovery
description: Tool hataları ve yaygın sorunlar için recovery stratejileri. PostToolUseFailure hook'u tarafından kullanılır.
disable-model-invocation: false
allowed-tools: Read, Bash

Error Recovery Skill

Bu skill, Anthropic'in tool use best practices'lerine göre hata durumlarından kurtarma stratejileri sağlar.

Yaygın Hatalar ve Çözümleri

1. NPM/Node Hataları

ENOENT: no such file or directory, package.json

bash
# Çözüm: Doğru dizinde misin?
pwd
ls -la package.json

# Yoksa proje kökünü bul
find . -name "package.json" -type f 2>/dev/null | head -5

npm ERR! ERESOLVE

bash
# Çözüm: Dependency conflict
npm install --legacy-peer-deps
# veya
rm -rf node_modules package-lock.json && npm install

MODULE_NOT_FOUND

bash
# Çözüm
npm install
# veya spesifik modül
npm install <modül-adı>

2. Git Hataları

fatal: not a git repository

bash
# Çözüm: Git repo değil veya yanlış dizin
git init
# veya doğru dizine git
cd <proje-kökü>

error: Your local changes would be overwritten

bash
# Çözüm: Değişiklikleri sakla
git stash
git pull
git stash pop

CONFLICT (content): Merge conflict

bash
# Çözüm: Conflict'leri göster
git diff --name-only --diff-filter=U
# Manuel çözüm gerekli - kullanıcıya sor

3. TypeScript/Build Hataları

Cannot find module (import)

bash
# Çözüm: Path kontrolü
# 1. Dosya var mı?
ls -la <dosya-yolu>

# 2. tsconfig paths doğru mu?
cat tsconfig.json | grep -A5 "paths"

# 3. Index export var mı?
cat <modül>/index.ts

Property does not exist on type

bash
# Çözüm: Type tanımını bul
grep -rn "interface\|type" --include="*.ts" src/ | grep <TypeAdı>

4. Database Hataları

Connection refused (PostgreSQL/MySQL)

bash
# Çözüm: Service çalışıyor mu?
# macOS
brew services list | grep postgres

# Linux
systemctl status postgresql

# Docker
docker ps | grep postgres

relation does not exist

bash
# Çözüm: Migration çalıştır
npm run db:migrate
# veya
npx prisma migrate dev

5. Docker Hataları

Cannot connect to Docker daemon

bash
# Çözüm: Docker çalışıyor mu?
docker info

# macOS: Docker Desktop açık mı?
open -a Docker

port is already allocated

bash
# Çözüm: Portu kullanan process'i bul ve durdur
lsof -i :3000
kill -9 <PID>

6. Permission Hataları

EACCES: permission denied

bash
# Çözüm: Dosya izinlerini kontrol et
ls -la <dosya>

# Düzelt (dikkatli ol!)
chmod 644 <dosya>  # Dosya için
chmod 755 <dizin>  # Dizin için

sudo required

code
⚠️ DİKKAT: sudo kullanmak tehlikeli olabilir.
Kullanıcıya danış ve alternatif ara.

Alternatifler:
- nvm/pyenv kullan (global yerine local)
- Docker container içinde çalış
- .local dizinine yükle

Error Recovery Süreci

code
1. HATA TESPİT
   ↓
2. HATA TİPİNİ BELİRLE
   - Build error?
   - Runtime error?
   - Permission error?
   - Network error?
   ↓
3. CONTEXT TOPLA
   - Hangi komut çalıştı?
   - Hangi dizindeyiz?
   - Son ne değişti?
   ↓
4. ÇÖZÜM UYGULA
   - Basit fix dene
   - Başarısızsa alternatif dene
   - Hala başarısızsa kullanıcıya sor
   ↓
5. DOĞRULA
   - Aynı komutu tekrar çalıştır
   - Hata devam ediyor mu?

Error Logging

Hatalar otomatik olarak loglanır:

code
~/.claude/error-log.txt

Log formatı:

code
[2025-01-26 10:30:45] TOOL FAILURE: Bash - npm test failed
Context: /Users/x/project
Last command: npm test
Error: Jest has detected the following 1 open handle
Resolution: Added --forceExit flag

Kullanıcıya Ne Zaman Danış

Aşağıdaki durumlarda kullanıcıya sor:

  1. Veri kaybı riski: rm, DROP, TRUNCATE
  2. Credential gerekli: API key, password
  3. Belirsiz çözüm: Birden fazla olası fix var
  4. Tekrarlayan hata: 3+ denemede başarısız
  5. Production etkisi: Deploy, migration

Recovery Rapor Formatı

markdown
## 🔧 Error Recovery Report

**Hata:** [error message]
**Komut:** [failed command]
**Dizin:** [working directory]

### Analiz
[Hatanın nedeni]

### Denenen Çözümler
1. ❌ [çözüm 1] - [neden başarısız]
2. ✅ [çözüm 2] - Başarılı

### Önlem
[Bu hatanın tekrarını önlemek için öneri]

Anti-Patterns

Yapma:

  • Hatayı ignore etme
  • sudo ile zorla çöz
  • Rastgele komut dene
  • Kullanıcıya sormadan kritik değişiklik yap

Yap:

  • Hatayı anla, sonra çöz
  • En az invaziv çözümü dene
  • Değişiklikleri logla
  • Belirsizlikte sor