#27 refactor: split ExecTask into separate plugin