CLI app framework