Use when controlling an agent loop by typed state and budget, including multiple tool_use coordination and Anthropic SDK Tool Runner behavior, never model prose.
Un bucle agéntico que decide continuar o detenerse mirando SOLO el campo estructurado stop_reason que devuelve la API (tool_use vs end_turn), nunca la prosa que escribe el modelo. Cada iteración llama a create(...), inspecciona stop_reason y enruta: tool_use despacha la herramienta y reinyecta el tool_result; end_turn finaliza; cualquier otro valor (max_tokens, pause_turn, etc.) eleva un error explícito. Aplica a escenarios como Customer Support y Multi-Agent Research, donde el control del turno debe ser predecible.
Detener el bucle por heurística de texto convierte una frase casual del modelo ("task complete", "listo") en un halt silencioso a destiempo o, peor, en un bucle infinito cuando el modelo nunca pronuncia la frase esperada. El parseo de prosa es no determinista por construcción: depende del idioma, del tono y de la redacción del modelo. El control debe vivir en el contrato estructurado de la API, no en la superficie textual.
stop_reason: tool_use → dispatch, end_turn → halt, otros → error explícito.tool_result se reinyecta como role=user, manteniendo el contrato turn-by-turn de la conversación.max_tokens / pause_turn inesperados deben fallar fuerte (raise), nunca silenciosamente.max_iterations) que eleva BudgetExceeded al excederse.tool_use se coordina como un lote completo: paraleliza solo llamadas independientes, serializa dependencias y devuelve un resultado correlacionado por cada ID en un único turno inmediato; una llamada omitida también recibe is_error.max_iterations como límite externo.while True:
resp = create(...)
if resp.stop_reason == "tool_use":
dispatch(resp)
continue
elif resp.stop_reason == "end_turn":
return resp
else:
raise UnhandledStop(resp.stop_reason)DONE = ["task complete", "done", "listo"]
if any(p in text for p in DONE):
return # parsea prosa: halt silencioso o bucle infinitoEl control del bucle vive en stop_reason + budget + handlers tipados, no en heurísticas de texto. Una implementación certificada (1) enruta exclusivamente por stop_reason, (2) trata todo valor no manejado como error explícito, y (3) acota la ejecución con un budget configurable que eleva BudgetExceeded.
Para coordinación múltiple, la certificación exige además un ledger de todos los tool_use_id, una partición explícita entre llamadas independientes y dependientes, y un único turno de resultados completo. Para Tool Runner, exige ownership inequívoco del historial, hook previo al envío solo cuando exista, decisión posterior a get_final_message() o equivalente, matriz de compactación y política explícita para resultados is_error.
parallel-multi-tool-coordination-loop: prueba lote múltiple, dependencias, paralelismo seguro, resultado único por ID y is_error para trabajo omitido.anthropic-sdk-tool-runner-deterministic-loop: prueba iteración del runner, historial automático/manual, hook, stream final, compactación, error y max_iterations sin control por prosa.tool_use/end_turn o límites de iteración.allowed_callers en autorización ni la prosa en señal de halt.tool_use con dependencias o ejecutar el Anthropic SDK Tool Runner bajo una política de historial, hooks, streaming, compactación y errores verificable.deterministic loop, stop_reason, agent loop control, budget exceeded.katas-pretooluse-guardrailskatas-error-propagation-multi-agentkatas-human-handoff-protocolclaude-api-tool-runtimeclaude-api-server-toolsCapas del packet, cargables bajo demanda (disciplina ICM: una capa por vez, nunca todas juntas): knowledge/ cuerpo de conocimiento · prompts/ prompts listos · examples/ salida de ejemplo · agents/ subagentes del packet · templates/ plantilla de output.
e8f986b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.