Nose Goblins and LiveWorld both had some tools for reifying execution histories and making them more agent-like. There are a few closely related ideas:
procedures that have explicit goals
procedure invocations that have state relative to the goal (suceeded, failed, etc)
call trees as goal trees
representation of goal states using anthropomorphic or narrative techniques
Never really got farther than a first proof-of-concept. Why? I still think it's an interesting idea, although apparently nobody else does.
Have to note that functional programming is in tension with this. The default for a Clojure defn is to return a value and have absolutely no side effects (if it does, you are supposed to indicate that with a bang: eg delete-file!). Not to knock functional programming, which has many merits, but it lacks the dynamism, the aliveness, that I was after in my research.
Functional programming also interferes with the effort to integrate programming languages and the user interface, because a typical WYSIWYG UI is an essentially imperative sort of thing, it has objects that you operate on, changing their state.
Functional programming is anti-agentic, I guess. I mean they are almost opposites.