현장에서 에이전트를 붙이면 처음에는 모두 같은 화면을 만든다. 마지막에 승인 버튼 하나를 둔다. 그런데 실제 장애는 마지막에 나지 않는다. 잘못된 파일을 읽는 순간, 부적절한 고객에게 메일을 쓰는 순간, 내부 규정을 확인하지 않은 채 외부 시스템을 호출하는 순간에 이미 사고는 시작된다.
Human-in-the-loop, 줄여서 HITL은 사람이 에이전트를 대신 일하는 구조가 아니다. 에이전트가 계속 일해도 되는 구간과 반드시 멈춰야 하는 구간을 나누는 설계다.
멈춤은 예외 처리가 아니라 제품 기능이다
좋은 HITL 설계는 “사람이 승인한다”에서 출발하지 않는다. “에이전트가 무엇을 혼자 해도 되는가”에서 출발한다.
최근 에이전트 프레임워크도 같은 방향으로 움직인다. OpenAI Agents SDK는 tool 실행 전 approval 기반 중단과 재개를 지원한다. LangGraph는 interrupt()로 그래프 상태를 저장하고 외부 입력을 기다린다. Claude Code는 PreToolUse, PermissionRequest, PostToolUse 같은 hook 지점을 통해 도구 실행 전후를 통제한다.
이 변화의 의미는 분명하다. HITL은 UI 레이어의 확인창이 아니다. 런타임의 제어면이다.
HITL의 핵심은 사람이 더 많이 개입하는 것이 아니라, 사람이 개입해야 할 순간만 정확히 드러내는 것이다.
AX Ops에서는 멈춤 지점을 세 가지 계약으로 정의한다.
| 계약 | 설계 질문 | 실패할 때 생기는 문제 |
|---|---|---|
| Trigger | 언제 멈추는가 | 사소한 일마다 멈추거나, 위험한 일을 통과시킨다 |
| Payload | 무엇을 보여주는가 | 승인자가 맥락 없이 감으로 판단한다 |
| Authority | 누가 결정하는가 | 책임자가 아닌 사람이 통과시킨다 |
언제 멈출지는 위험이 아니라 되돌릴 수 없음으로 정한다
많은 팀이 “중요하면 멈춘다”고 말한다. 운영에서는 너무 흐린 기준이다. 중요도는 사람마다 다르다. 에이전트에는 실행 가능한 규칙이 필요하다.
우리는 다음 네 지점에서 멈춤을 건다.
- 외부 시스템에 쓰기 작업을 할 때
- 고객·협력사·임직원에게 메시지가 발송될 때
- 금액, 권한, 일정, 계약 조건이 바뀔 때
- 근거 문서가 충돌하거나 누락될 때
핵심은 “위험해 보인다”가 아니다. 실행 후 되돌리기 어렵거나, 조직의 책임 소재가 바뀌는 순간이다.
Claude Code hook 문서는 파괴적 명령을 PreToolUse에서 막는 예를 든다. Microsoft Agent Framework도 function tool별 승인 필요 여부를 지정한다. 이것은 개발 도구의 이야기가 아니다. 구매 발주, 정산 변경, 고객 안내, 법무 검토 요청에도 같은 원리가 적용된다.
멈춤은 에이전트의 실패를 의미하지 않는다. 멈춤 없이 계속 가는 에이전트가 운영 실패를 만든다.
무엇을 물을지는 승인자의 일을 기준으로 정한다
나쁜 HITL 질문은 이렇게 생겼다.
“계속 진행할까요?”
이 질문은 책임을 사람에게 떠넘긴다. 승인자는 무엇이 바뀌었는지, 어떤 근거를 썼는지, 대안은 무엇인지 모른다. 결국 원문을 다시 열고, 시스템을 다시 확인하고, 에이전트 로그를 다시 본다. 자동화가 검토 업무를 늘린다.
좋은 HITL 질문은 판단 단위를 좁힌다.
- 실행하려는 action
- 사용한 근거와 누락된 근거
- 예상되는 외부 영향
- 승인·수정·반려 중 선택지
- 승인 후 재개될 다음 단계
예를 들어 “메일 발송 승인?”이 아니라 “첨부된 견적 조건 A, B를 근거로 고객 C에게 이 문안을 발송해도 되는가?”라고 물어야 한다. 사람이 문장을 다시 쓰게 만들지 말고, 책임 있는 결정을 하게 만들어야 한다.
LangGraph의 interrupt payload가 JSON-serializable 값을 호출자에게 드러내는 구조, OpenAI Agents SDK의 approval request와 serialized run state 개념은 이 지점을 뒷받침한다. 멈춤에는 상태가 함께 보존되어야 한다. 그래야 승인 뒤 재실행이 아니라 재개가 된다.
참고 및 다음 실행
HITL 설계는 버튼 설계가 아니라 운영 설계다. 먼저 멈춤 지점을 정하고, 그다음 승인자가 볼 맥락을 정하고, 마지막으로 누가 어떤 권한으로 재개할지 정한다. 이 순서가 바뀌면 에이전트는 현장 업무를 줄이지 못하고 새로운 검토 대기열을 만든다.
참고한 최근 12개월 내 1차·공식 자료는 다음과 같다.
- OpenAI Agents SDK, Human-in-the-loop: https://openai.github.io/openai-agents-js/guides/human-in-the-loop/
- LangGraph Docs, Interrupts: https://docs.langchain.com/oss/python/langgraph/interrupts
- Anthropic Claude Code Docs, Hooks reference: https://code.claude.com/docs/en/hooks
- Microsoft Learn, Tool approval in Agent Framework: https://learn.microsoft.com/en-us/agent-framework/agents/tools/tool-approval
- Google ADK Docs, Callbacks: https://adk.dev/callbacks/
- MIT IPC, Humans in the Loop, 2026: https://ipc.mit.edu/wp-content/uploads/2026/04/Humans_in_the_Loop_full_r01M.pdf
PoC를 넘어 운영되는 에이전트를 만들려면 HITL을 예외 처리로 두지 말고 AX Ops의 통제 구조로 설계해야 한다. AX Ops 방법론 →
