Program synthesis (PS) and genetic programming (GP) allow non-trivial programs to be generated from example data. Agent-based models (ABMs) are a promising field of application as their complexity at a macro level arises from simple agent-level rules. Previous attempts at using evolutionary algorithms to learn the structure of ABMs have focused on modifying and recombining existing models targeted to the domain in question, which requires prior domain knowledge. We demonstrate a new domain-independent approach which is able to evolve interpretable agent logic of an ABM from scratch. We employ a flexible domain specific language (DSL) which consists of basic mathematical building blocks. The flexibility of our method is demonstrated by learning symbolic models in two different domains: flocking and opinion dynamics, targeting data produced from reference models. We show that the evolved solutions are behaviourally identical to the reference models and generalise extremely well.