- arg parsing & libs for this - switches aliases etc. - designing to work with pipes - sub-commands - packaging for global install - output stuff: colors, tables, progress bars - taking input