the edit tool and maybe others use old_string/new_string as parameter names while those for memory operations use old_str/new_str. For some reason that lets my letta code agent trip many times in both directions. when it does a memory operation it even already tried to combine old_str and new_string... sticking to a common pattern might help x)