La mayoría de los problemas reales no se resuelven con un solo tool. se resuelven con una cadena. El agente decide invocar un tool, lee su output, decide el siguiente, y así.
Tu trabajo: diseñar dos tools que compongan naturalmente.
Un usuario le dice a la crew: "notificá a todos los del turno de la noche que el rendezvous se movió a las 23:00".
Para resolverlo, el agente tiene que:
list_crewmates_on_shift(shift_id).notify_crewmate(alias, message, channel).Si los dos tools están bien diseñados, el agente compone la solución solo. Si están mal diseñados (output de uno no encaja en input del otro, descripciones que no mencionan el patrón), el agente se queda corto o inventa pasos intermedios que rompen.
Para que dos tools encadenen sin fricción:
crewmates: ["Em", "Ly"] y notify acepta alias: string, el agente itera con cero transformación.notify_crewmate, mencionás que se usa después de list_crewmates_on_shift cuando hay múltiples destinatarios.shift_id, la otra que devuelve turnos usa el mismo nombre, no id_de_turno.7 criterios deterministas + 2 llm-judge:
channel con enum.El test mental: si yo, leyendo solo tu schema (sin haber leído este texto), entendería cómo componer estas dos tools para resolver el caso del rendezvous, pasaste.