FIPA-style view
Historically, agent communication languages (e.g., FIPA ACL) paired a communicative act (performatives like request, inform, cfp) with a content expression in a content language. Implementations today may use JSON or protobuf with an explicit illocution field. The lesson: receivers should branch on act type, not only parse payload keys. That enables policy hooks (“reject unsigned commit”) and testable state machines.
Pattern
{ "act": "request",
"sender": "A", "receiver": "B",
"content": { ... } }
// Keep acts enumerable
Key insight: Finite performative sets are easier to authorize, log, and fuzz-test than open-ended prose.