If your program.md over-specifies what to try, you limit what your agent can discover.
Example of too narrow: "Modify only the learning rate. Try values between and in increments of ." This turns your agent into a grid search tool. You've eliminated the advantage of searching program space. You could have done this with a for loop.
The fix: constrain the search domain, not the search steps. "Focus on optimizer hyperparameters" gives direction without dictating every move. Your agent decides which hyperparameters to tune and what values to try.