Skip to main content

investigation-mode

Orchestrated debugging coordinator. Triggers on frustration signals (stuck, hung, broken, waiting) and systematically triages: runtime logs → workflow status → browser verify → deploy/env. Reports findings at every step.

Source facts

Repository
openai/plugins
Last source activity
April 21, 2026 at 18:07
Detected SKILL.md language
English
Stars
7,715
Forks
988

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
investigation-mode
description
Orchestrated debugging coordinator. Triggers on frustration signals (stuck, hung, broken, waiting) and systematically triages: runtime logs → workflow status → browser verify → deploy/env. Reports findings at every step.
metadata
{"priority":8,"docs":["https://openai.com/index/introducing-codex/"],"pathPatterns":["**/middleware.{ts,js,mjs}","**/lib/logger.{ts,js}","**/utils/logger.{ts,js}","**/instrumentation.{ts,js}","**/*.log","**/error.{tsx,ts,js,jsx}","**/global-error.{tsx,ts,js,jsx}","**/not-found.{tsx,ts,js,jsx}"],"bashPatterns":["\\bvercel\\s+logs?\\b","\\bvercel\\s+inspect\\b","\\btail\\s+-f\\b.*\\.log","\\bworkflow\\s+runs?\\b","\\bvercel\\s+ls\\b","\\bcurl\\s+-[vI]"],"importPatterns":[],"promptSignals":{"phrases":["nothing happened","still waiting","it's stuck","it's hung","nothing is happening","not responding","just sitting there","just sits there","seems frozen","is it frozen","frozen","why is it hanging","check the logs","check logs","where are the logs","how do I debug","how to debug","white screen","blank page","spinning forever","timed out","keeps timing out","no response","no output","not loading","debug this","investigate why","what went wrong","why did it fail","why is it failing","something is broken","something broke","[Truncated]"],"allOf":["[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]","[Truncated]"],"anyOf":["stuck","hung","frozen","broken","failing","timeout","slow","debug","investigate","check","logs","error","hanging","waiting","stalled","pending","processing","loading","unresponsive"],"noneOf":["css stuck","sticky position","position: sticky","z-index","sticky nav","sticky header","sticky footer","overflow: hidden","add a button","create a button","style the button"],"minScore":4}}
# Investigation Mode — Orchestrated Debugging When a user reports something stuck, hung, broken, or not responding, you are the **diagnostic coordinator**. Do not guess. Follow the triage order, report what you find at every step, and stop when you have a high-confidence root cause. ## Reporting Contract Every investigation step MUST follow this pattern: 1. **Tell the user what you are checking** — "I'm checking the runtime logs for errors…" 2. **Share the evidence you found** — paste the relevant log line, status, error, or screenshot 3. **Explain the next step** — "The logs show a timeout on the DB call. I'll check the connection pool next." Never silently move between steps. The user is already frustrated — silence makes it worse. ## Triage Order Work through these in order. Stop as soon as you find the root cause. ### 1. Runtime Logs (check first — most issues leave traces here) - **Dev server**: Check terminal output for errors, warnings, unhandled rejections - **Vercel logs**: `vercel logs --follow` (production) or `vercel logs <deployment-url>` - **Browser console**: Open DevTools → Console tab for client-side errors - **If no logs exist**: This is the problem. Add logging before continuing (see "Add Logging" below) Tell the user: "Checking runtime logs…" → share what you found → explain next step. ### 2. Workflow / Background Job Status If the app uses workflows, queues, or cron jobs: - Run `vercel workflow runs list` to check recent run statuses - Look for runs stuck in `running` state — likely a missing `await` or unresolved promise - Check individual run details: `vercel workflow runs get <run-id>` - Look for failed steps, retry exhaustion, or timeout errors Tell the user: "Checking workflow run status…" → share the run state → explain next step. ### 3. Browser Verification Use agent-browser to visually verify what the user sees: - Take a screenshot of the current page state - Check the browser console for JavaScript errors - Check the Network tab for failed requests (4xx/5xx, CORS errors, hanging requests) - Look for hydration mismatches or React error boundaries Tell the user: "Taking a browser screenshot to see the current state…" → share the screenshot → explain what you see. ### 4. Deploy / Environment Status - `vercel inspect <deployment-url>` — check build output, function regions, environment - `vercel ls` — verify the latest deployment succeeded - Check for environment variable mismatches between local and production - Verify the correct branch/commit is deployed Tell the user: "Checking deployment status…" → share the deployment state → explain findings. ## Stop Condition **Stop investigating when:** - You find a high-confidence root cause (specific error, missing env var, failed step, etc.) - Two consecutive triage steps produce no signal — report what you checked and that you found no evidence, then ask the user for more context **Do not** keep cycling through steps hoping something appears. If logs are empty and workflows look fine, say so and ask the user what they expected to happen. ## Common Hang Causes When logs point to code issues, check for these frequent culprits: - **Missing `await`**: Async functions called without await cause silent failures - **Infinite loops**: `while(true)` without break conditions, recursive calls without base cases - **Unresolved promises**: `new Promise()` that never calls `resolve()` or `reject()` - **Missing env vars**: `process.env.X` returning `undefined` causing silent auth/DB failures - **Connection pool exhaustion**: Database connections not being released - **Middleware chains**: A middleware that never calls `next()` or returns a response - **Timeout misconfigs**: Function timeout too short for the operation (check `vercel.json` maxDuration) ## Add Logging (If Missing) If the investigation reveals insufficient observability, **add structured logging immediately** — you cannot debug what you cannot see. ```typescript // API routes — wrap handlers with try/catch + logging export async function POST(request: Request) { console.log('[api/route] incoming request', { method: 'POST', url: request.url }); try { const result = await doWork(); console.log('[api/route] success', { resultId: result.id }); return Response.json(result); } catch (error) { console.error('[api/route] failed', { error: String(error), stack: (error as Error).stack }); return Response.json({ error: 'Internal error' }, { status: 500 }); } } ``` ```typescript // Workflow steps — log entry/exit of every step const result = await step.run('process-data', async () => { console.log('[workflow:process-data] step started'); const data = await fetchData(); console.log('[workflow:process-data] step completed', { count: data.length }); return data; }); ``` **Key principle**: Every async boundary, every external call, every step entry/exit should have a log line. When something hangs, the last log line tells you exactly where it stopped. > **Cross-reference**: For comprehensive logging setup (OpenTelemetry, log drains, Sentry, Vercel Analytics), see the **observability** skill. For workflow-specific debugging, see the **workflow** skill.
View on GitHub