Get started in 60 seconds
Pick your CI provider, copy the snippet, push. ci-doctor runs in <1s and reports cost waste, security gaps, and reliability bugs. Free, MIT, no signup. Five CI providers covered.
Step 1. Pick your CI provider
Recommended: drop in the Action (3 lines)
- uses: depmedicdev-byte/ci-doctor-action@v1
with:
severity-threshold: warn
comment-on-pr: true
upload-sarif: true
Or run the CLI directly:
- run: npx --yes ci-doctor --markdown
Other useful pages: Action docs · scan a workflow in your browser · public leaderboard.
Drop into your pipeline (1 job)
ci-audit:
stage: lint
image: node:20-alpine
script:
- npx --yes gitlab-ci-doctor --markdown | tee ci-doctor.md
artifacts:
paths: [ci-doctor.md]
expire_in: 1 week
allow_failure: true
Other useful pages: gitlab-ci-doctor docs · scan in browser.
Drop into your pipeline (1 step)
image: node:20-alpine
pipelines:
default:
- step:
name: ci-audit
script:
- npx --yes bitbucket-ci-doctor --markdown
Other useful pages: bitbucket-ci-doctor docs · scan in browser.
Drop into your pipeline (1 task)
- task: Bash@3
displayName: ci-doctor
inputs:
targetType: inline
script: npx --yes azure-pipelines-ci-doctor --markdown
Other useful pages: azure-pipelines-ci-doctor docs · scan in browser.
Drop into your workflow (1 job)
version: 2.1
jobs:
ci-audit:
docker:
- image: cimg/node:20.10
steps:
- checkout
- run:
name: ci-doctor
command: npx --yes circleci-ci-doctor --markdown
no_output_timeout: 2m
workflows:
audit:
jobs: [ci-audit]
Other useful pages: circleci-ci-doctor docs · scan in browser.
Step 2. Push and look at the output
On the next CI run, ci-doctor will print a Markdown table of findings (and write a SARIF file on GitHub if you used the Action). On the GitHub side, you also get a sticky PR comment that updates on every push - no comment-spam.
Step 3. (Optional) Lock it in
- Add
ci-doctorto your required checks so it gates merges. Start withseverity-threshold: errorto avoid blocking on warnings. - Set
--baselineagainst the current report so you only get failures on new findings (great for legacy repos). - Embed the live ci-doctor badge in your README to show your hygiene score publicly.
Need more than the free CLI?
The CLI is free forever. The optional Pro tier ($5/mo) adds per-org rule overrides, Slack/Webhook delivery of the weekly digest, the hosted GitHub App with one-click install, and priority support on issues.
Pro tier ($5/mo) → GitHub App (hosted) Just say thanksWhat did I just install?
ci-doctor is a small Node CLI (no native deps) that
parses your workflow YAML, runs 16 rules against the AST, and
prints a report. It does not phone home, does not
collect telemetry, and does not require any auth tokens
(the Action only needs GITHUB_TOKEN, scoped to PR
comments + SARIF upload).
Source: github.com/depmedicdev-byte/ci-doctor (MIT) · npmjs.com/package/ci-doctor · how it compares to actionlint / zizmor / octoscan / super-linter.
Frequently-skipped questions
Does it support self-hosted runners?
Yes - the audit runs against the workflow YAML, regardless of where the runner lives. See our self-hosted runner playbook.
Does it support reusable workflows?
Yes - it follows uses: references and audits the
referenced workflow if it lives in the same repo. Cross-repo references
are flagged for manual review.
Does it work in monorepos?
Yes - point it at a directory and it audits every workflow file under
it (including nested .github/workflows/ trees from packages
inside the monorepo).
I don't see an issue I expected to see flagged.
File a GitHub issue with a minimal reproducing snippet. Same-day response on most bugs. Open an issue →
Have a usage question instead of a bug?
Browse or ask in GitHub Discussions. Common topics already answered: setup, monorepos, reusable workflows, how it compares to other linters.