It's been a while....
Thanks to everyone that is using the addon, and thank you to everyone that is contributing with issues, ideas, and even a PR!
Just today I had a great time placing my trust in OpenCode, backed by GPT 5.5, and thought I would share the experience... So here is a little success story! 
This might interest you @Hedda...
A Small ZBT-2 Firmware Success Story
The short version: I used OpenCode, backed by GPT 5.5, to help build and flash a self-built firmware image for a Home Assistant Connect ZBT-2.
The slightly longer version is what made it interesting: this was not just “ask AI for a command and paste it into a terminal”. I let LLM-driven workflows handle the full engineering loop: research, source build guidance, tool comparison, firmware validation, flashing, troubleshooting, recovery, and final verification.
What I Was Trying To Do
I wanted to upgrade a Home Assistant Connect ZBT-2 from the HA-offered stable Zigbee NCP firmware:
7.5.1.0
to a self-built firmware image:
9.0.2.0
Another OpenCode/GPT session had already helped drive the firmware build process from source, using the Nabu Casa firmware builder project as the base:
A modified version of that project was used so the build could support newer versions of the tooling and inputs involved in the process. My instruction there was basically: use the newest verifiable SDKs, package versions, and build inputs, then iterate until we have a valid ZBT-2 Zigbee NCP image.
The resulting artifact was:
zbt2_zigbee_ncp_9.0.2.0_zbt2.gbl
Artifact Validation
Before flashing anything, the assistant validated the firmware metadata:
{
"fw_type": "zigbee_ncp",
"fw_variant": "zbt2",
"ezsp_version": "9.0.2.0",
"baudrate": 460800,
"sdk_version": "2025.12.3"
}
That gave us confidence that this was actually a ZBT-2 Zigbee NCP image and that it used the expected ZBT-2 EZSP baudrate.
The version information I could verify from the generated GBL itself was ezsp_version: 9.0.2.0 and sdk_version: 2025.12.3. I am intentionally not listing exact versions for build dependencies that were not embedded in the firmware metadata.
Some additional details from inspecting the GBL:
File size: 250172 bytes
SHA256: 703de6b03166c0eedb0b24b80e129c2e2c6e2e5176dd865a143e51de3f22bc0b
GBL tags: HEADER, APP_INFO, PROGRAM_DATA2, METADATA, END
Program data start: 0x08006000
Program data size: 249940 bytes
Program data end: 0x08043054
Tooling Choice
I also have the Silicon Labs Flasher add-on installed, so the assistant investigated that first.
It found:
Silicon Labs Flasher add-on: 0.5.0
Bundled universal-silabs-flasher: 0.0.37
Manual flasher used: universal-silabs-flasher 1.1.0
The add-on’s bundled flasher did not include the newer documented ZBT-2 --profile zbt2 path. The newer upstream universal-silabs-flasher did, so we chose the newer manual flasher path instead of the add-on.
Flashing
The actual flash used the official ZBT-2 profile:
python -m universal_silabs_flasher \
--device /dev/serial/by-id/<zbt2-device> \
flash \
--profile zbt2 \
--firmware zbt2_zigbee_ncp_9.0.2.0_zbt2.gbl
Before running it, the assistant:
- verified that ZHA was healthy,
- verified the exact serial device,
- verified the firmware metadata and checksum,
- disabled ZHA to release the serial port,
- and only then started the flash.
The flash completed successfully. No physical unplug/replug was required.
The Interesting Recovery Step
After rebooting/re-enabling ZHA, Home Assistant raised this:
Network settings do not match most recent backup
The repair diff showed that only the coordinator IEEE had changed. Accepting the new radio settings would likely have orphaned the existing Zigbee network, so the previous coordinator IEEE needed to be restored.
The built-in ZHA repair flow refused the write because it considered the IEEE rewrite destructive for this firmware. The assistant diagnosed this from the logs, then used the newer flasher directly:
python -m universal_silabs_flasher \
--device /dev/serial/by-id/<zbt2-device> \
--probe-methods ezsp:460800 \
write-ieee \
--ieee <previous-coordinator-ieee> \
--force
After that, ZHA loaded cleanly and the repair issue disappeared.
Final State
ZHA: loaded
Installed firmware: 9.0.2.0
HA-advertised latest firmware: 7.5.1.0
ZHA repair issue: cleared
Physical unplug/replug: not needed
Why I Am Sharing This
The part I found genuinely impressive was not simply that the firmware was flashed. It was that I could trust the assistant to drive the process in a controlled way.
One LLM session iteratively drove a modified NabuCasa/silabs-firmware-builder setup to a completed firmware artifact. Another session then:
- researched the correct flashing strategy,
- compared flasher versions,
- rejected the older add-on path for this specific case,
- validated the firmware metadata,
- controlled the Home Assistant integration state,
- flashed the coordinator,
- diagnosed the post-flash network mismatch,
- recovered the coordinator identity,
- and verified that the system returned to a clean state.
My role in the process was mostly setting the goal, defining the risk boundary, approving the few truly consequential actions, and being available to physically unplug/replug the adapter if needed.
The operational execution was handled by the assistants.
That is the kind of practical, high-trust workflow I hoped tools like this would make possible. 
EDIT:
And, yes.... The firmware works fine! No issues so far at least 