apply-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited apply-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
gh CLI 인증 완료python "${SKILL_DIR}/scripts/main.py" 실행 (SKILL_DIR은 이 스킬 파일이 위치한 디렉토리)수집한 코멘트를 아래 기준으로 분류한다. 분류는 에이전트가 직접 판단한다 — Python 스크립트는 수집만 담당한다.
| 분류 | 기준 | 처리 |
|---|---|---|
| 반영 | 버그 지적, 코드 품질 개선, 명확한 수정 제안, 타입·린트 오류 | 코드 수정 |
| 보류 | 설계 방향 의견 충돌, 팀 논의 필요, 스펙 불명확 | 사용자에게 판단 위임 |
| 스킵 | 단순 질문, 칭찬, 감사, 이미 반영된 내용, 봇 코멘트 | 보고서에서 제외 |
판단 원칙:
분류 결과를 바탕으로 아래 형식의 마크다운 보고서를 생성하고 저장:
{git 루트}/private/analysis-pr{N}-{YYYYMMDD}.md (private/가 없으면 mkdir -p로 생성). 루트는 git rev-parse --show-toplevel로 판별한다. 보고서 본문 위에 아래 YAML 프론트매터를 얹는다(report 스킬과 동일 컨벤션): ---
type: analysis
title: PR #{N} 코드 리뷰
project: <레포명>
created: YYYY-MM-DD
status: 초안
---4단계(자율 실행) 완료 후 같은 파일을 Edit으로 갱신한다(프론트매터 status→검토중, 각 항목 ✅, 말미에 "처리 결과" 섹션 추가).
보고서 형식:
---
type: analysis
title: PR #N 코드 리뷰
project: <레포명>
created: YYYY-MM-DD
status: 초안
---
# PR #N 코드 리뷰 보고서
> 브랜치: `브랜치명`
> 총 코멘트: N건 (✅ 반영 N · ⏸ 보류 N · ⏭ 스킵 N)
---
## 요약
| # | 분류 | 우선순위 | 파일 | 문제 요약 | 상태 |
|---|------|---------|------|----------|------|
| 1 | ✅ 반영 | 🔴 높음 | `파일명:라인` | 한 줄 요약 | ⬜ 미처리 |
| 2 | ✅ 반영 | 🟡 보통 | `파일명:라인` | 한 줄 요약 | ⬜ 미처리 |
| 3 | ⏸ 보류 | — | `파일명:라인` | 한 줄 요약 | — |
⏭ 스킵: 단순 질문 N건, 칭찬 N건 (생략)
---
## 반영 항목 상세 분석
### [1] 🔴 `파일명:라인` — 한 줄 요약
**원본 코멘트**
> 리뷰어 코멘트 원문 (그대로 인용)
---
#### 배경
이 코드가 어떤 역할을 하는 파일/함수인지, 어떤 흐름에서 호출되는지 간략히 설명.
---
#### 문제 코드
// 파일: 경로/파일명.kt 라인 N~M fun someFunction(...) { // ... 앞 코드 (컨텍스트) val result = problematicCall() // ← 문제 발생 지점 // ... 뒤 코드 (컨텍스트) }
---
#### 왜 문제인가
1. **원인**: ...
2. **발생 조건**: ...
3. **영향**: ...
---
#### 수정 방안
**수정 전**val result = problematicCall() doSomething(result.value)
**수정 후**val result = problematicCall() if (result == null) { Log.e(TAG, "결과가 null입니다.") return } doSomething(result.value)
**수정 이유**
...
**수정 후 기대 효과**
...
---
## 보류 항목
### [1] `파일명:라인` — 한 줄 요약
**원본 코멘트**
> 리뷰어 코멘트 원문
**보류 이유**: 설계 방향에 대한 팀 논의가 필요합니다. (구체적 이유)
---
(이하 반복)보고서 저장 후 경로를 안내한다. 이후 사용자와 내용을 충분히 논의한다:
모든 논의가 완료되면 사용자에게 수정 실행 최종 승인을 요청한다. [STOP]
승인 후에는 에이전트가 보고서의 우선순위 순서대로 모든 항목을 자율적으로 처리한다. 각 항목마다 아래 사이클을 완료한 뒤 다음 항목으로 넘어간다:
#### 4-1. 수정
⬜ 미처리 → 🔧 수정 중으로 업데이트#### 4-2. 검증
🔧 수정 중 → ✅ 완료로 업데이트 gh api graphql -f query='
mutation($threadId: ID!) {
resolveReviewThread(input: {threadId: $threadId}) {
thread { isResolved }
}
}
' -F threadId="<thread_id>"(thread_id는 스크립트 출력에 포함된 값 사용)
#### 4-3. 커밋
commit 스킬을 사용해 해당 항목에 대한 커밋 수행모든 항목 처리 후 아래 내용을 출력:
commit 스킬을 사용한다~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.