Agent & Skill Linter

SkillFiles & storage

Structural validation of agent and skill files. Frontmatter checks, naming conventions, required section checks, and consistency audits. Runs automatically when a new agent/skill is added or existing files are edited.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Agent & Skill Linter skill

What this skill tells your AI

The instructions your AI receives, as published by vibeeval/vibecosystem in skills/agent-linter/SKILL.md and read by ahel’s review.

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

Agent Dosyasi Kurallari

Frontmatter (ZORUNLU)

---
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

KuralKontrolHata Seviyesi
name mevcutFrontmatter'da name var mi?ERROR
name = dosya adiname: sleuth == sleuth.mdERROR
name kebab-casecode-reviewer OK, codeReviewer FAILERROR
description mevcutBos olmamaliERROR
description uzunlugu20-200 karakterWARN
tools arrayString array olmaliERROR
tools gecerliSadece bilinen tool isimleriWARN
model gecerliopus, sonnet veya bosERROR

Body Kurallari

KuralKontrolHata Seviyesi
System prompt varFrontmatter'dan sonra icerik varERROR
50+ satirCok kisa agent tanimlari yetersizWARN
2000 satir maxCok uzun dosyalar token israf ederWARN
Markdown basliklarEn az 1 ## basligi varWARN

Skill Dosyasi Kurallari

Frontmatter (ZORUNLU)

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

Skill Validasyonu

KuralKontrolHata Seviyesi
Dosya adiSKILL.md veya skill.mdERROR
name mevcutFrontmatter'daERROR
name = klasor adiname: tdd-workflow == skills/tdd-workflow/WARN
description mevcutBos olmamaliERROR
Icerik varFrontmatter'dan sonra en az 20 satirWARN
Kod ornegi varEn az 1 code blockINFO

Lint Calistirma

Bash Script

#!/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

# .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

HataOrnekCozum
name/dosya uyumsuzluguname: codeReviewer dosya: code-reviewer.mdname'i kebab-case yap
Description cok kisadescription: Reviews codeNe yaptigini detayla
Tools yanlis formattools: Read, Bashtools: ["Read", "Bash"]
Bos agent dosyasiSadece frontmatter, body yokSystem prompt ekle
Duplicate name2 agent ayni name'e sahipBenzersiz isim ver
Skill klasor/name uyumsuzname: tdd klasor: tdd-workflow/Eslestir

Toplu Lint Raporu

# 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

Signals

GitHub stars
530
Forks
44
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
agent-linter
Source
github.com/vibeeval/vibecosystem