Thanks for citing mow.cli [1] and glad you're liking it!
And you are spot-on regarding closures: it was a design choice made expressly for the purpose of being able to:
- scope command specific flag and args, instead of having one giant catch-all context map
- declare real and typed Go variables instead of something like context.String("--option")
- use the same pattern as the flag std package (flag.Bool, etc.) which I liked a lot
Disclaimer: I am the author of mow.cli