Debug any language.
Powered by AI.

Real-time browser UI for Python, JavaScript, TypeScript, and Rust debuggers — with 40+ MCP tools so Claude can step through your code, inspect live values, and annotate the UI.

↓ Install ★ GitHub
Debugium UI — paused at a breakpoint, variables panel, findings panel, and execution timeline visible

Install

# One-line install curl -fsSL https://raw.githubusercontent.com/Algiras/debugium/main/install.sh | bash # Start debugging debugium launch my_script.py --adapter python --breakpoint /abs/path/my_script.py:42
# Install via Claude Code plugin marketplace /plugin marketplace add Algiras/debugium /plugin install debugium@debugium # Add .mcp.json to your project root { "mcpServers": { "debugium": { "command": "debugium", "args": ["mcp"] } } } # Then launch a session — Claude gains access to all 40+ tools debugium launch my_script.py --adapter python --breakpoint /abs/path/my_script.py:42
# Prerequisites: Rust stable + wasm-pack cargo install wasm-pack # Build UI (WASM) wasm-pack build crates/debugium-ui --target web --out-dir pkg cp crates/debugium-ui/pkg/cm_init.js crates/debugium-ui/dist/pkg/ cp crates/debugium-ui/pkg/debugium_ui.js crates/debugium-ui/dist/pkg/ cp crates/debugium-ui/pkg/debugium_ui_bg.wasm crates/debugium-ui/dist/pkg/ # Build & install server cargo install --path crates/debugium-server

Everything you need

🌐

Real-time web UI

Source viewer with syntax highlighting, breakpoint gutters, execution arrow, tabbed file navigation, and collapsible panels.

🤖

40+ MCP tools

Expose your full debug session to Claude. The LLM can step code, inspect live values, evaluate expressions, and annotate the UI — all visible in real-time.

get_debug_context
📈

Execution timeline

Every stop recorded with file, line, stack summary, and changed variables. Query with get_variable_history to trace when a value went wrong.

👁️

Watch expressions

Add expressions that are evaluated automatically at every breakpoint and shown in a dedicated Watch panel.

📎

Annotations & findings

LLM (or you) pin colored notes to source lines and record structured conclusions in the Findings panel — visible to both human and AI.

🔍

Variable inspection

Expand nested objects, filter by name, edit values inline, and see diff highlighting on what changed at each stop.

🗂️

Multi-session

Debug multiple programs simultaneously. Each session has its own panels, timeline, breakpoints, and call stack.

Conditional breakpoints

Break only when a condition expression is true. Set per-line conditions via the UI or via set_breakpoint MCP tool.

🔄

Auto-reconnect

The UI reconnects automatically after a dropped WebSocket. The status bar shows connection state and last LLM query at a glance.

⌨️

Keyboard shortcuts

F5 continue, F10 step over, F11 step in, Shift+F11 step out. Full keyboard control without leaving your browser.

🌙

Dark & light mode

Toggle with Ctrl+D or the toolbar button. Preference is saved across sessions.

🧵

Multi-thread & subprocess

Inspect all threads by ID, switch frames, and auto-attach to child processes spawned during a debug session.

Multi-language support

🐍 Python via debugpy
⬡ JavaScript via js-debug
📘 TypeScript via js-debug
🦀 Rust via lldb-dap

MCP Tools for AI Debugging

Add Debugium to your project's .mcp.json and Claude gains access to 40+ tools covering every aspect of a debug session.

Orient (start here)

get_debug_contextPaused location + locals + stack + source window in one call
get_sessionsList active sessions

Execution

step_overStep to next line — blocking
step_inStep into function — blocking
step_outStep out of function — blocking
continue_executionResume; returns console_line_count
pause / disconnectPause or end the session

Breakpoints

set_breakpointSingle breakpoint with optional condition
set_breakpointsMultiple lines in one file
set_function_breakpointsBreak on function name
set_exception_breakpointsBreak on raised/uncaught exceptions
list_breakpoints / clear_breakpoints

Inspection

get_stack_traceFull call stack with frame IDs
get_scopesVariable scopes for a frame
get_variablesExpand a scope or nested object
evaluateEvaluate any expression in a frame
get_threadsList threads
get_sourceSource file with optional line zoom

Output & History

get_console_outputLast N lines of stdout/stderr
wait_for_outputPoll until regex matches (with from_line)
get_timelineAll stops with changed vars and stack
get_variable_historyTrace a variable's value across all stops

Annotations, Findings & Watches

annotatePin colored note on a source line
get_annotationsRead back all annotations
add_findingRecord conclusion in Findings panel
get_findingsRead back all findings
add_watch / get_watchesWatch expressions evaluated at every stop

Compound

step_untilStep until condition is true
run_until_exceptionContinue until exception raised
Blocking steps: step_over, step_in, and step_out wait for the adapter to pause before returning — safe to chain back-to-back without sleeps.
Stale output: continue_execution returns console_line_count. Pass it as from_line to wait_for_output to only match output printed after the resume.

Recommended AI workflow

1

Orient

Always start with get_debug_context — paused location, locals, call stack, and a source window in a single call. Never guess from source alone.

2

Read back what you already know

Call get_annotations and get_findings at session start — avoids re-investigating lines you've already marked and re-stating conclusions you've already recorded.

3

Inspect & evaluate

Use evaluate to check expressions before stepping — cheaper than advancing line by line. Drill nested variables with get_variables recursively.

4

Step (blocking)

Chain step_over calls freely — each one waits for the adapter to pause. Follow with get_debug_context to re-orient.

5

Continue & wait for output

Grab console_line_count from continue_execution, then pass it as from_line to wait_for_output — only output printed after the resume is matched.

6

Trace history

Use get_variable_history("x") to see every value a variable held across all stops. Use get_timeline to see which variables changed at each one.

7

Record conclusions

Pin findings with annotate and add_finding — the human sees them immediately in the UI, and you can read them back on the next invocation.

Quick setup

1. Add .mcp.json to your project

{ "mcpServers": { "debugium": { "command": "debugium", "args": ["mcp"] } } }

2. Launch a session

# Python debugium launch app.py \ --adapter python \ --breakpoint /abs/path/app.py:42 # Rust cargo build debugium launch ./target/debug/app \ --adapter lldb \ --breakpoint /abs/path/src/main.rs:60

Keyboard shortcuts

F5 Continue
F10 Step Over
F11 Step Into
Shift+F11 Step Out
Ctrl+D Toggle dark mode