> Also it is almost impossible to guarantee two runs of an application will trigger the same machine code output
As long as the JIT is working properly, it shouldn't matter: the code should always run "as if" it was being run on an interpreter. That is, the JIT is nothing more than a speed optimization; even if you disable the JIT, the result should still be the same.
Same with agent actions.