A Meta-object protocol is a set of classes and methods that allow a program to inspect the state of, and alter the behaviour of, the supporting system. Possibly the best known is the one described in the book The Art of the Metaobject Protocol by Bobrow, Kiczales and des Rivieres; it applies to the Common Lisp Object System and allows the mechanisms of inheritance, method dispatch, class instantiation and so on to be manipulated.