During the agent execution, classic SPADE behaviours can coexist with the BDI model. Every time that a new Goal is introduced into the agent, it will try to achieve it looking for a Plan that fits the task. All this work happens in a completely transparent way for the user.
import spade from spade.bdi import * agent = BDIAgent("bdi@127.0.0.1","secret") agent.setDebugToScreen() agent.addBelieve(expr("Value(0)")) g = Goal(expr("Value(2)")) class Serv1(Service): def run(self): print "Service 1 running" self.addBelieve(expr("Value(1)")) class Serv2(Service): def run(self): print "Service 2 running" self.addBelieve(expr("Value(2)")) s1 = Serv1(P=expr("Value(0)"),Q=expr("Value(1)")) s2 = Serv2(P=expr("Value(1)"),Q=expr("Value(2)")) p = Plan(P=expr("Value(0)"),Q=expr("Value(2)")) p.appendService(s1) p.appendService(s2) agent.addPlan(p) agent.addGoal(g) agent.start() import time try: while True: time.sleep(1) except: agent.stop() sys.exit(0)