By kevinweisl
4 reusable Claude Code skills for GitHub CI/CD: lint-and-test (ruff+pytest / npm), build-and-release (wheel/npm/docker, gated), dependency-audit (pip-audit/npm/cargo/govulncheck), security-scan (semgrep+gitleaks+trivy). Read-only by default; build-and-release is human-gated via disable-model-invocation.
Build a Python wheel, npm package, or Docker image AND optionally push it to a registry. This is a SIDE-EFFECTING WRITE OPERATION. Default behaviour reads `$PWD` (the repo the user is releasing) and runs in dry-run mode (build only, no push). Use this when the user asks to "release v1.2.3", "publish to PyPI", "twine upload", "npm publish", "ship a new version", "build and push the docker image to ghcr", "cut a github release", "tag and push", "deploy the SDK", or any explicit publish/release request on the current repo. The user may also pass a GitHub URL to release a different repo. For running tests or linters, use lint-and-test. For SAST or secret scans, use security-scan. For dependency CVE checks, use dependency-audit.
Scan the user's CURRENT repository (or a remote GitHub URL) for KNOWN VULNERABILITIES in third-party dependencies using OSV/GHSA advisory databases. Detects ecosystem from manifest files (pyproject.toml/requirements.txt, package.json/package-lock.json, Cargo.toml, go.mod) and runs the matching auditor (pip-audit, npm audit, cargo audit, govulncheck). Default behaviour reads `$PWD` (no clone). Use this when the user asks to "audit dependencies", "run pip-audit", "npm audit", "check for vulnerable packages", "are any of my deps CVE-flagged", "is lodash safe", "any CVEs in our packages", "scan our requirements.txt", "check our Cargo.lock for advisories", or "any GHSA hits in our manifest". For SAST or secret scans on YOUR OWN source code, use security-scan. For lint/test, use lint-and-test. For build/publish, use build-and-release. Read-only.
Run the lint-then-test pipeline (ruff + pytest for Python, npm lint + npm test for Node) on the user's CURRENT repository and return a structured pass/fail report. Default behaviour reads `$PWD` (the repo the user has checked out and is working on); no clone, no network. Use this when the user asks to "lint and test", "run CI checks", "run pytest", "type-check with mypy", "run prettier and the unit tests", "make sure ruff is clean and tests pass", "ESLint + jest", or any combined static-check-plus-test request on the working repo. To inspect a remote GitHub URL without cloning manually, the user can include the URL in their request and the skill will shallow-clone into a sandbox. For dependency CVE checks, use dependency-audit instead. For SAST or hard-coded-secret scans, use security-scan. For building or publishing artifacts, use build-and-release. Read-only.
Scan the user's CURRENT repository's OWN SOURCE CODE (not its dependencies) for SAST findings, hard-coded secrets/credentials, and (optionally) container-image CVEs in a built docker image. Default behaviour reads `$PWD` (no clone, no network). Use this when the user asks to "run semgrep", "run gitleaks", "run SAST", "find SQL injection in our handlers", "any hardcoded passwords in the codebase", "did we leak any API keys", "did we commit a .env", "scan our Dockerfile for misconfigs", or "scan the docker image for CVEs". These are queries about CODE WE WROTE, not LIBRARIES WE IMPORTED. The user may also pass a remote GitHub URL to scan a third-party repo. For known CVEs in third-party packages (lodash, requests, etc.), use dependency-audit instead. For lint/test, use lint-and-test. For build/publish, use build-and-release. Read-only.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
https://claude-skills-cicd-kevin.zeabur.app
Bring your own sk-ant-* Anthropic key (browser-side, never persisted server-side; see ui/README.md for the BYOK threat model). Type a request like "audit deps of https://github.com/psf/requests at main" and the matching skill streams output token-by-token over SSE.
Pre-release sanity-checking a repo today usually looks like this:
ruff check . && pytest # lint + test
pip-audit # CVE check
semgrep --config=auto . # SAST
gitleaks detect # secret scan
python -m build # try a wheel build
Five tools, five output formats, no common schema. With Claude Code and the 4 skills in this repo loaded, the same workflow becomes one sentence:
You : audit my deps for known vulnerabilities
Claude : (picks `dependency-audit`, reads $PWD, detects Python, runs pip-audit)
Claude : Found 0 known CVEs in the Python deps.
The 4 skills cover lint + test, build + release, dependency audit, and SAST + secret scan. They install natively in Claude Code via the plugin marketplace (see Quick start). The same 4 skills are also exposed through a small Anthropic Agent SDK web shell in ui/ (FastAPI + vanilla JS, SSE streaming): a fully functional alternative path for trying them in a browser without Claude Code, or as a reference for deploying skills as a web service. The two paths share the same scripts/run.py actors but have a few intentional behavioural differences documented in ui/README.md.
Two scenarios. The first is the primary path; the second is occasionally useful.
Scenario A: you're working in your own repo.
~/work/my-app$ claude
> lint and test this codebase
> audit my deps
> scan our handlers for SQL injection
The skills default to $PWD. No clone, no network. They validate that the directory is a git checkout and run scanners directly against the working tree, including any uncommitted changes.
Scenario B: you want to inspect a third-party repo without cloning it yourself.
> audit deps of https://github.com/psf/requests at main
Pass a https://github.com/... URL. The skill shallow-clones into /tmp/skill_sandbox_*, runs the scanner, and removes the sandbox in a finally block.
Web shell exception: the
ui/demo has no concept of$PWD(the FastAPI server is somewhere else), so it always uses the URL flow. Web shell is for evaluators or "try without installing Claude Code" scenarios.
Each skill is a deliberate design study, not just a different scanner.
| Skill | What it does | Design highlight |
|---|---|---|
lint-and-test | ruff + pytest (Python) or npm lint + npm test (Node) on the repo. | Multi-tool pipeline. Lint and test share install/cache state, so they sit under one skill. |
build-and-release | wheel / npm tarball / docker image. Dry-run by default; never pushes unless --no-dry-run is set. | Side-effecting write skill. Frontmatter sets disable-model-invocation: true, so Claude won't fire it from a soft natural-language ask. Human gate is the safety boundary. |
dependency-audit | CVE scan via pip-audit / npm audit / cargo audit / govulncheck. Auto-detects ecosystem from lock files. | Multi-ecosystem auto-routing with one normalised output schema. Caller doesn't need to know the repo's language. |
security-scan | Parallel SAST + secret scan: semgrep + bandit + gitleaks + (optional) trivy. | Parallel ensemble with severity-weighted dedup. Token-shape redaction (PAT, AWS, JWT, ...) applied to every output before it reaches Claude. |
This repo ships as a Claude Code plugin marketplace. Inside any Claude Code session:
/plugin marketplace add Kevinweisl/claude-skills-cicd
/plugin install claude-skills-cicd@cicd-skills
Then run /reload-plugins (or restart the session). The 4 skills are now usable two ways:
SKILL.md description. Example: audit my deps/claude-skills-cicd:lint-and-test/claude-skills-cicd:build-and-release/claude-skills-cicd:dependency-audit/claude-skills-cicd:security-scanWhat you'll need installed:
npx claudepluginhub kevinweisl/claude-skills-cicd --plugin claude-skills-cicdComprehensive skill pack with 66 specialized skills for full-stack developers: 12 language experts (Python, TypeScript, Go, Rust, C++, Swift, Kotlin, C#, PHP, Java, SQL, JavaScript), 10 backend frameworks, 6 frontend/mobile, plus infrastructure, DevOps, security, and testing. Features progressive disclosure architecture for 50% faster loading.
Develop, test, build, and deploy Godot 4.x games with Claude Code. Includes GdUnit4 testing, web/desktop exports, CI/CD pipelines, and deployment to Vercel/GitHub Pages/itch.io.
A growing collection of Claude-compatible academic workflow bundles. Covers scientific figures, manuscript writing and polishing, reviewer assessment, citation retrieval, data availability, paper reading, literature search, response letters, paper-to-PPTX conversion, and evidence-grounded Chinese invention patent drafting. Rules are organized as reusable skill folders with explicit workflows and quality checks.
v9.44.1 — Patch release for Gemini environment/version detection and qwen auth gating. Run /octo:setup.
Harness-native ECC operator layer - 67 agents, 271 skills, 92 legacy command shims, reusable hooks, rules, selective install profiles, and production-ready workflows for Claude Code, Codex, OpenCode, Cursor, and related agent harnesses
Comprehensive PR review agents specializing in comments, tests, error handling, type design, code quality, and code simplification