harness-auditlisted
Install: claude install-skill Kyungjong-kim/claude-code-harness
# Harness Audit
> **읽기 전용 — 탐지만.** 수정은 발견 후 사용자 확인 하에.
저장소 루트에서 실행. 스캔 대상은 `CLAUDE.md`·`.claude/agents`·`.claude/skills`·하네스 가이드 문서(있으면 `docs/`).
> **쉘 호환**: 모든 쉘(bash·zsh·sh/dash) 동작 보장. 금지 — `for x in $var`/`for x in $(...)`(zsh 단어분리 안 함, 첫 항목만 돔), `< <(...)`(POSIX sh 미지원). `... | while IFS= read -r` 파이프 패턴만 사용(아래 검사는 출력 전용이라 서브셸 무관).
아래 예시는 스캔 범위를 `SCAN`으로 둔다. 프로젝트 구조에 맞게 조정한다:
```bash
SCAN="CLAUDE.md $(ls .claude/agents/*.md 2>/dev/null) $(ls .claude/skills/*/SKILL.md 2>/dev/null) $(ls docs/**/*.md 2>/dev/null)"
```
---
## 스캔 절차
### 1. 정의 없는 에이전트 참조
```bash
existing=$(ls .claude/agents/*.md 2>/dev/null | xargs -n1 basename | sed 's/\.md//')
grep -hoE '`[a-z][a-z0-9-]+`' $SCAN 2>/dev/null \
| tr -d '`' | sort -u \
| grep -E '(-dev|-writer|-reviewer|debugger|architect|refactor|reviewer|validator|designer|tester)$' \
| while read r; do echo "$existing" | grep -qx "$r" || echo "❌ 정의없음: $r"; done
```
> 오탐: 하위 디렉터리(모노레포 패키지)의 `<pkg>/.claude/agents/`에 정의된 에이전트는 루트에 없어도 정상.
### 2. 정의 없는 스킬 참조
```bash
skills=$(ls -d .claude/skills/*/ 2>/dev/null | xargs -n1 basename)
grep -hoE '/[a-z][a-z0-9-]+|`[a-z][a-z0-9-]+`' $SCAN 2>/dev/null \
| tr -d '`/' | sort -u \
| while read s; do [ -d ".claude/skills/$s" ] || echo "$s"; done
```
> 위는 후보가 많다(일반 단어 포함). **슬래시 커맨드로 참조된 것(`/skill-name`)** 위주로 좁혀 판단. 전역/플러그인 스킬은 오탐.
### 3. 존재하지 않는 경로 참조
```bash
grep -hoE '\.claude/[A-Za-z0-9_./-]+' $SCAN 2>/dev/null \
| grep -vE '<|\*' | sort -u | while read p; do [ -e "$p" ] || ech