weasel-filter
False positive filtering for Weasel static analysis results. Triggers on weasel filter, weasel triage, or weasel clean report.
What this skill does
# Weasel Filter
Expert in filtering false positives from Weasel static analysis output.
**Context:** This skill filters WEASEL's output. For validating your own attack ideas, see weasel-validate.
## When to Activate
- After running Weasel analysis
- User wants to filter false positives
- User asks to triage/clean the report
- User asks "are these findings real?"
## When NOT to Use
- No Weasel analysis has been run yet (→ weasel-analyzer first)
- User wants to validate their OWN attack idea (→ weasel-validate)
- User wants deeper manual review (→ weasel-analyzer in Review Mode)
## Filtering Strategy
### Priority Triage
```
┌─────────────────────────────────────────┐
│ HIGH SEVERITY (typically 0-5 issues) │
│ → Verify ALL - these are critical │
├─────────────────────────────────────────┤
│ MEDIUM SEVERITY (typically 2-10) │
│ → Verify ALL - these matter │
├─────────────────────────────────────────┤
│ LOW SEVERITY (can be many) │
│ → Sample check if >10 issues │
│ → Check all if ≤10 issues │
├─────────────────────────────────────────┤
│ GAS / NC │
│ → Skip verification (not security) │
└─────────────────────────────────────────┘
```
## Two Workflows
### Workflow A: Filter In-Memory (No Report File)
When user just ran `weasel_analyze` via MCP:
1. Get findings from weasel_analyze output
2. For each High/Medium:
- Read source code at location
- Verify: true positive or false positive?
3. Report confirmed findings only
### Workflow B: Clean Existing Report File (Context-Efficient)
When report file already exists (user ran weasel with output flag):
1. **Don't read the full report** - it's too large
2. Get summary via `weasel_analyze` MCP (small)
3. For each High/Medium finding:
- Read SOURCE CODE (not the report)
- Determine: true or false positive?
4. For false positives:
- Use Edit tool to DELETE that section from report.md
- Find section header (e.g., `## [H-01] Reentrancy...`)
- Delete entire section until next `## [` or end
**Why Workflow B is efficient:**
- Full report stays on disk (never in context)
- Only load: summary (~2KB) + source code
- Edit file directly instead of regenerating
## Verification Process
For each finding to verify:
1. **Check known issues** - Is this documented in README or known-issues.md?
2. **Read the code** - Use Read tool at the reported location
3. **Understand context** - Check surrounding functions, modifiers
4. **Check for guards** - Look for existing protections
5. **Assess exploitability** - Can this actually be exploited?
6. **Verdict** - Confirmed, False Positive, or Known Issue
## Verification Checklists
### Reentrancy
- [ ] Is there an external call?
- [ ] Is state modified AFTER the call?
- [ ] Is there a reentrancy guard?
- [ ] Can the called contract be malicious?
### Access Control
- [ ] Is the function actually privileged?
- [ ] Are there modifier checks?
- [ ] Is the caller validated elsewhere?
### Unchecked Returns
- [ ] Is the return value actually important?
- [ ] Is there error handling elsewhere?
- [ ] Using SafeERC20 or similar?
### Integer Issues
- [ ] Is unchecked{} block used?
- [ ] Is the value user-controlled?
- [ ] Can overflow/underflow cause harm?
## Common False Positive Patterns
### Reentrancy
- Read-only reentrancy (view functions)
- Trusted contract calls (own contracts)
- Already protected by mutex/nonReentrant
### Unchecked Transfer
- Intentional fire-and-forget
- Using SafeERC20
- Return value checked elsewhere
### Access Control
- Internal/private functions (not callable)
- Checked in parent function
- Initializer functions (one-time)
## Output Format
Keep output minimal - one line per finding:
```
Filtered 5 findings → 2 confirmed, 3 false positives
✓ [H-01] Reentrancy in withdraw() - confirmed
✓ [M-03] Access control missing - confirmed
✗ [H-02] Reentrancy in deposit() - has nonReentrant
✗ [M-01] Unchecked return - uses SafeERC20
✗ [M-02] Integer overflow - in unchecked{} intentionally
Removed 3 sections from report.md
```
**No verbose evidence blocks** - user can ask for details on specific findings if needed.
## After Filtering
Ask user:
- "Found X confirmed issues. Want me to write reports for them?"
- "Want me to add PoCs for High severity findings?"
- "Should I explain any of these in more detail?"
## Rationalizations to Reject
| Rationalization | Why It's Wrong |
|-----------------|----------------|
| "This detector usually has false positives" | Check THIS instance. Each case is different. |
| "The code looks safe" | READ the code. Don't judge by appearance. |
| "I'll mark as FP without reading" | ALWAYS read source code before verdict. |
| "SafeERC20 is used, so all transfer issues are FP" | Verify SafeERC20 is actually used at THAT location. |
| "This is a known pattern, must be fine" | Known patterns can still have implementation bugs. |
| "I'll confirm all High severity to be safe" | False positives waste developer time. Verify properly. |
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.