It currently consists of a bunch of single purpose modules, some output (light switch and door lock via GPIO, music player, notification sender, etc.), some input (SMS via Twilio, Github webhooks, web interface, etc.), and a central broker. They're all communicating by sending JSON messages over ZeroMQ sockets. Each module connects to and registers with the broker, which keeps track of module health with heartbeats, and routes and schedules commands based on the modules' registered handlers.
It's less complicated than it might sound, I've got some (unorganized, undocumented) code up at https://github.com/spro/drsproboto if you want to take a peek.