Command framework