What problem does it solve? Standard Go errors lack context — you see "connection failed" but not which user triggered it, what query was running, or the full call stack. This Skill guides AI agents to write samber/oops error handling that attaches structured attributes, stack traces, error codes, and user-safe messages to every error. ## Core Features & Use Cases - Fluent error builders: Chain .In(), .Tags(), .Code(), .With(), .User(), and .Tenant() to attach domain, categorization, and identity context to errors. - Low-cardinality messages: Keep variable data in .With() attributes instead of interpolating IDs into message strings, so APM tools like Datadog, Loki, and Sentry group errors correctly. - Panic recovery and context propagation: Convert panics to structured errors with .Recover() at goroutine boundaries, and propagate pre-configured builders through Go contexts with oops.WithBuilder/oops.FromContext. - Use Case: In a three-layer Go service (handler → service → repository), wrap errors at each layer boundary with layer-specific context so a single logged error shows the HTTP request, the operation, and the failing SQL query. ## Quick Start Refactor my Go service's error handling to use samber/oops with structured attributes, error codes, and public user-facing messages.