Our philosophy is that things should work like magic. The more buttons, switches, dials and other interface elements that stand between the us and our thing doing what we expect it to do, when we expect it to, makes the thing harder to use-it increases the friction between us and our thing.

There is very little point automating your home if you end up with a home that's harder to use afterwards than it was before. If your lights are harder to use, or you have to think about what state they're in before flipping a wall switch, you've not made your life simpler you've made it just a little bit harder.

You don't want to have to think about that, you want it all to work like magic. That's our goal.

How to think about magic

The difference between magic, and simple clients is that in general magic doesn't have a user facing interface. Magic is essentially a number of expert systems which have solutions to problems, e.g. the CO2 measured by the air quality sensor on your netatmo weather station is too high in the room, so the Nest thermostat should be asked to turn on the fans to try and solve the problem.

The magic monitors the steward — and the user — looking for patterns and keeping track of conditions. If they see something occurring regularly that shouldnt happen, say the the level of CO2 rises consistently overnight in the bedroom. It knows how to solve this problem. It then implements a solution, in this case turn on the fan on the Nest thermostat, at an appropriate time every day to alleviate the condition without the user having to explicitly instruct the steward to do it.

The steward is being pro-actively doing things for the user that theyd otherwise have to do themselves. It's about solving problems for the user without their intervention.

Another example would be that a magic client could be built to learn the pattern of lights going on and off in the house. If the user is away from home and the Sun sets, then the magic would instruct the steward on how to automatically replicate the users normal pattern of behavior to deter burglars.

Developing magic

Magic is typically implemented server side, and clients that do magic — usually referred to as "apprentices" — may run on the same server running the steward although they might also make use of a Node Rendezvous service to run on a remote server.

Technically speaking these apprentices are intelligent agents working in a multi-agent system with shared goals of making life more convenient for the user.

More help on developing magic can be found elsewhere in the documentation.