Give agents typed inputs and outputs (building on the existing ResponseSchema[T]) so runs return F[Either[AIException, Out]] instead of stringly results, and add composition: agentA.andThen(agentB) compiles only when A’s Out matches B’s In. Embabel matches domain types at runtime during planning; compile-time-checked handoffs are the Scala-native answer. Design questions to settle first: how In renders into the initial user message, and whether intermediate conversation history propagates across a handoff.
Give agents typed inputs and outputs (building on the existing ResponseSchema[T]) so runs return F[Either[AIException, Out]] instead of stringly results, and add composition: agentA.andThen(agentB) compiles only when A’s Out matches B’s In. Embabel matches domain types at runtime during planning; compile-time-checked handoffs are the Scala-native answer. Design questions to settle first: how In renders into the initial user message, and whether intermediate conversation history propagates across a handoff.