How should skeleton/mesh hierarchy be structured for a multiplayer FPS — 1P arms + 3P full body + weapons + replication?

Hi everyone. I’m designing the character architecture for a multiplayer co-op first-person shooter from scratch in Unreal Engine 5 and I’m struggling to wrap my head around the correct skeleton/mesh hierarchy and how animations should be structured to work correctly both locally and for other players. I have an intermediate level of UE5 experience but I’ve never tackled a networked FPS setup before.

My current setup (planned)

My character is split into two separate meshes:

1P mesh — arms-only skeletal mesh, visible only to the local player (first-person view)
3P mesh — full-body skeletal mesh, visible to all other players (third-person view)

On top of that, each mesh needs its own weapon: a 1P weapon mesh (seen by the local player in first-person) and a 3P weapon mesh (seen by everyone else). So in total I have four skeletal meshes that need to animate in sync.

What I don’t understand
How do you keep 1P and 3P animations in sync locally — i.e. when the player fires, both the 1P arms and the 3P body play the correct animations at the same time?
How should replication be handled? Should I replicate animation states via AnimMontage RPC calls, GameplayAbilities / GAS, or just replicated variables that drive the Animation Blueprint state machine on each client?
What is the recommended Animation Blueprint architecture for this? Should each mesh have its own AnimBP, or should they share logic? How do you drive them consistently?
Is there a standard UE5 pattern for this, similar to what Lyra does, that I should study — even if I’m not using Lyra as a base?
What I’ve already considered

The core question
Do I need a separate weapon skeleton for each character skeleton — i.e. one SK_Weapon_1P attached to the 1P arms and one SK_Weapon_3P attached to the 3P body?

I understand that locally the 1P mesh is hidden from other players and the 3P mesh is hidden from the local player (using SetOwnerNoSee / SetOnlyOwnerSee). My confusion is more about how to architect the animation system so that the right animations fire on all four meshes simultaneously, and how that translates correctly over the network for remote players who only see the 3P character.

What I’m looking for

Any guidance on the recommended architecture, best practices, or references (documentation, videos, open-source projects) would be greatly appreciated. Even a high-level overview of “this is how a typical UE5 FPS handles this” would help me a lot before I start implementing.

Thanks in advance!