You can extend the smart object idea by including a voting system.
An unused chessboard periodically broadcasts "Anyone up for a game of chess?" while there are at least two agents nearby.
Agents in the vicinity evaluate whether chess would be good for their current needs/priorities and reply yes/no.
If the chessboard gets at least two "yes" votes, then it elects two players from among those who accepted. (This may be a good moment to use a matching algorithm if you have many agents nearby, to favour selecting a pair who already have a relationship)
One of the elected pair then vocalizes to the other "hey, how 'bout a game of chess?" and they proceed with the activity.
If the chessboard gets fewer than the needed number of "yes" votes in a round of voting, it goes back to waiting, with no visible activity revealing to the player the negotiation that just transpired.
An interaction between two agents can also use the smart object concept — but the agents themselves are the objects.
Each agent can periodically run through the set of actions it can perform with another and decide which are appropriate/desirable in this context. Then it can broadcast them as a smart object interaction available to agents nearby. "I'm down to chit-chat or high-five"
If another agent accepts the interaction, "I too would like a high-five" then the two begin the activity together, getting into position to play the corresponding animations.