actions_audit
Static security audit of GitHub Actions workflow files. Flags template injection (attacker-controlled github.* contexts such as a PR title or branch name expanded inside run: or actions/github-script), pull_request_target and workflow_run triggers and the pwn-request pattern of checking out the pull request head under them, actions and reusable workflows not pinned to a full 40-character commit SHA, container images not pinned by digest, missing or write-all GITHUB_TOKEN permissions, secrets used under untrusted triggers or passed with secrets: inherit, actions/checkout persisting credentials, self-hosted runners on public repositories, curl or wget piped to a shell, hardcoded credentials (reported by kind and line, never echoed), jobs with no timeout-minutes, and caching in release or tag-publish workflows. Up to 50 files of 256 KB each, 1 MB request body; YAML anchors and aliases are rejected. Nothing referenced is fetched, so pinned SHAs are not checked to exist and called actions are not audited. Rules follow zizmor and GitHub's Actions hardening guide. Deterministic, no LLM.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "actions_audit"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| workflow | No | Alternative to workflows: a single workflow YAML string. Reported with path "workflow". | |
| workflows | No | The workflow files to audit, e.g. everything under .github/workflows/. Max 50 files, 256 KB each, 1 MB request body. Send this or workflow, not both. | |
| repo_visibility | No | Visibility of the repository the workflows live in. Only "public" runs the self-hosted-runner rule. | public |