i think a useful distinction (like i mentioned on the doc) is to be able to bind execution of some rule with a handle to some particular communication interface that the rule uses/"owns" (?), and a "console" vs "socket talking to an lsp server" both feel like they can conform to that representation without having to have a distinction between foreground and background, which seems like it could be a goal