Batteries Included, or an API You Program
You have to ship an agent that reads bug reports and proposes fixes, and two options are open on your screen. The first hands you a factory function: call it, pass a custom tool, and you get something that plans, writes files, runs a shell, delegates to subagents, keeps notes between steps, and stops to ask a person before anything irreversible. The second hands you a loop, a way to start it with instructions, and a place to say which tools exist. One is an afternoon, the other is a week. The instinct is to read that as a speed question. It is not. It is a question about who owns the answer when someone asks why the agent was allowed to do that.
A furnished apartment trades choice for tonight
Renting furnished means you move in tonight. The bed is made, the table is where the last tenant left it, and none of it is yours. A batteries-included harness is exactly that. Planning, a file system, shell access, subagents, memory, context management and human approval arrive already installed, with sensible defaults for work that runs many steps. Long threads get summarized before they overflow. Large tool outputs move to disk instead of sitting in the window. Checkpointing, tracing and evaluation are services the runtime provides, not chores every application rewrites, which is the part that decides whether a long run survives.
The furniture can be replaced. The backends for file system, sandbox, state store and tools are meant to be swapped, and a team that treats them as fixed has misread the lease. But the rooms are laid out for you, and you notice that most on the day your needs stop matching the layout.
The empty apartment is the other harness: the runtime exposed as a plain software component. You start the agent with instructions and context, it alternates reasoning, tool calls and results until it is done, and everything else you install. Hooks that run before and after each tool call observe or change what happens. An allowed-tools list decides what the agent can reach at all. Subagents split the work, and session resumption lets an interrupted run continue instead of restarting. You furnish every room, and every drawer is where you put it.
The bill arrives when something has to be refused
Furniture is comfortable until you need a guarantee. Safety in a batteries-included setup does not come from the prompt, however carefully you word it; the limits that hold are the ones applied to tools and to the sandbox. If you cannot point at where a boundary is enforced, you have a preference, not a control, and the model is being asked to respect something it can only read.
Programming the harness yourself moves that line into code you own. A CI service takes a bug report, starts the agent with access to one repository, and logs every tool call. A hook refuses edits outside the intended directory. A subagent prepares the tests while the main agent writes the fix. When the run times out, the service resumes that same session instead of paying for the work twice. Nothing there is free. Handing over every tool by default, using hooks only to write log lines, or treating a resumed session as a fresh start are all ways to buy the work and lose the guarantee anyway.
The old framework choice, with real teeth
Anyone who has chosen between a framework and a library knows the shape of this. The framework is faster until the day its assumptions stop matching your needs; the plain toolkit is slower until you need to explain exactly what your program does. The stake used to be an awkward workaround and an ugly configuration file. Now the default you inherited decides what a process may do to a file system, a repository, or a production system while nobody is watching it.
So the decision does not turn on how quickly you can ship. It turns on which behaviors you will have to prove, to a customer, an auditor, or yourself at two in the morning. If someone else’s answer is good enough, take the furnished place and get to work tonight. If the answer has to be yours, pay for the empty rooms. Either way you are choosing the same model. What differs is everything built around it.