I believe there is some other issue going on here. My boards do not have any USB<->serial interface chips, nor the transistors to tickle EN/reset based on the CTS/RTS signals. Yet I have no trouble working with idf.py commands (app-flash, flash, erase, monitor, etc.) without needing any other command line options.I know exactly what the problem is. Dev boards include a little usb to uart chip that drives the boot and EN pins using its RTS and CTS outputs. This configuration is known as "default_reset" in the toolchain, and as the name suggests, all the command lines generated by the toolchain include "--before default_resest" to reset the board and kick it into the bootloader. The USB / JTAG peripheral is also capable of generating the correct reset behavior but only when "--before usb_reset" is used on the CLI. I cant figure out how the toolchain configures this and I have spent hours trying. I am guessing its just hardcoded someplace.
So there isn't a requirement for the CTS/RTS supporting hardware, nor for additional options to idf.py.