Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
日本語の概要は準備中です。原文の説明を表示しています。
Use after the first trace of a diff and before the verdict - pick the attack-class skills each touched surface needs, give every risky surface a disposition, ask the coverage-critic questions (parallel paths, lifecycle modes, handoffs, second-order use), search variants of every HIGH/CRITICAL root cause, and run the literal obvious-things sweep
インストールする前に、エージェントに与えられる指示の中身を確認できます。
A diff review fails quietly in two ways: a risky surface nobody looked at gets approved, and one hole is reported while its twin three files over ships. Cloudflare's audit harness measured that a single pass finds roughly half of what repeated passes find. One review run cannot repeat itself, but it can do what that harness's coverage critic does: list what the diff touched, mark what was actually checked, and go back for the gaps before deciding.
Core principle: an approval claims that every risky surface in the diff was checked. Make that claim checkable — to yourself first.
After risk-tiering (security-diff-review-method), map each HIGH- or MEDIUM-tier file to the skills it needs and load them. A surface with no skill selected is a gap, not a pass.
| The diff touches | Load |
|---|---|
| a route, resolver, RPC, job or query that takes an id, a role, a request binding or a tenant | access-control-and-idor, data-isolation-and-lifecycle |
| a workflow with states, money, credits, quotas, approvals, invites, counters or expiry | business-logic-and-state-abuse |
| login, sessions, JWT, OAuth/OIDC, SAML, MFA, passkeys, account linking, API keys | authn-sessions-and-tokens |
Host/X-Forwarded-* use, trusted-proxy settings, cache rules, CDN or reverse-proxy config, headers built from input | http-cache-and-proxy-trust |
| gRPC, GraphQL, protobuf, queue producers or consumers, pub/sub, inbound webhooks, event handlers | rpc-messaging-and-webhooks |
| query, shell/argv, template, eval, XML or deserializer built from input | injection-and-dangerous-sinks |
| file paths, uploads, archives, temp files | path-traversal-and-file-handling |
| a server-side fetch of a URL input can influence | ssrf-and-url-allowlists |
| credentials, logging, randomness, encryption, TLS | secrets-and-crypto-review |
| HTML rendering, links, CORS, CSP, postMessage, WebSockets, service workers, browser storage | web-frontend-security |
| a loopback server, Unix socket, named pipe, privileged helper, Electron/Tauri main process, URL scheme handler | desktop-and-local-ipc-security |
| iOS, Android, Flutter | mobile-app-security |
C, C++, Objective-C, Rust unsafe, cgo, JNI, ctypes, Swift unsafe pointers, native plugins | native-memory-safety-and-ffi |
| a model call, tool, MCP config, prompt, agent memory or agent settings | llm-and-agent-security |
manifests, lockfiles, uses:, FROM, vendored code, updaters, signing | supply-chain-and-dependency-review |
| workflows, Dockerfiles, Terraform, Kubernetes, Helm, cloud IAM | ci-cd-and-iac-security |
| Go, Java/Kotlin, TypeScript/Node, Python, game code | the matching *-security-pitfalls skill |
One path often crosses several domains: a webhook consumer that writes a tenant record and enqueues a refund job is rpc-messaging-and-webhooks, data-isolation-and-lifecycle and business-logic-and-state-abuse at once. Keep their checks together on that path.
Keep a private list — it is not the comment — with one line per HIGH-tier file or new entry point:
surface — invariant checked — disposition (file:line that settles it)
A surface with no disposition means the review is not finished. "Looked fine" is not a disposition: name the line that makes it fine.
Ask them once the first full trace is done, against the list:
v1, GraphQL beside REST, a gRPC stream beside the unary call, a WebSocket message, a background job, a retry handler? Does each path carry the same check? The effective control is the weakest path, not the most polished one.Every "yes" goes back to tracing. The pass ends when a round adds nothing new; whatever is still open goes into the comment's Reviewed: line as a named coverage limit.
A HIGH or CRITICAL candidate is a pattern. Before writing it up, look for the pattern's siblings:
grep_code "repo.Get(ctx", grep_code "shell=True", grep_code "trust proxy".orgId, every cache key built without the tenant, every webhook that parses before it verifies.Search the diff first, then the files the diff touches. One root cause that one fix closes is one SEC-n listing every location; independent missing controls are separate SEC-n, each with its own trace. Establish each variant's conditions and impact on its own — the sibling may be guarded where the original was not. A pre-existing sibling in code the diff did not touch is not raised; when the same fix would naturally cover it, say so in one clause of the fix line.
Literal, not creative — run it on every review, because everyone assumes someone else did:
git diff "$base" | grep -E '^\+' | grep -iE 'passw(or)?d|secret|api[_-]?key|token|bearer|BEGIN [A-Z ]*PRIVATE KEY|AKIA[0-9A-Z]{16}|sk_live_|xox[abp]-|gh[pousr]_'
git diff "$base" | grep -E '^\+' | grep -iE 'TODO|FIXME|HACK|XXX' | grep -iE 'auth|secur|valid|permi|csrf|saniti|escape|verif|tenant'
git diff --name-only "$base" | grep -iE '(^|/)\.env|credential|\.pem$|\.key$|\.p12$|\.pfx$|id_rsa|\.npmrc$|\.pypirc$|kubeconfig'
Then read for:
/debug, /admin, /internal, /metrics, /env, /actuator, /pprof route — which middleware covers it?.gitignore or .dockerignore lines removed that kept secrets or local config out;eval, exec, new Function, vm, dynamic import() fed by input; CORS reflecting the origin with credentials; error responses carrying stack traces, SQL or internal paths.Every hit is a candidate, not a finding. A cookie without HttpOnly that holds no credential, or a TODO: add auth on a route the group middleware already guards, is dropped at the false-positive gate.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
日本語の概要は準備中です。原文の説明を表示しています。
Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping
日本語の概要は準備中です。原文の説明を表示しています。
Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal
日本語の概要は準備中です。原文の説明を表示しています。
Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task
日本語の概要は準備中です。原文の説明を表示しています。
How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.
日本語の概要は準備中です。原文の説明を表示しています。
Use when deciding whether a request needs an analiz task before implementation - the conditions that require the architect's analysis versus going straight to implementation
日本語の概要は準備中です。原文の説明を表示しています。