debugger
Skill9 starsChanged 4 days agoMITView on GitHub
Debugger patterns (Debug Adapter Protocol): the DAP client owned per view (src/main/debug, ipc/debug.ts), adapters from debug.adapters (stdio or local TCP), session lifecycle and timeouts, launch.json parsing and variable substitution, runInTerminal tickets, startDebugging child sessions, breakpoints, and the renderer side (Run and Debug view, toolbar, Debug Console, breakpoint gutter). Use when creating or reviewing anything in src/main/debug, ipc/debug.ts, debugActions.ts, components/debug or components/editor/breakpointGutter.ts.
- Reads credentials
33 other projects use a version of this.
Adopted by
Most recently taken up by
- BrightGold70/skillstheir own version, first seen Nov 8, 2026
- Vinix24/vnx-orchestrationtheir own version, first seen Nov 6, 2026
- d-o-hub/github-template-ai-agentstheir own version, first seen Nov 3, 2026
- claude-world/director-mode-litetheir own version, first seen Nov 1, 2026
- xfstudio/skillstheir own version, first seen Oct 13, 2026
- antonbabenko/deliberationtheir own version, first seen Oct 13, 2026
Used with
Projects with it also use security-engineer, planner and 5 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
belokonmSkillsecurity-engineer
Expert in infrastructure security, DevSecOps pipelines, and zero-trust architecture design.
Also in 4 projects that use this
am-willSkillplanner
Create comprehensive, phased implementation plans with sprints and atomic tasks. Use when user says: "make a plan", "create a plan", "plan this out", "plan the implementation", "help me plan", "design a plan", "draft a plan", "write a plan", "outline the steps", "break this down into tasks", "what's the plan for", or any similar planning request. Also triggers on explicit "/planner" or "/plan" commands.
Also in 3 projects that use this
VercelSkilltechnical-writer
Write, review, and edit developer documentation for SDKs, libraries, and frameworks, including sites such as ai-sdk.dev and chat-sdk.dev. Use for getting-started guides, tutorials, API references, conceptual explanations, integration guides, migration guides, troubleshooting, and code examples.
Also in 4 projects that use this
leonardomsoSkilltest-writer
Generate comprehensive Vitest tests for code examples in JavaScript concept documentation pages, following project conventions and referencing source lines
Also in 3 projects that use this
GitHubSkilldocumentation-writer
Diátaxis Documentation Expert. An expert technical writer specializing in creating high-quality software documentation, guided by the principles and structure of the Diátaxis technical documentation authoring framework.
Also in 3 projects that use this
AnthropicSkillsystem-design
Design systems, services, and architectures. Trigger with "design a system for", "how should we architect", "system design for", "what's the right architecture for", or when the user needs help with API design, data modeling, or service boundaries.
Also in 3 projects that use this
Other versions33 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 33
- toonight/get-shit-done-for-antigravity★ 952same name
- TheDecipherist/claude-code-mastery-project-starter-kit★ 337same name
- Othmane-Khadri/YALC-the-GTM-operating-system★ 298same name
- antonbabenko/deliberation★ 183same name
- wado-lang/wado★ 120same name
- claude-world/director-mode-lite★ 80same name
- Vinix24/vnx-orchestration★ 63same name
- jshsakura/awesome-opencode-skills★ 30same name
- belokonm/claude-supercode-skills★ 11same name
- botlearn-ai/botlearn-skills★ 9same name
23 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository17 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- app-testingSkill
- claude-panelSkill
- commands-settingsSkill
- containersSkill
- files-git-searchSkill
- i18nSkill
- lspSkill
- main-ipcSkill
- main-processesSkill
- packaging-releaseSkill
- renderer-componentsSkill
- renderer-editorSkill
- renderer-storeSkill
- renderer-stylesSkill
- renderer-terminalSkill
- workspacesSkill
The file
Files
Debugger (src/main/debug, ipc/debug.ts)
Generic over the Debug Adapter Protocol, built like LSP (lsp skill): adapters are external processes owned per
workspace view, their output is untrusted and normalized at the boundary, every request has a deadline.
Modules
ipc/debug.ts is wiring only (channels, argument validation, delegation); the manager of a view lives in
debug/registry.ts (debugManagerOf(wc), ensureDebugManager(wc), killAllDebug() for will-quit,
debugRunCommand for the terminal source).
| Module | Role |
debug/framing.ts | Content-Length framing (createDapParser, encodeDapMessage). DAP is not JSON-RPC, so vscode-jsonrpc is not used; caps: 64 MiB message, 8 KiB header, a framing error closes the channel |
debug/connection.ts | DapConnection over a DapStreams pair: request(command, args, timeoutMs) (seq, rejectAfter), events, reverse requests (onRequest resolves the body, a rejection becomes success: false with the English message), DapResponseError (translated prefix + adapter text) |
debug/normalize.ts | Pure normalization of every adapter body (capabilities, threads, frames, scopes, variables, evaluate, breakpoint statuses, stopped/continued/output/exited) with text and list caps; responseErrorMessage prefers body.error.format |
debug/session.ts | DebugSession: initialize → launch/attach (not awaited) → initialized event → breakpoints + setExceptionBreakpoints (default filters only) + configurationDone → launch response. control, threads, stackTrace, scopes, variables, evaluate, stop (terminate if supported and launch, then disconnect; a second stop closes at once), finish(error) |
debug/manager.ts | DebugManager (no Electron): configurations, start/restart/stop of session trees, the breakpoint map (keyed by pathKey), output batch (50 ms), runInTerminal tickets, startDebugging children. Dependencies are injected (resolveLaunch, startAdapter, createFile, readText) so manager.test.ts drives it with a fake adapter over PassThrough streams |
debug/transport.ts | startAdapter (spawnGroup, stderr through createLineSplitter) and the channel: stdio (one connection) or tcp (freePort → ${port} in the args, connectTcp retries for 10 s, one socket per session) |
debug/adapters.ts | resolveAdapter(type, setting): debug.adapters[type] → alias (pwa-node → node, debugpy → python…) → built-in (python = python3 -m debugpy.adapter, python on Windows) |
debug/launchConfig.ts | .vscode/launch.json (JSONC via settings/parseJsonc.ts), windows/osx/linux overrides, builtinConfigs (shown when the file is missing or has no configuration), launchFileTemplate, substituteVariables |
debug/runInTerminal.ts, debug/validate.ts | Validation of the reverse runInTerminal arguments and of the renderer arguments |
Rules
- Ownership: one manager per view (
createViewRegistry, keydebug); a view reset disposes it (short graceful stop, then kill), a folder change callsresetForFolder(stops the sessions, forgets the breakpoints),will-quitcallskillAllDebug(the adapters arespawnGroupprocesses, sokillAllSpawnedGroupsalso sweeps them). debug.adaptersis user-only (it runs programs): validated byisValidDebugAdapterinshared/settings.ts(commandliketerminal.shell,tcprequires${port}inargs,envlikeclaude.env). The executable is resolved withresolveExecutableon the login-shell PATH (effectivePath), env throughbuildChildEnv.- Timeouts (
DAP_TIMEOUTS): initialize 15 s, launch/attach 60 s, requests 10 s, evaluate 15 s, terminate/ disconnect 3 s. Neverawaita DAP request without one. - The launch response is not awaited before
initialized: debugpy answerslaunchonly afterconfigurationDone. Some adapters sendinitializedafter the launch response: waitlateInitialized(2 s) for it before configuring. - Breakpoints: the renderer is the source of truth (persisted in the workspace session) and sends the whole list of
a file with
debug.setBreakpoints(only enabled ones). The manager keeps the map, sends it inconfigureand to every live session on change (initializedSeen, so a change duringconfigureis not lost). Statuses go back as thebreakpointsevent aligned with the request order;breakpointevents are mapped by the ids of the last response. Conditions/hit counts/log messages are dropped when the adapter did not announce support. - Synthetic
continued: adapters do not sendcontinuedfor client requests, socontrolemits one after a successful continue/next/stepIn/stepOut (andrestartInAdaptertoo). The renderer handlescontinueduniformly. - Failure surfaces: a failure during
startrejects thedebug:startinvoke (the adapter's spawn error or crash, with the last stderr line, wins over the generic communication error) and emits noerrorevent; after start, an adapter crash or a broken channel emits{ kind: 'error' }(translated) and the sessions vanish from the list. runInTerminal: the manager stores a one-shot ticket (15 s) and emits{ kind: 'runInTerminal', ticket }; the renderer callsterminal.create({ debugRun: ticket });terminal/create.tsasks thedebugRunterminal source (registered byipc/debug.ts), which takes the ticket and runsargs[0]with the rest (no shell), the adapter'scwdand env;onSpawned(pid)answers the adapter withprocessId. The command never comes from the renderer.startDebugging(js-debug): only overtcp(a new socket to the same server per child); the child getsparentId, ends with its root, andstopof any session stops the whole tree (children first).- Text sent to the adapter (reverse request refusals) is English; everything shown to the user goes through
t().debug(main) ort().debugUi(renderer). preLaunchTask/postDebugTaskare not run: a note goes to the Debug Console.${command:…},${input:…}and${config:…}throw a translated error.
Testing
manager.test.tsuses aFakeAdapter(twoPassThroughstreams +createDapParser) that answers like debugpy (initializedright afterlaunch, launch response afterconfigurationDone);tcp: truegives a new adapter perconnectfor child sessions. Real adapters are not part of the suite (debugpy/js-debug are not dependencies).
Renderer
- State:
types/debug.ts/state/debug.ts(scoped per folder). Actions:debugActions.ts(sessions, events fromapi.debug.onEvent, focused session/frame, watches, console, theinDebugModecontext) anddebugBreakpointActions.ts(breakpoints per path, pushed withdebug.setBreakpointsand saved in the session). Pure logic inlib/debugBreakpoints.ts,lib/debugConsole.ts,lib/debugSessions.ts. - UI:
components/debug/(DebugView+DebugSectionsin the sidebar,DebugToolbarfloating in.main,DebugConsoleas thedebugConsolebottom-panel view), styles instyles/debug.css. - Editor:
components/editor/breakpointGutter.ts(gutter marks that follow edits, inline condition widget, stopped line highlight), added to bothextensionsForandcreateMirror; it reaches the store only throughcomponents/editor/debugHost.ts(bindDebugHost), likelspHost.ts. - Commands act on the focused session: the one of the last
stoppedevent, else the newest live leaf session.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

