# External Program Action

External Program actions allow you to launch a program on your computer. You specify the path to the program you wish to run and any arguments to pass in to the program when it is launched (Typically leave this blank unless you need to specify some set of arguments).

The following options can be enabled when executing a program:

- **Show Window:** Shows the visual window of the program
- **Shell Execute:** Whether to use the Windows shell when running the executable
- **Wait Until Complete:** Waits until the program has finished executing
- **Save Output:** Stores any text output from the program into the following [Special Identifier](/docs/reference/special-identifiers): `$externalprogramresult`. Save Output requires Wait Until Complete, since there is nothing to capture otherwise.
- **Timeout (Secs):** How long Wait Until Complete waits before giving up on the program and letting the rest of the command carry on. This also requires Wait Until Complete, since there is nothing to time out otherwise.

Both the program's standard output and its error output are captured, and both are read as UTF-8, so accented and non-English characters come through as the program wrote them. The action waits for everything the program buffered before filling in `$externalprogramresult`, so the tail of a long output is not lost when the program exits.

## Timeouts

The timeout stops a program that never exits from holding a command open forever. When it is reached, the wait gives up and the rest of the command runs.

The program itself is left running rather than being closed, so a TTS engine or a voice control app is not cut off mid-sentence. Whatever it printed before the wait gave up is still saved to `$externalprogramresult`, so a partial result is available instead of nothing.

Stopping the command, or an Exit Command action running elsewhere, ends the wait immediately rather than leaving it to run out the timeout.

New actions default to 30 seconds. Actions saved before this option existed also use 30 seconds, and the editor shows that rather than a blank or a zero.
