Dotnet Debugging
novotnyllc/dotnet-artisan
Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) with WinDbg MCP (crash dumps, !analyze, !syncblk, !dlk, !runaway, !dumpheap, !gcroot, BSOD), dotnet-dump, lldb with SOS…
Reproduce Linux CI failures locally using Docker when the same tests pass on the host, especially Go platform differences and VS Code extension tests requiring xvfb.
$ npx skills add web-infra-dev/rslint --skill debug-ci -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install web-infra-dev/rslint debug-ci --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/web-infra-dev/rslint.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/debug-ci .claude/skills/debug-ci && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "debug-ci" agent skill from https://github.com/web-infra-dev/rslint/tree/main/.agents/skills/debug-ci into .claude/skills/debug-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-ci", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/web-infra-dev/rslint/tree/main/.agents/skills/debug-ciType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add web-infra-dev/rslint --skill debug-ci -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install web-infra-dev/rslint debug-ci --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/web-infra-dev/rslint.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/debug-ci .agents/skills/debug-ci && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "debug-ci" agent skill from https://github.com/web-infra-dev/rslint/tree/main/.agents/skills/debug-ci into .agents/skills/debug-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-ci", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add web-infra-dev/rslint --skill debug-ci -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install web-infra-dev/rslint debug-ci --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/web-infra-dev/rslint.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/debug-ci .cursor/skills/debug-ci && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "debug-ci" agent skill from https://github.com/web-infra-dev/rslint/tree/main/.agents/skills/debug-ci into .cursor/skills/debug-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-ci", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/web-infra-dev/rslint.git --path .agents/skills/debug-ci--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add web-infra-dev/rslint --skill debug-ci -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install web-infra-dev/rslint debug-ci --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/web-infra-dev/rslint.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/debug-ci .gemini/skills/debug-ci && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "debug-ci" agent skill from https://github.com/web-infra-dev/rslint/tree/main/.agents/skills/debug-ci into .gemini/skills/debug-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-ci", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install web-infra-dev/rslint debug-ciInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add web-infra-dev/rslint --skill debug-ci -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/web-infra-dev/rslint.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/debug-ci .github/skills/debug-ci && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "debug-ci" agent skill from https://github.com/web-infra-dev/rslint/tree/main/.agents/skills/debug-ci into .github/skills/debug-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-ci", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add web-infra-dev/rslint --skill debug-ci -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install web-infra-dev/rslint debug-ci --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/web-infra-dev/rslint.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/debug-ci .opencode/skills/debug-ci && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "debug-ci" agent skill from https://github.com/web-infra-dev/rslint/tree/main/.agents/skills/debug-ci into .opencode/skills/debug-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-ci", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
debug-ciReproduce Linux CI failures locally using Docker when the same tests pass on the host, especially Go platform differences and VS Code extension tests requiring xvfb.
Debug CI is an agent skill from web-infra-dev/rslint. Reproduce Linux CI failures locally using Docker when the same tests pass on the host, especially Go platform differences and VS Code extension tests requiring xvfb. Read the workflow and setup actions for the revision being tested; Docker does not reproduce Windows or macOS runners.
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Linting and formatting, Failing and flaky tests and Containers. It works with Linux, Docker, Visual Studio Code and macOS. The repository describes itself as: High-performance, ESLint-compatible linter for JavaScript and TypeScript. The licence is MIT.
Read from SKILL.md and the folder at commit bbe46f7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitpnpmghdockergoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, pnpm, gh and docker, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Debug CI loads about 2.8k tokens when it runs. Until then it costs about 73 tokens; SKILL.md has 1,255 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from web-infra-dev/rslint at commit bbe46f7, republished under its MIT licence (© web-infra-dev). 1,255 words, ~2,849 tokens.
.claude/skills/debug-ci/SKILL.md (or your agent's skills folder).Reproduce the selected failing Linux checks in an isolated checkout with the relevant CI toolchain. Follow AGENTS.md for the task branch, verification scope, test organization and result reuse. Keep the existing task branch and progress record when continuing a diagnosis.
gh pr checks <PR_NUMBER>
gh api repos/web-infra-dev/rslint/actions/runs/<RUN_ID>/jobs \
--jq '.jobs[] | select(.conclusion == "failure") | {name, id}'
gh api repos/web-infra-dev/rslint/actions/jobs/<JOB_ID>/logsRecord the failing commit, job, runner architecture and failed test or check. Read .github/workflows/ci.yml and its referenced setup actions at the failing revision to reproduce the original failure. To validate the current fix, use the intended task revision plus its current changes and the CI configuration applicable to that target; record any environment differences from the failed run.
Trace the affected packages and consumers, then state the selected commands before running them. A failed CI job does not authorize all of that job's tests locally. If the user or reviewer explicitly requests a whole job or full suite, read its commands from the workflow at the selected revision rather than maintaining a second full-job script here. Windows and macOS failures need the corresponding platform; report that gap instead of claiming Docker parity.
Use a disposable independent clone outside the working checkout. This keeps its .git directory usable inside Docker and keeps Linux dependencies, Go binaries and VS Code downloads out of the user's current workspace.
git clone --no-hardlinks --no-checkout <repository-url-or-local-path> <repro-dir>Before checkout, ensure the exact tested commit is present. A normal clone may omit PR merge/fork refs or unpublished local commits; fetch the corresponding CI/PR ref, or fetch from a local checkout that holds the commit. Verify the resolved SHA matches the recorded target: a current PR ref may have advanced since the failed run.
git -C <repro-dir> checkout --detach <tested-commit>Read-only reproduction may stay detached. Before applying a patch or editing in the clone, select a task branch at the tested commit and verify git branch --show-current there, following AGENTS.md.
When validating an uncommitted fix, apply the intended staged and unstaged changes and copy any required untracked inputs into this clone before testing. A clone of HEAD alone does not contain the fix. Review the isolated diff against the intended input; exclude unrelated edits, host node_modules, generated binaries and caches.
If the patch changes a submodule gitlink, update the isolated clone's index too: for an initial combined patch against a clean checkout, use git apply --index <patch>. Plain git apply leaves the index unchanged, and git submodule update selects the indexed commit. Check that indexed gitlink against the intended revision and fetch the commit from the source submodule if it is not available remotely.
Initialize the compiler submodule when the selected checks need it, verify its HEAD matches the intended gitlink, then apply any intended changes inside that submodule:
git -C <repro-dir> submodule sync -- typescript-go
git -C <repro-dir> submodule update --init --depth 1Ensure the chosen base ref and enough history for the lint merge-base exist in the isolated clone. A local clone's origin points to the source checkout, so verify the base commit rather than assuming its origin/main matches the source checkout's remote-tracking ref.
Reuse the same isolated clone, image and container while their relevant inputs remain unchanged. Install dependencies or rebuild outputs only when the selected execution path needs them and they are missing or stale. Do not delete the current workspace's node_modules or .vscode-test directories to obtain a clean Linux environment.
Reuse a matching image if available. Otherwise prepare a temporary Docker build context outside the repository, using the selected revision's sources below. Install only the tools needed by the selected checks.
| Input | Source |
|---|---|
| Linux base and architecture | Failing job's runner and setup logs; select the matching Docker platform |
| Go version | Selected job's go-version or matrix in .github/workflows/ci.yml |
| Node version and pnpm setup | Selected job and .github/actions/setup-node/action.yml; pnpm version also follows root package.json |
| golangci-lint version | golangci-lint-action version input in the selected workflow |
| Rust toolchain, when the native parser is required | .github/actions/setup-rust/action.yml and the selected job's build prerequisites |
| xvfb and GUI packages | Selected workflow's install step; add missing Electron runtime libraries when the bare image lacks runner-provided dependencies |
| Check environment | Effective workflow, job and step variables, including values established by setup actions |
Pass the versions read from those sources as Docker build arguments, with no fallback version constants in the Dockerfile. For example, declare ARG GO_VERSION, ARG NODE_VERSION and ARG GOLANGCI_LINT_VERSION, use those arguments in the corresponding installations, and pass their resolved values when building. Keep the base image and installation architecture consistent with --platform; for Go downloads, Docker's TARGETARCH can select the archive architecture.
docker build --platform <ci-linux-platform> \
--build-arg GO_VERSION=<selected-go-version> \
--build-arg NODE_VERSION=<selected-node-version> \
--build-arg GOLANGCI_LINT_VERSION=<selected-lint-version> \
-t rslint-ci-test <temporary-build-context>Omit unneeded tools and arguments, or add the selected Rust toolchain when the execution path builds the native parser. Do not copy fixed versions or the entire CI job into this skill. Record any runner services, image packages or architecture details that cannot be matched. On Apple Silicon, matching an x64 Linux runner may require emulation and increase runtime; do not treat an ARM run as equivalent evidence.
Mount only the isolated clone. Pass the selected check's necessary environment values, including GitHub Actions' implicit CI=true and applicable step values such as GOMAXPROCS. Without CI mode, Rstest can create missing snapshots and pass where CI would fail. Keep the container alive during the diagnosis so its tool caches can be reused:
docker run --rm -it --platform <ci-linux-platform> \
--env CI=true \
--mount "type=bind,src=<absolute-repro-dir>,dst=/workspace" \
--workdir /workspace \
rslint-ci-test bashRun commands inside /workspace. For JS-based checks, use pnpm install --frozen-lockfile when dependencies need preparation. Read the selected workspace's scripts and the applicable CI build prerequisites before building: compiled JS artifacts, the native parser and generated rule schemas may be required by the selected integration chain. Build those dependencies with their existing workspace commands; do not default to a root build for every diagnosis. Before JS integration tests exercise changed Go code, run pnpm --filter @rslint/core build:bin.
The following are scoped examples, not a checklist. Replace the package or file with the selected target and include affected consumers when needed.
| Check | Existing scoped command |
|---|---|
| Go rule package | go test -count=1 ./internal/rules/max_params |
| Rstest integration file | pnpm --dir packages/rslint-test-tools exec rs test run tests/eslint/rules/max-params.test.ts |
| VS Code extension workspace | xvfb-run -a pnpm --filter rslint test |
| Go lint | golangci-lint run --new-from-merge-base=origin/main ./internal/rules/max_params |
| Go formatting check | golangci-lint fmt --diff ./internal/rules/max_params/max_params.go |
| JS/TS/docs formatting check | pnpm exec rs fmt --check <changed-files> |
The VS Code package uses its own __tests__/runTest.ts and Mocha runner, not Rstest. Its existing test script compiles and runs all extension suites and currently exposes no test-file or suite selector. The workspace command above is the smallest supported entry point; report that scope rather than inventing a filter or sending extension tests to rs test.
Run Go lint once with the branch-diff filter and selected package directories; do not follow it with the root lint:go script. Substitute the actual base ref when it is not origin/main. For Go formatting, pass the changed Go file paths directly and use the repository's formatter configuration. --diff reports formatting differences without writing files; it does not select files from Git.
For rs fmt, select supported, non-ignored changed files and skip empty selections as described in CONTRIBUTING.md.
Keep the tested revision and patch, container tool versions and architecture, selected commands, outcomes and remaining platform gaps in the task's existing progress record. Reuse passing results while their relevant inputs remain unchanged; rebuilding an image or reaching the commit step is not itself a reason to repeat unrelated checks.
Bring only intentional fixes back from the isolated clone and review them on the existing task branch. Dispose of task-owned reproduction resources when they are no longer needed. No host dependency restoration should be necessary because all Linux writes stayed in the isolated clone; pnpm install is not a way to restore a Go binary overwritten by a Linux build.
© web-infra-dev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/debug-ci of web-infra-dev/rslint.
Open the folder on GitHubat commit bbe46f7
Debug CI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Debug CI this skillweb-infra-dev/rslint | 460 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Dotnet Debuggingnovotnyllc/dotnet-artisan | 233 | — | ~2.1k | Automated safety check: Pass | MIT | |
| .NET Crash Dump Collectiondotnet/skills | 5.6k | 2 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Debug Os Failure On GitHubstrands-agents/box | 110 | — | ~1.3k | Automated safety check: Notes | Apache-2.0 | |
| Code Reviewmicrosoft/vscode-containers | 141 | — | ~415 | Automated safety check: Pass | Custom licence | |
| Reproduce Issuenrwl/nx | 29k | — | ~2.6k | Automated safety check: Notes | MIT |
novotnyllc/dotnet-artisan
Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) with WinDbg MCP (crash dumps, !analyze, !syncblk, !dlk, !runaway, !dumpheap, !gcroot, BSOD), dotnet-dump, lldb with SOS…
dotnet/skills
Configures automatic crash dumps or captures dumps from running processes for modern .NET apps on Linux, macOS and Windows, including Docker and Kubernetes.
strands-agents/box
Debug a CI failure on an OS you are not on (you are on Linux, it fails on macos-latest, or the reverse) without opening a pull request per attempt.
microsoft/vscode-containers
Review a pull request in this repository (the vscode-containers / Container Tools extension) when the automated reviewer has already supplied the diff and changed files.
nrwl/nx
The single skill for reproducing an nx issue. An agent skill from nrwl/nx.
nubjs/nub
Run ad-hoc / exploratory tests on a real OS or platform via CI when the behavior CANNOT be reproduced on the local host or in Docker — macOS Seatbelt / sandbox-exec / codesigning, Windows cmd.exe /…
web-infra-dev/rslint
Port a new ESLint core or plugin rule to rslint, including explicitly requested batches.
web-infra-dev/rslint
Prepare a stable release PR for the unified rslint npm packages by updating package versions and rule/TypeScript release metadata.
Categories
Reproduce Linux CI failures locally using Docker when the same tests pass on the host, especially Go platform differences and VS Code extension tests requiring xvfb. Debug CI is an agent skill from web-infra-dev/rslint. Reproduce Linux CI failures locally using Docker when the same tests pass on the host, especially Go platform differences and VS Code extension tests requiring xvfb.
Debug CI fits situations like: tasks that involve Linting and formatting; tasks that involve Failing and flaky tests; tasks that involve Containers.
Run `npx skills add web-infra-dev/rslint --skill debug-ci -a claude-code`. Or copy the skill folder (.agents/skills/debug-ci in web-infra-dev/rslint) into .claude/skills/debug-ci in your project. Claude Code loads it when a task matches its description.
Run `npx skills add web-infra-dev/rslint --skill debug-ci -a codex`. Or copy the skill folder (.agents/skills/debug-ci in web-infra-dev/rslint) into .agents/skills/debug-ci in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add web-infra-dev/rslint --skill debug-ci -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/debug-ci, .gemini/skills/debug-ci, .github/skills/debug-ci and .opencode/skills/debug-ci in your project.
Going by SKILL.md and its folder, Debug CI needs the command-line tools its instructions call (git, pnpm, gh, docker and go). Our summary lists: Docker.
SKILL.md contains no URLs. Its commands use git, gh and docker, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Debug CI is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Debug CI: Dotnet Debugging (novotnyllc/dotnet-artisan, 233 stars), .NET Crash Dump Collection (dotnet/skills, 5.6k stars), Debug Os Failure On GitHub (strands-agents/box, 110 stars) and Code Review (microsoft/vscode-containers, 141 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
web-infra-dev (a GitHub organization) maintains it in web-infra-dev/rslint, which has 460 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 8, 2026.
Source: web-infra-dev/rslint on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.