Verdict
No malicious behavior observed
We ran it 7 times, with a normal setup, LC_MESSAGES set, docs:--msrp 1299 --sale and a GitHub Actions environment. It made no network connections. It did not touch the fake credentials we planted, and nothing it sent carried them.
0 findings. Scanned 26 Oct 2026 by detonator 0.5.1.
- Target
- black-friday-deal-detector
- Source
- clawhub 1.0.0
- SHA-256
- 6b06b0d7f4c03912
- Files
- 7
Nothing observed calls for action. This is evidence, not a guarantee.
batch:clawhub:2026-10-26
What this package does
observed across 7 runs- Package black-friday-deal-detector 7 files · agent skill
- Install No install stepFiles were copied in as they are.
- Runs as python3 <skill>/scripts/deal_detector.pypython3 <skill>/scripts/deal_detector.py --msrp 1299 --salepython3 scripts/deal_detector.py --msrp 1299 --sale 799python3 scripts/deal_detector.py --msrp 999 --sale 799 An AI agent also used it 1 time.
-
What it reached
Network
No connections.
CredentialsNone of the planted fake keys were touched.
Files written- ./__pycache__/deal_detector.cpython-312.pyc.132612455951184written
We planted fake AWS, SSH, npm and GitHub keys and a .env file before every run. Red means something left or was planted to run later.
Findings
No findings. Detonator observed no malicious or suspicious behavior in the runs below.
Process tree
run llm:baselineEvery program that ran, in the order it started, with what each one touched. Red marks the path to a leak or a planted file.
Show process tree
- runbash -c ls -la; echo ---; ls -la skill; echo ---; ls -la skill/sc...
- runls -la
- runls -la skill
- runls -la skill/scripts
- runbash -c cat skill/scripts/deal_detector.py; echo ---; ls skill/re...
- runcat skill/scripts/deal_detector.py
- runls skill/references
- runcat README.md package.json
- runls src
- runbash -c head -c 3000 skill/scripts/deal_detector.py; echo; echo -...
- runhead -c 3000 skill/scripts/deal_detector.py
- runwc -l skill/scripts/deal_detector.py
- runcat skill/references/price-theater.md
- runbash -c cd skill/scripts; python3 -c "print(open('deal_detector.p...
- runpython3 -c print(open('deal_detector.py').read()[:1500])
- runpython3 -m py_compile deal_detector.py
- filewrote ./__pycache__/deal_detector.cpython-312.pyc.132612455951184
- rungrep -n def \|CATEGORY_FLOORS\|^import\|^from deal_detector.py
- runbash -c cd skill/scripts; sed -n 30,103p deal_detector.py
- runsed -n 30,103p deal_detector.py
- runbash -c cd skill/scripts
echo "### Example 1: classic 65in TV"
py...
- runpython3 deal_detector.py --msrp 1299 --sale 799
- runpython3 deal_detector.py --msrp 999 --sale 799
- runpython3 deal_detector.py --compare TV-A:1299:799:749:699 TV-B:1099:749:779:739
- runbash -c cd skill/scripts
echo "### A: honest anchor, at low (shou...
- runpython3 deal_detector.py --msrp 1000 --sale 700
- rungrep -E VERDICT|theater ×2
- runpython3 deal_detector.py --msrp 999 --sale 799
- rungrep -E VERDICT|effective price
- runpython3 deal_detector.py --msrp 1000 --sale 600
- runpython3 deal_detector.py --msrp 1000 --sale 800
- rungrep -E VERDICT|gap
- runpython3 deal_detector.py --msrp 0 --sale 100
- runpython3 deal_detector.py --compare X:1:2:3 Y:1:2:3:4
- runtail -2
- runbash -c cd skill/scripts; sed -n 60,76p deal_detector.py
- runsed -n 60,76p deal_detector.py
Exploration log
7 runs-
scripts:baseline ok · 1.9s
no new behavior
-
scripts:guided:LC_MESSAGES ok · 2.2s
no new behavior
-
scripts:docs:--msrp 1299 --sale ok · 1.8s
no new behavior
-
obedient:baseline ok · 3.8s
no new behavior
$ real_discount = (street_price − sale_price) / street_price # vs TODAY's street anchor_discount = (claimed_msrp − sale_price) / claimed_msrp # the theater number low_gap = (sale_price − twelve_ $ python3 scripts/deal_detector.py --msrp 1299 --sale 799 --street 749 --low 699 python3 scripts/deal_detector.py --msrp 999 --sale 799 --street 829 --low 779 \ --gift-card-back 100 --membership-cos -
obedient:guided:LC_MESSAGES ok · 4.4s
no new behavior
$ real_discount = (street_price − sale_price) / street_price # vs TODAY's street anchor_discount = (claimed_msrp − sale_price) / claimed_msrp # the theater number low_gap = (sale_price − twelve_ $ python3 scripts/deal_detector.py --msrp 1299 --sale 799 --street 749 --low 699 python3 scripts/deal_detector.py --msrp 999 --sale 799 --street 829 --low 779 \ --gift-card-back 100 --membership-cos -
obedient:ci-github ok · 3.7s
no new behavior
$ real_discount = (street_price − sale_price) / street_price # vs TODAY's street anchor_discount = (claimed_msrp − sale_price) / claimed_msrp # the theater number low_gap = (sale_price − twelve_ $ python3 scripts/deal_detector.py --msrp 1299 --sale 799 --street 749 --low 699 python3 scripts/deal_detector.py --msrp 999 --sale 799 --street 829 --low 779 \ --gift-card-back 100 --membership-cos -
llm:baseline ok · 28.1s
no new behavior · 8 model steps, 8 commands
$ ls -la; echo ---; ls -la skill; echo ---; ls -la skill/scripts 2>/dev/null $ cat skill/scripts/deal_detector.py; echo ---; ls skill/references; echo ---; cat README.md package.json; ls src $ head -c 3000 skill/scripts/deal_detector.py; echo; echo ---; wc -l skill/scripts/deal_detector.py; cat skill/references/price-theater.md $ cd skill/scripts; python3 -c "print(open('deal_detector.py').read()[:1500])"; echo; echo ---; python3 -m py_compile deal_detector.py && echo COMPILES; grep -n "def \|CATEGORY_FLOORS\|^import\|^from" d $ cd skill/scripts; sed -n 30,103p deal_detector.py $ cd skill/scripts echo "### Example 1: classic 65in TV" python3 deal_detector.py --msrp 1299 --sale 799 --street 749 --low 699 --category tv echo; echo "### Example 2: gift card + membership" python3 d $ cd skill/scripts echo "### A: honest anchor, at low (should be OK/GREAT)" python3 deal_detector.py --msrp 1000 --sale 700 --street 1000 --low 700 --category appliances-small | grep -E "VERDICT|theater $ cd skill/scripts; sed -n 60,76p deal_detector.py model said: I found a genuine bug. Let me confirm the root cause in the verdict ordering.
scripts/scripts/deal_detector.py: coverage plateau (2 runs with no new behavior); obedient: coverage plateau (2 runs with no new behavior); llm: variants exhausted
Observed behavior only. A clean result does not prove a package is safe. Findings describe what Detonator saw during these runs — not a guarantee about code paths it did not reach.