# Human Gate (사람 승인 게이트)

*되돌릴 수 없거나, 외부로 나가거나, 권한을 높이는 동작 앞에만 나타나며, 실제 diff를 보여 줍니다.*

> **Human Gate**는 정책이 일으키는 검문소입니다. **되돌릴 수 없거나, 외부로 나가거나, 권한을 높이는** 동작이 효력을 내기 전에, 사람(또는 지정된 승인자)이 완전히 렌더링된 구체적인 동작 하나를 승인합니다. 드물고, 구체적이며, 형식적으로 승인하기 어렵게 설계되어 있습니다.

**AN-05** · 적합성 수준: L1 Authority · 그룹: 권한

## 해결하려는 문제

오늘날의 “human in the loop”는 끝없는 프롬프트의 연속이거나 아예 없습니다. Anthropic에 따르면 Claude Code 사용자는 권한 요청의 93~97%를 승인합니다. 통제된 실험에서 사람이 잡아낸 것은 심어 둔 위험한 명령의 13.6%뿐이었고, 세션이 길어질수록 더 나빠졌습니다. 이것은 자동 모드를 홍보하려는 업체의 연구이며 실제 사고율이 아니라 심어 둔 요청을 알아채는 정도를 측정한 것이지만, 방향은 분명합니다.

같은 데이터에는 또 다른 숫자가 있습니다. 사용자는 계획의 39%를 거부하지만 개별 권한 요청은 3%만 거부합니다. 사람이 진지하게 판단하는 것은 모든 도구 호출이 아니라 계획과 병합입니다.

## 동작 방식

- **나타나는 곳은 적습니다.** 보호된 트리로의 병합, 보호된 트리에서의 삭제, 외부 공유나 게시, 외부 전송, 리스 확대, 라벨 낮추기. 브랜치에 쓰는 것은 승인이 필요 없습니다.
- **입도는 계획이나 병합입니다.** 프롬프트 쉰 개가 아니라 PR 하나를 검토합니다.
- **Gate Card는 NAS가 렌더링합니다.** 실제 diff, 읽기 매니페스트 요약, 리스와 세션 오염을 보여 주며, 에이전트 자신의 설명은 절대 쓰지 않습니다. 선택지는 승인, 좁혀서 승인, 거부이며, 시간이 지나면 기본값은 거부입니다.
- **승인은 동작 다이제스트에 묶입니다.** diff 해시와 리스에 묶이므로 재생할 수 없습니다.
- **전달 방법:** 푸시, 채팅, 이메일, CLI. 위임할 수 있고, 패스키는 선택적인 강한 인증입니다.
- **승급만 합니다.** 선택적인 위험 분류기(LLM 포함)는 동작을 게이트로 **승급**시킬 수만 있고 **승인**은 결코 할 수 없습니다. 모델은 조이기만 할 뿐 풀 수는 없습니다.
- **피로를 측정합니다.** 승인율과 승인까지 걸린 시간. 승인율이 이례적으로 높으면 게이트를 합치거나 정책을 조이라는 신호입니다.

## 작게 시작하기

- 보호된 main과 PR 검토(어떤 Git 플랫폼이든 됩니다), 그리고 푸시 알림.
- 아니면 CLI: `nas gate approve <gate_id>`.
- Gate Card에 “실제 diff”를 먼저 보여 주세요. 화려한 인터페이스부터 서두르지 마세요.

## 인터페이스 스케치

설명을 위한 예시입니다. 필드 이름은 명세 v0.3 이전에 바뀔 수 있습니다.

*gate-card.json*

```json
{
  "gate_id": "gt_2Mx4",
  "run": "run_91ab",
  "action": {
    "op": "merge",
    "from": "cleo/run_91ab",
    "into": "main",
    "files_changed": 4,
    "diff_sha256": "7d2a..."
  },
  "why": "Release notes are ready for review",
  "risk": {
    "session_taint": ["external"],
    "sources": ["web:example.com/changelog"],
    "destructive": false,
    "egress": false
  },
  "options": ["approve", "approve_narrowed", "deny"],
  "default": "deny",
  "expires_at": "2026-11-12T12:00:00Z"
}
```

## 명세가 요구하는 것

- Gate Card는 NAS가 계산한 실제 diff를 보여 주어야 하며, 에이전트의 설명을 보여 줘서는 안 됩니다.
- 승인은 동작 다이제스트와 리스에 묶여야 하며 재생할 수 없어야 합니다.
- 시간 초과의 기본 결과는 거부여야 합니다.
- 분류기나 LLM은 승인을 줄 수 없습니다. 동작을 게이트로 승급시키는 것은 할 수 있습니다.
- 보호된 트리로의 병합, 보호된 트리에서의 삭제, 외부 공유, 외부 전송, 리스 확대, 라벨 낮추기는 게이트를 거쳐야 합니다.
- NAS는 승인율과 승인까지 걸린 시간을 보고하는 것이 좋습니다.

## 빌려 온 것과 새로운 것

아래에 나오는 것은 모두 이미 자리 잡은 관행입니다. **새로운 것은** 승인의 닻을 **스토리지 계층의 병합**에 두고, 내용을 에이전트가 아니라 NAS가 렌더링하게 한 것입니다. 승인과 PR 자체는 새롭지 않습니다.

- [How we built Claude Code auto mode](https://www.anthropic.com/research/claude-code-auto-mode)
- [Anthropic: approval data behind auto mode](https://claude.com/resources/articles/auto-mode-default-in-claude-code)
- [CaMeL](https://arxiv.org/abs/2503.18813)
- [WebAuthn](https://www.w3.org/TR/webauthn-3/)
- [OpenID CIBA](https://openid.net/specs/openid-client-initiated-backchannel-authentication-core-1_0.html)

## 솔직한 한계

- 사람은 여전히 잘못된 동작을 승인할 수 있고, 일괄 검토도 피로를 낳습니다.
- 알림 채널은 피싱당할 수 있습니다.
- 승인은 **승인된 범위 밖**의 일을 막지 못합니다. 그것은 리스의 일입니다.

## 열린 질문

- 일괄 검토와 단계별 검토에 가장 알맞은 인터페이스는 무엇인가?
- 자동 병합의 임곗값은 어떻게 측정하고 조정하는가?

## 자주 묻는 질문

### 그냥 또 하나의 “확인” 대화 상자 아닌가요?

일부러 그렇지 않게 만들었습니다. 대화 상자는 도구를 호출할 때마다 뜨고, 사람은 금방 “승인”만 누르게 됩니다. 게이트는 되돌릴 수 없거나 외부로 나가는 몇 가지 동작 앞에서만 나타나고, NAS가 계산한 실제 diff를 보여 주며, 승인은 diff 해시에 묶입니다. diff가 바뀌면 승인은 무효가 됩니다.

### LLM이 통과시킬지 판단해도 되나요?

“사람이 이 단계를 봐야 한다”고 제안할 수는 있어도 승인할 수는 없습니다. 통과시키는 결정은 결정론적인 규칙이나 사람의 승인이어야 합니다. 그래야 보안이 특정 모델의 판단에 의존하지 않습니다.

### 시간이 초과되면 어떻게 되나요?

기본값은 거부입니다. 실행은 분명한 거부를 받고, 다른 길을 택하거나, 제안을 브랜치에 남겨 두어 사람이 처리하게 할 수 있습니다.

## 관련 개념

- [Capability Lease (권한 리스)](https://agentnas.com/ko/concepts/capability-lease/): 한 번의 실행을 위한 좁은 인가. 만료 시점과 예산이 있고, 하위 리스는 더 좁아지기만 합니다.
- [Trust Labels (신뢰 라벨)](https://agentnas.com/ko/concepts/trust-labels/): 작은 라벨 두 개와 세션 오염으로 Rule of Two를 강제합니다.
- [Agent Branch (에이전트 브랜치)](https://agentnas.com/ko/concepts/agent-branch/): 실행마다 쓰기 시 복사(copy-on-write) 브랜치에서 일합니다. 메인 라인에 닿는 것은 검토를 거친 병합뿐입니다.

---

표준 URL: https://agentnas.com/ko/concepts/human-gate/
최종 수정: 2026-11-11 · 명세 초안 v0.2 · CC BY 4.0
