abstract script interface