PEP
판정을 PreToolUse 훅과 agentgateway의 ext_authz에서 실제로 집행합니다.
PEP(Policy Enforcement Point)는 Decision Module의 판정을 도구가 실행되기 전에 집행합니다. 호출을 막는 곳은 두 군데입니다.
- 내장 도구: PreToolUse 훅 응답으로 막습니다.
- MCP 도구: agentgateway의 ext_authz 응답으로 막습니다. agentgateway가 tools/call을 받으면 ext_authz로 엔진에 판정을 묻고, PEP는 PreToolUse에서 나온 판정을
tool_use_id로 찾아 답합니다.
판정은 막는 곳에 따라 아래 응답이 됩니다.
| 판정 | 내장 도구 (PreToolUse 훅) | MCP 도구 (agentgateway ext_authz) |
|---|---|---|
| 통과 | 응답하지 않습니다. 엔진은 HTTP 204를 본문 없이 돌려줍니다. |
허용 |
| 차단 | HTTP 200에 훅 출력 형식의 JSON을 담아 돌려줍니다. |
거부 |
| 묻기 | 1차 평가에서는 차단과 같습니다. | 1차 평가에서는 차단과 같습니다. |
| 판정 없음 | 훅 명령이 || true로 끝나므로 원래 권한 확인으로 넘어갑니다. |
거부 (fail closed) |
내장 도구의 HTTP 응답 형식(204, 200)과 훅 명령의 형태는 이번 명세에서 정한 초안입니다.
통과일 때 allow를 보내지 않는 이유는, allow를 보내면 Claude Code의 원래 권한 확인을 건너뛰기 때문입니다.
차단 사유는 Decision Module이 쓴 그대로 전합니다. 사유에는 무엇에 걸렸는지가 아니라, 사용자가 무엇을 하면 되는지가 들어 있습니다.
| 입력 | 보내는 곳 |
|---|---|
| 판정과 차단 사유 | Decision Module |
| ext_authz 요청 (gRPC) | agentgateway. Engine Daemon을 거쳐 들어옵니다. |
| 출력 | 내용 |
|---|---|
| 노드 | 만들지 않습니다. |
| 간선 | 만들지 않습니다. |
| Provenance Record | 채우지 않습니다. |
| 훅 응답 | 내장 도구의 판정을 PreToolUse 훅에 돌려줍니다. |
| ext_authz 응답 | MCP 도구 호출을 허용하거나 거부합니다. |
Jev 질문
Section titled “Jev 질문”PEP는 Jev에 묻지 않습니다.
- ext_authz를 MCP의 tools/call에만 걸 수 있는지. 아직 확인하지 못했습니다.
- agentgateway에서
tool_use_id를 담는claudecode/toolUseId가 공식으로 약속된 필드인지. 아직 확인하지 못했습니다. - MCP 도구 호출에도 PreToolUse 훅이 오는데, 이때 훅에 무엇을 응답할지.
- 차단 JSON의 어느 필드에 사유를 담을지.
- 1차 이후 묻기를 사용자에게 어떻게 전할지.
