두-라운드 모양
Tool 호출은 최소 두 round-trip — (1) 너가 tools + user 메시지 보냄; 모델이 tool_use 블록과 함께 stop_reason='tool_use' 반환; (2) 너가 도구 로컬 실행하고 tool_result를 대화에 append; 모델이 최종 답 생성. 진짜 루프는 모델이 stop_reason='end_turn' 반환할 때까지 계속.
도구당 핸들러 하나, 이름으로 dispatch
깔끔한 패턴은 {tool_name: callable} 레지스트리. tool_use 블록 보면 callable 찾고 args로 호출, 결과 append. 한 큰 함수 안에 tool dispatch inline 박는 욕망 거슬러 — 도구 쌓이면서 빠르게 커져.
루프 예산
일부 작업은 정당하게 10+ tool 라운드 원해. 일부는 stuck 모델 신호고 잘라야 해. 항상 max-iteration 예산(10으로 시작) 들고, 중단을 user한테 surface해서 왜 에이전트가 멈췄는지 이해하게.
원칙: Tool 루프는 예산과 레지스트리 가진 통제된 while-true. 둘 다 명시적으로 유지.