interactive_buttons — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited interactive_buttons (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.
STOP. READ THIS ENTIRE FILE BEFORE CREATING ANY WIDGET.
Copy this EXACTLY. Do not deviate.
{
"html": "<div id=\"counter\" style=\"font-size:48px;text-align:center;padding:50px\">0</div>",
"title": "Counter",
"height": 400,
"toolbars": [{
"position": "top",
"items": [
{"type": "button", "label": "+1", "event": "counter:increment", "variant": "primary"},
{"type": "button", "label": "-1", "event": "counter:decrement", "variant": "neutral"},
{"type": "button", "label": "Reset", "event": "counter:reset", "variant": "danger"}
]
}]
}THAT'S IT. No callbacks needed. Buttons work automatically.
The event name counter:increment is parsed as:
counter → the HTML element id to updateincrement → the action to performWhen you click "+1", PyWry:
id="counter"| Event Pattern | What It Does |
|---|---|
myId:increment | Adds 1 to element's text |
myId:decrement | Subtracts 1 from element's text |
myId:reset | Sets element's text to 0 |
myId:toggle | Toggles between true/false |
create_widget(
html='<div id="status" style="font-size:24px;text-align:center">false</div>',
toolbars=[{
"position": "top",
"items": [
{"type": "button", "label": "Toggle Status", "event": "status:toggle"}
]
}]
)create_widget(
html='''
<div style="display:flex;justify-content:space-around;padding:20px">
<div>Home: <span id="home" style="font-size:48px">0</span></div>
<div>Away: <span id="away" style="font-size:48px">0</span></div>
</div>
''',
toolbars=[{
"position": "top",
"items": [
{"type": "button", "label": "Home +1", "event": "home:increment"},
{"type": "button", "label": "Away +1", "event": "away:increment"},
{"type": "button", "label": "Reset All", "event": "home:reset"},
]
}]
)increment, decrement, reset, toggle❌ Wrong: event: "increment" (no target id) ❌ Wrong: event: "counter-increment" (hyphen instead of colon) ❌ Wrong: HTML has id="Counter" but event is counter:increment (case mismatch)
✅ Correct: event: "counter:increment" with id="counter" in HTML
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.