It was much easier than I expected and took very little time. In a nutshell, it’s all OOP. Each skill generates targets, each target generates actions, each action has a score (can be either positive or negative). The AI chooses the target with the highest score.