CLI framework