I had a play with this stuff a while ago and I killed an Atmega in the process - I suspect by burning a binary for a different chip into it. I think that was with avrdude - a combination of winging it cluelessly and the Atmega board I was using not exposing the necessary pins to force burn a new binary. The one I use in this project was chosen specifically because it had the programming pins available.
Normally I shy away from python/node/perl/intercal tooling much as you describe, but it was very painless. I was mostly expecting to document "giving up and figuring out how I should actually be using avrdude in preference to understanding someone else's language's error and/or config messages" but tripped over a stair that wasn't there when it just worked from the outset.
Discounting the bit where I tried to use a borked USB cable that is...
Normally I shy away from python/node/perl/intercal tooling much as you describe, but it was very painless. I was mostly expecting to document "giving up and figuring out how I should actually be using avrdude in preference to understanding someone else's language's error and/or config messages" but tripped over a stair that wasn't there when it just worked from the outset.
Discounting the bit where I tried to use a borked USB cable that is...