its server sided. when you experience mild lag, shifting your ghost brick lags as well, which proves its server sided
plus the ghost brick itself is an object on the server, so yeah.
i'd assume you'd have to write some special onActivate package to detect ghost bricks because i doubt they respond to raycasts, but they might be detected with $TypeMasks::FXBrickAlwaysObjectType (iirc that's the name of it but i may be wrong)
(new reply warning)
no
would it be possible to forceplant an invisible brick object wherever the ghost brick is, apply the events, and remove/replace it when moving the ghost brick?