How does CharacterController.Move() work?

This code doesn’t teleport the character controller to the controllers position, instead it teleports it somewhere completely differently. I don’t understand why.

using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;

public class AntiHandNoClip : MonoBehaviour
{
    public CharacterController hand;

    private XRController controller;

    private void Start()
    {
        controller = transform.parent.parent.GetComponent<XRController>();

        transform.parent = null; // unparent from the controller
    }

    private void LateUpdate()
    {
        hand.Move(controller.transform.position);
    }
}

The transforms aren’t messed up since this script is on the parent of the hand mesh which is just an empty game object. I seriously am so confused about why this doesn’t work. Especially because when I move the right controller the hand seems to update at a completely random time, how is that even possible?

Move() moves them relative to themselves, not to an absolute position.

So you’re saying it changes local position? Or are you saying that it adds to the position in the direction that the vector is facing? Or something else entirely?
I tried this but it failed

hand.Move(controller.transform.InverseTransformDirection(controller.transform.position));

All it does is add the value you give it to their position.

Edit: not to oversimplify it, it definitely does a bunch of background stuff too, but in general, it will just add that position to its current position. If you want to move it to a specific position, you have to subtract its current position from the target position.