CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

zigbee-touchlink

Touchlink commissioning abuse on Zigbee Light Link (ZLL) devices using the well-known ZLL transport key, ZCL command injection (toggle/move/step), network key extraction, and factory reset via touchlink. Toolchain covers KillerBee, zbstumbler, zbreplay, and Sonoff Zigbee 3.0 Dongle E running Wireshark live capture.

Quality

72%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Critical

Do not install without reviewing

Fix and improve this skill with Tessl

tessl review fix ./packages/decepticon/decepticon/skills/standard/iot/zigbee-touchlink/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

57%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A well-structured, appropriately terse attack playbook with real tool commands, undermined by non-executable code gaps (most critically the unsent Phase 4 packet), a missing validation checkpoint before the destructive factory reset, and a monolithic single-file layout that should offload reference material to bundle files.

Suggestions

Add a validation checkpoint before the destructive factory reset: require an explicit touchlink Scan Response from the target (and confirm the reset via zbfind/zbdump capture) before executing the reset, with an abort path if the device does not respond.

Complete the Phase 4 injection code with an actual send call (e.g. a raw 802.15.4 transmit via KillerBee kb.inject() or a working scapy-radio send) and make the Phase 3 listener parse Cluster 0x1000 / Command 0x01 instead of just printing frame hex.

Move the ZCL payload table, key-derivation Python, and Wireshark decryption steps into references/ files (e.g. references/zcl-payloads.md, references/key-derivation.md) and keep SKILL.md as a phase overview with one-level-deep pointers.

DimensionReasoningScore

Conciseness

The body is code-first and lean across five phases with minimal concept explanation Claude already knows; the short intro blockquote is attack context, not padding. Minor instances of over-explanation (Wireshark menu path, discursive OPSEC notes) keep it just below the 'every token earns its place' anchor — not 3, since no section is genuinely padded or redundant.

4 / 5

Actionability

Concrete commands exist (zbstumbler, zbdump, zbreplay, zbfind, zbid) but key pieces are incomplete: the Phase 4 Scapy packet is constructed yet never sent ('# send via scapy raw socket' with no send call), the Phase 3 listener only prints frames without parsing the ZLL fields it claims to check, and 'zbtouchlink' is name-dropped without a usable invocation. Matches 'some concrete guidance but incomplete; pseudocode instead of executable code' rather than 4, where code would be mostly executable.

3 / 5

Workflow Clarity

Phases 1-5 are clearly sequenced with per-phase commands, but the destructive factory-reset path has no validation or verification checkpoint — no confirmation that a device responded to the touchlink scan before resetting, and no post-reset verification. The rubric's destructive-operation cap ('missing validation... should cap workflow clarity at 3') takes precedence over the otherwise good sequencing, so 4 is not reachable.

3 / 5

Progressive Disclosure

The ~210-line single file inlines content that belongs in reference files: the ZCL payload table, the AES key-derivation code, and full phase scripts. Section headers are clear, but there are no bundle files or one-level-deep references at all, and the skill exceeds the under-50-line threshold that would excuse that. Fits 'content that should be separate is inline' rather than 4, where most content would be appropriately placed across files.

3 / 5

Total

13

/

20

Passed

Description

75%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A highly specific, third-person description with strong trigger terms and a distinct niche, weakened only by the complete absence of a 'when to use' clause. Adding an explicit trigger sentence would raise completeness to the top band.

Suggestions

Append a 'Use when...' clause, e.g. 'Use when auditing Zigbee/ZLL smart lighting, attacking Touchlink commissioning, or extracting Zigbee network keys.'

Fold a few natural user phrases from metadata.when_to_use into the description itself (e.g. 'smart bulb', 'Philips Hue', 'IKEA Tradfri', 'IEEE 802.15.4') so the triggers work without relying on metadata.

Trim the toolchain list slightly ('running Wireshark live capture' is redundant detail) to keep the description lean once the trigger clause is added.

DimensionReasoningScore

Specificity

The description lists multiple specific concrete actions — 'Touchlink commissioning abuse', 'ZCL command injection (toggle/move/step)', 'network key extraction', 'factory reset via touchlink' — and names the full toolchain (KillerBee, zbstumbler, zbreplay, Sonoff dongle, Wireshark), matching the comprehensive-coverage anchor. It exceeds level 4 because both the actions and the tooling are enumerated without vague filler.

5 / 5

Completeness

The 'what' is clearly and concretely answered (commissioning abuse, ZCL injection, key extraction, factory reset, toolchain), but there is no 'Use when...' clause or equivalent explicit trigger guidance, which caps completeness at 3 per the judging guidelines. Not 4 because the 'when' is entirely absent rather than merely under-specified.

3 / 5

Trigger Term Quality

Good natural keyword coverage: 'Zigbee', 'Touchlink', 'ZLL', 'KillerBee', 'factory reset', 'Sonoff Zigbee 3.0 Dongle', 'Wireshark'. A few natural terms a user would say are missing from the description itself ('smart bulb', '802.15.4', 'smart home') — they exist only in metadata.when_to_use, not the description text.

4 / 5

Distinctiveness Conflict Risk

'Touchlink commissioning abuse on Zigbee Light Link (ZLL) devices' carves out a clear niche with distinct triggers (Touchlink, ZLL, KillerBee, zbstumbler); it would not plausibly fire for generic Zigbee or other IoT skills. Matches the minimal-conflict-risk anchor.

5 / 5

Total

17

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

Total

15

/

16

Passed

Repository

PurpleAILAB/Decepticon

Path

packages/decepticon/decepticon/skills/standard/iot/zigbee-touchlink/SKILL.md

Reviewed

Table of Contents

Is this your skill?

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.