prompt-injection-tester — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited prompt-injection-tester (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A defensive red-team harness for evaluating the prompt-injection resistance of LLM applications you own or are authorized to test. It ships a library of well-documented public attack techniques and a canary-based detection engine that decides whether each attack succeeded — then scores overall resilience.
⚠️ Use only against systems you own or have permission to test. The payloads are public hardening techniques, intended to strengthen guardrails.
instruction-override · system-prompt-leak · role-play (DAN-style) · delimiter-escape · encoding (base64/leetspeak) · data-exfiltration (indirect injection) · refusal-suppression.
success-marker or leaks the canary; resisted if it refuses.
List the payload library (no model calls):
python skills/prompt-injection-tester/attacker.py --list
python skills/prompt-injection-tester/attacker.py --list --category role-playSee the harness detect a weak vs. a hardened model:
python skills/prompt-injection-tester/attacker.py --demo # weak model
python skills/prompt-injection-tester/attacker.py --demo --hardened # safe model
python skills/prompt-injection-tester/attacker.py --demo --jsonWrap the user's backend in a model(system_prompt, user_prompt) -> str callable and run the suite. Example skeleton the user can adapt:
import sys
sys.path.insert(0, "skills/prompt-injection-tester")
import attacker
def model(system_prompt, user_prompt):
# call the user's real API/app here and return the text response
return my_llm_app(system=system_prompt, user=user_prompt)
results = attacker.run_suite(model)
print(attacker.summarize(results))Then:
failed_payload.e.g. stronger system-prompt instructions, input/output canary filtering, privilege separation for tool calls, or a dedicated injection classifier.
If you already captured a model response, score it without any network call:
import attacker
payload = attacker.PAYLOADS[0]
verdict = attacker.score_response(payload, response_text, canary="CANARY-abc")
print(verdict.vulnerable, verdict.reason)Marker/canary detection is a heuristic: a refusal-shaped response that still complies, or a creative leak, may need human review (score_response flags ambiguous cases as "review manually"). Treat the score as a guardrail signal, not a guarantee.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.