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
中文简介正在准备中。当前显示原文说明。
安装前可以查看交给 AI 代理的指令内容。
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 the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here
中文简介正在准备中。当前显示原文说明。