Justy: The annoying part of building an agent was never getting it to say something clever. It was all the stuff after that. Cody: Yeah. The model call is the easy demo. Then it needs tools, state, retries, a context budget, and some evidence it did not quietly wander into nonsense. Justy: And Microsoft is basically saying: stop assembling that whole loop from loose parts. Their Agent Framework Harness is out now for both Python and .NET, with the runtime already wrapped around a chat client. Cody: Which lands at a useful moment. Lots of teams have a model plus a tool or two, then discover their “agent” is a fragile while loop with no recovery story. This is a real attempt to make the harness the default product surface. Justy: Also, tiny mood check, this week has felt like every framework suddenly wants to own the word harness. We have been doing this show since November and somehow the naming situation got worse. Cody: It is a category where everyone agrees the plumbing matters, and nobody agrees where the plumbing starts. Justy: But this one does have a pretty concrete definition. The harness turns a language model into something that can call tools, work through a multi-step job, remember prior work, and keep moving until it finishes or hits a boundary. Cody: Right, right. Justy: Underneath, it is still an Agent in Python or a ChatClientAgent in .NET. Microsoft has added a curated pipeline around it, then made each piece individually removable instead of forcing one giant black box. Cody: The core includes automatic function invocation with an iteration limit, plus chat history persisted after every service call. That persistence bit is genuinely useful. If a run crashes halfway through a tool sequence, there is something to inspect and resume from instead of a vague trace and a bad feeling. Justy: Exactly. Cody: Then there is compaction for long contexts, a durable todo list, and plan-versus-execute tracking. File memory keeps notes and artifacts across turns. Skills can be discovered and loaded progressively. It also wires in OpenTelemetry, web search when the backing inference service supports it, and tool approval with standing “do not ask again” rules plus heuristic approval for safer calls. Justy: I did the reading, not a full fact-check rabbit hole on every edge case here, so if one of those defaults sounds surprising, we should verify it before treating it as scripture. This field changes its labels and behavior absurdly fast. Cody: The approval piece is where I slow down a little. Heuristic auto-approval can be perfectly sensible for narrow, read-only tools, but “safe” is a property of the tool, its arguments, the current state, and the surrounding workflow. A default cannot know all of that. Justy: Sure, but I like that it puts approval in the starter kit rather than making it the thing a team remembers after the first embarrassing incident. This is very much our old judgment-layer argument, Cody. The agent acting is cheap now. Knowing when it may act is the work. Cody: Mm-hm. Justy: For the target user, I can see the path. A team building a research helper starts with instructions and a few scoped tools. A data-processing agent gets file tools behind approval gates. Then, if it proves useful, they add memory, skills, or a hosted Foundry deployment instead of rewriting the entire runtime. Cody: And the customization matters because sensible defaults are only sensible until they are not. I would want to set the iteration cap deliberately, define which calls require a human decision, and watch the telemetry before I trusted the plan-and-execute behavior on anything expensive. Justy: That is not doom, by the way. That is a good upgrade path. You are asking people to graduate from “it ran once” to “we can operate this,” which is refreshingly unglamorous. Cody: I will accept “refreshingly unglamorous” as a compliment. The clever architectural choice is that they have not made the chat client proprietary. Bring an IChatClient on .NET, or a FoundryChatClient in Python, and the harness composes around it. Justy: The funny part is their personal-finance example calls the assistant a claw. We have apparently reached the era where a budget tool needs a tiny mechanical hand. Cody: Fine, but a claw with shell access is how someone accidentally creates a very expensive little pet. Justy: And Microsoft is at least holding some of that back. Background agents, working-directory file access, automatic looping until a completion condition, and shell tooling are usable as opt-ins, but they are not part of the fully released set yet. Cody: Okay okay. Justy: That restraint earns points from me. Concurrent sub-agents and shell commands are exactly where a pleasant harness becomes a systems project again. Shipping the core loop first gives teams a place to learn what their actual constraints are. Cody: If I were trying it, I would start with AsHarnessAgent on .NET or create_harness_agent on Python. Keep the tools narrow, leave the more aggressive opt-ins alone, and use the Agent Harnesses documentation plus the Harness samples Microsoft linked. Justy: Yeah. Do not build the claw’s entire robot body on day one. Give it one job, let it earn a second job, and see what the traces say. Cody: That may be the first responsible sentence ever spoken about a claw. Justy: Episode seven forty-four, and we have finally established a governance policy for tiny budget robots. I am calling that a productive Wednesday, Cody.