From uipath
Diagnoses and root-causes failures, errors, and unexpected behavior across all UiPath products using logs, traces, incidents, and configuration evidence.
How this skill is triggered — by the user, by Claude, or both
Slash command
/uipath:uipath-troubleshootWhen to use
User asks why something failed, broke, stopped, hung, was stuck, returns wrong results, or behaves unexpectedly in any UiPath system. Triggers: 'why did X fail', 'find the cause', 'find why', 'what changed', 'investigate', 'diagnose', 'debug this', 'triage', 'help me figure out', 'what's wrong', 'root cause', 'fix this error', 'inspect this trace / incident / log / job / instance', 'X worked yesterday but now …'. Also fires on raw error messages, exception stacks, error codes, job / queue IDs, or 'stuck / orphan / zombie' state descriptions.
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You orchestrate a hypothesis-driven troubleshooting investigation. You manage the loop, delegate to sub-agents, and present findings to the user.
agents/depth-verifier.mdagents/hypothesis-generator.mdagents/hypothesis-tester.mdagents/presenter.mdagents/scope-checker.mdagents/shared.mdagents/triage.mdreferences/activity-packages/classic-activities/overview.mdreferences/activity-packages/classic-activities/playbooks/add-queue-item-failed.mdreferences/activity-packages/classic-activities/playbooks/application-launch-failed.mdreferences/activity-packages/classic-activities/playbooks/browser-open-or-attach-failed.mdreferences/activity-packages/classic-activities/playbooks/file-operation-failed.mdreferences/activity-packages/classic-activities/playbooks/foreach-row-failed.mdreferences/activity-packages/classic-activities/playbooks/image-target-not-found.mdreferences/activity-packages/classic-activities/playbooks/invoke-code-failed.mdreferences/activity-packages/classic-activities/playbooks/invoke-workflow-failed.mdreferences/activity-packages/classic-activities/playbooks/kill-process-failed.mdreferences/activity-packages/classic-activities/playbooks/ui-activity-configuration-error.mdreferences/activity-packages/classic-activities/playbooks/ui-activity-timeout.mdreferences/activity-packages/classic-activities/playbooks/ui-element-interaction-failed.mdYou orchestrate a hypothesis-driven troubleshooting investigation. You manage the loop, delegate to sub-agents, and present findings to the user.
All agents (including you) follow the invariants and confidence-level behavior defined in agents/shared.md.
AskUserQuestion. Do not proceed until the user responds.All state lives in .local/investigations/ (relative to working directory). Schemas in schemas/.
| File | Purpose | Writers |
|---|---|---|
state.json | Scope, phase, matched playbooks | triage, orchestrator |
hypotheses.json | All hypotheses + status | generator, tester, orchestrator |
evidence/*.json | Interpreted summaries | triage, tester |
raw/*.json | Full raw CLI/API responses | triage, tester |
scope-check.json | Domain expansion verdict | scope-checker |
depth-check.json | Depth-gate verdict on confirmed root causes | depth-verifier |
Sub-agents write raw responses to raw/ immediately and don't keep them in context. You read evidence summaries, not raw files.
Update state.json.phase at each transition:
| Phase | Entry condition | Next |
|---|---|---|
triage | User describes problem (or new data arrives) | hypotheses |
hypotheses | Triage complete, playbooks matched | test |
test | Hypotheses ready, testing next in confidence order | evaluate |
evaluate | Tester returns verdict | deepen, test, or depth_check |
deepen | Confirmed symptom needs sub-hypotheses | hypotheses (re-invoke generator) |
depth_check | Hypothesis confirmed as root cause | resolution (verified), test (one re-round), or needs_input |
resolution | Depth check verified, or all hypotheses exhausted | complete |
complete | Findings presented to user | — |
Spawn triage sub-agent (agents/triage.md). Pass the user's problem description as-is — do NOT pre-classify or constrain scope.
Triage sanity gate: Read triage evidence and verify it relates to the user's reported problem. If it's about a different process/queue/entity: discard, inform the user, re-spawn or ask for clarification.
Scope check: Spawn scope-checker (agents/scope-checker.md). If missing domains found, use AskUserQuestion to ask the user whether to expand. If approved, re-spawn triage with the missing domains. If unnecessary domains found, remove them from state.json.scope.domain.
User input: If triage returned needs_user_input: true, present the question via AskUserQuestion. When the user responds, continue the existing triage agent via SendMessage (the agent result includes the agent ID) — do NOT spawn a fresh triage agent. A fresh spawn re-reads all instructions and re-discovers everything from scratch. Only re-spawn triage if the user's answer fundamentally changes scope (different product, different entity type).
Never skip the hypothesis loop. Even if the triage evidence looks conclusive, always proceed through GENERATE → TEST → EVALUATE. Triage classifies and gathers data — it does not determine root causes. A "clear" error message may have a non-obvious underlying cause that only the hypothesis-test cycle would surface.
Spawn hypothesis generator (agents/hypothesis-generator.md). Behavior varies by confidence level per the table in shared.md.
Test every hypothesis sequentially (highest confidence first). For each, spawn hypothesis tester (agents/hypothesis-tester.md).
Validate: Reject and re-spawn if elimination_checks are missing/incomplete. For medium/low, also reject if execution_path_traced has unverified downstream entities.
Reactive scope check: If evidence references entities/errors from an out-of-scope domain, spawn scope-checker. Otherwise skip.
Classify and act:
Before classifying as explains-WHY, apply the upstream-cause gate. The mechanism (explicit-event check + implicit-presupposition check) is owned by the depth-verifier — see agents/depth-verifier.md § Causal precedence. Orchestrator decision rule: if the gate identifies any upstream condition that has a pending or supported sibling hypothesis answering it, classify the current hypothesis as describes-WHAT regardless of evidence strength.
Sibling-precedence backstop (orchestrator-only — siblings are visible here, not to the depth-verifier): if the candidate root cause is a persistence, propagation, cleanup, or state-transition pattern AND any sibling hypothesis is pending AND that sibling questions whether the underlying state has its own originating fault, the sibling MUST be tested before the candidate can be classified as explains-WHY. Stopping at the first confirmed hypothesis is incorrect when that hypothesis is downstream.
trigger: "deepening" and parent_hypothesis.trigger: "scope_adjustment" and eliminated IDs to produce from medium/low + docsai.Co-equal-roots guard. Before applying any "skip remaining" exit after a confirmed+verified root cause, check state.json.matched_playbooks. If two or more playbooks are present at the same highest confidence level AND they correspond to distinct, independent error signatures (different activities, different error codes, neither upstream of the other), every pending hypothesis sourced from those playbooks MUST be tested before stopping. Do not exit on the first confirmed root cause when triage found multiple co-equal roots — you will under-report and miss fixes the user has to make. Only after each co-equal hypothesis is tested (confirmed, eliminated, or inconclusive) and depth-checked when confirmed do you proceed to Resolution.
Spawn the depth-verifier sub-agent (agents/depth-verifier.md). Pass it the
confirmed hypothesis ID(s), state.json path, and the matched playbook path.
The verifier reads hypotheses.json, the playbook's ## Causes and
## Resolution sections, and the evidence files, then writes
.local/investigations/depth-check.json with one of:
verdict: "verified" — the confirmed hypothesis names a specific cause
from the playbook, has cause-specific evidence (not just symptom-level),
and recommends the matching resolution branch. Proceed to Resolution.verdict: "shallow" — one or more depth dimensions are missing.
Inspect gaps. Each gap is classified kind: "factual" or
kind: "textual" by the depth-verifier. Routing rule:
kind: "factual" — spawn ONE additional
hypothesis-tester round on the same hypothesis to gather the
missing evidence, then re-spawn the depth-verifier. Stop after one
re-round. After that, either declare medium-confidence and proceed
to Resolution with the gaps surfaced to the user, or — if the gap
is a genuine data limitation — write needs_input.json and stop.kind: "textual" — do NOT spawn the tester.
Re-running the tester cannot fix narrative-level issues (paraphrase
looseness, wrong resolution branch picked) since those are the
generator's output, not the tester's. Accept the confirmed
hypothesis at confidence: medium and proceed to Resolution.
Surface the textual gaps in the presenter's output so the user
sees them.Symptom ≠ cause (shared.md invariant #9). A symptom-level match (the right error string, the expected non-zero exit code) confirms the playbook match, not the cause. The depth-verifier enforces this gate — do not skip it.
If the user provides new data at any point (error messages, job IDs, logs, screenshots), go back to TRIAGE. Re-spawn triage with the new data. Do NOT patch new data into an in-progress investigation.
Root cause vs. symptom: A finding that explains WHY the failure occurs is a root cause. A finding that describes WHAT happened (but not why) is a symptom — deepen it.
When to stop testing:
Spawn the presenter agent (agents/presenter.md) with the confirmed hypothesis IDs and all domains from state.json.scope.domain. Do NOT pre-filter domains based on your judgment of their relevance to the causal chain — the presenter classifies root cause vs. propagation domains and searches docsai for each. Excluding a domain prevents the presenter from finding error handling patterns it was designed to surface.
The presenter:
## Resolution sections across all domains in the causal chainPresent the presenter's output verbatim to the user. After presenting:
Execute Post-presentation actions FIRST. If the presenter's output contains a ## Post-presentation actions section, you MUST run every action in that section in order before offering any generic follow-up. For each action:
AskUserQuestion options or previews — always print as plain text first, separate from the question).AskUserQuestion with the question and options the action specifies. Ask the project path (or any other missing input the action declares) in the same AskUserQuestion call when needed.uia-improve-selector), check for it and follow its USAGE.md. Otherwise apply the documented direct-edit path and run any validation command listed.Status is blocked (the presenter could not assemble it because evidence was missing), surface the block to the user as a follow-up instead of asking them to approve an incomplete fix — name the missing evidence field and the agent that should have populated it.Do NOT skip the Post-presentation actions block when:
high to medium by depth-check (the resolution procedure is preserved across confidence downgrades — see agents/depth-verifier.md on textual gaps).InferredRecoveryInfo, RecoverySuccessful: false). The action carries a warning string for exactly this case — present it and let the user decide.Only after all actions are complete (accepted, declined, or surfaced as blocked) proceed to the generic follow-up:
If root cause found — offer to help implement any further changes or clean up .local/investigations/.
If no root cause found — use AskUserQuestion to offer: provide more data (re-triage), or open a UiPath support ticket with the evidence gathered.
Spawning: Read agent files just-in-time — only agents/shared.md + the specific agent file when you're about to spawn. Include full instructions and context in the prompt.
Progress: Use TaskCreate/TaskUpdate for each phase. Tailor subjects to the user's problem.
Cleanup: After investigation completes, offer to delete or preserve .local/investigations/.
npx claudepluginhub uipath/skills --plugin uipathSends structured bug reports and improvement suggestions to UiPath via `uip feedback send` with auto-captured troubleshooting context.
Guides deterministic runtime investigations using Lightrun MCP tools with preflight gating, evidence-first diagnosis, and PR-first fix proposals.
Enforces a structured root-cause investigation protocol for complex technical problems with THOUGHT/ACTION/OBSERVATION cycles and a hard gate before implementation.