commands framework