randysalami
7 hours ago
This article mainly argues around harnesses but a breakthrough for me was understanding why harnesses. Without a harness and only a raw LLM, exploring and modifying codebases is not feasible. It’s just text in, text out, and has no way of handling the context of the codebase (if large enough). Plug an LLM into a harness, and all of the sudden it has an exosuit that lets it funnel its thinking into discrete actions. It can now use strategies to manage that large context in pieces.
juanre
2 hours ago
I wrote an article explaining what an agent and a harness are with some detail. There is so much untapped potential in harnesses still, I think because we do not take the time to parse exactly what they are.
verdverm
5 hours ago
Depending on how we define harness, it's at its core a loop around llm calls with the tool field populated and a function per to use them after a round trip, easily fits into a single file in a crude setup. I think everyone should try writing a simple harness just for the learning experience, it gets thorny rather quickly.
Another aspect to this is model training, since bots are now being trained with a harness, and that has the tools it gets most burned in to weights. In my own harness, I tried Read,Edit,Write tools which always put the latest text of a file upfront, only one copy, to reduce context window growth as the bot tended to reread a file before/after edits. While this greatly slowed window growth, cache hits dropped to ~50%. If you give the bot a Grep and Read with Offset/Limit, this aligns with training and reduces window growth, even with the read-before-write pattern. You can see the pattern of grep-read when it does the default "use bashisms for everything instead of the dedicated tools"
I'm now exploring ways to remove the need for a shell tool completely, for various reasons, but notably limiting potential for loss of control. Early experiments hint this will not work well due to the heavy shell usage in training, but I'm not throwing in the towel just yet!
digdugdirk
4 hours ago
I know this sounds ridiculous, but try fine tuning a small local shell -> plain language model, then using the output of that for whatever you need on your end. You'll get the gist of what the frontier model is trying to accomplish, and can handle it with whatever harness workflow you want.
verdverm
4 hours ago
I'm not sure I follow, can you expand? Why would I want to go from shell to plain language? I don't have a use for an explanation of the shell command that I am aware of. I do sometimes enable a policy-tuned llm to add a non-deterministic check, especially when they try that "command didn't work, let me put it in a script and run that"
If this is in relation to removing the need for shell, my idea is more like inspecting common files like Makefile or package.json to extract and dynamically generate tools for the llm call.
LaurensBER
6 hours ago
Wait until you realize that deep down everything on a computer is text. We juist build "harnesses" to manipulate in-memory "text" in different ways.
One level deeper is all numbers though.
And eventually it's all 0 and 1s!
ashkankiani
6 hours ago
Quantum computers have entered the chat
verdverm
4 hours ago
there is an "everything is a file descriptor" in there somewhere too
devmor
4 hours ago
This is too reductive of a statement to have any meaning. You have re-defined a class of program to encompass all programs. The term “harness” exists to differentiate it from programs that are not harnesses.
Terr_
6 hours ago
"It was just a dream, Bender--there's no such thing as 2."
jswelker
3 hours ago
I say I am reading the text, but really it's a simple loop moving eyes left then right then repeat.
/s