← SkillSafe / Hass Bench

Will this automation actually fire?

Paste the automation — the YAML straight out of the automation editor, an entry from automations.yaml, or a script. Everything above the run button happens in your browser: a real YAML reader, forty checks, and a dry run you drive yourself. Nothing is uploaded until you run a lane.

Both examples ship with a saved model reply for every lane, so you can see the whole thing without signing in and without spending a credit.

nothing pasted yet
Drag a .yaml file in, or Read in your browser. Nothing uploads until you run a lane.

What this does, and what it does not

The reader is a real YAML parser written against Home Assistant's own loader, not a keyword search — and the reason it exists rather than a library is one specific behaviour. Home Assistant reads YAML through a PyYAML-derived loader, and PyYAML implements YAML 1.1 scalar resolution. Under those rules the unquoted plain scalar on is the boolean true. So to: on does not test for the string that a switch actually reports; it tests for True, never matches, and the automation silently never runs. Nothing appears in the log, because nothing is wrong with the file. A JavaScript YAML library implementing YAML 1.2 resolves on to the string "on" and would report no problem at all. The same rule turns an unquoted 7:30:00 into the integer 27000, because PyYAML's integer resolver accepts base-60 digits.

The dry run then executes the automation against a world you describe. Actions change that world as they run, so light.turn_on really does set the light to on for every later step, the clock advances through each delay, and a choose takes the branch it would actually take. Templates are evaluated by a small recursive-descent parser over a Jinja subset — states(), is_state(), state_attr(), now(), the common filters, comparisons and boolean operators. There is no eval anywhere in this page and no string is ever executed: a page that ran a pasted template as JavaScript would be indefensible, and the platform's scanner blocks it besides.

What it does not do: it does not connect to your instance, it does not know which entities you really have, and it cannot evaluate a {% %} block, a device or zone trigger, or a filter it has not implemented. Every one of those is listed as not evaluated rather than assumed true, because a simulator that quietly assumes the condition passed produces a confident wrong answer, which is worse than no answer. The model lanes are a review of the text you pasted, not a test against your hardware — the only real proof is reloading it and watching the trace in Home Assistant itself.

Nothing to hand? Load the , a pre-2024 porch light with an unquoted to: on, or the . Then replay a saved model reply for , , or — each one a real reply, replayed from the bundle, with no run and no charge.