diffsec/quokka security review
Multi-agent security code review on pull requests, driven by quokka and OpenCode
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit May 14, 2026
- License
- None
Pinned Snippet
uses: diffsec/quokka-review-action@31c996794ce8a76c1869ee45d1d72c8f6af1b0ac # v0.1.0tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| anthropic-api-key | Shortcut for Anthropic users — sets ANTHROPIC_API_KEY in OpenCode's environment. For non-Anthropic providers (z.ai, OpenAI, Google, etc.) use `opencode-env` instead. | no | "" |
| opencode-env | Multi-line KEY=VALUE pairs exported to OpenCode (e.g. "ZAI_API_KEY=..." for z.ai). Use for any provider besides Anthropic. Values are written to a 0600-mode tmpfile. | no | "" |
| opencode-config | Full opencode.json content — provider definitions and model aliases. Written to the repo root before invoking OpenCode. Use this to plug in custom providers like the Z.AI Coding Plan endpoint without writing opencode.json into your codebase. | no | "" |
| model | Model id in provider/model form (e.g. "anthropic/claude-sonnet-4-5", "zai/glm-5.1"). Empty = OpenCode default. | no | "" |
| github-token | Token used to post PR comments and upload SARIF (typically secrets.GITHUB_TOKEN) | yes | — |
| base-ref | Git ref to diff against. Defaults to the PR target branch (origin/$GITHUB_BASE_REF). | no | "" |
| quokka-repo | GitHub repo (owner/name) to clone quokka from. Override for testing fork branches; defaults to the canonical repo. | no | diffsec/quokka |
| quokka-ref | Git ref (branch or tag) within quokka-repo to build from. SHAs not supported by git clone --branch. | no | main |
| opencode-version | opencode-ai npm package version | no | latest |
| opengrep-version | opengrep release tag to install (e.g. v1.21.0). Use "latest" for the newest release. | no | latest |
| opengrep-rules-ref | git ref of github.com/opengrep/opengrep-rules to clone | no | main |
| opengrep-config | opengrep --config arg: either a subdirectory of opengrep-rules (e.g. python, security) or a registry shorthand (e.g. p/security-audit) | no | security |
| profile | Orchestrator profile: "deep" (recon + analysis + validation + per-finding review, ~20-30min) or "fast" (SAST triage + parallel analysis only, ~3-5min). Default fast for CI advisory. | no | fast |
| runner-mode | 'orchestrator' (default) uses an LLM-orchestrator agent that decides which subagents to dispatch. Works well with strong models (Claude Sonnet/Opus, DeepSeek V4 Pro). 'dispatcher' uses quokka's deterministic dispatcher to spawn subagents in parallel — predictable, model-agnostic, and substantially cheaper for smaller models that struggle with multi-step tool orchestration. | no | orchestrator |
| allow-agent-rules | Permit the orchestrator to author new opengrep rules via `quokka rule add` (v1.1 feature). Default false. New rules apply to NEXT PR, not this one. | no | false |
| allow-agent-exceptions | Permit the orchestrator to author finding suppressions via `quokka exception add` (v1.1 feature). Default false. Suppressions are time-bounded (expires required). | no | false |
| top-n | Maximum findings to inline in the PR comment (full list goes to SARIF) | no | 10 |
| severity-threshold | Only inline findings at or above this severity in the PR comment (critical, high, medium, low, info) | no | high |
| block-on | Fail the check if any finding at or above this severity exists. Empty disables blocking. | no | "" |
| comment-pr | Whether to post the rendered comment to the PR | no | true |
| upload-sarif | Whether to upload SARIF to GitHub code-scanning | no | true |
Outputs
| name | description |
|---|---|
| findings-count | Total findings produced by the review |
| sarif-path | Path to the generated SARIF file |
| comment-path | Path to the generated PR comment markdown |