It is possible to setup a circuit that automatically resets and programs the ESP8266 with Arduino. This is a little tricky due to how the ESP8266 is programmed conflicting with the way that the Arduino serial port works. On the official documentation for and Arduino ESP8266 project, they present the following circuit.
This circuit will allow for automatic programming, but, when you open the serial monitor, the board is held in reset mode as the Arduino serial monitor pulls both DTR and RTS low. One option is to use a separate serial monitor that allows for control of the pins, to be used. I have used Real Term before and it works well. It does create a bit of a hassle because you have to be sure to close the serial port before programming, and turn it back on after programming, something the Arduino serial monitor does automatically.
What I do in my own designs, is use a variation of the Node MCU reset circuit as shown below.
I have used this design with a lot of success in many of my projects. It allows for automatic programming and using the serial port in Arduino. The only thing you have to be cautious with is to be sure to not add an additional pull up to GPIO0 and the reset pins, as this circuit has the required pull ups. If you put a higher value pull up, it will not work reliably. I found this out the hard way. In my own designs I use a 4 resistor network resistor and the MMDT3904 dual transistor. This makes it so I only need 2 components for the entire circuit.
One more note, when using this circuit, be sure to select the nodemcu reset from the Arduino board menu.
I am currently experimenting with some other ideas to further simplify the circuit and I will post an update if, and when, I figure something easier out.