With LLMs, that route largely doesn’t exist. Yes, you could write your own harness and agentic tooling. Maybe you could RLHF an existing model. But it all feels less tangible, and you can’t really change the interface to the LLM on the semantic content level in a well-defined way, like you can precisely control the semantics of a library. What you’re prompting against is not malleable in the manner that what you’re coding against is malleable. If your LLM repeatedly goes down the wrong paths, you can’t fix that once and for all, like you can fix a misbehaving library.