---
name: Agent Linter
slug: agent-linter
category: Quality
description: Agent Linter checks agent and skill files for required frontmatter, naming rules, and structural consistency. Use it when adding or editing agents and skills to catch silent runtime failures early.
github: "https://github.com/vibeeval/vibecosystem/tree/main/skills/agent-linter"
language: "C#"
stars: 528
forks: 44
install: "npx degit https://github.com/vibeeval/vibecosystem/tree/main/skills/agent-linter ~/.claude/skills/agent-linter"
installs_to: ~/.claude/skills/agent-linter
source_path: skills/agent-linter/SKILL.md
collection_size: 25
category_size: 1354
collection_url: "https://dirskills.com/collections/vibeeval/vibecosystem"
added: 2026-08-26T05:11:55.572Z
last_synced: 2026-08-26T05:11:55.572Z
canonical_url: "https://dirskills.com/skills/agent-linter"
---

# Agent Linter

Agent Linter checks agent and skill files for required frontmatter, naming rules, and structural consistency. Use it when adding or editing agents and skills to catch silent runtime failures early.

**Install:**

```bash
npx degit https://github.com/vibeeval/vibecosystem/tree/main/skills/agent-linter ~/.claude/skills/agent-linter
```

## README

# Agent & Skill Linter

Agent ve skill dosyalarinin kalite kontrolu. Yanlis yapilandirilmis dosyalar runtime'da sessizce basarisiz olur -- linter bunu onler.

## Agent Dosyasi Kurallari

### Frontmatter (ZORUNLU)

```yaml
---
name: agent-adi          # kebab-case, dosya adiyla AYNI olmali
description: Tek satir   # 20-200 karakter arasi
tools: ["Read", "Bash"]  # Gecerli tool listesi
model: opus              # Opsiyonel: opus | sonnet
---
```

### Frontmatter Validasyonu

| Kural | Kontrol | Hata Seviyesi |
|-------|---------|---------------|
| `name` mevcut | Frontmatter'da name var mi? | ERROR |
| `name` = dosya adi | `name: sleuth` == `sleuth.md` | ERROR |
| `name` kebab-case | `code-reviewer` OK, `codeReviewer` FAIL | ERROR |
| `description` mevcut | Bos olmamali | ERROR |
| `description` uzunlugu | 20-200 karakter | WARN |
| `tools` array | String array olmali | ERROR |
| `tools` gecerli | Sadece bilinen tool isimleri | WARN |
| `model` gecerli | opus, sonnet veya bos | ERROR |

### Body Kurallari

| Kural | Kontrol | Hata Seviyesi |
|-------|---------|---------------|
| System prompt var | Frontmatter'dan sonra icerik var | ERROR |
| 50+ satir | Cok kisa agent tanimlari yetersiz | WARN |
| 2000 satir max | Cok uzun dosyalar token israf eder | WARN |
| Markdown basliklar | En az 1 `##` basligi var | WARN |

## Skill Dosyasi Kurallari

### Frontmatter (ZORUNLU)

```yaml
---
name: skill-adi          # kebab-case
description: Aciklama    # 20-300 karakter
---
```

### Skill Validasyonu

| Kural | Kontrol | Hata Seviyesi |
|-------|---------|---------------|
| Dosya adi | `SKILL.md` veya `skill.md` | ERROR |
| `name` mevcut | Frontmatter'da | ERROR |
| `name` = klasor adi | `name: tdd-workflow` == `skills/tdd-workflow/` | WARN |
| `description` mevcut | Bos olmamali | ERROR |
| Icerik var | Frontmatter'dan sonra en az 20 satir | WARN |
| Kod ornegi var | En az 1 code block | INFO |

## Lint Calistirma

### Bash Script

```bash
#!/bin/bash
# scripts/lint-agents.sh

ERRORS=0
WARNS=0

lint_agent() {
  local file="$1"
  local name=$(basename "$file" .md)

  # Frontmatter kontrolu
  if ! head -1 "$file" | grep -q "^---"; then
    echo "ERROR: $file - frontmatter yok"
    ERRORS=$((ERRORS + 1))
    return
  fi

  # name field kontrolu
  local fm_name=$(sed -n '/^---$/,/^---$/p' "$file" | grep "^name:" | sed 's/name: *//')
  if [ -z "$fm_name" ]; then
    echo "ERROR: $file - name field yok"
    ERRORS=$((ERRORS + 1))
  elif [ "$fm_name" != "$name" ]; then
    echo "ERROR: $file - name '$fm_name' != dosya adi '$name'"
    ERRORS=$((ERRORS + 1))
  fi

  # description kontrolu
  local desc=$(sed -n '/^---$/,/^---$/p' "$file" | grep "^description:")
  if [ -z "$desc" ]; then
    echo "ERROR: $file - description yok"
    ERRORS=$((ERRORS + 1))
  fi

  # Uzunluk kontrolu
  local lines=$(wc -l < "$file")
  if [ "$lines" -lt 10 ]; then
    echo "WARN: $file - cok kisa ($lines satir)"
    WARNS=$((WARNS + 1))
  elif [ "$lines" -gt 2000 ]; then
    echo "WARN: $file - cok uzun ($lines satir)"
    WARNS=$((WARNS + 1))
  fi
}

echo "=== Agent Linter ==="
for f in agents/*.md; do
  lint_agent "$f"
done

echo ""
echo "=== Skill Linter ==="
for f in skills/*/SKILL.md skills/*/skill.md; do
  [ -f "$f" ] && lint_agent "$f"
done

echo ""
echo "Sonuc: $ERRORS error, $WARNS warning"
[ "$ERRORS" -gt 0 ] && exit 1 || exit 0
```

### CI Entegrasyonu

```yaml
# .github/workflows/lint-agents.yml
name: Agent & Skill Lint
on:
  pull_request:
    paths: ['agents/**', 'skills/**']

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: bash scripts/lint-agents.sh
```

## Yaygin Hatalar

| Hata | Ornek | Cozum |
|------|-------|-------|
| name/dosya uyumsuzlugu | `name: codeReviewer` dosya: `code-reviewer.md` | name'i kebab-case yap |
| Description cok kisa | `description: Reviews code` | Ne yaptigini detayla |
| Tools yanlis format | `tools: Read, Bash` | `tools: ["Read", "Bash"]` |
| Bos agent dosyasi | Sadece frontmatter, body yok | System prompt ekle |
| Duplicate name | 2 agent ayni name'e sahip | Benzersiz isim ver |
| Skill klasor/name uyumsuz | `name: tdd` klasor: `tdd-workflow/` | Eslestir |

## Toplu Lint Raporu

```bash
# Tum agent'lari tara, rapor uret
cd ~/vibecosystem
bash scripts/lint-agents.sh 2>&1 | tee lint-report.txt

# Sadece ERROR'lari goster
grep "^ERROR" lint-report.txt

# Istatistik
echo "Agents: $(ls agents/*.md | wc -l)"
echo "Skills: $(ls skills/*/SKILL.md skills/*/skill.md 2>/dev/null | wc -l)"
echo "Errors: $(grep -c ERROR lint-report.txt)"
echo "Warnings: $(grep -c WARN lint-report.txt)"
```

## vibecosystem Entegrasyonu

- **verifier agent**: Lint'i final quality gate'e ekle
- **qa-engineer agent**: Yeni agent/skill PR'larinda lint calistir
- **self-learner agent**: Lint hatalari pattern olarak ogren
- **catalyst agent**: Scaffold sırasinda lint-uyumlu dosya uret
- **/commit skill**: Commit oncesi agent/skill dosyalarini lint'le
