Sets breakpoints, steps, and evaluates expressions via DAP across Python, TypeScript, JavaScript, Node, Rust, and C++. It fires when you need multi-language debugging on Linux or in GitHub Actions.
> /plugin marketplace add almogbaku/debug-skill> /plugin install debugging-code@debug-skill-marketplace
Repo: almogbaku/debug-skill
What's inside
AI coding agents (Claude Code, Codex, Opencode, Cursor) are stuck with print statements and guesswork. debug-skill
gives them what human developers have: a real debugger they can actually use. It ships two things:
dap CLI โ a stateless CLI wrapper around
the Debug Adapter Protocol so any agent can drive a real
debugger from BashInstall the skill, and Claude debugs your code the way you would โ not with print statements.
The debugging-code skill gives Claude structured knowledge of the debugging workflow: setting breakpoints, stepping
through execution, inspecting locals and the call stack, evaluating expressions mid-run. It uses the dap CLI as its
tool.
Via the plugin marketplace โ no manual setup needed:
/plugin marketplace add AlmogBaku/debug-skill
/plugin install debugging-code@debug-skill-marketplace
Via skills.sh โ works with Cursor, GitHub Copilot, Windsurf, Cline, and 20+ more agents:
npx skills add AlmogBaku/debug-skill
# or: bunx skills add AlmogBaku/debug-skill
Or manually copy skills/debugging-code/ into your agent's skills.
dap CLIdap wraps the Debug Adapter Protocol behind simple, stateless CLI commands. A background daemon holds the session; the
CLI sends one command and gets back the full context โ no interactive terminal required.
# One-liner (Linux & macOS)
bash <(curl -fsSL https://raw.githubusercontent.com/AlmogBaku/debug-skill/master/skills/debugging-code/scripts/install-dap.sh)
From Homebrew (for macOS):
brew install AlmogBaku/tap/dap
From sources:
# Go install
go install github.com/AlmogBaku/debug-skill/cmd/dap@latest
Or download a pre-built binary from the releases page.
dap debug app.py --break app.py:42 # start, stop at breakpoint
dap eval "len(items)" # inspect a value
dap inspect data --depth 2 # expand nested objects
dap step # step over
dap continue # next breakpoint
dap continue --to app.py:50 # run to specific line
dap pause # interrupt if hanging
dap restart # re-run, preserving breakpoint changes
dap stop # end session
Execution commands (debug, continue, step) return full context automatically: current location, surrounding source, local variables, call stack,
and program output. No follow-up calls needed.
# Python
dap debug app.py --break app.py:42
# Go
dap debug main.go --break main.go:15
# Node.js / TypeScript
dap debug server.js --break server.js:10
# Rust / C / C++
dap debug hello.rs --break hello.rs:4
# Attach to a remote debugger (e.g. debugpy in a container)
dap debug --attach container:5678 --backend debugpy --break handler.py:20
# Attach to a running process by PID
dap debug --pid 12345 --backend debugpy
# Pass arguments to the program
dap debug app.py --break app.py:10 -- --config prod.yaml --verbose
| Command | Description |
|---|---|
dap debug <script> | Start debugging (local or --attach host:port or --pid PID) |
dap stop | End session |
dap step [in|out|over] | Step (default: over) |
dap continue | Resume execution (--to file:line for temp breakpoint) |
dap context [--frame N] | Re-fetch current state |
dap eval <expr> [--frame N] | Evaluate expression in current frame |
dap inspect <var> [--depth N] | Inspect variable (expand nested objects) |
dap output | Drain buffered stdout/stderr since last stop |
dap pause | Pause a running program |
dap restart | Restart session, preserving breakpoint changes |
dap threads | List all threads |
dap thread <id> | Switch to a different thread |
dap break list|add|remove|clear | Manage breakpoints mid-session |
Global flags: --json (machine-readable output), --session <name> (named sessions), --socket <path> (custom
socket path), --context-lines <int> (lines of source context)
| Language | Backend | Auto-detected |
|---|---|---|
| Python | debugpy | yes |
| Go | dlv (Delve) | yes |
| Node.js/TypeScript | js-debug | yes |
| Rust / C / C++ | lldb-dap | yes |
Backend is inferred from the file extension. Override with --backend <name>.
dap <cmd> โ Unix socket โ Daemon โ DAP protocol โ debugpy / dlv / js-debug / lldb-dap โ your program
The daemon starts automatically on dap debug and shuts down on dap stop (or after 10 min idle). It's invisible โ you
never manage it directly.
Multiple agents can debug independently with named sessions:
dap debug app.py --session agent1 --break app.py:10
dap debug main.go --session agent2 --break main.go:8
dap stop --session agent1 # stops agent1 only
Each session has its own daemon and socket. Omit --session to use the default session.
PRs and issues welcome. See claudedocs/ for architecture details and CLAUDE.md for code conventions.
If debug-skill saves you from a painful debugging session, consider starring the repo โ it helps others find it and keeps the project going.
MIT
.claude-plugin/
marketplace.json
plugin.json
.github/
demo.gif
logo.png
workflows/
bump-skill-version.yml
ci.yml
release.yml
.gitignore
backend_test.go
backend.go
CLAUDE.md
claudedocs/
api.md
design.md
implementation.md
init_prompt.md
cli.go
cmd/
dap/
main.go
context_test.go
context.go
daemon_test.go
daemon.go
dap_client.go
e2e_test.go
format_test.go
format.go
go.mod
go.sum
LICENSE
Makefile
platform_unix.go
platform_windows.go
protocol_test.go
protocol.go
README.md
skills/
debugging-code/
references/
advanced-techniques.md
installing-debuggers.md
scripts/
install-dap.sh
SKILL.md
testdata/
go/
hello.go
node/
simple.js
python/
exception.py
long_loop.py
loop.py
nested.py
scheduler/
main.py
models.py
resolver.py
runner.py
simple.py
rust/
hello.rsFAQ
debugging-code is a Claude Code plugin with 1 hand-picked skill for debugging work, indexed on Flowy. Install it with the command on its page. It includes debugging-code. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.