Different application domains require different knowledge representation techniques. Agent designers should therefore be able to easily exploit benefits of various knowledge representation technologies in a single agent system. I describe here an agent programming framework of Behavioural State Machines, with Jazzyk, an implemented programming language interpreter for BSM. The presented framework draws a strict distinction between a knowledge representational and a behavioural level of an agent program. It supports a high degree of modularity w.r.t. employed KR technologies and at the same time provides a clear and concise semantics.