Raise AssemblingError instead of RuntimeError
Refactor add_commands(), change its signature, add add_subcommands()