design wise, I did wonder about getting rid of the "XArgs" classes and just pass the properties via named parameters to the resource ctors. Separate structs for options is a JS/TS pattern so it makes perfect sense there, but C#/F# you could go either way.
Also when you get to something more complex let me know how the IO type works out. As your using F#, a functional tip IO.SelectMany = monadic bind.