This is expected. Let's consider the following declarations: r: REAL_32 i: INTEGER_32 t: TUPLE [REAL_32] The conversion takes place only for top-level values, not for nested ones. I.e., r := i would work. But this code: t := [i] would not compile because there are no rules that tell to perform conversion inside the manifest tuple. At the moment, the agents accept TUPLEs as arguments, so the same applies here. So, although, there is syntax sugar for calling agents similar to regular features, the machinery behind remains the same, i.e. the call l_cosine (0) is identical to either l_cosine.item (0) or l_cosine.item ([0]) whatever fits. The formal argument type of the agent is TUPLE [REAL_32], but neither INTEGER_32 (the type of 0) nor TUPLE [INTEGER_32] (the type of [0]) conforms to TUPLE [REAL_32]. Therefore, the compiler reports the error.