I don't like this.  I don't think there is anything complicated enough to justify a full blown DSL for defining commands; instead, we should just open-code the first few, and then consider some form of code-sharing for common behaviours -- if there are actually any.