Agent skill

Debug CI

by web-infra-dev in 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.

MITAuto-check passedDevelopment

Install Debug CI

skills CLI
$ npx skills add web-infra-dev/rslint --skill debug-ci -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install web-infra-dev/rslint debug-ci --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
debug-ci
GitHub stars
460
Token cost
~2.8k tokens
SKILL.md length
1,255 words
Files
1
Skills in repo
3
Repo updated
First seen
Licence
MIT

At a glance

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.

  • Tasks that involve Linting and formatting
  • SKILL.md covers Identify the failure and…, Isolate the reproduction, Match the Linux environment and Prepare and run the selected…, plus 1 more section
  • Calls git, pnpm and gh
  • Tasks that involve Failing and flaky tests

What it does

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.

When your agent uses it

  • Tasks that involve Linting and formatting
  • Tasks that involve Failing and flaky tests
  • Tasks that involve Containers

Example prompts

  • “/debug-ci”

Requirements

  • Docker

What it can do on your machine

Read from SKILL.md and the folder at commit bbe46f7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • pnpm
    • gh
    • docker
    • go

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~73
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

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.

Safety

Auto-check passed

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.

SKILL.md

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.

Download SKILL.mdSave it as .claude/skills/debug-ci/SKILL.md (or your agent's skills folder).
name
debug-ci
description
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.

Debug CI

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.

Identify the failure and select the scope

bash
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>/logs

Record 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.

Isolate the reproduction

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.

bash
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.

bash
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:

bash
git -C <repro-dir> submodule sync -- typescript-go
git -C <repro-dir> submodule update --init --depth 1

Ensure 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.

Match the 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.

InputSource
Linux base and architectureFailing job's runner and setup logs; select the matching Docker platform
Go versionSelected job's go-version or matrix in .github/workflows/ci.yml
Node version and pnpm setupSelected job and .github/actions/setup-node/action.yml; pnpm version also follows root package.json
golangci-lint versiongolangci-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 packagesSelected workflow's install step; add missing Electron runtime libraries when the bare image lacks runner-provided dependencies
Check environmentEffective 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.

bash
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.

Show full SKILL.md (458 more words)Show less

Prepare and run the selected checks

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:

bash
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 bash

Run 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.

CheckExisting scoped command
Go rule packagego test -count=1 ./internal/rules/max_params
Rstest integration filepnpm --dir packages/rslint-test-tools exec rs test run tests/eslint/rules/max-params.test.ts
VS Code extension workspacexvfb-run -a pnpm --filter rslint test
Go lintgolangci-lint run --new-from-merge-base=origin/main ./internal/rules/max_params
Go formatting checkgolangci-lint fmt --diff ./internal/rules/max_params/max_params.go
JS/TS/docs formatting checkpnpm 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.

Record the result

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

Files

Just SKILL.md in .agents/skills/debug-ci of web-infra-dev/rslint.

Open the folder on GitHubat commit bbe46f7

Compare with similar skills

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.

Debug CI compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Debug CI this skillweb-infra-dev/rslint460—~2.8kAutomated safety check: PassMIT
Dotnet Debuggingnovotnyllc/dotnet-artisan233—~2.1kAutomated safety check: PassMIT
.NET Crash Dump Collectiondotnet/skills5.6k2 repos~1.1kAutomated safety check: PassMIT
Debug Os Failure On GitHubstrands-agents/box110—~1.3kAutomated safety check: NotesApache-2.0
Code Reviewmicrosoft/vscode-containers141—~415Automated safety check: PassCustom licence
Reproduce Issuenrwl/nx29k—~2.6kAutomated safety check: NotesMIT

Similar skills

  • 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…

    233 GitHub stars~2.1k tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    Configures automatic crash dumps or captures dumps from running processes for modern .NET apps on Linux, macOS and Windows, including Docker and Kubernetes.

    5.6k GitHub starsUsed in 2 repos~1.1k tokens
    DevOps & CloudAuto-check passed
  • Debug Os Failure On GitHub

    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.

    110 GitHub stars~1.3k tokensUpdated today
    DevelopmentAuto-check: notes
  • Code Review

    microsoft/vscode-containers

    Official

    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.

    141 GitHub stars~415 tokensUpdated today
    DevelopmentAuto-check passed
  • The single skill for reproducing an nx issue. An agent skill from nrwl/nx.

    29k GitHub stars~2.6k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • CI Adhoc Test

    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 /…

    4.4k GitHub stars~1.7k tokensUpdated today
    DevOps & CloudAuto-check passed

More from web-infra-dev/rslint

  • Port Rule

    web-infra-dev/rslint

    Port a new ESLint core or plugin rule to rslint, including explicitly requested batches.

    460 GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Prepare Rslint npm Release

    web-infra-dev/rslint

    Prepare a stable release PR for the unified rslint npm packages by updating package versions and rule/TypeScript release metadata.

    460 GitHub stars~1.5k tokensUpdated today
    Auto-check passed

Questions about Debug CI

What does Debug CI do?

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.

When should I use Debug CI?

Debug CI fits situations like: tasks that involve Linting and formatting; tasks that involve Failing and flaky tests; tasks that involve Containers.

How do I install Debug CI in Claude Code?

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.

How do I install Debug CI in Codex?

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.

Can I use Debug CI in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Debug CI need to run?

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.

Does Debug CI access the network?

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.

Is Debug CI safe to install?

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.

What licence does Debug CI use?

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.

How many tokens does Debug CI use?

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.

What are the alternatives to Debug CI?

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.

Who maintains Debug CI?

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.