Pattern Skills
reopt-human-approval
인간 승인
고비용·고위험·고영향 결정을 인간 승인 흐름 안에 둔다.
OCLS SHARPEN
설치
cp skills/patterns/reopt-human-approval/SKILL.md <your-project>/.claude/skills/reopt-human-approval/SKILL.md이 레포의 파일을 당신의 프로젝트에 복사하면 Claude Code 세션에서 바로 활성화된다.
markdownskills/patterns/reopt-human-approval/SKILL.md
---
name: reopt-human-approval
description: When you need to insert human approval into irreversible or high-impact decisions. Defining the approval classification (auto / post-hoc / pre-approval). Designing the asynchronous approval queue and responding to prompt-injection and misalignment threats.
---
# 인간 승인 (Human Approval)
OCLS 단계: **SHARPEN** · 고비용·고위험·고영향 결정을 인간 승인 흐름 안에 둔다.
## 핵심 규칙
- 비용·위험·영향 범위를 기준으로 어떤 행동에 승인이 필요한지 분류한다.
- 저위험 → 자동 승인. 중위험 → 사후 검토. 고위험 → 사전 승인.
- 승인 흐름을 실행 루프에 내장하고 승인 대기 중에도 다른 작업이 진행되도록 비동기 구조를 기본으로 한다.
- 모든 승인 이벤트를 로그로 남긴다.
- 4가지 위협 유형: (1) 과잉수행 — 목표는 달성하지만 허용 범위를 초과; (2) 정직한 오류 — 자원 범위나 소유 관계를 잘못 읽음; (3) 프롬프트 주입 — 도구 출력에 악성 지시가 포함; (4) 모델 정렬 실패 — 독립적인 목표를 추구.
- 보수적 기본값: "에이전트가 자율적으로 선택한 모든 행동은 사용자가 명시적으로 허용하기 전까지는 미승인 상태로 간주한다."
## 판단 질문
**언제 에이전트가 멈추고 인간에게 넘겨야 하는가?**
## 적용 체크
1. 승인 매트릭스(저/중/고)가 문서화되어 있는가?
2. 비동기 승인 큐가 구현되어 있는가?
3. 승인·거부 이벤트가 로그에 기록되는가?
4. 4가지 위협 유형 각각을 다루는 규칙이 있는가?
## 코드 예시
```typescript
// 승인 분류
type RiskTier = "low" | "medium" | "high";
function classifyApproval(action: Action): RiskTier {
if (action.cost > 500000 || action.kind === "legal-statement") return "high";
if (action.cost > 100000 || action.kind === "refund" || action.novel) return "medium";
return "low";
}
// 비동기 승인 큐
interface ApprovalQueue {
enqueuePreApproval(action: Action): Promise<Ticket>; // 승인을 대기
enqueuePostReview(action: Action, result: Result): Promise<void>; // 사후 검토
}
async function executeWithApproval(action: Action, queue: ApprovalQueue) {
const tier = classifyApproval(action);
if (tier === "low") return execute(action);
if (tier === "medium") {
const result = await execute(action);
await queue.enqueuePostReview(action, result);
return result;
}
// 고위험: 사전 승인을 기다리지만 다른 작업은 계속 진행
const ticket = await queue.enqueuePreApproval(action);
return { pending: true, ticketId: ticket.id };
}
```
## 안티패턴
**고객 응대**: 승인 기준 없이 운영하면 에이전트가 전액 환불을 자동 승인하거나, 법적 책임을 인정하는 응답을 보낸다. 반대로 모든 응답에 승인을 요구하면 평균 처리 시간이 2시간에서 8시간으로 늘어 고객 이탈을 부른다.
**인프라 자동화**: 자동 배포 에이전트가 prod 롤백이나 DB 마이그레이션을 자율적으로 실행하면 되돌릴 수 없는 사고가 발생한다. 영향 범위가 prod, 사용자 데이터, 보안 설정인 행동은 사전 승인을 기본으로 한다.
## 호출 예시
```
"RefundAgent에 인간 승인을 삽입해줘.
저위험(자동): ₩100,000 이하 환불.
중위험(사후 검토): ₩100,000~500,000 또는 신규 케이스.
고위험(사전 승인): ₩500,000 초과, 법적 진술, 대량 환불.
고위험 승인 대기 중에도 다른 문의가 계속 처리되도록 비동기 큐를 사용해줘."
```
## 관련 패턴
- 평가와 가드레일 — 승인을 촉발하는 평가 기준
- 책임 분할 — 승인자(인간)의 책임 경계