This tool recreates Debug Mode found in other popular agentic code editors.
Debug Mode forces a disciplined debugging process:
- Hypothesize - Generate multiple specific theories about the bug's cause
- Start Logging Server - Spins up a lightweight server to collect logs based on each hypothesis
- Instrument - Add targeted logging to test each hypothesis
- Reproduce - You trigger the bug while logs capture what actually happens
- Analyze - Confirm or reject hypotheses based on runtime evidence
- Fix - Implement the fix with confidence
- Verify - Prove the fix works with fresh logs
First, add the marketplace:
/plugin marketplace add mikecfisher/claude-debug-mode
Then install the plugin:
/plugin install debug-mode@mikecfisher-claude-debug-mode
Restart Claude Code to load the plugin.
git clone https://github.com/mikecfisher/claude-debug-mode.git
claude --plugin-dir ./claude-debug-modeYou can also load multiple plugins:
claude --plugin-dir ./claude-debug-mode --plugin-dir ./other-plugin-
Start debugging — Describe your bug:
/debug-mode The checkout button isn't working -
Reproduce — Follow Claude's reproduction steps to trigger the bug
-
Report result — Run one of:
/debug-reproduced— Bug still happening (Claude analyzes logs, iterates)/debug-fixed— Bug is fixed (Claude cleans up instrumentation)
When you report a bug, Claude creates specific, testable theories:
| ID | Hypothesis |
|---|---|
| A | items array is undefined when order.items isn't provided |
| B | Race condition: loadUser completes after renderProfile |
| C | API returns 200 but empty body on timeout |
Then instruments your code with logging:
// Before
async function processOrder(orderId, items) {
const validated = validateItems(items);
return await saveOrder(orderId, validated);
}
// After (instrumented)
async function processOrder(orderId, items) {
__debugLog('orders.ts:processOrder', 'A', 'Entry', { orderId, itemCount: items?.length });
const validated = validateItems(items);
__debugLog('orders.ts:processOrder', 'A', 'After validation', { validated: !!validated });
return await saveOrder(orderId, validated);
}Follow Claude's reproduction steps. Logs capture exactly what happens at runtime.
=== Debug Log Analysis ===
Total events: 12
Time range: 14:32:05.123 - 14:32:05.891
--- Hypothesis A (8 events) ---
Errors:
[14:32:05.156] orders.ts:processOrder
Cannot read property 'length' of undefined
--- Hypothesis B (4 events) ---
Errors: None
=== Summary ===
Hypothesis A has 1 error - likely root cause.
Claude implements a fix (keeping instrumentation), then asks you to reproduce again. This cycle continues until the bug is fixed.
Claude removes all instrumentation and provides a summary of the root cause and fix.
- Claude Code
- Node.js 18+ or Bun
| Variable | Default | Description |
|---|---|---|
DEBUG_PORT |
7777 |
Port for the log collector server |
DEBUG_PORT=8080 claude --plugin-dir ./claude-debug-modeDebug Mode runs a lightweight HTTP server on localhost that collects log entries. Logs are written to .debug/debug.log in your project directory.
- Browser code: Logs via
fetch()to the collector - Server code: Logs directly to the file system
- Logs are local: Nothing leaves your machine
Add .debug/ to your .gitignore to avoid committing debug logs.
MIT
Issues and PRs welcome at github.com/mikecfisher/claude-debug-mode.