To help make sense of loop engineering—the latest trend, perhaps? ^^—I think it can ultimately be abstracted as follows:
Loop = State + Planner + Executor + Evaluator + Reducer + Stop Policy
while (!stopPolicy.check(state)) {
Action action = planner.decide(state);
Result result = executor.execute(action);
Evaluation evaluation = evaluator.evaluate(state, action, result);
state = reducer.update(state, evaluation);
memory.save(state);
}