The logic is that randomly each agent if he is at distance from other agent less then 2 stop moving rotate smooth facing to the other agent wait 3 seconds then both to rotate smooth back facing the next waypoint and keep moving to the waypoint.

There is also a possible that agent that is close to other agent less then 2 distance will not stop and rotate facing to it. The idea is to make random meetings between random agents.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.AI;
    
    public class AgentControl : MonoBehaviour
    {
        public List<Transform> points = new List<Transform>();
        public bool randomMeeting = false;
        public float threshold = 3f;
        public float strength = 5f;
    
        private float speed;
        private int destPoint = 0;
        private NavMeshAgent agent;
        private GameObject[] agents;
    
        void Start()
        {
            agents = GameObject.FindGameObjectsWithTag("Agent");
    
            agent = GetComponent<NavMeshAgent>();
            var agentsDestionations = GameObject.FindGameObjectsWithTag("Waypoint");
    
            for (int i = 0; i < agentsDestionations.Length; i++)
            {
                points.Add(agentsDestionations[i].transform);
            }
            // Disabling auto-braking allows for continuous movement
            // between points (ie, the agent doesn't slow down as it
            // approaches a destination point).
            agent.autoBraking = true;
            agent.speed = Random.Range(10, 50);
            speed = agent.speed;
    
            GotoNextPoint();
        }
    
        void GotoNextPoint()
        {
            // Returns if no points have been set up
            if (points.Count == 0)
                return;
    
            // Set the agent to go to the currently selected destination.
            agent.destination = points[destPoint].position;
    
            // Choose the next point in the array as the destination,
            // cycling to the start if necessary.
            destPoint = (destPoint + 1) % points.Count;
        }
    
    
        void Update()
        {
            RandomMeeting();
            // Choose the next destination point when the agent gets
            // close to the current one.
            if (!agent.pathPending && agent.remainingDistance < 2f)
            {
                GotoNextPoint();
            }
        }
    
        private void RandomMeeting()
        {
            if (randomMeeting)
            {
                GameObject randomAgent = agents[Random.Range(1, agents.Length)];
                if (Vector3.Distance(agent.transform.position, randomAgent.transform.position) <= threshold)
                {
                    StartCoroutine(Meeting(randomAgent));
                }
            }
        }
    
        IEnumerator Meeting(GameObject randomAgent)
        {
            var targetRotation = Quaternion.LookRotation(randomAgent.transform.position - transform.position);
            var str = Mathf.Min(strength * Time.deltaTime, 1);
            transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, str);
    
            yield return new WaitForSeconds(3);
        }
    }


I added the RandomMeeting method. But it's far away from the behaviour I want.