BGE local position not respecting rotation
localPosition is actually the position relative to the objects parent (for the most part, see below).  If the cube has no parent, it will be the same as worldPosition.

To move forward along the local Y axis:

obj.applyMovement((0, 0.1, 0), True)




Irrelevant localPosition quirk

localPosition isn't truly relative to the parent.  It's more like... relative to the parent modified by its world position when initially parented (or something like that).  So if your parent isn't at the origin when hiting control+P, the result might be kind of weird.  Intended behavior?  No idea.