Claude는 tool을 message 안에 통합해
Claude Messages API에서는 tool call이 content block으로 표현돼. assistant가 `tool_use` block을 돌려주면, 다음 user message에 같은 `tool_use_id`를 가진 `tool_result` block을 넣는다. 루프는 같고 wire format만 다른 거야.
이 구조는 이해하면 깔끔하지만 ordering에는 엄격해. tool result는 protocol이 기대하는 위치에 있어야 한다. tool_use 바로 다음 흐름에서 result를 분리해버리면 API가 화낸다. 그리고 그건 API가 맞아.
Client tools vs server tools
Client tool은 우리 시스템에서 실행돼. schema도 우리가 정의하고 action도 우리가 구현한다. Server tool은 Anthropic 쪽에서 실행되는 hosted capability야. safety model이 다르니까 같은 것처럼 취급하면 안 돼.
Tool choice는 운전대
`auto`는 Claude가 고르게 하고, `any`는 어떤 tool이든 반드시 쓰게 하고, named tool은 특정 tool을 강제하고, `none`은 tool use를 꺼. 강제는 조심해서 써야 해. 너무 자주 강제하면 evidence가 아니라 architecture에 복종하는 시스템을 만들게 된다.