
A lot of these agent platforms, they have their own kind of proprietary connectors […] then you're vendor locked in. And I see this as more of a better way, to be a little bit vendor agnostic and be able to be portable.
It decides what stays in the context window, what gets summarised away, what executes in a sandbox and never enters context at all, when to hand a noisy sub-task to a subagent, and when to stop and ask a human. It is not a framework: you still write your own tools. It is not a gateway: it does not hold your credentials or your policy. It is the thing that keeps an agent alive from iteration one to iteration fifty.
The loop itself is about two hundred lines of code. Anyone can write it, and most teams do, in an afternoon. The harness is everything you build over the following six months, once that loop meets a real workload and starts facing roadblocks halfway through.
Our thesis is that models will become interchangeable, and that tools become the enterprise's differentiator rather than the vendor's, and that governance belongs underneath the agent rather than inside it. What we had underestimated was the harness. NetApp's Developer Platform Engineering team ran a genuinely hard workload against that thesis, at depth, ahead of the market, and showed us exactly where it bent.
In June 2025, Rob Rubin, now Senior Director of Developer Platform Engineering at NetApp, was already past the question most enterprises were still debating. His team runs the Kubernetes environments the rest of the company builds on, and self-service provisioning was already fully automated. The constraint was the interface in front of it: a request form can only ever offer what someone modeled in advance.
His idea was to put intent there instead. Describe the stack you want; let an agent assemble it from automation that already exists.
That meant two things from us.
No agent framework. No harness. That is not what the conversation was about yet.His reason for standardizing on MCP is why this story ends where it does:
In mid-2025 that was a minority position. It is a large part of why TrueForge ships open source rather than as a closed managed runtime.
The first phase was identity, and it is the part most teams underestimate.
Not "the agent holds an API key" identity. Real identity, where the person asking determines what the tools may do. A user authenticates through NetApp's identity provider. That identity is carried through the MCP Gateway into the MCP server, which resolves it against the user's own cluster account and issues short-lived, user-scoped credentials. Every kubectl call and every shell command executes as that person. Ask about something you don't have access to and you get exactly what a terminal would give you: nothing.
Four words, and they are the reason this reached production. An agent running as a service account with cluster-admin is a demo. An agent running as you is infrastructure.
Everything else lives in the gateway rather than in any individual agent: provider credentials, model-level RBAC, tool-level permissions, budgets, rate limits, guardrails, logging. Agents reference model names and server names; credentials never travel. That is what lets a platform team approve the fortieth agent as easily as the first, because a new agent is not a new copy of the security model.
By early 2026, the Kubernetes agent was live with users, and the shape of the workload explains everything that follows.
An engineer asks "why is my pod in CrashLoopBackOff?" The platform spans eight Kubernetes clusters serving the whole company, so the agent's first job is usually to locate the workload before it can diagnose anything. Then the investigation proper: describe the namespace, list pods, pull events, grep logs, inspect the ingress layer, query historical metrics. The MCP server exposes kubectl, a shell, Prometheus and a cluster-inventory tool. None of the sequence is scripted; the model composes it per problem.
Fifteen to thirty rounds of real command output, per question. Hold that number, because it is the whole engineering story.
NetApp being NetApp, Igor Feoktistov built a second MCP server reaching beneath the cluster into the physical infrastructure. In a lab session he typed "troubleshoot cluster issue", with no cluster name and no hints.
The agent located the unresponsive node, worked down through the Kubernetes layer, found nothing conclusive there, moved into hardware diagnostics and identified the root cause as a memory fault on the underlying hardware. It then identified a spare and produced the workload migration, with an expected recovery window of five to ten minutes.
The technically interesting part is the path, not the outcome. No runbook encodes "pod failure to memory fault to workload migration." That chain crossed two independently built MCP servers, and it held together because both exposed honest tools under the same user identity, letting the model keep descending layers until the evidence resolved. The capability came from the tool layer, which NetApp designed and wrote. Our job was to make it safe to expose and give the loop somewhere durable to run.
Thirty iterations of raw kubectl and log output does something predictable to a context window. Investigations began dying mid-run.
What came back was not a feature request. It was a bug report, and a well-argued one:
He had ruled out the expensive suspects, which is the hard half of any diagnosis: not the model, not the prompt, not the tools. The layer he was pointing at turned out to sit just below the interface, the one deciding what stays in context, what gets summarised, and what executes elsewhere and never enters context at all.
We did not have that layer. We had quietly assumed the loop in between was the customer's problem to solve. That assumption is what NetApp broke, and it is the assumption we think most of the market is still making.
What we built next was ours, and nobody asked for most of it. NetApp found the wall; the design of what got past it was our work, pressure-tested against their live workload every week.
Isolated execution for code, files, and shell commands. Instead of pulling megabytes of logs into context for the model to read, the agent runs code against that output and returns only the answer. Secrets never enter the sandbox
Once an agent can migrate a workload off failing hardware, someone has to be able to say pause and ask me first. Execution halts for approval at defined points.
Agents become callable services, embeddable in any front end rather than trapped in ours. A NetApp ask, and the one that changed the product's shape most.
Automatic compaction as the window fills; large tool results offloaded to storage rather than inlined; deferred tool loading, so a hundred-plus tool definitions don't consume the window before work starts.
A build-and-test surface for people who are never going to write Python, and shouldn't have to.
Lets the model chain several tool calls into one sandboxed script rather than paying a model round trip per call. Aimed at fan-out work like sweeping eight clusters.
Mundane, and it mattered. NetApp's ceiling moved 30 → 40 → 50 as tooling got richer. Any limit we had hard-coded would have been wrong at every point on that curve.
Lets a long investigation delegate a noisy sub-task and receive a conclusion instead of a transcript. The parent's context stays clean across 30+ iterations.
A second NetApp team arrived independently. Vimal Kannan, Director of IT for Enterprise Data and Analytics, runs NetAI Chat, NetApp's internal assistant. His problem was breadth rather than depth: many teams, many tools, many models, all needing central governance.
Today roughly 150 tools are reachable through a single Virtual MCP Server - one endpoint that fronts many MCP servers, so a client connects once instead of being configured against each. Per-user access control decides what any individual can invoke, and Skills (packaged instructions for a recurring task) are scoped so a team sees only what belongs to it. Thousands of NetApp employees reach those tools through the gateway without ever opening a TrueFoundry console. The governance is invisible to them, which is the point.
Because Developer Platform Engineering had pushed us to expose agents as an SDK and an API, the NetAI Chat team could call those agents directly from their own front end. Two independent efforts became one platform, now under a single charter led by Rob Rubin spanning models, tools, agents and an Agent Registry that tracks what exists and who owns it.
One Kubernetes agent became several in production, with more in build and an internal agent builder on the roadmap. At that point the problem changes shape:
That is the problem you get when adoption works. It arrives faster than most teams plan for.
An open, self-hosted runtime removes a per-seat managed-platform bill. That is not the interesting part, and it isn't why NetApp is here.
Alongside attribution, the discipline problem: people reach for the largest model when a smaller one would do. Both are solved in the same place. Every model call and tool call tagged to a person and a team, budgets and rate limits that actually bind, routing that sends work to the appropriate model rather than the biggest one available.
<INSERT: NetApp Approved estimate - cost per investigation before/after Context Engineering, or % of investigations completing that previously died mid-run.>
We are not finished. Rob wants budget enforcement per execution rather than per week, and he's right: a weekly cap is blunt when one long-running agent can consume it in a single investigation. That lands in <quarter?>.
This is also why the harness and the gateway belong in one system. A harness alone gives you an agent. A harness inside a governed control plane gives you an agent that both your security team and your finance team will sign off on.
One customer, however advanced, is one data point. NetApp found the context wall by running 30-iteration investigations across eight clusters. A team doing document workflows, claims processing or CI triage will find a different wall, and we would rather learn that from the market than from our own roadmap.
There's a harder reason too. A team that refused proprietary connectors in 2025 was never going to bet its Kubernetes estate on a runtime it could not read, run itself, or fork. Portability was the entry condition for this entire relationship. Open-sourcing the harness is us taking that condition seriously rather than asking to be trusted.
NetApp's differentiated capability, Kubernetes down through the hardware, exists because their engineers wrote their own MCP servers against their own systems. No vendor was going to ship that. The platform's job is to host, secure and govern them.
It is iteration twenty-two, when context is full of shell output and the investigation isn't finished. Nearly all the real engineering lives in that gap, and it stays invisible until you run something long enough to hit it. A rough test: if your agents routinely exceed ten tool calls per task, you are going to meet this wall.
Every agent that stalls in review stalls on the same question: what can this thing do, and as whom. Answer it in the infrastructure & the answer holds for every agent that follows.
Iteration limits, context budgets, tool counts: every one of these moved for NetApp within months. Treat them as configuration.
An agent that only runs inside a vendor's UI cannot be composed into anything. The SDK and API were the change that let two NetApp teams become one platform.
TrueForge is open source, MIT-licensed, at github.com/truefoundry/trueforge. The wall NetApp hit is now something you can run into on your own workload, with the layer that got past it already in your hands.

That brings up the harness and its UI on your machine. When you're ready to run it for real, self-host with Docker Compose or Kubernetes in your own environment. Point it at any model through an OpenAI-compatible endpoint, connect your MCP servers, and you have a working agent.
The harness stands on its own; the gateways are how you govern it. Run TrueForge standalone and you get the full loop: sandboxed execution, context engineering, subagents, approvals, the SDK and API. You bring and manage your own model and MCP keys. Pair it with TrueFoundry's AI Gateway and MCP Gateway and every model call, tool call, and MCP interaction becomes authenticated, budgeted, policy-controlled, and logged under real user identity, the layer NetApp's security review actually cared about