用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/tomevault-io/skills-registry --skill security-review-protocol命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
| Use when this capability is needed.
> Use when this capability is needed.
Review architecture and API design for the vfs-s3 project. Use when the user mentions @architect, asks to review an issue's design, discuss module boundaries, API shape, or architectural decisions for vfs-s3. Also trigger when the user wants to create an ADR (Architecture Decision Record) or evaluate a technical approach for the project. Intended for dispatch from Codex automation or Claude routines; GitHub trigger phrase: @vfs-s3-bot please prepare design doc Use when this capability is needed.
基于 SOC 职业分类
正在显示 SKILL.md
| name | security-review-protocol |
| description | > Use when this capability is needed. |
Core business logic for the dual-verification security review workflow: cross-validation, conflict resolution, and confidence scoring.
Before comparing, normalize findings from both sources into a common format:
{
id: "<unique-id>",
source: "semgrep" | "codex",
type: "<vulnerability-type>", // e.g., "sql-injection", "xss", "hardcoded-secret"
file: "<file-path>",
line: <line-number>,
severity: "CRITICAL" | "HIGH" | "MEDIUM" | "LOW",
description: "<what the issue is>",
evidence: "<specific code or pattern that triggered this>",
trigger: "<how it can be exploited>",
fix: "<remediation suggestion>"
}
Two findings from different sources are considered matching when:
If criteria 1+3 match but lines differ by >5, flag as partial match — may be the same root cause manifesting at different points.
| Semgrep Found | Codex Found | Classification | Action |
|---|---|---|---|
| Yes | Yes | Confirmed | Report with high confidence |
| Yes | No | Baseline-only | Report — tool findings are reproducible |
| No | Yes | Codex-only | Verify with targeted Grep/AST before reporting |
| No | No | (not applicable) | — |
Type A: Codex says safe, Semgrep says vulnerable (most dangerous)
Conservative stance: treat as vulnerable until proven otherwise.
Resolution steps:
Type B: Codex says vulnerable, Semgrep says nothing (potential false positive)
Moderate stance: verify before reporting.
Resolution steps:
get_abstract_syntax_tree to verify the code structureType C: Both found it but disagree on severity or fix
Resolution steps:
When conflicts arise, use these targeted verification methods:
| Technique | Tool | When to Use |
|---|---|---|
| Targeted grep | Grep | Verify specific code patterns exist |
| AST analysis | get_abstract_syntax_tree | Verify code structure matches vulnerability pattern |
| Custom Semgrep rule | semgrep_scan_with_custom_rule | Test a specific hypothesis about a vulnerability |
| Upstream trace | Read + Grep | Check if input is sanitized before reaching the flagged point |
| Codex follow-up | codex-reply | Ask Codex to explain or defend its finding with evidence |
| Source | Weight | Rationale |
|---|---|---|
| Semgrep finding | 60% | Deterministic, reproducible, based on established rules |
| Codex finding | 40% | Reasoning-based, can catch logic flaws that rules miss |
confidence = base_score + modifiers
Where:
base_score:
- Both agree: max(60, 40) + 20 = 80%
- Semgrep only: 60%
- Codex only: 40%
modifiers:
- Deep verification confirms: +15%
- Semgrep rule has CWE reference: +5%
- Codex provided exploit scenario: +5%
- Historical finding exists (platform): +10%
- Conflict unresolved: cap at 50%
cap: 95% (never claim absolute certainty)
Boundary: This section is ONLY executed via
/security:fixin the main conversation. Thesecurity-reviewersubagent and all gate hooks MUST stop at Section 3. Review (Steps 1-3) is read-only; remediation (Step 4) requires explicit user opt-in.
After findings are confirmed (confidence >= 50%), enter the fix-verify loop to remediate and validate fixes.
Sections 1-3 and Section 4 operate under fundamentally different structural guarantees.
The 60/40 diagnostic weights do NOT apply here. The constraints below exist to compensate for this single-proposer asymmetry — they are not bureaucracy.
Before asking Codex for a fix strategy, check if the finding matches a canonical fix pattern:
| CWE Category | Canonical Fix | Do NOT |
|---|---|---|
| SQL Injection (CWE-89) | Parameterized queries / prepared statements | String escaping, concat-based sanitization |
| XSS (CWE-79) | Contextual output encoding / safe sink APIs | Manual regex stripping |
| Hardcoded Secret (CWE-798) | Remove + rotate + env var / secret manager | Obfuscation, base64 encoding |
| Path Traversal (CWE-22) | Allowlist + resolve-then-check canonical path | Blacklist patterns like ../ |
If match found:
mcp__codex__codex) with the code + applied canonical fix for thread continuity — this ensures codex-reply is available for 4.3 verificationIf no match → proceed to 4.2.
Rationale: For well-understood vulnerability classes, letting the model "be creative" only increases drift probability. The prediction block is not "for Codex" — it's the falsifiable target that makes verification meaningful.
For same-thread refinement, use codex-reply with the existing threadId to request a fix. If 4.4 requires a fresh strategy reset, open a new read-only mcp__codex__codex session using the fresh fix-strategy template in reference/mcp-tools.md. Two hard constraints apply either way:
Constraint 1 — Single Root-Cause Hypothesis
Each round targets exactly ONE root-cause cluster. A single root cause may manifest across multiple call sites — fixing them together in one round is correct.
What's prohibited: mixing unrelated fix directions in one round (e.g., fixing SQL injection AND XSS simultaneously). This isolates cause-effect so that Semgrep evidence is interpretable.
Constraint 2 — Prediction Block (MANDATORY before applying any fix)
Before applying the fix, write down the following prediction. This applies to BOTH the canonical path (4.1) and the Codex path (4.2):
prediction:
root_cause_hypothesis: "<what you believe is the underlying cause>"
minimal_change_scope: "<which files:lines will be modified>"
expected_rules_to_clear: ["<semgrep-rule-id-1>", ...]
expected_grep_patterns_to_disappear: ["<pattern>", ...]
possible_new_findings: ["<rule-id or 'none'>"]
disconfirming_evidence: "<what result would prove this hypothesis WRONG>"
rollback_trigger: "<specific condition that means revert immediately>"
If the prediction cannot be stated concretely, the fix is too vague to apply. Stop and refine the hypothesis first.
For MCP prompt templates, see reference/mcp-tools.md.
After applying the fix:
expected_rules_to_clear actually clear? (Y/N per rule)expected_grep_patterns_to_disappear actually disappear? (Y/N per pattern)possible_new_findings? Expected or unexpected?disconfirming_evidence condition trigger?Key framing: Semgrep checks "does the violation pattern still match?" — NOT "is the code now secure."
Cap at 3 rounds. Each round escalates the strategy diversity requirement:
NOT a blanket "any new finding → revert." Apply tiered judgment:
| Condition | Action | Reason |
|---|---|---|
New HIGH/CRITICAL finding not in possible_new_findings | Immediate rollback | Unacceptable regression |
| Original rule still fires AND zero predictions matched | Rollback | Hypothesis was entirely wrong, no value in keeping the change |
| Rule transferred (old cleared, new appeared at same severity) | Mark as hypothesis failure, keep change, investigate in next round | May be progress toward correct direction |
| Low-severity secondary signal appeared | Note in ledger, continue | Semgrep is not a truth oracle; minor noise is expected |
Each round's hypothesis, prediction, actual output, and decision MUST be persisted — not just held in transient context.
Location: Append as ## Fix-Verify Hypothesis Log as the final section of the security report, after ## Supply Chain.
Format per round:
### Round N — [CONFIRMED | PARTIALLY CONFIRMED | FALSIFIED | ROLLBACK]
- **Hypothesis**: ...
- **Prediction**: [paste prediction block]
- **Actual Semgrep output**: [rule IDs fired / cleared]
- **Prediction match**: [point-by-point comparison]
- **Decision**: [applied / rolled back / escalated]
- **Evidence carried forward**: [what the next round should know]
Purpose: prevent the agent from repeating the same class of mistake, and give the human reviewer a diagnostic trail if escalation occurs.
| Pitfall | Example | Prevention |
|---|---|---|
| Fix introduces new vuln | Escaping SQL by string concat instead of parameterized query | Semgrep re-scan catches pattern |
| Fix is cosmetic only | Renaming a variable but not fixing the logic | Codex re-verify catches intent mismatch |
bare except: catches SystemExit | sys.exit() inside try/except: block | Check that except clauses use except Exception: not except: |
| Fix for wrong version | Checking latest when user specified @^1.0.0 | Always resolve to exact version before checking |
| Partial fix | Fixed one call site but same pattern exists elsewhere | Grep for the pattern project-wide after fixing |
| Hypothesis drift | Round 1 targets SQL injection, Round 2 silently shifts to input validation | Prediction block comparison catches scope change |
semgrep_scan requires absolute paths — relative paths silently return no resultsread-only sandbox prevents it from running verification scripts — you must do that yourselfcodex-reply with that threadId. Exception: when 4.4 requires a strategy reset, start a fresh session and save the new threadIdexcept: catching SystemExit, pipefail interactions, and shell quoting edge casesgrep | head under pipefail) — Semgrep is better for the latterSource: dianyike/claude-code-insights — distributed by TomeVault.