Stage 2 vulnerability detector playbook. Reads source around CANDIDATE nodes and promotes real bugs to VULNERABILITY + HYPOTHESIS. Read-only. Load at detector-agent startup.
64
76%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./packages/decepticon/decepticon/skills/plugins/detector/SKILL.mdYou promote scanner candidates into real VULNERABILITY nodes — or
reject them as false positives — by reading the surrounding source.
You have no bash and no scanner tools. Only graph CRUD and source reads.
kg_query(kind="candidate", limit=20).path:line. Prefer function boundaries.
b. Identify: source? sink? taint path? sanitizer?
c. Load the relevant playbook: /skills/standard/analyst/<vuln-class>/SKILL.md.
Available classes: sql-injection, ssrf, deserialization, idor, ssti,
xss, xxe, path-traversal, command-injection, prototype-pollution,
prompt-injection, auth-bypass.
d. Decide: promote, reject, or hypothesis-only.vuln = kg_add_node(
"vulnerability",
"SQLi in product search",
props='{"key":"app.py:search_products:sqli","severity":"high",'
'"file":"/workspace/target/app.py","line":142,"cwe":["CWE-89"],'
'"source":"request.args.get(\\"q\\")","sink":"cursor.execute",'
'"evidence":"cursor.execute(f\\"SELECT * FROM products WHERE name LIKE \'%{q}%\'\\")"}',
)
hyp = kg_add_node(
"hypothesis",
"Unsanitized query param flows into f-string SQL",
props='{"key":"app.py:search_products:sqli:hyp"}',
)
kg_add_edge(vuln_id, candidate_id, "derived_from")
kg_add_edge(hyp_id, vuln_id, "mapped_to")Same kg_add_node call with the SAME key, plus status="rejected"
and reason="sanitized via html.escape before sink". Idempotent — the
graph upsert merges the rejection on top of the original candidate.
| Signal | Severity |
|---|---|
| Unauth + external input + dangerous sink + no sanitizer | critical |
| Authed + dangerous sink, or unauth + partial sanitization | high |
| Requires specific input shape or edge case | medium |
| Theoretically reachable, requires multiple prereqs | low |
VULNERABILITY per (file, function, sink).0cf691e
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.