add command args parsing and subcommand framework