← ClaudeAtlas

find_root_causelisted

Use this skill when the user is dealing with a bug or problem and the immediate error/symptom is clear but the underlying reason is not. Triggers on: "why is this happening?", "what's actually causing this?", "this is a symptom of something deeper", "I keep having this bug", "this keeps happening", "I fixed it but it came back". This skill helps distinguish the true root cause from proximate causes and surface-level symptoms — so that the fix actually works long-term, not just temporarily.
feralbureau/luminy · ★ 0 · AI & Automation · score 68
Install: claude install-skill feralbureau/luminy
# find_root_cause Fixing the symptom of a bug is worse than not fixing it at all — it creates false confidence while the real problem festers. Root cause analysis is the discipline of asking "why?" until you can go no deeper. ## Symptom vs. Root Cause vs. Proximate Cause - **Symptom**: The observable failure (e.g., "the app crashes with a NullPointerException") - **Proximate cause**: The immediate technical reason (e.g., "we call `.id` on a `None` user object") - **Root cause**: The underlying reason the proximate cause exists (e.g., "there's no guard for unauthenticated requests on this endpoint — any request can reach code that assumes authentication") A fix that only addresses the proximate cause (`if user is None: return`) will prevent this specific crash, but another endpoint will have the same bug tomorrow. A fix that addresses the root cause (add an authentication middleware / decorator that enforces auth before any view that needs it) prevents the entire class of bugs. ## The 5 Whys Technique Start from the symptom and ask "Why?" five times (or until you can't go deeper): **Example:** 1. *Why did the order fail?* — The payment was declined. 2. *Why was the payment declined?* — The card token had expired. 3. *Why did we use an expired token?* — We store tokens indefinitely and never check expiry. 4. *Why don't we check token expiry?* — There's no token refresh logic in the payment service. 5. *Why is there no refresh logic?* — The original implementation assumed