{"id":"agent-linter","name":"agent-linter","summary":"エージェントおよびスキルファイルの構造的検証。フロントマターのチェック、命名規則、必須のセクションチェック、一貫性チェック。","body":"# Agent & Skill Linter\n\nAgent ve skill dosyalarinin kalite kontrolu. Yanlis yapilandirilmis dosyalar runtime'da sessizce basarisiz olur -- linter bunu onler.\n\n## Agent Dosyasi Kurallari\n\n### Frontmatter (ZORUNLU)\n\n```yaml\n---\nname: agent-adi          # kebab-case, dosya adiyla AYNI olmali\ndescription: Tek satir   # 20-200 karakter arasi\ntools: [\"Read\", \"Bash\"]  # Gecerli tool listesi\nmodel: opus              # Opsiyonel: opus | sonnet\n---\n```\n\n### Frontmatter Validasyonu\n\n| Kural | Kontrol | Hata Seviyesi |\n|-------|---------|---------------|\n| `name` mevcut | Frontmatter'da name var mi? | ERROR |\n| `name` = dosya adi | `name: sleuth` == `sleuth.md` | ERROR |\n| `name` kebab-case | `code-reviewer` OK, `codeReviewer` FAIL | ERROR |\n| `description` mevcut | Bos olmamali | ERROR |\n| `description` uzunlugu | 20-200 karakter | WARN |\n| `tools` array | String array olmali | ERROR |\n| `tools` gecerli | Sadece bilinen tool isimleri | WARN |\n| `model` gecerli | opus, sonnet veya bos | ERROR |\n\n### Body Kurallari\n\n| Kural | Kontrol | Hata Seviyesi |\n|-------|---------|---------------|\n| System prompt var | Frontmatter'dan sonra icerik var | ERROR |\n| 50+ satir | Cok kisa agent tanimlari yetersiz | WARN |\n| 2000 satir max | Cok uzun dosyalar token israf eder | WARN |\n| Markdown basliklar | En az 1 `##` basligi var | WARN |\n\n## Skill Dosyasi Kurallari\n\n### Frontmatter (ZORUNLU)\n\n```yaml\n---\nname: skill-adi          # kebab-case\ndescription: Aciklama    # 20-300 karakter\n---\n```\n\n### Skill Validasyonu\n\n| Kural | Kontrol | Hata Seviyesi |\n|-------|---------|---------------|\n| Dosya adi | `SKILL.md` veya `skill.md` | ERROR |\n| `name` mevcut | Frontmatter'da | ERROR |\n| `name` = klasor adi | `name: tdd-workflow` == `skills/tdd-workflow/` | WARN |\n| `description` mevcut | Bos olmamali | ERROR |\n| Icerik var | Frontmatter'dan sonra en az 20 satir | WARN |\n| Kod ornegi var | En az 1 code block | INFO |\n\n## Lint Calistirma\n\n### Bash Script\n\n```bash\n#!/bin/bash\n# scripts/lint-agents.sh\n\nERRORS=0\nWARNS=0\n\nlint_agent() {\n  local file=\"$1\"\n  local name=$(basename \"$file\" .md)\n\n  # Frontmatter kontrolu\n  if ! head -1 \"$file\" | grep -q \"^---\"; then\n    echo \"ERROR: $file - frontmatter yok\"\n    ERRORS=$((ERRORS + 1))\n    return\n  fi\n\n  # name field kontrolu\n  local fm_name=$(sed -n '/^---$/,/^---$/p' \"$file\" | grep \"^name:\" | sed 's/name: *//')\n  if [ -z \"$fm_name\" ]; then\n    echo \"ERROR: $file - name field yok\"\n    ERRORS=$((ERRORS + 1))\n  elif [ \"$fm_name\" != \"$name\" ]; then\n    echo \"ERROR: $file - name '$fm_name' != dosya adi '$name'\"\n    ERRORS=$((ERRORS + 1))\n  fi\n\n  # description kontrolu\n  local desc=$(sed -n '/^---$/,/^---$/p' \"$file\" | grep \"^description:\")\n  if [ -z \"$desc\" ]; then\n    echo \"ERROR: $file - description yok\"\n    ERRORS=$((ERRORS + 1))\n  fi\n\n  # Uzunluk kontrolu\n  local lines=$(wc -l < \"$file\")\n  if [ \"$lines\" -lt 10 ]; then\n    echo \"WARN: $file - cok kisa ($lines satir)\"\n    WARNS=$((WARNS + 1))\n  elif [ \"$lines\" -gt 2000 ]; then\n    echo \"WARN: $file - cok uzun ($lines satir)\"\n    WARNS=$((WARNS + 1))\n  fi\n}\n\necho \"=== Agent Linter ===\"\nfor f in agents/*.md; do\n  lint_agent \"$f\"\ndone\n\necho \"\"\necho \"=== Skill Linter ===\"\nfor f in skills/*/SKILL.md skills/*/skill.md; do\n  [ -f \"$f\" ] && lint_agent \"$f\"\ndone\n\necho \"\"\necho \"Sonuc: $ERRORS error, $WARNS warning\"\n[ \"$ERRORS\" -gt 0 ] && exit 1 || exit 0\n```\n\n### CI Entegrasyonu\n\n```yaml\n# .github/workflows/lint-agents.yml\nname: Agent & Skill Lint\non:\n  pull_request:\n    paths: ['agents/**', 'skills/**']\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - run: bash scripts/lint-agents.sh\n```\n\n## Yaygin Hatalar\n\n| Hata | Ornek | Cozum |\n|------|-------|-------|\n| name/dosya uyumsuzlugu | `name: codeReviewer` dosya: `code-reviewer.md` | name'i kebab-case yap |\n| Description cok kisa | `description: Reviews code` | Ne yaptigini detayla |\n| Tools yanlis format | `tools: Read, Bash` | `tools: [\"Read\", \"Bash\"]` |\n| Bos agent dosyasi | Sadece frontmatter, body yok | System prompt ekle |\n| Duplicate name | 2 agent ayni name'e sahip | Benzersiz isim ver |\n| Skill klasor/name uyumsuz | `name: tdd` klasor: `tdd-workflow/` | Eslestir |\n\n## Toplu Lint Raporu\n\n```bash\n# Tum agent'lari tara, rapor uret\ncd ~/vibecosystem\nbash scripts/lint-agents.sh 2>&1 | tee lint-report.txt\n\n# Sadece ERROR'lari goster\ngrep \"^ERROR\" lint-report.txt\n\n# Istatistik\necho \"Agents: $(ls agents/*.md | wc -l)\"\necho \"Skills: $(ls skills/*/SKILL.md skills/*/skill.md 2>/dev/null | wc -l)\"\necho \"Errors: $(grep -c ERROR lint-report.txt)\"\necho \"Warnings: $(grep -c WARN lint-report.txt)\"\n```\n\n## vibecosystem Entegrasyonu\n\n- **verifier agent**: Lint'i final quality gate'e ekle\n- **qa-engineer agent**: Yeni agent/skill PR'larinda lint calistir\n- **self-learner agent**: Lint hatalari pattern olarak ogren\n- **catalyst agent**: Scaffold sırasinda lint-uyumlu dosya uret\n- **/commit skill**: Commit oncesi agent/skill dosyalarini lint'le","author":"@vibeeval","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/vibeeval/vibecosystem/tree/main/skills/agent-linter","license":"MIT","category":null,"lang":"en","tokens":1604,"stars":0,"calls30d":2,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[],"scannedAt":"2026-08-22","hasScripts":false,"networkEndpoints":[]}}