First a disclaimer: I don't think this is hardcoded, but it is certainly trained really strongly, and you more of less count on it to work. There's a lot to cover so I might have to get back to this later.
The magic syntax for all three is good ole brackets. [like this]. The model will reliably refer to and recognize these as "variables". The most straightforward one being [user prompt].
You can straight ask the model for a list of other "common" ones and you'll know you're seeing them if they have a capital first letter. They can be anything though.. basically if they exist they're resolved, recursively I think, and the model tries to expand them if it can. If there's not enough context for them though that is pretty likely to fail for difficult ones.
Easy ones though you can do with whatever [Nickname] will just turn into any nickname. [Father Nickname] could turn into Dad or Pops. You can just put those basically anywhere. This is also where the randomness comes in because the result you get is a much more designable random. I haven't even tried it for example, but I'm sure numbers would work fine.
There's a ton more to be said but I'll pause for the moment.