example-fork-detection
TEMPLATE — replace with the description of your rule. Should activate on the specific code patterns your fork has. Activate on `<your trigger keywords or…
Meta-skill for managing user-dismissed findings. Before reporting any finding, check it against the project's .rugproof.yml ignore list and inline rugproof-ignore markers. Activate on every audit command.
$ npx -y skills add omermaksutii/RugProof --skill false-positive-feedback-loop --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/false-positive-feedback-loopContext preview
The summary Claude sees to decide when to auto-load this skill.
Meta-skill for managing user-dismissed findings. Before reporting any finding, check it against the project's .rugproof.yml ignore list and inline rugproof-ignore markers. Activate on every audit command.
name: false-positive-feedback-loop description: Meta-skill for managing user-dismissed findings. Before reporting any finding, check it against the project's .rugproof.yml ignore list and inline rugproof-ignore markers. Activate on every audit command.
False positives are the #1 reason audit tools get abandoned. This skill governs the state-persistent mechanism for "user told me this is fine, don't report it again."
ignore:
- id: REENT-001
path: "src/Vault.sol"
line: 142
fingerprint: "sha256:abc..."
reason: "Single trusted caller, reviewed 2025-Q4"
dismissed_at: "2026-05-12"
dismissed_by: "alice@example.com"// rugproof-ignore: REENT-001 — single trusted caller
function trustedOp() external onlyOwner { ... }Effective for next ~5 lines.
# .rugproofignore test/** script/** mocks/**
Skip these paths entirely.
For each candidate finding F:
Compute `sha256(file_path + ":" + line + ":" + vuln_class)`. This is the unique identifier for "this exact issue at this exact location in this code shape."
Scan within 5 lines above F's location for `// rugproof-ignore: <id>`.
If F's file path matches `.rugproofignore` → skip F.
If F survived all checks, include in the report. If it was previously dismissed but is now re-surfaced due to code change, note this:
[REENT-001 | High] Reentrancy in withdraw (re-surfaced) Previously dismissed: 2025-Q3 (by alice@example.com, reason "single trusted caller") Re-surfaced because: code around line 142 changed since dismissal
Every dismissed finding is still queryable via `/report --include-dismissed`. This:
`/audit --no-ignore` ignores the ignore list. Useful for fresh re-audits or external review.
A first-run audit produces 30 findings, of which 5 are real and 25 are false positives. Without a feedback loop, the user dismisses them by *not running the tool again*. With the loop, the user dismisses the 25 with reasons, and the next run produces 5 — *the real ones*. Trust compounds.
Rugproof your code before someone else does. 🌐 Live site: omermaksutii.github.io/RugProof 📦 Latest: v1.0.0 — 45 commands · 23 agents · 45 skills · 13 MCP servers · tested, offline-first, with rule packs, a benchmark, non-EVM coverage, and post-deploy
Repo: omermaksutii/RugProof
TEMPLATE — replace with the description of your rule. Should activate on the specific code patterns your fork has. Activate on `<your trigger keywords or…
Detect unsafe assumptions about Solady's gas-optimized ERC20/ERC2612 permit and DN404 metadata. Solady's ERC20 uses custom storage slots, returns bools via…
Detect front-runnable ownership initialization in Solady Ownable / OwnableRoles. Solady's `_initializeOwner` is a guarded one-time setter (it reverts with…
Detect Solady SafeTransferLib calls that assume the token has code. SafeTransferLib.safeTransfer/safeTransferFrom/safeApprove deliberately skip the EXTCODESIZE…
Detect Uniswap V4 hooks that fail to settle currency deltas with the PoolManager. Every credit/debit a hook creates (BeforeSwapDelta, afterSwap hookDelta,…
Detect Uniswap V4 hooks whose address-encoded permission flags don't match the callbacks the hook actually implements. In V4 the hook's permissions live in the…