fix: skip clone if destination exists
new: allow out-of-tree location & building