From ultraship
Enforces structured root cause analysis with module freeze and evidence-based hypothesis. Use when encountering any bug, error, or unexpected behavior.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ultraship:investigate <error-or-symptom-description><error-or-symptom-description>These tools are removed from Claude's available pool while this skill is active:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Investigation is the discipline of understanding a problem before fixing it. This skill enforces a strict protocol: **no fixes until the root cause is found.**
Investigation is the discipline of understanding a problem before fixing it. This skill enforces a strict protocol: no fixes until the root cause is found.
Enforced: while this skill is active,
Edit,Write, andNotebookEditare removed viadisallowed-tools. The no-fixes rule is a hard constraint here, not a request. Once you have found and stated the root cause, conclude the investigation — the fix happens as a separate step outside this skill.
Announce at start: "I'm using the investigate skill — no fixes until we find the root cause."
┌──────────────────────────────────────────────┐
│ NO FIXES WITHOUT ROOT CAUSE INVESTIGATION │
│ │
│ If you haven't found the root cause, │
│ you cannot propose a fix. │
└──────────────────────────────────────────────┘
This is not a suggestion. This is a hard constraint. Guessing causes more bugs than it fixes.
Before investigating, lock the investigation scope to prevent it from sprawling:
Example:
Symptom: API returns 500 on POST /api/webhooks
Module: packages/api/src/routes/webhooks.ts
Freeze: Investigation limited to webhook handler + its direct dependencies
Why freeze? Without scope, investigation becomes exploration. Exploration finds interesting things but doesn't fix bugs.
Gather evidence BEFORE forming any hypothesis:
Read the error — Full stack trace, error message, error code. Not a glance — read every line.
Reproduce — Can you trigger it reliably? What are the exact steps?
Check the timeline — What changed recently?
git log --oneline -20
git diff HEAD~3
Trace the data flow — Follow the data from input to error:
Check boundaries — For multi-component systems, verify data at each boundary:
Form ONE hypothesis based on evidence:
"I think [X] is the root cause because [evidence Y shows Z]"
Requirements:
Test the hypothesis with the SMALLEST possible change:
Critical: If 3 hypotheses fail, STOP. The problem is likely architectural, not a simple bug. Discuss with the user before attempting fix #4.
Now — and only now — implement the proper fix:
node ${CLAUDE_PLUGIN_ROOT}/tools/learnings-manager.mjs save --title "Root cause of webhook 500" --body "The webhook handler wasn't awaiting the database write, causing a race condition with the response" --tags "debugging,webhooks,async"
If you catch yourself doing any of these, STOP and return to Phase 2:
For critical systems, activate /guard before investigating to prevent accidental changes:
/guard → /investigate → fix → /canary
Guard ensures no destructive commands run during investigation, and canary verifies the fix in production.
This skill shares principles with ultraship:systematic-debugging but adds:
npx claudepluginhub houseofmvps/ultraship --plugin ultrashipPerforms systematic root cause investigation for errors, stack traces, unexpected behavior, and bugs using investigate-analyze-hypothesize-fix workflow with red flags and 3-strike rule.
Enforces systematic root cause investigation for bugs, test failures, and unexpected behavior through four phases: investigation, pattern analysis, hypothesis testing, and implementation.
Guides developers through systematic root cause investigation of bugs and failures. Use when encountering test failures, errors, or unexpected behavior.