also may be nice to pull some of the communication logic out instead of embedding everything in the forking task runner, I feel for maintainability it may be hard to figure out what is going on