Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
157830 stories
·
33 followers

Build-time AI vs Run-time AI

1 Share

I was at a ThoughtWorks “The Future of Software Engineering” event in Switzerland some weeks ago. What a braintrust. Lots of conversations about AI generally, agentic AI in particular and harness engineering.

Here’s a distinction I’ve been mulling for a while and keep reaching for in conversations about AI systems in the enterprise: build-time AI versus run-time AI. One is artifact-oriented, the other is execution-oriented.

Mode Primary artifacts Versioned? Typical outputs
Build-time AI Source files, configs, prompts, AGENTS.md, tests, policies, IaC Yes (Git) Commits, PRs, CI/CD, deployments
Run-time AI Live state, requests, conversations, workflows Usually no Database rows, tickets, CRM updates, emails, transactions, generated media

Run-time AI isn’t only transactional, either. Generation of movies, songs, images, and slide-shows is run-time too. Those outputs are files, which makes them look artifact-like, but they’re products of execution, not engineering artifacts. Say a generated slide-show doesn’t specify the behavior of any system, and nobody’s putting it through code review as it might be going straight into GoogleDocs or Office 365. That’s the real test for which side of the line something sits on: build-time artifacts specify (later) behavior; run-time outputs are the consequences of wished-for behaviors.

Cross that with the conversational -> workflow -> agentic ladder that has become the common way of classifying AI systems, and you get a tidy 3Ă—2:

AI type Build-time Run-time
Conversational Prompt engineering: templates, system prompts A single chat session
Workflow Workflow engineering: workflow definitions, tool configuration Executing the predefined process
Agentic Harness engineering: code, prompts, tools, memory policies, guardrails The agent reasoning, planning, acting, updating systems

Harness engineering is a build-time discipline

The interesting consequence: harness engineering is predominantly a build-time discipline, even though it exists entirely to influence run-time behavior.

The build-time harness looks like source code, because it is source code:

AGENTS.md
tools.yaml
memory_policy.py
planner.py
evals/
guardrails/
prompts/

Well, it is today. It gets committed to Git, reviewed in pull requests, and deployed via CI/CD - the full software delivery treatment.

Run-time is a different world entirely. Steps in a workflow:

  1. Customer asks for a refund
  2. Agent plans
  3. Looks up CRM
  4. Issues refund
  5. (Audit log written)
  6. (Database updated)

The last two are in parentheses because the agent isn’t doing them directly - the existing application or service (AI made or not) it invoked does those as a matter of course.

No Git commit occurs during that interaction. The agent changed the state of several systems of record, but it didn’t change itself.

An orthogonal axis, not a maturity stage

It’s tempting to present build-time vs run-time as another rung on the maturity ladder, after conversational, workflow, and agentic. I’d resist that. It’s an orthogonal axis. There are two independent questions to ask of any AI system:

  1. What kind of AI system is this? - Conversational → workflow → agentic.
  2. Where does the “engineering” happen? - Build-time artifacts ↔ run-time execution.

Every cell in the 3×2 above is a legitimate place to be, with the non-agentic ones included in that claim. A prompt-engineered conversational system with its templates under version control is not “less mature” than an agentic one. Indeed, it may be exactly the right amount of machinery for the job.

What a “harness” actually is

This framing also gives “harness” a satisfyingly software-engineering flavor. Edward Mangini’s recent Harness Engineering: The Devil is in Your Details defines a harness very broadly - essentially “everything except the model.”. He credits others (Trivedy & Birgitta Böckeler) for that. I think there’s a cleaner separation: the harness is the version-controlled, deployable specification of agent behavior. The live conversation, the database state, and the external side effects are not the harness - they are the consequences of the harness executing.

That gives harnesses a lifecycle human software engineers will recognize:

**author -> review -> commit -> deploy -> execute -> observe -> revise

Everything before “execute” is build-time. “Observe” is where run-time telemetry feeds back into the next build-time iteration. Which is to say: harness engineering is just engineering, and all the disciplines we already have for source code - code review, trunk-based development, continuous delivery, configuration as code - apply to it directly.

Well of course, build-time vs run-time isn’t common language in the AI field, so I’ll keep on trying to update my mental model.

Read the whole story
alvinashcraft
43 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Architect an open blueprint for cloud-native AI agents

1 Share

An AI agent pursues a goal on its author's behalf over minutes, hours, or days. It calls tools, writes files, keeps state between steps, and makes its own decisions within the guardrails it was given. At different moments it leverages a request/response service, a batch job, a serving endpoint, and other capabilities.

Running this type of workload safely requires a solution architecture of its own. In this article, we describe that solution as a blueprint to use for your agentic workload delivery needs.

A new workload class

The model is a stateless inference service. The harness turns it into an agent: it owns the loop, the memory, the context window, and the tool calls. The sandbox runtime decides what the agent may touch: which files, which binaries, which network endpoints. These three components have separate lifecycles, scale differently, and carry different security requirements, so we keep them separate.

Red Hat AI, the enterprise platform for any model and any agent across the hybrid cloud, is a natural host for that separation. We write this blueprint mainly from an Agent-as-a-Workload perspective. This means each agent is one sandboxed pod and one individual, independent value proposition. A second deployment pattern, Agent-as-a-Service, moves the loop out of the agent software into a shared runtime. Its adoption will follow business and operational needs, and we contrast the two later in this article.

We describe the solution blueprint as an open architecture of interchangeable components. Every component in Figure 1 is a role that several implementations can fill. AI accelerator vendors ship implementations for many of them; NVIDIA currently has the most visible set with NemoClaw, OpenShell, Nemotron, and CUDA-X. They appear in our blueprint on those merits, though they are not required. The architecture stands on open interfaces: an OpenAI-compatible inference access API and the open source Open Responses specification for models, Model Context Protocol (MCP) for tools, the agent-sandbox API for isolation, and SPIFFE (Secure Production Identity Framework For Everyone) for workload identity. This architecture gives each agent a verifiable, short-lived credential instead of a static API key.

We wrote this article for platform engineers and AI infrastructure teams who need to run autonomous agents safely on open, scalable AI platforms such as Red Hat AI. This article is not a tutorial for building an agent. Instead, it serves as a blueprint for operating agents as governed cloud-native workloads.

The solution architecture

In Figure 1, we lay out the complete blueprint in a single view. The rest of the article walks you through the blueprint component by component. The figure reads as three horizontal bands with one checkpoint between them, and the legend colors mark the planes.

Overview of the open agentic AI solution blueprint's layers; full architectural components and flows are detailed in the surrounding text.
Figure 1: Open agentic AI solution blueprint.

The control band across the top (blue) creates and governs agents. Read it from left to right to understand the lifecycle:

  • An agent blueprint declares what each agent is made of.
  • The sandbox control plane turns that blueprint into a Sandbox resource.
  • A controller turns the resource into exactly one pod.
  • The workload identity service issues every pod and gateway a verifiable credential.

The dashed arrows dropping out of this band are control traffic, and nothing else about the figure moves until they've done their work.

The middle band is where the magic happens. It contains three zones from left to right:

  • Skill backends: These backends can run anywhere (represented by a dashed border because location is not a commitment).
  • Agent pod: This pod hosts the agent, harness, supervisor, and thin skill clients.
  • Inference plane: This plane serves models inside the cluster and contains the gateway, semantic routing, scheduler, and vLLM workers.

Two gray boxes on the right edge sit apart from that flow on purpose: an optional external large language model (LLM) that is reachable only with masked personally identifiable information (PII), and audit and tracing, where every hop in the architecture eventually lands.

The checkpoint between the bands is the MCP Gateway. It's drawn in control-plane blue because of its function: every tool call leaves the pod through this gateway, is authorized by token claims rather than by the model itself, and then reaches a skill backend.

The platform bars at the bottom carry everything above them: Red Hat OpenShift, the Linux kernel, and the silicon. The silicon bar lists several options deliberately because the architecture assumes no single vendor.

Components

Each solution component in and around Figure 1 has a role, a duty, and a set of implementation options. We list these options in Table 1. Maturity varies across these options, and we separate production-grade implementations from technical preview features later in this article (see Table 4).

Table 1: Solution components, roles, and implementation options.
Solution componentsRole/dutyOptions
Agent blueprint / GitOpsDeclare, deploy, version agentsHelm & GitOps · NemoClaw · OpenShell (planned)
Agent orchestrationMulti-agent coordination, discoveryA2A & signed AgentCards · AGNTCY Agent-Exchange
Sandbox runtime (supervisor)Constrain agent process: files, network, syscallsOpenShell (planned) · Kata & K8s agent-sandbox
HarnessLoop, memory, context, tool useOpenClaw · Hermes Agent · LangChain Deep Agents · LangGraph · custom
Agentic loop runtime (Agent-as-a-Service)Server-side loop: tool schema advertisement, execution, iteration, trace storeOGX (Responses API) · custom
ModelReasoning serviceNemotron · Llama · gpt-oss · DeepSeek · Qwen · Kimi · GLM · Mistral
AI gateway (MaaS)Auth, quota, OpenResponses/OpenAI APIOGX · LiteLLM · Red Hat AI gateway
Semantic routingPick best price/performant modelvLLM Semantic Router (upstream) · Red Hat AI gateway (roadmap)
Inference routingPick replica: KV cache, loadllm-d Router / EPP (Gateway API ext.), Praxis (Early)
Model workersToken generation on acceleratorsNIM / TensorRT-LLM · vLLM (CUDA/ROCm/XPU/CPU; TPU/Gaudi via plug-ins)
SkillsDomain capabilities as toolsCUDA-X (cuDF, cuOpt, and so on) · Polars · DuckDB · OR-Tools · JAX · Qiskit
Workload identityCryptographic agent identitySPIFFE/SPIRE (JWT-SVID)
Tool governanceAuthorize tool calls by token claimsMCP Gateway

Agent packaging

The sandbox layer on Kubernetes consists of two pieces, with one on each side of the pod. Outside the pod sits a sandbox control plane, and inside the pod runs a supervisor process. In our blueprint OpenShell supplies both, and any implementation can fill either role because the contract between them is a Kubernetes custom resource.

The delivery path has two hops, with a custom resource in the middle. The control plane receives a request for an agent and writes a Sandbox custom resource; in our blueprint the OpenShell Gateway is the target implementation of this role as its Kubernetes path matures. The Agent Sandbox controller, a Kubernetes Special Interest Group (SIG) Apps subproject that implementations target, reconciles that resource into exactly one pod. One sandbox maps to one pod in the current API.

Inside the pod, the supervisor runs as PID 1 and starts before the agent does. It fetches policy from the control plane, installs the kernel filters, injects credentials, and then launches the harness as its child process. All egress leaves through the supervisor's proxy.

Policy enforcement splits along this same boundary. Kubernetes governs the pod from the outside using the following primitives:

  • Pod security standards
  • SELinux
  • NetworkPolicy
  • An optional Kata microVM through RuntimeClass
  • Confidential containers beneath those layers

The supervisor governs the process from inside, regulating which binaries the process can run, which paths it can touch, and which endpoints it can reach. Stacked together, these layers provide three nested isolation rings: hardware or virtual machine (VM), pod, and process. Every primitive in all three rings relies on standard Linux and Kubernetes technologies, such as seccomp, Landlock, namespaces, SELinux, AppArmor, or Kata Containers. None of these primitives depend on a GPU vendor.

One discipline from our 12-Factor Agent article carries over directly: the agent workload is long-lived, but its sessions are not. Sessions remain ephemeral, while workflow state lives outside the pod in a durable data store, such as a database, an object store, or a durable-execution engine. Consequently, each new session starts with a clean context.

Agent-as-a-Service

Everything above assumes the loop ships inside the pod with the harness. Red Hat OpenShift AI 3.5 (Early Access at the time of writing) ships a second pattern through the open source OGX project (formerly Llama Stack): Agent-as-a-Service. Here the agentic loop runs in a shared runtime behind the Responses API. The client sends one request naming the goal and the MCP servers it requires. The loop runtime advertises the tool schemas to the model, executes the calls the model selects, feeds results back, and iterates to a final answer. Every step lands in a durable data store. Figure 2 contrasts the two patterns side by side.

Comparison of Agent as a Workload and Agent as a Service loops, showing the workflow differences described in the accompanying text.
Figure 2: Two deployment patterns for the agentic loop.

The shared runtime inverts the pod pattern's trade-offs. It gains:

  • Enforcement in one place: every action transits the loop runtime.
  • One audit trail across all tenants.
  • Credential isolation: clients never hold tool credentials.

It pays with:

Most harnesses today are thick clients that own their loop, so adoption starts with operations teams standing up a shared runtime for request-scoped workloads: assistants, copilots, high-tenancy tools. Autonomous agents follow later.

The two patterns also compose. A sandboxed agent pod can delegate tool execution to a shared loop while keeping its own identity and rings, and the MCP Gateway's claims-based checks preserve per-agent policy inside the shared runtime. Duration and ownership pick the pattern, the same way you choose between a standard Deployment and a Knative service.

The governance

Governance in this blueprint consists of two mechanisms working as one system: workload identity establishes who the agent is, and tool authorization decides what that identity can do. Neither mechanism consults the model, and that's the point. While the agent's behavior can be manipulated, its credentials and permissions cannot.

Workload identity

SPIFFE/SPIRE gives each agent an automatically rotated cryptographic identity that is scoped to its namespace and service account. An authentication sidecar uses that identity for standards-based exchange with an identity provider such as Keycloak, using token exchange (RFC 8693) or the JWT bearer grant (RFC 7523), depending on the provider's support for externally issued tokens. 

This process trades the identity for short-lived access tokens to downstream services, to help verify no static API key exists anywhere in the path. The payoff is clear: a leaked prompt or workspace file contains nothing durable to steal. Lifecycle tooling planned as part of Red Hat AI injects the sidecar and the identity plumbing at deploy time, with no agent code changes.

Tool governance

The MCP Gateway, built on Envoy with Kuadrant/Authorino for policy, fronts every MCP tool server behind a single endpoint. The agent is configured with one MCP_URL variable and sees an aggregated tool catalog. Token claims minted during the workload identity exchange then decide which tools the agent can actually call. The gateway never reads the prompt. A prompt-injection attack that forces the model to call an unauthorized tool fails at the infrastructure layer because authorization is not the model's decision to make. 

What the gateway cannot stop is misuse of tools the agent is entitled to call, such as an injected instruction that exfiltrates data through a permitted endpoint. That risk belongs to the inference guardrails and egress policy described in the security model, which is why this checkpoint is one control among several rather than the whole defense. The same claims-based check covers every tool backend equally: a CUDA service, an OR-Tools container, or a Software-as-a-Service (SaaS) endpoint. MCP itself now lives under neutral governance, donated to the Agentic AI Foundation under the Linux Foundation in late 2025, with an authorization model that makes each tool server an OAuth 2.1 resource server, which is precisely the claims-checking this gateway enforces. This is the checkpoint from Figure 1 doing its job.

Inference routing

An inference request crosses three routers on its way to an AI accelerator. Three tiers exist because the three decisions have different owners: where a query may go is a security decision, which model serves it is a cost decision, and which replica executes it is an efficiency decision. Collapsing them into one router would put one component in charge of three concerns that change at different speeds and answer to different teams. Table 2 summarizes the three tiers, and Figure 3 follows one request across them.

Table 2: The three inference routing tiers.
TierComponentQuestion it answersDecision inputs
1Sandbox egress router (in supervisor)Where may this query go?Policy, privacy class, PII masking, local vs. cloud
2Semantic routing (vLLM Semantic Router or AI gateway)Which model should serve it?Intent and complexity classification, cost, reasoning on/off
3llm-d Router (EPP or Gateway API InferenceeExtension)Which replica serves it?KV cache locality, load, prefill/decode disaggregation
Flow of an inference request passing through Tier 1 egress, Tier 2 semantic, and Tier 3 efficiency routing to reach vLLM workers.
Figure 3: One inference request, three routing decisions on its way to an AI accelerator.

Tier 1 is the security tier and lives client-side in every sandbox, inside the supervisor. Confidential context never leaves the cluster, and anything routed to an external endpoint is disguised to protect personally identifiable information (PII) first. For in-cluster traffic, the same router directs requests to the AI gateway, so even local inference enters through the governed front door rather than reaching model endpoints directly. The masking is detection-and-redaction at the proxy, so residual false-negative leakage is the control's main failure mode and should be monitored.

Tier 2 is the cost tier: a lightweight classifier selects the cheapest model that can handle the request. The classifier itself adds latency and can misroute, so this tier is a measured trade-off rather than free capacity. The system needs a fallback that escalates to a more capable model on low-confidence or low-quality signals.

Tier 3 is the efficiency tier: once the model pool is fixed, llm-d's endpoint picker maximizes KV-cache hits and balances load across vLLM workers. Red Hat's integration work describes the split the same way: the semantic router picks the model, llm-d schedules replicas within the pool.

Two properties make this path operable, and they're the same two demands you would place on any request path in production. It is traceable end to end when instrumented: OpenTelemetry follows a request across all three tiers, and MLflow Tracing records tool calls, prompts and outputs, latencies and costs. MLflow Tracing itself is production-ready; the OpenTelemetry GenAI semantic conventions it emits are still in development, so plan for attribute changes rather than interface rewrites (see Table 4). And it's decoupled at every hop: every hop speaks OpenAI-compatible or OpenResponses APIs, so the model behind the path can change without the agent noticing.

Job placement

A common design mistake we see is assuming the skills execute inside the agent pod. This habit carries over from library-based development, where importing a capability means hosting its compute resources. In this blueprint, the skill components in Figure 1 represent definitions and thin clients: instruction files and API bindings rather than AI workloads. The distinction keeps the agent pod cheap and the blast radius small. Heavy compute tasks follow one of three patterns, and only pattern 1 runs in the pod: execute in place, call a service, or dispatch a job (Table 3).

Table 3: Skill execution patterns and their enforcement points.
PatternWhere compute runsEnforcement pointTypical use
1: In-podInside the sandbox (the agent-sandbox SIG's Sandbox custom resource must request a GPU explicitly)Kernel: seccomp, LandlockLight DataFrame ETL (cuDF, Polars, DuckDB)
2: Service callSeparate serving pods, any cluster, or SaaSMCP Gateway & egress policyOptimization REST (cuOpt, OR-Tools), RAG services
3: Job dispatchBatch jobs dispatched via the Kubernetes Job API or SlurmScoped role-based access control (RBAC) & admissionPhysics simulation (PhysicsNeMo, JAX), quantum programs

Pattern 2 serves as the default model at scale. For this reason, Figure 1 illustrates skill backends as a location-agnostic column outside the platform bars. The optimization service can be cuOpt on a GPU node or OR-Tools on CPU; the agent's client and the gateway policy do not change. Because authorization is endpoint-specific and claims-based, relocating or swapping a backend is a policy change rather than an architecture change. Pattern 3 needs the most attention in security review: an agent that can create Jobs can create arbitrary workloads, so its RBAC must be scoped tightly.

Getting this split right also sets the economics. Agent pods stay resource-efficient, dense, long-lived, and CPU-only in the common case, with the in-pod GPU of pattern 1 as the deliberate exception, while expensive accelerators sit in pooled backends that scale independently. The fleet then scales on two independent axes: agent count on cheap cores, accelerator capacity on utilization, and neither purchase forces the other.

To see the blueprint in action, follow one request end to end; every component named so far makes exactly one appearance. 

A field-service agent receives a dispatch-optimization goal and initializes inside its sandboxed pod. The process then unfolds across the layers:

  • The harness calls the optimization skill; the MCP Gateway checks the agent's token claims and forwards the call to the cuOpt or OR-Tools backend.
  • The planning prompt carries customer data, so tier 1 keeps it on in-cluster models; a follow-up summarization request is low-risk, so tier 2 routes it to a small model and tier 3 picks the replica with the warmest cache.
  • Every tool call, authorization decision, latency, and cost lands in the OpenTelemetry and MLflow trail. 

At no point does the architecture depend on the model performing predictably; the path maintains the same shape even against a hostile model.

Security model

The distinctive threat with a long-running agent is that the workload itself can be turned against you. A prompt-injection attack can redirect its goals, a poisoned tool result can corrupt its memory, and a compromised skill dependency can act with everything the agent is allowed to reach. The design response is to assume the model's behavior cannot be trusted and to route every consequential action through enforcement the model cannot influence.

Figure 4 shows how the architecture layers that enforcement: three nested isolation rings around the agent process, and four cross-cutting controls that apply across all of them. The rings nest deliberately: each one assumes the ring inside it has already failed.

Three nested isolation rings—process, pod, and hardware—with four cross-cutting security controls illustrating defense in depth for agents.
Figure 4: Defense in depth for agents. Three nested isolation rings and four cross-cutting controls.
  • Ring 1 (process): The sandbox supervisor enforces per-binary, per-path, per-endpoint policy via kernel primitives (seccomp, Landlock, network namespaces). The agent cannot override this policy even if compromised because the policy lives outside the process it constrains.
  • Ring 2 (pod): Kubernetes pod security standards, SELinux, AppArmor, NetworkPolicy, and resource quotas bound what the pod can reach and consume. Optionally, Kata Containers add a microVM boundary per sandbox.
  • Ring 3 (hardware): Confidential containers extend the trust boundary into silicon, protecting an agent's memory at runtime even if a neighboring workload or the node itself is breached, with attestation proving the sandbox runs the code it claims before any secret is released. This ring is the precondition for multi-tenant agent designs. Confidential computing on GPUs is now generally available on current accelerators but still carries runtime overhead, concentrated in host-to-device transfers, so treat it as the ring you plan for rather than the one you start with.

Four controls cut across all three rings, and they carry the same names in Figure 4:

  • Workload identity: SPIFFE SVIDs replace static keys, so a leaked workspace contains nothing durable to steal.
  • Tool authorization: The MCP Gateway authorizes every tool call from token claims, never from prompt content.
  • Inference guardrails: Input and output screening at the inference boundary (TrustyAI Guardrails Orchestrator, NeMo Guardrails).
  • Pre-production testing: Adversarial scanning in CI/CD pipelines catches jailbreak and injection weaknesses before an agent is promoted.

The rings and the controls answer different questions. The rings limit what a compromised agent can do; the controls reduce the chance it gets compromised and remove the rewards if it does. Containment economics follow from the single-sandbox, single-pod, and single-identity mapping: revoking, throttling, or terminating a misbehaving agent is a single targeted operation instead of an incident-wide hunt. The MLflow/OpenTelemetry trail turns every enforcement decision into reviewable evidence, and the posture holds unchanged at the edge as in the data center.

Vendor gravity and escape hatches

Vendor gravity in this stack lives in the libraries and the silicon, one layer below where most lock-in audits look. The license layer is clean: several core building blocks are open source under permissive terms (OpenShell and NemoClaw are Apache-2.0), so no single vendor holds exclusive rights to the architecture, while commercial packaging, NIM profiles, CUDA libraries, and certified support remain vendor-specific. What binds you, when something does, is an unported library or a proprietary interconnect. Here is our layer-by-layer audit:

  • Interface-portable: The model layer is any open model behind the same API. The agent blueprint is YAML, portable by construction. The sandbox runtime enforces policies with stock Linux primitives, and Kata Containers plus the agent-sandbox SIG covers the same three rings on any conformant cluster. The whole inference plane is portable: semantic routing and llm-d are vendor-neutral, and vLLM runs on CUDA, ROCm, XPU, and CPU directly, with TPU, Gaudi, and other accelerators supported via hardware plug-ins. The serving architecture therefore survives a full silicon swap untouched at the interface level. Achieving operational parity in performance, tuning, and accelerator coverage is engineering work you should plan for.
  • Sticky: The CUDA-X libraries are the real gravity: cuDF, cuOpt, and PhysicsNeMo are CUDA underneath, and NIM containers run only on NVIDIA silicon. Substitutes exist with trade-offs: Polars, DuckDB or Spark for DataFrames, OR-Tools or HiGHS for optimization, and JAX-based surrogates for physics. What the architecture controls is the price of the swap: skill backends sit behind neutral REST/MCP interfaces, so replacing cuOpt with OR-Tools is an endpoint and policy change rather than a redesign.

The rule we enforce throughout the blueprint: every vendor component sits behind a neutral interface. That means OpenAI-compatible and OpenResponses for models, MCP for tools, REST for skill backends, the agent-sandbox API for isolation, and SPIFFE for identity. Under that rule, vendors compete on price/performance per component instead of owning your architecture, and procurement decisions stay reversible for the lifetime of the deployment. NVIDIA then becomes a per-component choice rather than a structural dependency.

Maturity and open items

Not everything in Figure 1 is equally ready. In Table 4, we separate the layers you can run in production today from the layers to treat as preview, where interfaces will still change. The reading rule: build your base decisions on the mature column, adopt from the preview column behind pinned versions and feature gates, and revisit at each release.

Table 4: Maturity map across the blueprint layers.
LayerMature todayEmerging / preview
Workload identitySPIFFE/SPIRE · JWT-SVIDAgent-specific identity injection (Kagenti) · identity chaining (IETF WIMSE)
Tool governanceGateway patterns (Envoy, Kuadrant)MCP Gateway · claims-filtered tool catalogs
Agent sandboxKata · kernel primitivesagent-sandbox CRD (SIG Apps, v1beta1) · OpenShell (alpha)
InferencevLLM · OpenAI-compatible APIs · llm-d Router (Gateway API Inference Extension GA)Semantic routing
Agentic loop runtimeClient-side loops in harnessesOGX (OpenShift AI 3.5 EA) · caller-identity propagation
Agent lifecycleGitOps · Helm · operatorsNemoClaw (pre-1.0) · OGX Operator (OpenShift AI 3.5 EA)

And a blueprint earns trust by stating what it does not solve yet. Note that each of the following open items belongs to a different discipline, which is itself the message: closing them takes products, standards bodies, researchers, and operators, and no single vendor closes the list.

  • Human approval workflows for high-risk actions still need product-level patterns.
  • Multi-agent coordination standards are converging (A2A reached 1.0) but interoperability in practice is not settled.
  • Agent memory poisoning remains an open research and engineering problem.
  • Sandbox policy authoring is operationally complex at fleet scale.
  • Cost modeling for long-running agents needs real workload data.
  • Confidential computing protects memory at runtime; it does not stop prompt-layer or tool-layer compromise.

Closing notes

In this article we walked the agentic stack inside out. We defined the agent as model, harness, and sandbox runtime, and laid the solution out in Figure 1 as interchangeable components behind open interfaces. 

Then we followed it through delivery: an agent packaged as one sandboxed pod, or delegating its loop to a shared runtime where the workload profile fits, governed by workload identity and claims-checked tool calls, served through three routing tiers to vLLM workers, with skill compute placed in governed backends and a defense-in-depth security model wrapping it all. 

The result is a blueprint you can begin assembling today from open source parts, treating several layers as preview, with vendor choices that stay reversible at the interfaces you kept neutral. Managed sandbox services offer parts of this blueprint as SaaS; what the open architecture adds is that the isolation, identity, and governance layers stay on infrastructure you control, with interfaces you can take to any conformant cluster. We verified the component landscape in this article as of July 2026; in a stack where several layers are pre-1.0, check the linked projects for current status before you build.

The agentic stack is beginning to look like the microservices stack one abstraction up: blueprints instead of charts, sandboxes instead of containers, inference routing instead of service mesh, skills instead of client libraries, and share d loop runtimes instead of application servers. The same disciplines apply: least privilege, declarative policy, separate control and data planes, pooled expensive resources behind schedulers, and keeping the interfaces under your own control. The difference is that this workload makes its own decisions for days at a time. The stack above is what it takes to let it do that safely, observably, portably, and at a cost per task you can measure.

Where to go next

Architecture arguments are easier to judge with running code, so we are rebuilding our Telecom AI Experiments workloads on this blueprint at agent-school; the 101 NOC Assistant runs offline on a laptop in two commands. To run the blueprint on your own infrastructure, we recommend exploring Red Hat AI, Red Hat OpenShift AI, and Red Hat AI Inference Server.

The post Architect an open blueprint for cloud-native AI agents appeared first on Red Hat Developer.

Read the whole story
alvinashcraft
43 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Computer use: How AI agents can automate almost anything

1 Share

"Hey, can you take a photo of me using Photo Booth with a filter… also, open Chess and move some of the pawns up."

That little exchange shows computer use in action, one of the coolest things happening in agentic AI right now.

A Hermes agent terminal interface executing commands alongside active Photo Booth and Chess windows on a macOS desktop.
Figure 1: My AI agent controlling my macOS desktop applications through computer use.

What is computer use?

Computer use lets an AI use software the same way you do, so it can view the screen, click, and type—all without you touching the keyboard or mouse. This approach is invaluable for automating tedious, manual tasks. For example, one of my previous jobs required me to move data from a CRM into Jira tickets. Computer use can also help with enterprise-level tasks where custom integrations are not available.

Pretty neat, right? But you almost certainly have private data on your own machine that you'd rather not hand to a third-party AI provider. If you pay per token via an LLM API, these tool calls can get quite expensive. You might want to look at running your own LLM and wiring it up to an agent running locally.

With that in mind, I'll show you how to run an open-weight model (such as Qwen or Gemma) with an open source AI harness (Hermes) so that you can implement computer use on your own terms.

Step 1: Pick a model (and don't overpay for hardware)

When you choose a model, it's worth checking out Red Hat AI on Hugging Face, where an entire library of compressed models can dramatically cut your hardware requirements (in some cases, halving the RAM requirements or more). The core technique is quantization, which squeezes a model down to fewer bits per weight (Figure 2).

A horizontal diagram illustrating precision and dynamic range across FP32, BF16, FP16, and INT8 model weight formats.
Figure 2: Quantization compresses model weights to fewer bits, shrinking the memory footprint while preserving nearly all the original accuracy.

Take the Qwen 3.6 35B model shown in Figure 3. The native released weights in full precision are roughly 72 GB. Red Hat's 4-bit version? About 25 GB. This reduced footprint means that you can run this model on your own MacBook Pro with stable performance. Thanks to modern compression algorithms, the quantized version performs almost identically to the original on most benchmarks. The compressed version retains 99% of the original model accuracy while using a fraction of the hardware footprint.

The Qwen 3.6 35B model repository page on Hugging Face next to the compressed 4-bit version hosted by Red Hat AI.
Figure 3: While the full-precision weights require roughly 72 GB, Red Hat's 4-bit compressed model fits in about 25 GB.

Step 2: Deploy it (either locally or on Kubernetes)

For this example, we use Qwen 3.6 with 35 billion parameters. It's a sparse Mixture-of-Experts model, meaning it features 35 billion total parameters with roughly 3 billion active parameters per token, and it's natively multimodal. This architecture makes it a good fit for computer use because the agent passes a screen capture to the model and then uses tools to interact with user interface elements like check boxes.

Now, let's get it running.

Deploying the model locally

If you have the hardware to run it (I like to use the llmfit project to check compatibility before downloading anything) you might be surprised by how quickly you can serve a model locally. As a macOS user, I've tried most of the local inference tools, from Ollama to LM Studio and upstream llama.cpp. These days, I'm reaching for oMLX, a simple open source server and menu-bar application that manages models and exposes an OpenAI-compatible API endpoint (Figure 4). This tool usesApple's MLX framework to accelerate inference through unified memory.

The oMLX Chat application interface displaying a response from a locally served Qwen 3.6 35B 4-bit model.
Figure 4: An instance of oMLX serving Qwen 3.6 35B locally on a workstation and exposing an OpenAI-compatible API endpoint using Apple's MLX framework.

If you are developing on Windows or Linux, the same model runs through llama.cpp. Download a model (Unsloth, shown in Figure 5, makes some good quantized ones), point llama-server at it, and configure the same OpenAI-compatible endpoint to connect your agent.

The Unsloth AI organization page on Hugging Face listing various quantized models compressed in GGUF format.
Figure 5: Various models compressed in the GGUF format for consumer use.

Deploying the model with vLLM on OpenShift AI

On Red Hat OpenShift AI, you can deploy models directly from the model catalog onto a Kubernetes environment. You can then create a route to make the model reachable from outside the cluster, authenticated with a custom API key.

Inside the cluster, the platform optimizes throughput and reduces latency by intelligently routing traffic and disaggregating the inference steps. This process splits the compute-heavy prefill phase from the memory-bound decode phase by using the llm-d project. In Red Hat's published benchmarks, intelligent inference scheduling delivered up to 57 times faster time-to-first-token and roughly two times the throughput compared to naive round-robin routing on the same hardware.

The Red Hat OpenShift AI dashboard listing deployed model instances, active serving runtimes, and inference endpoints.
Figure 6: Deployed models within OpenShift AI, which allows users to manage endpoints and serving runtimes like vLLM.

Note

To learn more about the differences between llama.cpp and vLLM, read our guide on choosing the right local LLM inference engine.

Step 3: Set up the local agent

On my local machine, I've installed Hermes, a popular open source AI agent that runs on macOS, Windows, and Linux (Figure 7). Hermes can write code, manage your calendar, diagnose your Kubernetes cluster, and more. Because it connects to any OpenAI-compatible endpoint, I can point it directly at the model I just served—whether that's oMLX on my macOS environment or vLLM on OpenShift—with no code changes. The configuration requires only a base URL and an API key.

A terminal window showing the Hermes agent startup interface, listing available system tools and configuration options.
Figure 7: The Hermes agent user interface showing available tools and service connections.

To interact with your desktop, Hermes performs computer use through a computer use agent (CUA) driver, which is an open source tool that lets the agent control the screen. The driver also includes configurable, multi-layer guardrails that protect windows from closing unexpectedly and require user approval before the agent types text or takes sensitive actions. You stay in the loop.

A split-screen workspace featuring the computer use agent terminal on the left and a DeepSeek research paper PDF on the right.
Figure 8: Using computer use in my daily work to understand this diagram from the DeepSeek DFlash research paper.

Step 4: Profit? Well, yes

So, let's give it a try: "Hey, can you use my browser to go to the vLLM repo and give it a star?"

Just kidding, you don't have to. But that's what computer use is all about. The model reads the screen, finds the browser, locates the star button, and selects it automatically. This architectural configuration differs because it runs entirely within a sovereign environment, keeping the local model, the local agent, and your private data on your machine.

To explore more capabilities, view the available open source tools and options from Red Hat AI.

The post Computer use: How AI agents can automate almost anything appeared first on Red Hat Developer.

Read the whole story
alvinashcraft
43 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

GitHub Agentic Workflows vs Microsoft Scout vs Copilot App: Which Tool to Use When

1 Share

Disclaimer: This post was originally published on Azure with AJ and has been reproduced here with permission. You can find the original post here.

If you have been anywhere near the Microsoft and GitHub ecosystem since Build 2026, you have probably felt it. GitHub Agentic Workflows, Microsoft Scout, and the GitHub Copilot app all landed within weeks of each other, all promise to automate your day to day, and all draw from the same GitHub Copilot credit pool. It is like being handed three lightsabers and being told “you’ll know which one to use when the time comes”. Helpful, thanks Obi-Wan.

The confusion is understandable. Each of these tools runs AI agents, each connects to GitHub, and each consumes GitHub Copilot AI credits. So which one do you reach for when an issue needs triaging, when your inbox is on fire, or when you have five parallel coding tasks on the go?

In this post I break down what each tool actually is, where Microsoft and GitHub say it fits, and give you a simple decision framework so you stop second guessing yourself. Everything here is drawn from official Microsoft and GitHub documentation and announcements, not speculation.

TL;DR

  • GitHub Agentic Workflows automate repository tasks that run without you, triggered by events, schedules, or commands inside GitHub Actions.
  • Microsoft Scout is your always on personal agent for Microsoft 365 and your desktop, handling operational and coordination work like email, calendar, files, and follow ups.
  • GitHub Copilot app is your desktop control centre for supervised coding sessions, orchestrating multiple Copilot agents working on code in parallel.
  • All three consume GitHub Copilot AI credits, so pick the right tool for the job or you will burn budget on the wrong surface.
  • Rule of thumb: repo automation goes to Agentic Workflows, personal productivity goes to Scout, and active coding work goes to the Copilot app.

Why the Confusion Exists

Microsoft and GitHub shipped three agentic surfaces in rapid succession. Scout and the Copilot app were both announced at Build 2026 in June, and GitHub Agentic Workflows entered public preview in the same month. Each one was pitched as “agents that do work for you”.

The overlap is real on the surface:

 

Shared billing is exactly why choosing the right tool matters. Agentic tasks can consume significantly more credits than a simple chat prompt, so running the wrong agent for the job is not just inefficient, it is expensive. Beneath the shared plumbing, each tool answers a completely different question.

GitHub Agentic Workflows: Automation That Runs Without You

GitHub Agentic Workflows let you describe repository automation in natural language Markdown. The gh aw CLI compiles your Markdown into a standard GitHub Actions workflow, so it reuses your existing runners, secrets, and policies.

The defining characteristic is that nobody is watching. These workflows trigger on repository events, cron schedules, or slash commands, and an AI coding agent carries out the reasoning step unattended. Think:

  • Intelligent issue triage and labelling
  • CI failure analysis with suggested fixes
  • Keeping documentation synchronised with code changes
  • Dependency and security hygiene sweeps

 

Because agents run unattended, GitHub wrapped them in a security first architecture. Agents run read only by default inside a sandboxed environment with a workflow firewall, and anything that writes back goes through audited safe outputs. Billing covers GitHub Actions minutes plus AI credits for the inference itself.

Use it when: the task belongs to the repository, repeats over time, and does not need a human in the loop for every run. I covered this in depth in Agentic Workflows: Reimagining Repository Automation if you want the full picture.

Microsoft Scout: Your Always On Personal Agent

Microsoft Scout is the first of Microsoft’s “Autopilot agents”, currently in preview through the Microsoft Frontier program. Where Copilot answers when you ask, Scout keeps working when you are not looking.

Scout runs on your Windows or macOS desktop and can, with your permission:

  • Read and write local files and run shell commands
  • Automate browser actions like filling forms
  • Manage your Microsoft 365 world: email, calendar, Teams, meetings, and files
  • Run on schedules or triggers, proactively flagging risks like stalled decisions or overdue tasks

 

The enterprise story is strong. Each Scout instance carries its own Entra ID identity, every action is policy checked and audited, and sensitive actions require explicit approval. The prerequisites are meaningful: Frontier enrolment, a Microsoft 365 Copilot licence, an Intune managed device, and a GitHub Copilot Business or Enterprise licence, because Scout’s AI consumption is billed through GitHub Copilot credits.

That last point trips people up. Scout is a Microsoft 365 product that spends your GitHub Copilot budget. It is the clearest signal yet that Microsoft treats Copilot credits as the common currency for agentic work across the whole ecosystem.

Use it when: the work is about you and your day, not a codebase. Inbox triage, meeting preparation, chasing follow ups, coordinating across Teams and Outlook. Scout is your operational chief of staff, not your pair programmer.

GitHub Copilot App: Your Agent Orchestration Desk

The GitHub Copilot app went generally available on 17 June 2026 for macOS, Windows, and Linux. It is not an IDE and it does not replace VS Code. It is a dedicated desktop surface for supervising multiple coding agents at once.

The headline features tell you exactly what it is for:

  • My Work dashboard showing active agent sessions, issues, and pull requests across repositories
  • Parallel sessions where each agent works in an isolated git worktree, locally or in the cloud
  • Canvases, shared spaces where plans, terminals, diffs, and reviews happen in the open rather than buried in a chat thread
  • Agent Merge, which shepherds pull requests through reviews and checks while you stay in control

 

The mental model GitHub is pushing is that you shift from writing every line to directing agents like a project lead. You kick off three or four coding sessions, review their plans, steer them in canvases, and merge the results. It is available to Copilot Pro, Pro+, Business, and Enterprise subscribers, and yes, those agent sessions consume Copilot credits.

Use it when: you have active, interactive coding work and want to run several streams in parallel with you in the loop. This is the Agent HQ vision landing on the desktop, which I explored in Welcome Home, Agents.

The Decision Framework

Here is the flow I use when deciding where a piece of work should go.

And the side by side view:

Dimension 

Agentic Workflows 

Microsoft Scout 

Copilot App 

Scope 

Repository and org automation 

Your personal and Microsoft 365 work 

Active coding sessions 

Human in loop 

No, unattended with audited outputs 

Approval gates on sensitive actions 

Yes, you supervise and steer 

Where it runs 

GitHub Actions runners 

Your desktop plus Microsoft 365 cloud 

Desktop app, local or cloud sessions 

Trigger 

Events, schedules, commands 

Always on, schedules, proactive 

You launch sessions 

Licensing 

Copilot plan plus Actions minutes 

M365 Copilot plus GitHub Copilot Business/Enterprise 

Copilot Pro, Pro+, Business, Enterprise 

Billing 

Actions minutes plus Copilot AI credits 

Copilot AI credits via GitHub 

Copilot AI credits 

Availability 

Public preview 

Frontier preview 

Generally available 

Where They Overlap, and the Official Stance

There are genuine grey areas. Scout can technically touch repositories, the Copilot app can schedule recurring cloud automations, and Agentic Workflows can be triggered manually. So what do Microsoft and GitHub actually recommend?

The positioning in the official material is consistent:

 

In other words, the vendors themselves draw the lines at repository, person, and coding session. When you are tempted to bend one tool into another’s lane, remember that each is hardened for its own context. Agentic Workflows have the sandbox and safe outputs for unattended repo access. Scout has Entra identity, Purview integration, and Intune controls for personal and enterprise data. The Copilot app has worktree isolation for parallel code changes. Using the right tool is not just cleaner, it keeps you inside the guardrails each team built.

One practical tip on credits: because everything meters against the same Copilot AI credit pool, treat unattended automation with the same discipline as cloud spend. Start Agentic Workflows on a small number of high value tasks, watch the credit reporting, and expand from there.

Conclusion

The three tools are not competitors, they are three seats at the same agentic table. GitHub Agentic Workflows keep your repositories healthy while you sleep. Microsoft Scout keeps your day moving while you focus. The GitHub Copilot app is where you sit when you are actively directing coding agents.

The confusion melts away once you ask two questions: is this about a repository or about me, and do I need to be in the loop? Answer those and the choice makes itself, and it will match exactly where Microsoft and GitHub are steering each product.

If you want to go deeper, start with Agentic Workflows: Reimagining Repository Automation for the repo automation side, and Azure DevOps vs GitHub: Your 2026 Platform Decision for the bigger platform picture.

Have you worked out your own split between these three tools? Are your Copilot credits going where you expected? Share your experiences in the comments.

Read the whole story
alvinashcraft
43 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Are Azure Logic Apps really low-code or no-code?

1 Share

(Spoiler: It’s Complicated) 

Azure Logic Apps is often presented as a way to build integrations with minimal code. You might have been sold the dream of dragging boxes onto a canvas and never touching code again. Then you’ll hit your first @{body(‘Parse_JSON’)?[‘items’][0]?[‘value’]} and wonder where it all went wrong. 

TL;DR

Azure Logic Apps is genuinely low-code – it lowers the barrier to building integrations dramatically.

But it’s rarely no-code: the moment you need real-world error handling, data shaping, or proper deployment, you’re writing something that walks and quacks like code.

Here’s where the marketing meets reality, and a straight answer on when to reach for Logic Apps, Function Apps, or combine both when you need the strengths of each.

When Azure Logic Apps really is a 'no-code' dream

Credit where it’s due. For a specific class of problem, Logic Apps absolutely delivers:

  • “When an email arrives with an attachment, save it to SharePoint and post to Teams.” Three connectors, zero code, done in ten minutes.
  • You have simple, linear trigger-action workflows where connectors do exactly what you need out of the box.
  • You’re connecting SaaS platforms with first-party connectors.
  • The workflow genuinely looks like a recipe: do this, then this, then this.

 

The citizen developer dream is real here.

Where Azure Logic Apps quietly becomes code

The trouble is that real-world integration is rarely a clean recipe. The moment you step off the happy path, the abstraction gets thin fast.

1. The expression language is code

The second you need to reshape data, filter an array, or handle a null, you’re writing Workflow Definition Language (WDL) expressions:
				
					@{items('For_each')?['orderId']}
				
			
That’s a function language with its own syntax, quirks and learning curve. Try explaining coalesce(), triggerBody(), and the ?[] safe-navigation operator to a “no-code” business user.

2. You will end up in code view

Every Logic App is JSON underneath.

For anything non-trivial – debugging a parameter issue, copying actions or fixing something the designer mangled – you’ll eventually open code view.
 
And once you’re hand-editing JSON, let’s be honest about what we’re doing.

3. Error handling is an engineering exercise

Retries, runAfter configurations, scopes, try/catch patterns, dead-lettering, idempotency.

Building something resilient isn’t fundamentally different from applying the same engineering principles you’d use in traditional code.

4. Deployment is infrastructure as code

Run a single Logic App manually in the Azure portal and sure, no code.

Run an Enterprise Integration Platform with dozens of Logic Apps across development, test and production environments with CI/CD pipelines and governance requirements? Now you’re managing Bicep templates, API connections, source control, environments, deployments and arguing with pipeline. That’s a DevOps discipline.

5. Data transformation hits a wall

Need to map a complex payload?

You’ll soon be reaching for:
  • Liquid templates
  • Data Operations
  • Integration Accounts
  • XML and EDI transformations

 

At that point, you’re writing syntax and rules that are arguably more abstract than C#.

So, is Azure Logic Apps low-code, no-code or neither?

Low-code is the honest label.

Logic Apps lowers the barrier, but it doesn’t remove it.
 
It takes integrations that once needed a developer and a week of effort and allows a capable person to deliver them in an afternoon. That’s a genuine, enormous productivity win.
 
But “no-code” can be a trap.
 
It encourages organisations to hand production-grade integrations to people without the engineering instincts required to build and maintain them properly. The bill arrives later as a sprawling collection of brittle workflows nobody can debug and nobody placed in source control.

Logic Apps doesn't eliminate engineering. It changes where the engineering effort goes - from writing boilerplate code to designing reliable, observable and deployable workflows.

Azure Logic Apps vs Function Apps: which should you use?

This is the question I get on nearly every engagement.

Here’s the rule of thumb I keep coming back to:
Logic Apps handles the “what happens when”.
Function Apps handle the “how”.
The moment you need both, reach for a hybrid architecture.

When to use Azure Logic Apps

Reach for Logic Apps when:

  • You’re orchestrating chaining systems together and the value is in the workflow, not the compute.
  • The heavy lifting is already handled by a prebuilt connector (Office 365, Service Bus, SAP, Salesforce, SQL there are 1,400-odd of them). 
  • The process is event-driven or schedule-driven “when X lands, do Y, then Z.” 
  • You want the logic to be visible and business-readable someone other than the original author can open the designer and follow it.
  • Volume is low-to-moderate. 

 

Think:
  • Approvals
  • Notifications
  • B2B and EDI processes
  • System synchronisation
  • Long-running workflows with built-in state

When to use Azure Function Apps

Reach for Function Apps when:

  • You’re writing genuine custom business logic, an algorithm, a gnarly calculation, parsing something nobody built a connector for.
  • You need low latency, performance or high throughput. Functions scale for compute in a way Logic Apps doesn’t. 
  • The transformation would be painful in WDL but simple in C#, Python or JavaScript.
  • You’re dealing with heavy nested looping, calculations or complex processing and multiple downstream services.
Think:
  • Custom APIs
  • Data processing
  • Image processing
  • Business rules engines
  • Anything you’d want a test suite around

When to combine Logic Apps and Function Apps and go hybrid?

Honestly? Most of the time.

The best Azure integration architectures don’t pick a side, they let each service do what it’s good at:
  • Logic App as the conductor: owns triggers, connectors, retries and end-to-end orchestration.
  • Function App as the brains: handles complex transformations, calculations and custom logic.
You get business-readable orchestration alongside testable, version-controlled code where it actually adds value.
 
A common pattern is a Logic App receiving an order, orchestrating approvals and notifications through connectors, and delegating pricing calculations or business rules to a Function App.
 
Neither tool is being forced beyond its strengths.
 
If you need… Use
Connectors, orchestration, visible workflow Logic Apps
Custom code, performance, testability Function Apps
Orchestration and custom business logic Hybrid (Logic App + Function App)

Frequently asked questions

Are Azure Logic Apps really no-code?

They can be for straightforward workflows using standard connectors. For enterprise-grade integrations, most teams eventually work with expressions, deployment pipelines and engineering concepts that make Logic Apps a low-code platform rather than a true no-code platform.

When should I use Azure Functions instead of Logic Apps?

Use Function Apps when you need custom code, complex transformations, performance or logic that would be difficult to maintain in Workflow Definition Language expressions.

Can Logic Apps and Function Apps be used together?

Yes. In fact, this is one of the most common Azure integration patterns. Logic Apps handles orchestration while Functions handles specialised business logic.

The bottom line

Are Azure Logic Apps really low-code or no-code?

They’re definitely low-code and only genuinely no-code for simple integrations.
 
The drag-and-drop designer gets you through the easy 80%. The remaining 20% – expressions, error handling, observability, deployment and governance – is what separates a demo from a production system. And that 20% is unmistakably engineering.
 
So don’t choose tools based on the marketing label.
 
Choose them based on the shape of the problem:
  • Orchestration leans towards Logic Apps.
  • Custom business logic leans towards Functions.
  • Most serious integration architectures benefit from both.

 

Building integration solutions on Azure and not sure where the lines sit? That’s exactly the kind of thing we help clients untangle at Arinco – come say hi.
Read the whole story
alvinashcraft
43 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

PyTorch distributed is changing and TorchComms is why

1 Share

For most PyTorch users, "distributed" still means c10d. That's the runtime surface they use today, and it will remain the surface for a while. The real question is what should replace the old backend layer underneath it as training and inference systems demand more than host-driven process groups and standard collectives. TorchComms is the clearest answer PyTorch has presented so far.

Why replace c10d

The c10d library gave PyTorch a ProcessGroup-centered distributed runtime. That interface is still what most users touch, and it's not going away overnight. But the old back-end layer underneath it was designed around host-driven collectives and a smaller communication design space than modern LLM training and inference now need. TorchComms is the replacement path for that back-end layer.

That's the right scope for the claim. TorchComms doesn't need you to rewrite your code and throw away torch.distributed. Instead, it allows you to replace the old c10d backend substrate with a communicator-centric layer that can still plug back into torch.distributed.

The official launch material makes that roadmap explicit: The old c10d::Backend interface is expected to be retired gradually as TorchComms stabilizes underneath PyTorch Distributed.

That distinction matters. The replacement target is the back-end layer, not the entire distributed surface area. ProcessGroup, DeviceMesh, FSDP, TorchTitan, and higher-level training code can keep their existing structure while the communication implementation underneath them becomes more explicit, more extensible, and easier to evolve.

Communicator-centric API

The core API shift is simple: TorchComms starts from explicit per-device communicators.

import torch
import torchcomms

device = torch.device("cuda")
backend = "ncclx"
comm = torchcomms.new_comm(backend, device, name="global")

x = torch.ones(1024, device=device)
comm.all_reduce(x, torchcomms.ReduceOp.SUM, async_op=False)

That looks small, but it is a real model change. Collectives, point-to-point operations, hooks, finalize, and window operations all hang off the communicator object. TorchComms also exposes pluggable backends, eager communicator setup, DeviceMesh integration, and communication surfaces that go beyond classic ProcessGroup collectives.

The practical payoff is lifecycle control. With a communicator object, setup, split, finalize, and backend-specific extensions live in one place. That makes it easier to add semantics such as windows, RMA, transport-specific hints, or future fault-tolerance operations without overloading a single generic ProcessGroup interface.

That back-end surface is also becoming easier to prototype against. A recent PyTorch distributed devlog shows Python bindings for TorchComms backends and two pure-Python prototypes, one on top of nccl4py and one on top of SymmetricMemory plus Triton, both still plugging into torch.distributed.

Those prototypes are not production-ready, but they reinforce the same point: TorchComms is not just a replacement for an old back-end interface, it's becoming the place where new communication ideas can be tried without first rewriting the C++ comms stack.

Migration path into PyTorch and Torchtitan

TorchComms is not only a standalone API. PyTorch already contains a wrapper path in torch/distributed/distributed_c10d.py that instantiates a TorchComms communicator, wraps it in _BackendWrapper, and attaches it to the existing ProcessGroup machinery when dist.config.use_torchcomms is enabled. That keeps the migration small:

import torch.distributed as dist
import torch.distributed.config as dist_config

dist_config.use_torchcomms = True
dist.init_process_group(backend="nccl")
dist.all_reduce(tensor)

The important detail in this local checkout is that the safe wrapper example is backend="nccl". The equivalent backend="ncclx" wrapper path still fails locally with AssertionError: Unknown backend type ncclx, so it must not be presented as already working everywhere.

Even with that caveat, the direction is clear. TorchComms is not being built as an isolated alternate runtime. It is being wired into the same torch.distributed and DeviceMesh ecosystem that large PyTorch training stacks already use today.

The same pattern shows up in Torchtitan. Torchtitan already exposes --comm.mode torchcomms, and its distributed initialization path sets dist.config.use_torchcomms = True before normal process-group and DeviceMesh setup.

Architecturally, that is the point: The model and parallelism code stay in the usual TorchTitan and DeviceMesh world. The communication layer underneath is what changes. In this bundle, the command is illustrative rather than a locally green end-to-end run, because the current environment still hits a tyro/typeguard mismatch before TorchComms initialization.

Process-group initialization time as number of GPUs increases.
Figure 1: Using ncclx, process-group initialization time increases less as number of GPUs increases. As the number of GPUs increase, the difference between nccl and ncclx is an order of magnitude.

Figure 1 shows the clearest startup result. Default process-group initialization drops from 14.5 seconds to 3.97 seconds at 8,000 GPUs, from 55.71 seconds to 11.89 seconds at 32,000 GPUs, and from 265 seconds to 24 seconds at 96,000 GPUs.

That's the strongest argument for replacing the old back-end layer with something built for large communicator counts, faster control-plane work, and topology-aware setup.

Those numbers matter because startup is not a cosmetic metric at this scale. Large jobs create many communicators, restart after faults, and repeatedly pay control-plane costs that are negligible on a small cluster but dominant at tens of thousands of GPUs. Faster initialization directly changes how practical a communication stack is for real training systems.

Decode-time in Distributed Inference.
Figure 2: Decode-time in Distributed Inference.

Figure 2 shows the inference side. Decode-time improvement rises with communication pressure: for k=1, batch=128, it grows from 19% at 4 hosts to 56.5% at 16 hosts. For k=4, batch=256, it grows from 45.87% at 4 hosts to 83.3% at 16 hosts. The baseline here is the token-shuffling path built from two AllGather operations and one AllToAll with the same compute kernels, so this is a back-end layer result rather than a generic c10d against TorchComms chart.

This is also why the TorchComms story is not only about training collectives. The back-end layer must handle both bulk-synchronous training and more dynamic, metadata-sensitive inference patterns. GPU-resident metadata, transport flexibility, and lower small-message overhead are central to that problem.

Latency multiplier at various cluster distance.
Figure 3: Latency multiplier at various cluster distance.

Figure 3 shows the network backdrop. Cross-rack, cross-zone, and cross-data-center traffic sees roughly 7x, 15x, and 30x the latency of same-rack communication. At that point, initialization, topology handling, registration, and small-message overhead are system constraints, not cleanup details.

Current status

The open source stack already has the key pieces in place: Direct communicators, a torch.distributed wrapper path, DeviceMesh integration, and a TorchTitan communication mode.

The safe wrapper example to show today is still the nccl route. The ncclx wrapper path is not something to present as universally wired through init_process_group yet.

That's a good way to read the current state of the project overall. The core architecture is already visible in the open tree. What is still uneven is the completeness of specific integration paths, not the direction of the design

Conclusion

The c10d library will remain the user-facing interface for a while, but the back-end layer underneath it is moving. TorchComms gives PyTorch explicit communicators, a wrapper path back into existing torch.distributed code, DeviceMesh integration, and communication surfaces such as windows and RMA that do not fit naturally inside the old back-end abstraction. The startup and inference results show why that matters at scale. Architecturally, the migration path is already visible in the open tree. That makes TorchComms the replacement path for the old c10d back-end layer, not just another back-end toggle.

References

The post PyTorch distributed is changing and TorchComms is why appeared first on Red Hat Developer.

Read the whole story
alvinashcraft
44 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories