How to use
- ci.yml
Paste the YAML (.yml)
- Jobs and stepswith line numbers
Job dependencies and findings
- actions-review.txtnot uploaded
Save the findings as a list
Paste a workflow YAML (a .yml under .github/workflows), or drop the file. “Try a sample” shows how it works.
In the jobs and steps list, check on, the needs order, runs-on and the matrix combination count.
In the steps list, check the uses (action) and the first line of run for each step.
Open “Issues” for the list by severity. Injection with pull_request_target is high, unpinned third-party actions are medium, and the rest are low.
Copy or save the issue list.
What it does
Script injection detection
Flags, with line numbers, places in run and in the script of github-script where a value anyone can write (such as github.event.issue.title) is expanded directly in an expression.
Unpinned action findings
Lists actions whose uses version is a tag or branch. Third-party actions are medium; official actions and github are low (for attention). Actions pinned to a full commit SHA are not flagged.
pull_request_target and checkout
With the pull_request_target trigger, flags a checkout of the PR head with actions/checkout as high.
needs dependencies and matrix counts
Orders the jobs by needs, and flags needs that point to missing jobs and cycles. The matrix count is the product of its arrays.
Permission and timeout checks
Flags jobs without permissions, write-all, and jobs without timeout-minutes.
Use cases
- Check before merging that a PR title or comment is not written straight into run
- Decide whether a third-party action should be pinned to a full SHA instead of a tag
- See the default permissions of a workflow that omits permissions, before rewriting it
- Check the needs order and the matrix combination count without tracing them by hand
Capability matrix
| Feature | Support | Notes |
|---|---|---|
| Reading on (triggers), jobs and steps | Supported | — |
| needs order, cycles and missing jobs | Supported | — |
| uses versions (tag, branch, SHA) and docker:// digests | Supported | — |
| Script injection, printing secrets, pull_request_target with checkout | Partial | Checks only known context names and common forms. Other injection forms are not found |
| permissions, timeout-minutes and expression parentheses | Supported | — |
| Full schema validation (every key name and type) | Not supported | Not performed. Only unknown top-level keys are flagged |
| Running the workflow, fetching actions, network requests | Not supported | No network requests. The code of uses actions is not read |
| Expanding reusable workflows | Not supported | The called workflow is not read |
Limits & notes
- Input is limited to 200,000 characters and 100 jobs. Anything beyond is not read, and you are told.
- Full schema validation is not performed. A misspelled key or wrong type may not be flagged, but GitHub may still reject the workflow.
- matrix counts only the product of its arrays. include and exclude are not counted, and an expression matrix cannot be counted.
- Findings follow GitHub’s official documentation only. Recommendations may change over time.
Privacy & safety
Pasted YAML is processed only inside your browser. Nothing is sent to or stored on a server, and nothing is saved in the browser. Usage analytics never include content or file names.
FAQ
What is dangerous about pull_request_target?
Should uses be pinned to a SHA?
What should permissions contain?
How is this different from a YAML checker?
Can this tool run the workflow?
Related tools
YAML / TOML Studio — Validate, Format & Convert
Paste YAML, TOML or JSON to validate, format or convert it. Errors show the exact line and column, and type traps such as “no becomes false” and anything lost in conversion are flagged up front. Your data never leaves your device.
Dockerfile Studio
Paste a Dockerfile to check its syntax, stages and common mistakes. Secret-looking values and points to confirm, such as curl | sh, are listed with line numbers. You can also format it or generate starter files for Node.js, Python, Go, a static site or Java. Nothing is built, and your input never leaves your device.
Kubernetes Manifest Studio
Paste Deployment, Service or other manifests to list the resources and see which Deployment a Service's selector reaches. It flags removed apiVersions, latest or missing image tags, missing requests and limits, and risky securityContext settings, each with a line number. It does not fully validate the schema, so use it as a review aid before you apply anything to a cluster.
Lockfile Diff & Dependency Tree
Compare two lockfiles to see which packages were added, removed or upgraded. You can also see why a package is installed and where several versions of one package come from. Nothing leaves your browser.
Docker Compose Studio
Convert docker run commands to compose.yaml, or compose.yaml back to docker run. A compose file is checked for syntax, the Compose Specification and common mistakes, and security points worth confirming are listed. Nothing is started or pulled, and your input never leaves your device.
.env Studio
Paste or drop a .env file to see its keys and values in a table, with duplicates, empty values and syntax problems flagged by line. Values are hidden by default. You can compare a .env with a .env.example, or export an example file, JSON or a Kubernetes Secret. It checks common dotenv syntax, not tool-specific rules such as docker compose variable expansion.
Last updated: