Sync Hash Set
SyncHashSet is a set similar to C# HashSet<T> that synchronizes its contents from the server to the clients.
A SyncHashSet can contain any supported Mirage type
Usage
Create a class that derives from SyncHashSet for your specific type. This is necessary because Mirage will add methods to that class with the weaver. Then add a SyncHashSet field to your NetworkBehaviour class. For example:
You need to initialize the SyncHashSet immediately after the definition in order for them to work. You can mark them as readonly to enforce proper usage.
Basic example
[System.Serializable]
public class SyncSkillSet : SyncHashSet<string> {}
public class Player : NetworkBehaviour {
    [SerializeField]
    readonly SyncSkillSet skills = new SyncSkillSet();
    int skillPoints = 10;
    [Command]
    public void CmdLearnSkill(string skillName)
    {
        if (skillPoints > 1)
        {
            skillPoints--;
            skills.Add(skillName);
        }
    }
}
Callbacks
You can detect when a SyncHashSet changes on the client and/or the server. This is especially useful for refreshing your UI, character appearance, etc.
Subscribe to the Callback event typically during Start, OnClientStart, or OnServerStart for that. 
Note that by the time you subscribe, the set will already be initialized, so you will not get a call for the initial data, only updates.
[System.Serializable]
public class SyncSetBuffs : SyncHashSet<string> {};
public class Player : NetworkBehaviour
{
    [SerializeField]
    public readonly SyncSetBuffs buffs = new SyncSetBuffs();
    // this will add the delegate on the client.
    // Use OnStartServer instead if you want it on the server
    public override void OnStartClient()
    {
        buffs.Callback += OnBuffsChanged;
    }
    private void OnBuffsChanged(SyncSetBuffs.Operation op, string buff)
    {
        switch (op) 
        {
            case SyncSetBuffs.Operation.OP_ADD:
                // we added a buff, draw an icon on the character
                break;
            case SyncSetBuffs.Operation.OP_CLEAR:
                // clear all buffs from the character
                break;
            case SyncSetBuffs.Operation.OP_REMOVE:
                // We removed a buff from the character
                break;
        }
    }
}