{"templateName":"base-page-template54","cssClassNames":"page basicpage summit-page","canonicalLink":"https://www.snowflake.com/en/artificial-intelligence/ai-engineering/harness-engineering/","robotsTags":[],"allowedRenditionsWidth":["320","480","640","768","960","1200","1440","1920"],"description":"Harness engineering is the runtime layer around an AI model — tools, context, memory, state and guardrails — that makes agents reliable at multistep work.","language":"en","title":"Harness Engineering for Reliable AI Agents | Snowflake","analyticsPageType":"homepage","analyticsCategory":"general","analyticsSubCategory":"","excludeFromAnalytics":false,":mappedPath":"/en/artificial-intelligence/ai-engineering/harness-engineering/",":type":"snowflake-site/components/structure/page",":items":{"root":{"columnClassNames":{"markup_editor_928258845":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-banner":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-header":"aem-GridColumn aem-GridColumn--default--12","responsivegrid":"aem-GridColumn aem-GridColumn--default--12","markup_editor_597730182":"aem-GridColumn aem-GridColumn--default--12","experiencefragment-footer":"aem-GridColumn aem-GridColumn--default--12","experiencefragment":"aem-GridColumn aem-GridColumn--default--12","modal_container":"aem-GridColumn aem-GridColumn--default--12","markup_editor":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnCount":12,":items":{"experiencefragment-banner":{"id":"experiencefragment-537e90013c","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/pushdown-banner/master.xfmodel.json"},"experiencefragment-header":{"id":"experiencefragment-71123f5bfd","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/mega-nav-header/master.xfmodel.json","languageNavPath":"/content/snowflake-site/global/en/artificial-intelligence/ai-engineering/harness-engineering.languagenav.json"},"responsivegrid":{"columnClassNames":{"flexible_column_cont_939100716":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1158003461":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_663228916":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_912630531":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1398138236":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1786318617":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1467213961":"aem-GridColumn aem-GridColumn--default--12","flexible_column_cont_1377146023":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","columnCount":12,":items":{"flexible_column_cont":{"id":"flexible-column-container-fb55008986","propertiesId":"hub-hero-breadcrumbs","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"small","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"page-section","backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-757759b339",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"breadcrumb":{"id":"breadcrumb-a9c6956319","items":[{"id":"breadcrumb-a9c6956319-item-4b75ed29e6","link":{"valid":true,"url":"/en/artificial-intelligence/"},"active":false,"current":false,"title":"Artificial Intelligence",":type":"snowflake-site/components/structure/page","appliedCssClassNames":"summit-page"},{"id":"breadcrumb-a9c6956319-item-d5e33a6013","link":{"valid":true,"url":"/en/artificial-intelligence/ai-engineering/"},"active":false,"current":false,"title":"AI Engineering",":type":"snowflake-site/components/structure/page","appliedCssClassNames":"summit-page"},{"id":"breadcrumb-a9c6956319-item-0c6c811b90","link":{"valid":true,"url":"/en/artificial-intelligence/ai-engineering/harness-engineering/"},"active":true,"current":true,"title":"Harness Engineering",":type":"snowflake-site/components/structure/page","appliedCssClassNames":"summit-page"}],":type":"snowflake-site/components/breadcrumb"}},":itemsOrder":["breadcrumb"]},":type":"snowflake-site/components/flexible-column-container","isBlogPage":false,"isActiveTOC":false,"appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_939100716":{"id":"flexible-column-container-5b5db232c4","propertiesId":"hub-hero","type":"2-column-even","alignColumns":"center","containerMaxWidth":"extra-large","topPadding":"extra-small","bottomPadding":"extra-small","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"page-section","backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-75092ce11d",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"title_v2":{"id":"title-v2-354e4d44ee","additionalClasses":"hub-hero__headline","type":"heading1","lines":["Harness Engineering: Building the Runtime That Makes AI Agents Reliable"],":type":"snowflake-site/components/title-v2","appliedCssClassNames":"left-alignment"},"text":{"id":"text-0b86d70ada","additionalClasses":"hub-hero__subheadline","text":"\u003Cp\u003EA reliable AI agent depends on the runtime around it: the tools it can call, the context it receives, the state it remembers and the guardrails it follows. Harness engineering brings those pieces together so teams can build agents that handle multistep work safely and consistently.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"},"container":{"additionalClasses":"hub-hero__authors","columnClassNames":{"content_chip_copy":"aem-GridColumn aem-GridColumn--default--12","content_chip":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-92a3e6593d",":type":"snowflake-site/components/container",":items":{"content_chip":{"id":"content-chip-9b8783050a","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/Laurie-Macpherson/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Read bio"},"image":{"id":"image","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--a7e9fdff-6f08-4edc-9cd1-e213bb234aaa/laurie-macpherson.jpg?preferwebp=true&quality=85","alt":"Laurie MacPherson","lazyEnabled":true,"isLcpImage":true,"height":"800","width":"800",":type":"snowflake-site/components/image"},"headline":{"id":"title","type":"heading5","lines":["Laurie MacPherson","Technical Writer, Snowflake"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip"},"content_chip_copy":{"id":"content-chip-c266a934ce","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/blog/authors/david-gaule/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Read bio"},"image":{"id":"image","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--fd9454ea-3b59-4d19-95be-534774cbd226/david.jpg?preferwebp=true&quality=85","alt":"David Gaule","lazyEnabled":true,"isLcpImage":false,"height":"512","width":"512",":type":"snowflake-site/components/image"},"headline":{"id":"title","type":"heading5","lines":["David Gaule","Technical Editor, Snowflake"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip"}},":itemsOrder":["content_chip","content_chip_copy"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small"}},":itemsOrder":["title_v2","text","container"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small"},"flexible_column_content_container_2":{"additionalClasses":"hub-hero__video-column","layout":"SIMPLE","id":"container-a6a0a11eec",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"youtube":{"id":"embed-4c58446749","youtubeVideoId":"mirR3GdTgOE","layout":"responsive","youtubeAspectRatio":"56.25","youtubeAutoPlay":false,"youtubeLoop":false,"youtubeMute":false,"youtubePlaysInline":false,"youtubeRel":false,"embeddableResourceType":"core/wcm/components/embed/v1/embed/embeddable/youtube","type":"EMBEDDABLE",":type":"snowflake-site/components/youtube"}},":itemsOrder":["youtube"]},":type":"snowflake-site/components/flexible-column-container","isBlogPage":false,"isActiveTOC":false,"appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_1398138236":{"id":"flexible-column-container-d85e793082","propertiesId":"hub-hero-related-topics","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"extra-small","bottomPadding":"medium","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"page-section","backgroundImageOption":"none","flexible_column_content_container_1":{"additionalClasses":"related-topics-outer-container border-top","layout":"SIMPLE","id":"container-c925e0beb2",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"text_894059747":{"id":"text-0dda62f7ca","additionalClasses":"seo-hub-hero__related-topic-label","text":"\u003Cp\u003EAI Engineering Topics:\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"},"text":{"id":"text-01827873b5","additionalClasses":"related-topics ","text":"\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/ai-engineering/ai-cost-optimization/\"\u003EAI Cost Optimization\u003C/a\u003E\u003C/li\u003E\r\n\u003Cli\u003E\u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/ai-engineering/context-engineering/\"\u003EContext Engineering\u003C/a\u003E\u003C/li\u003E\r\n\u003C/ul\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small"}},":itemsOrder":["text_894059747","text"]},":type":"snowflake-site/components/flexible-column-container","isBlogPage":false,"isActiveTOC":false,"appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_663228916":{"id":"flexible-column-container-1673f7810d","propertiesId":"hub-body","type":"2-column-60-40","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"medium","bottomPadding":"medium","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"propertiesCSSClasses":"page-section","backgroundImageOption":"none","flexible_column_content_container_1":{"additionalClasses":"longform-content","layout":"SIMPLE","id":"hub-body-content",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"callout__0":{"id":"text-18dc75f645","additionalClasses":"callout callout--general","text":"\u003Cp\u003E\u003Cstrong\u003EHARNESS ENGINEERING DEFINED\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003EHarness engineering is the process of building the systems around an AI model so it can do useful work. The model provides the intelligence, while the harness gives it the tools, context, structure and safeguards it needs to apply that intelligence effectively.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"},"text__0":{"id":"text-f189954cad","text":"\u003Cp\u003E\u003Ca href=\"https://arxiv.org/html/2503.13657v3\" target=\"_blank\"\u003EResearch on multi-agent system failures\u003C/a\u003E found something counterintuitive: performance gains from multi-agent setups were often minimal compared to running the same model as a single agent. The model wasn’t the variable. The layer around it was.\u003C/p\u003E\n\u003Cp\u003EThat layer is the \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/agents/harness/\"\u003Eagent harness\u003C/a\u003E — the configured environment that gives a model the tools, skills, orchestration, system prompts and supporting data systems it needs to perform a specific job. Two teams deploying the same \u003Ca href=\"https://www.snowflake.com/en/fundamentals/large-language-model/\"\u003ELLM\u003C/a\u003E can see very different task-completion rates based entirely on how that environment is designed. The work of harness engineering is what determines which team ships a reliable agent.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"title_what-is-harness-engineering":{"id":"title-v2-520216afd6","additionalClasses":"anchor-title anchor-title--what-is-harness-engineering","type":"heading2","lines":["What is harness engineering?"],":type":"snowflake-site/components/title-v2"},"text_what-is-harness-engineering_0":{"id":"text-7778a7056a","text":"\u003Cp\u003EHarness engineering, a subset of \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/ai-engineering/\"\u003EAI engineering\u003C/a\u003E, is the discipline of designing the non-model layer around an AI model so it can use tools, follow task-specific instructions, operate within a runtime and achieve a defined outcome more reliably. This layer is called the agent harness.\u003C/p\u003E\n\u003Cp\u003ELeo Rodriguez, Principal Product Marketing Manager, AI/ML at Snowflake, describes the harness as the layer that turns a general model into something more task-specific: “A harness provides the LLM with skills, tools, orchestration, a runtime, system prompts and supporting data systems. It’s effectively the customization and improvement of the base model to achieve a specific desired outcome.”\u003C/p\u003E\n\u003Cp\u003EMany models used in \u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/agents/\"\u003Eagents\u003C/a\u003E, including most LLMs, don’t retain memory across calls. Every request starts without access to prior context unless the surrounding system reconstructs what came before. They’re also probabilistic — given the same input, the output may vary. Neither property is a flaw. That’s just how the models work. But this means that reliability, persistent memory and consistent behavior have to come from somewhere else.\u003C/p\u003E\n\u003Cp\u003EIn practical terms, the harness defines the working conditions of the agent. It determines which tools the agent can call, how much context the model sees at each step, which state survives between turns and what happens when something goes wrong.\u003C/p\u003E\n\u003Cp\u003EFor example, a prompt might tell an agent to analyze a contract and flag renewal risks. The harness decides which contract the agent can access, how much of it enters the context window, whether the agent can query related account data, how tool results are returned to the model, when the loop stops and what validation happens before the answer reaches the user.\u003C/p\u003E\n\u003Cp\u003EThe model is often the smallest part of an agentic system. Most of the agent’s reliability comes from the decisions the harness makes and enforces.\u003C/p\u003E\n\u003Cp\u003EHarness engineering goes beyond wiring tools to a model. It includes decisions such as:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EHow the agent should plan, act, observe and repeat\u003C/li\u003E\n\u003Cli\u003EWhich tools the agent can use for a given task\u003C/li\u003E\n\u003Cli\u003EWhat context should be assembled at each step\u003C/li\u003E\n\u003Cli\u003EWhich state should persist across turns or sessions\u003C/li\u003E\n\u003Cli\u003EHow errors, timeouts and incomplete tool responses should be handled\u003C/li\u003E\n\u003Cli\u003EWhich outputs require validation before they’re returned\u003C/li\u003E\n\u003Cli\u003EWhen the agent should stop, escalate or ask for more information\u003C/li\u003E\n\u003C/ul\u003E\n\u003Ch3\u003EThe meta-harness, and how harnesses fit into orchestration\u003C/h3\u003E\n\u003Cp\u003EA harness is typically designed around a specific agent, model, product or task. In environments where users need access to multiple specialized harnesses, a meta-harness provides a layer of abstraction above them. It gives users or calling systems a simpler interface so they don’t have to understand each harness’s internal configuration or decide manually which one to use for every task.\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"https://www.snowflake.com/en/artificial-intelligence/agents/agent-orchestration/\"\u003EAgent orchestration\u003C/a\u003E can appear in more than one level. Within a harness, orchestration manages how the model uses tools, prompts, runtime environment, and supporting systems during an agent run. At the system level, orchestration coordinates multiple agents, handoffs, task graphs and workflow steps.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"card_v2_what-is-harness-engineering_0":{"id":"card-v2-5de61fa2f1","additionalClasses":"seo-customer","configurationStatus":{"configured":true,"message":""},":type":"snowflake-site/components/card-v2","title":{"id":"title","type":"heading4","lines":["Simon AI"],":type":"snowflake-site/components/title-v2"},"button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/customers/all-customers/case-study/simon-ai/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Read the full customer story \u003E"},"image":{"id":"image","src":"https://www.snowflake.com/adobe/dynamicmedia/deliver/dm-aid--14908946-2304-4502-8358-b79697f78567/simon-ai-logo-nav.png?preferwebp=true&quality=85","alt":"Simon AI logo","lazyEnabled":true,"isLcpImage":false,"height":"360","width":"840",":type":"snowflake-site/components/image"},"type":"content-card","text":{"id":"text","text":"\u003Cp\u003ESimon AI uses Snowflake Cortex AI and Snowpark Container Services to power composable AI agents that help marketers deliver contextual personalization at scale without moving data or compromising governance. Running directly in Snowflake’s AI Data Cloud, Simon’s agents give marketers governed, real-time access to structured and unstructured data, helping customers build contextually relevant audiences 90% faster and identify 100+ new high-value customer cohorts.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text"},"layoutStyle":"horizontal"},"title_the-components-of-an-agent-harness":{"id":"title-v2-454fecb8ea","additionalClasses":"anchor-title anchor-title--the-components-of-an-agent-harness","type":"heading2","lines":["The components of an agent harness"],":type":"snowflake-site/components/title-v2"},"text_the-components-of-an-agent-harness_0":{"id":"text-eef35cbe94","text":"\u003Cp\u003EAn agent harness is typically made from several runtime components that work together. Different architectures implement them differently, but the responsibilities are consistent.\u003C/p\u003E\r\n\u003Ch3\u003EControl loop\u003C/h3\u003E\r\n\u003Cp\u003EThe control loop manages the agent’s reasoning and action cycle. In most agentic systems this follows a plan-act-observe pattern: the model proposes a next step, the harness executes it, the result returns to the model and the loop continues until the task is complete.\u003C/p\u003E\r\n\u003Cp\u003EWithout a control loop, a model call is a single request and response. The control loop is what enables an agent to carry work across multiple steps, using what it observes to determine what comes next.\u003C/p\u003E\r\n\u003Cp\u003EBut the loop has to be bounded. Iteration limits, timeout thresholds and stop conditions keep the agent from continuing indefinitely, repeating a failed step or pursuing a path that cannot resolve. Stop conditions do more than prevent loops — they recognize when a goal is met, when a resource limit has been reached and when the agent has enough to return an answer.\u003C/p\u003E\r\n\u003Cp\u003EFor example, an agent querying usage data might need to run a SQL statement, inspect the result, refine the query and summarize the finding. The model reasons through those steps. The harness determines how many attempts are permitted, whether a failed query can be retried and when the agent has sufficient evidence to stop.\u003C/p\u003E\r\n\u003Ch3\u003ETool dispatch\u003C/h3\u003E\r\n\u003Cp\u003ETool dispatch is the part of the harness that lets an agent call external tools, APIs, databases and services. The model may select a tool, but the harness controls how that call is validated, executed and returned.\u003C/p\u003E\r\n\u003Cp\u003EThis layer handles function schemas, authentication, request formatting, response parsing and error handling. It also enforces tool-level permissions — whether the agent can read a particular table, retrieve a document or call a specific API depends on what the harness allows, not what the model requests.\u003C/p\u003E\r\n\u003Cp\u003EStandardized connectivity is increasingly important here. The Model Context Protocol (MCP) gives teams a standardized way to expose tools and data sources to AI applications, reducing the custom integration work each harness would otherwise require. MCP servers act as consistent endpoints the harness can call when it needs external context or needs to take an action — a meaningful reduction in the surface area that teams have to build and maintain per agent.\u003C/p\u003E\r\n\u003Ch3\u003EMemory\u003C/h3\u003E\r\n\u003Cp\u003EMemory in a harness falls into two categories: working memory and persistent memory.\u003C/p\u003E\r\n\u003Cp\u003EWorking memory holds what the agent needs during the current task: the original request, intermediate tool results, a partial plan, decisions already made. It prevents the agent from starting over at every step.\u003C/p\u003E\r\n\u003Cp\u003EPersistent memory survives beyond a single interaction. The agent might store approved definitions, recurring task context, user preferences or prior decisions. Persistent memory introduces governance, privacy and accuracy requirements that working memory does not. The harness needs rules about what gets written, what gets retrieved and when outdated memory should be refreshed rather than returned to the model.\u003C/p\u003E\r\n\u003Ch3\u003EContext management\u003C/h3\u003E\r\n\u003Cp\u003EAt each step in the loop, the harness determines which external context sources to call, how much of that context to pass to the model and how to structure it for the task. The context itself may live outside the harness — in semantic views, business ontology, governed data, policy systems, user history or other enterprise context layers — but the harness is responsible for bringing the right pieces into the agent’s runtime.\u003C/p\u003E\r\n\u003Cp\u003EThis is where harness engineering intersects with context engineering. Context engineering is the discipline of choosing, structuring and delivering the right information to the model. The harness runs that strategy inside the agent loop — deciding when to retrieve context, how much to include and how to prioritize competing inputs while staying within the model’s context window.\u003C/p\u003E\r\n\u003Ch3\u003EState and session persistence\u003C/h3\u003E\r\n\u003Cp\u003EState persistence allows an agent to maintain durable progress across turns, failures and longer-running tasks. Session state can include the current plan, completed steps, tool results, user approvals, open questions and unresolved errors.\u003C/p\u003E\r\n\u003Cp\u003EThis is especially important when agents operate in workflows that extend beyond a single chat turn. If the harness doesn’t persist state, the agent has to reconstruct the work from conversational context alone, which makes the workflow more fragile and harder to audit.\u003C/p\u003E\r\n\u003Cp\u003EDurable state also supports recovery. When a tool call fails, a session times out or a user returns to the task later, the harness can resume from a known point rather than restarting from the beginning.\u003C/p\u003E\r\n\u003Ch3\u003ESafety and guardrails\u003C/h3\u003E\r\n\u003Cp\u003EGuardrails keep an agent within defined boundaries. Some guardrails operate before the model sees input, checking for prohibited requests, malformed data or missing permissions. Others operate after the model produces output, validating format, policy compliance, factual grounding or tool-use behavior.\u003C/p\u003E\r\n\u003Cp\u003EIn a production harness, guardrails are usually paired with error handling. When a tool returns an unexpected response, the harness can retry, choose a fallback path, ask the user for clarification or escalate to a human reviewer. When an output fails validation, the harness can block the response, regenerate with additional constraints or return a safer explanation.\u003C/p\u003E\r\n\u003Cp\u003EThe most useful guardrails are specific to the task and environment. A general safety filter can help, but a financial analysis agent, a data engineering agent and a customer support agent need different constraints. The harness is where those task-specific controls are attached to the agent’s runtime behavior.\u003C/p\u003E\r\n\u003Ch3\u003EPlatform services beneath the harness\u003C/h3\u003E\r\n\u003Cp\u003EThe harness depends on what sits beneath it. Durable storage, governance, identity, observability and cost optimization controls determine how production-ready the harness can be.\u003C/p\u003E\r\n\u003Cp\u003EObservability plays a bigger role than it might appear. \u003Ca rel=\"noopener noreferrer\" href=\"https://arxiv.org/html/2601.00481v1\" target=\"_blank\"\u003EResearch on LLM-based multi-agent systems\u003C/a\u003E found that 75% of agent failures manifest as silent errors — they complete without triggering an exception and only become visible on manual inspection. A harness without execution traces can’t surface those failures, and teams that skip observability during development realize its importance during the first production incident.\u003C/p\u003E\r\n\u003Cp\u003EWithout the platform layer, teams can still build prototypes, but production deployment is difficult to secure, monitor and maintain.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"callout_the-components-of-an-agent-harness_0":{"id":"text-84de6c5531","additionalClasses":"callout callout--warning","text":"\u003Cp\u003E\u003Cstrong\u003ECOMMON PITFALL\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003EDon’t treat the harness merely as a tool wrapper. Design for the full runtime path: how context is assembled, tools are dispatched, state is persisted, errors are handled, outputs are validated and handoffs occur across agents or workflows.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"},"title_harness-engineering-vs-context-engineering-prompting-and-agent-orchestration":{"id":"title-v2-23e1385f0f","additionalClasses":"anchor-title anchor-title--harness-engineering-vs-context-engineering-prompting-and-agent-orchestration","type":"heading2","lines":["Harness engineering vs. context engineering, prompting and agent orchestration"],":type":"snowflake-site/components/title-v2"},"text_harness-engineering-vs-context-engineering-prompting-and-agent-orchestration_0":{"id":"text-42727c9482","text":"\u003Cp\u003EHarness engineering overlaps with several adjacent disciplines, which can make the vocabulary confusing. The clearest distinction is between the discipline, the artifact and the techniques used inside the runtime.\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Cstrong\u003EThe agent harness\u003C/strong\u003E is the concrete artifact of harness engineering: the wrapper, code, configuration and platform services that run around the model. One is the engineering practice; the other is the thing built.\u003C/li\u003E\n\u003Cli\u003E\u003Cstrong\u003EContext engineering\u003C/strong\u003E defines what information the model should see and how that information should be structured. The harness operationalizes that strategy during the agent run: deciding when to retrieve context, how much to include and how to prioritize competing inputs while staying within the model’s context window.\u003C/li\u003E\n\u003Cli\u003E\u003Cstrong\u003EPrompt engineering\u003C/strong\u003E operates more narrowly. A prompt can define the agent’s role, instructions, output format and constraints for a specific step. The harness manages how those prompts are assembled, when they’re used, which tool results are added and how the next prompt changes as the agent observes new information. Prompting shapes individual model calls, but the harness governs the full interaction loop.\u003C/li\u003E\n\u003Cli\u003E\u003Cstrong\u003EAgent orchestration\u003C/strong\u003E sits one level higher in many architectures. Orchestration coordinates multiple agents, handoffs, task graphs or workflow steps. The harness is the per-agent runtime that controls how a given agent reasons, calls tools, manages memory and handles errors. In a multiagent system, orchestration may decide which agent should act next, while each agent’s harness governs how that agent performs its assigned work.\u003C/li\u003E\n\u003C/ul\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"title_harness-engineering-on-snowflake":{"id":"title-v2-f2e7addf60","additionalClasses":"anchor-title anchor-title--harness-engineering-on-snowflake","type":"heading2","lines":["Harness engineering on Snowflake"],":type":"snowflake-site/components/title-v2"},"text_harness-engineering-on-snowflake_0":{"id":"text-5d9ea11b99","text":"\u003Cp\u003EAn agent is only as trustworthy as the data and governance beneath it. A well-engineered harness sitting on ungoverned data still produces unreliable results — the harness controls behavior, but it can’t certify what the agent reads. Putting the harness on top of \u003Ca href=\"https://www.snowflake.com/en/data-governance/\"\u003Egoverned enterprise data\u003C/a\u003E is where those two concerns can be addressed.\u003C/p\u003E\n\u003Cp\u003ESnowflake approaches this by keeping agentic work close to where governed data already lives — and by providing production-grade harness and meta-harness architecture so teams don’t have to build one themselves.\u003C/p\u003E\n\u003Cp\u003EWith \u003Ca href=\"https://www.snowflake.com/en/developers/guides/getting-started-with-cortex-agents/\"\u003ECortex Agents\u003C/a\u003E, the reasoning loop, tool use, orchestration, state management and runtime infrastructure are built in. Teams define what the agent should do — its tools, instructions and scope — and Snowflake manages the surrounding system that makes it run reliably. The engineering work is handled at the platform level rather than handed off to each team building on top of it.\u003C/p\u003E\n\u003Cp\u003EAgents inherit the roles and permissions already defined in Snowflake, so access control travels with the data rather than being recreated per agent. Paired with Cortex AI Guardrails in Horizon Catalog, this gives teams safety controls around agent inputs, outputs and behavior that stay anchored to the same access model used across the platform.\u003C/p\u003E\n\u003Cp\u003EMCP servers on Snowflake bring governed access to tool connectivity. By exposing governed data and actions through a standardized protocol, teams can reduce the custom integration work that tool dispatch would otherwise require and give agents a consistent, governed way to interact with enterprise systems.\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\"https://www.snowflake.com/en/product/snowflake-coco/\"\u003ECoCo\u003C/a\u003E (previously known as Cortex Code) is a purpose-built agent runtime for data engineering, analytics and AI workflows. Rather than a general-purpose configuration, it operates with awareness of Snowflake objects, account context and governed data from the start. For data teams, this changes the working conditions of the agent: it can assist with work inside the environment where those teams already build, test and manage production systems.\u003C/p\u003E\n\u003Cp\u003EWhen the harness is built into the platform, the engineering work shifts from assembling the runtime to using it well.\u003C/p\u003E\n\u003Cp\u003EModel capabilities will keep improving. The teams that benefit most from those improvements won’t necessarily be the ones who adopt the newest model fastest — they will be the ones whose harness is engineered to swap models in, evaluate them against real tasks and extract what each one does best.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"},"callout_harness-engineering-on-snowflake_0":{"id":"text-92661c8c3c","additionalClasses":"callout callout--general","text":"\u003Cp\u003E\u003Cstrong\u003EKEY TAKEAWAY\u003C/strong\u003E\u003C/p\u003E\n\u003Cp\u003EModels supply the reasoning, but the harness determines how reliably that reasoning turns into action. The strongest agentic systems are built on runtime layers that connect tools, context, memory, orchestration and governance into a controlled path for getting work done.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular text-color-text-05"}},":itemsOrder":["callout__0","text__0","title_what-is-harness-engineering","text_what-is-harness-engineering_0","card_v2_what-is-harness-engineering_0","title_the-components-of-an-agent-harness","text_the-components-of-an-agent-harness_0","callout_the-components-of-an-agent-harness_0","title_harness-engineering-vs-context-engineering-prompting-and-agent-orchestration","text_harness-engineering-vs-context-engineering-prompting-and-agent-orchestration_0","title_harness-engineering-on-snowflake","text_harness-engineering-on-snowflake_0","callout_harness-engineering-on-snowflake_0"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-medium"},"flexible_column_content_container_2":{"additionalClasses":"hub-sidebar","layout":"SIMPLE","id":"hub-body-aside",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"container":{"additionalClasses":"sticky-sidebar","columnClassNames":{"text_943981956_copy_":"aem-GridColumn aem-GridColumn--default--12","text_copy":"aem-GridColumn aem-GridColumn--default--12"},"gridClassNames":"aem-Grid aem-Grid--12 aem-Grid--default--12","layout":"RESPONSIVE_GRID","columnCount":12,"id":"container-9e7d5e42b2",":type":"snowflake-site/components/container",":items":{"text_943981956_copy_":{"id":"text-47bf9f28b8","additionalClasses":"eyebrow-text","text":"\u003Cp\u003EIn This Guide\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-regular"},"text_copy":{"id":"text-de9f8de998","additionalClasses":"page-toc","text":"\u003Cul\u003E\u003Cli data-anchor=\"what-is-harness-engineering\"\u003EWhat is harness engineering?\u003C/li\u003E\u003Cli data-anchor=\"the-components-of-an-agent-harness\"\u003EThe components of an agent harness\u003C/li\u003E\u003Cli data-anchor=\"harness-engineering-vs-context-engineering-prompting-and-agent-orchestration\"\u003EHarness engineering vs. context engineering, prompting and agent orchestration\u003C/li\u003E\u003Cli data-anchor=\"harness-engineering-on-snowflake\"\u003EHarness engineering on Snowflake\u003C/li\u003E\u003C/ul\u003E","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-size-small text-color-text-05"}},":itemsOrder":["text_943981956_copy_","text_copy"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-medium"}},":itemsOrder":["container"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-small"},":type":"snowflake-site/components/flexible-column-container","isBlogPage":false,"isActiveTOC":false},"flexible_column_cont_1786318617":{"id":"flexible-column-container-a89a6a5f49","propertiesId":"hub-faq","type":"2-column-40-60","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"large","bottomPadding":"large","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"hub-faq-intro",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"title_v2_copy":{"id":"title-v2-a853731049","additionalClasses":"hub-faq__headline","type":"heading2","lines":["Frequently Asked Questions"],":type":"snowflake-site/components/title-v2","appliedCssClassNames":"left-alignment"},"text_copy":{"id":"text-27da24f1c5","additionalClasses":"hub-faq__subheadline","text":"\u003Cp\u003EYour common questions about harness engineering, answered by Snowflake experts.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"}},":itemsOrder":["title_v2_copy","text_copy"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small"},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"hub-faq-accordions",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"simple_snowflake_acc":{"id":"simple-snowflake-accordion-80329f0cea","additionalClasses":"seo-hub__faqs","showDivider":false,"accordionItemsList":[{"title":"What is an agent harness?","richText":"\u003Cp\u003EAn agent harness is the non-model runtime that wraps an LLM and turns it into a usable agent. It manages tool dispatch, memory, context management, state persistence, the control loop and guardrails, giving a stateless model the runtime structure needed for multistep work.\u003C/p\u003E"},{"title":"Do I need a harness to use an LLM?","richText":"\u003Cp\u003EFor a single prompt-response interaction, usually not. A basic application can send a prompt to an LLM and return the answer. A harness becomes important when the system needs to use tools, remember state, retrieve context, perform multistep work or enforce production controls.\u003C/p\u003E"},{"title":"How is harness engineering different from context engineering?","richText":"\u003Cp\u003EContext engineering determines what information the model should see and how that information should be structured. Harness engineering runs the broader system that delivers that context to the model, calls tools, persists state and controls the agent’s behavior over time.\u003C/p\u003E"},{"title":"How is a harness different from agent orchestration?","richText":"\u003Cp\u003EA harness is the per-agent runtime. It controls how one agent reasons, uses tools, manages memory and handles errors. Orchestration coordinates multiple agents, task steps or workflow handoffs across a larger system.\u003C/p\u003E"}],":type":"snowflake-site/components/simple-snowflake-accordion"}},":itemsOrder":["simple_snowflake_acc"]},":type":"snowflake-site/components/flexible-column-container","isBlogPage":false,"isActiveTOC":false,"appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_1467213961":{"id":"flexible-column-container-ffdef5180d","propertiesId":"hub-explore-resources-header","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"large","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-7abf7bb353",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"title_v2":{"id":"title-v2-0cd0675f3b","additionalClasses":"hub-explore-resources-header__headline","type":"heading2","lines":["Explore AI Resources"],":type":"snowflake-site/components/title-v2","appliedCssClassNames":"left-alignment"}},":itemsOrder":["title_v2"]},":type":"snowflake-site/components/flexible-column-container","isBlogPage":false,"isActiveTOC":false,"appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_912630531":{"id":"flexible-column-container-6459f7cb03","propertiesId":"hub-explore-resources-grid","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"small","bottomPadding":"large","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"hub-explore-resources-grid-inner",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"resource_chip_0":{"id":"content-chip-bc19933f53","tagText":"WEBINAR","tagColor":"#EEBDD3","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/webinars/virtual-hands-on-lab/build-agentic-ai-applications-from-chatbots-to-autonomous-agents-2026-04-29/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Read more"},"headline":{"id":"title","type":"heading5","lines":["Build Agentic AI Applications: From Chatbots to Autonomous Agents"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip","appliedCssClassNames":"snowflake-content-chip-white-bg"},"resource_chip_1":{"id":"content-chip-b36fa53775","tagText":"GUIDE","tagColor":"#AAE5EA","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/developers/guides/self-improving-agents-with-coco/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Read more"},"headline":{"id":"title","type":"heading5","lines":["Self-Improving Agents with CoCo"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip","appliedCssClassNames":"snowflake-content-chip-white-bg"},"resource_chip_2":{"id":"content-chip-718745e3b4","tagText":"BLOG","tagColor":"#29B5E8","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/blog/cortex-code-governed-agent-data-stack/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Read more"},"headline":{"id":"title","type":"heading5","lines":["Cortex Code: One Governed Agent for Your Entire Data Stack"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip","appliedCssClassNames":"snowflake-content-chip-white-bg"},"resource_chip_3":{"id":"content-chip-456c378aef","tagText":"EBOOK","tagColor":"#71D3DC","cta":{"id":"cta","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"https://www.snowflake.com/en/resources/ebook/building-trusted-ai--data-platform-essentials/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_EXTERNAL","text":"Read more"},"headline":{"id":"title","type":"heading5","lines":["Building Trusted AI: Data Platform Essentials"],":type":"snowflake-site/components/title-v2"},":type":"snowflake-site/components/content-chip","appliedCssClassNames":"snowflake-content-chip-white-bg"}},":itemsOrder":["resource_chip_0","resource_chip_1","resource_chip_2","resource_chip_3"]},":type":"snowflake-site/components/flexible-column-container","isBlogPage":false,"isActiveTOC":false,"appliedCssClassNames":"snowflake-flexible-column-container-gray-10-bg"},"flexible_column_cont_1158003461":{"id":"flexible-column-container-eaa98006ae","propertiesId":"hub-explore-topics-header","type":"1-column","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"large","bottomPadding":"none","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-4d41c5c84a",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"title_v2_copy_copy":{"id":"title-v2-4faa8c2891","additionalClasses":"hub-explore-topics-header__headline","type":"heading2","lines":["Explore AI Topics"],":type":"snowflake-site/components/title-v2","appliedCssClassNames":"left-alignment"},"text_copy_copy":{"id":"text-6d4120a4f6","additionalClasses":"hub-explore-topics-header__subheadline","text":"\u003Cp\u003EDeep dives into every aspect of artificial intelligence\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text","appliedCssClassNames":"text-color-text-05"}},":itemsOrder":["title_v2_copy_copy","text_copy_copy"],"appliedCssClassNames":"snowflake-responsive-container-inner-padding-extra-small"},":type":"snowflake-site/components/flexible-column-container","isBlogPage":false,"isActiveTOC":false,"appliedCssClassNames":"snowflake-flexible-column-container-white-bg"},"flexible_column_cont_1377146023":{"id":"flexible-column-container-00b14d234b","propertiesId":"hub-explore-topics-grid","type":"3-column-even","alignColumns":"top","containerMaxWidth":"extra-large","topPadding":"small","bottomPadding":"large","spaceBetween":"small","reverseOnMobile":false,"carouselOnMobile":false,"backgroundImageOption":"none","flexible_column_content_container_1":{"layout":"SIMPLE","id":"container-8fbaa4ce79",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"topic_card_0":{"id":"card-v2-8563e7b4be","configurationStatus":{"configured":true,"message":""},":type":"snowflake-site/components/card-v2","title":{"id":"title","type":"heading4","lines":["AI Engineering"],":type":"snowflake-site/components/title-v2"},"button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/artificial-intelligence/ai-engineering/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Learn more"},"type":"content-card","text":{"id":"text","text":"\u003Cp\u003EThe discipline of building and operating production AI systems.\u003C/p\u003E","richText":true,":type":"snowflake-site/components/text"},"layoutStyle":"vertical"}},":itemsOrder":["topic_card_0"]},"flexible_column_content_container_2":{"layout":"SIMPLE","id":"container-f6518d1e4a",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"topic_card_1":{"id":"card-v2-d1bab8afc7","configurationStatus":{"configured":true,"message":""},":type":"snowflake-site/components/card-v2","title":{"id":"title","type":"heading4","lines":["AI Governance"],":type":"snowflake-site/components/title-v2"},"button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/artificial-intelligence/ai-governance/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Learn more"},"type":"content-card","text":{"id":"text","text":"\u003Cp\u003EFrameworks, policies and oversight models for managing AI risk, accountability, compliance and operational control.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text"},"layoutStyle":"vertical"}},":itemsOrder":["topic_card_1"]},"flexible_column_content_container_3":{"layout":"SIMPLE","id":"container-d9d743910b",":type":"snowflake-site/components/flexible-column-container/flexible-column-content-container",":items":{"topic_card_2":{"id":"card-v2-38fbe8cecb","configurationStatus":{"configured":true,"message":""},":type":"snowflake-site/components/card-v2","title":{"id":"title","type":"heading4","lines":["Machine Learning"],":type":"snowflake-site/components/title-v2"},"button":{"id":"button","showOutboundIcon":false,"buttonLink":{"valid":true,"url":"/en/artificial-intelligence/machine-learning/"},"linkTargetContentType":"GENERIC",":type":"snowflake-site/components/button","linkType":"SNOWFLAKE_INTERNAL","text":"Learn more"},"type":"content-card","text":{"id":"text","text":"\u003Cp\u003EUnderstanding algorithms that automatically learn and improve from experience.\u003C/p\u003E\r\n","richText":true,":type":"snowflake-site/components/text"},"layoutStyle":"vertical"}},":itemsOrder":["topic_card_2"]},":type":"snowflake-site/components/flexible-column-container","isBlogPage":false,"isActiveTOC":false,"appliedCssClassNames":"snowflake-flexible-column-container-white-bg"}},":itemsOrder":["flexible_column_cont","flexible_column_cont_939100716","flexible_column_cont_1398138236","flexible_column_cont_663228916","flexible_column_cont_1786318617","flexible_column_cont_1467213961","flexible_column_cont_912630531","flexible_column_cont_1158003461","flexible_column_cont_1377146023"],":type":"wcm/foundation/components/responsivegrid"},"modal_container":{"layout":"SIMPLE","id":"container-769471faf4",":type":"snowflake-site/components/modal/modal-container",":items":{},":itemsOrder":[]},"markup_editor_928258845":{"id":"markup-editor-98209f8b7f","title":" ","cssContent":".snowflake-flexible-column-container-gray-10-bg\u003E.snowflake-flexible-column-container{background-color:var(--ui-background-05) !important}.text-size-regular:has(.seo-hub-hero__related-topic-label){display:flex;align-items:center}.hub-hero__headline span{text-transform:none !important}.hub-hero__subheadline p{max-width:70ch;margin-top:8px}.hub-hero__authors \u003E .container \u003E .cmp-container \u003E .aem-container{display:flex;flex-direction:row}.hub-hero__authors \u003E .container \u003E .cmp-container \u003E .aem-container \u003E div{width:auto !important;margin:24px 48px 0 0 !important}.hub-hero__authors .heading-5-v2{gap:var(--spacing-00)}.hub-hero__authors .snowflake-content-chip-button{display:none !important}.hub-hero__authors .snowflake-person-chip-content .body-2,.hub-hero__authors .snowflake-content-chip-content .snowflake-title-v2-line{font-size:16px !important;line-height:20px !important;font-family:\"Lato\",sans-serif !important;color:#000 !important;font-weight:600 !important}.hub-hero__authors .snowflake-person-chip-content .body-3,.hub-hero__authors .snowflake-content-chip-content .snowflake-title-v2-line:not(:first-child){font-weight:400 !important;color:var(--text-05) !important;font-size:16px !important}.hub-hero__authors .snowflake-image-container img{aspect-ratio:1 !important;border-radius:100%;overflow:hidden}.hub-hero__authors .snowflake-person-chip-avatar{width:56px;height:56px}.hub-hero__authors .snowflake-content-chip{align-items:center;display:inline-flex}.hub-hero__authors .snowflake-content-chip-image{max-width:56px;line-height:0;margin-right:var(--spacing-03)}.hub-hero__authors .snowflake-person-chip-inner-horizontal{gap:var(--spacing-03)}@media screen and (min-width:1367px){.hub-hero__headline .heading-1-v2{font-size:48px;line-height:44px}}#hub-explore-resources-grid-inner\u003E.container\u003E.cmp-container\u003E.aem-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:24px}#hub-explore-resources-grid-inner\u003E.container\u003E.cmp-container\u003E.aem-container::before,#hub-explore-resources-grid-inner\u003E.container\u003E.cmp-container\u003E.aem-container::after{display:none}#hub-explore-resources-grid-inner\u003E.container\u003E.cmp-container\u003E.aem-container\u003Ediv{width:calc(25% - 18px)}.text-color-text-05 .snowflake-text h2,.text-color-text-05.cq-Editable-dom h2,.text-color-text-05 .snowflake-text h3,.text-color-text-05.cq-Editable-dom h3,.text-color-text-05 .snowflake-text h4,.text-color-text-05.cq-Editable-dom h4,.text-color-text-05 .snowflake-text h5,.text-color-text-05.cq-Editable-dom h5,.text-color-text-05 .snowflake-text h6,.text-color-text-05.cq-Editable-dom h6{color:#000 !important}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false},"markup_editor_597730182":{"id":"markup-editor-55cd7882ba","title":" ","cssContent":".sf-copy-markdown [data-copy-md]{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;font-family:'Texta',sans-serif;text-transform:uppercase;font-weight:800 !important;font-size:14px;font-weight:500;color:#11567f;background:#f0faff;border:1px solid #b8e6f9;border-radius:24px;cursor:pointer;transition:background .2s ease,border-color .2s ease,color .2s ease}.sf-copy-markdown [data-copy-md]:hover{background:#ddf3fc;border-color:#29b5e8}.sf-copy-markdown [data-copy-md][data-copied=\"1\"]{color:#0f7b3e;background:#ecfdf5;border-color:#6ee7a0;pointer-events:none}.sf-copy-markdown [data-copy-md] svg{flex-shrink:0}.longform-conten .snowflake-content-chip-white-bg .snowflake-content-chip{box-shadow:0 0 24px 4px rgba(0,0,0,.02),0 4px 8px 0 rgba(0,0,0,.04);flex-direction:row-reverse;align-items:center}.longform-conten .snowflake-content-chip-button{display:none}.longform-conten .snowflake-content-chip-image__inner{aspect-ratio:5 / 3;display:flex;justify-content:center;align-items:center;background-color:var(--ui-01);border-radius:4px}.longform-conten .snowflake-content-chip-image{margin-right:0;margin-left:48px}.longform-conten .snowflake-content-chip-image img{width:50%;border-radius:0 !important;object-fit:contain}.longform-content .black-blue-text-color .snowflake-title-v2-line:not(:first-child){font-size:14px !important;font-weight:400 !important;color:rgba(0,0,0,.6) !important;margin-top:8px !important}.page-toc ul li:first-child{padding-top:0 !important}.page-toc ul li:last-child{padding-bottom:0 !important}.seo-hub__top-bar \u003E .container \u003E .cmp-container \u003E .aem-container \u003E div:first-child{flex-grow:1}.sf-copy-markdown{margin-top:40px !important}.page-toc ul{margin-top:16px !important}.seo-hub__top-bar \u003E .container \u003E .cmp-container \u003E .aem-container{display:flex;justify-content:space-between}.sf-copy-markdown{}.callout.snowflake-text p:not(:first-child){margin-top:var(--spacing-01)}.callout \u003E span \u003E p:first-child \u003E strong,.callout \u003E span \u003E p:first-child \u003E b{text-transform:uppercase;font-family:'Texta',sans-serif;font-size:16px !important;color:var(--ui-01) !important}.seo-hub-hero__subheadline p{max-width:50ch}.tag-group ul{list-style-type:none;padding:0;margin:0;display:flex;flex-direction:row;row-gap:12px;column-gap:8px;align-items:center;flex-wrap:wrap}.tag-group ul li:first-child{flex-shrink:0}.tag-group ul li a{display:inline-block;padding:2px 12px;border-radius:48px;background-color:#ededed;color:#666;font-size:14px !important}@media screen and (min-width:1367px){.seo-hub-hero__headline span.snowflake-title-v2-line{font-size:56px !important}}.callout.snowflake-text p:not(:first-child){margin-top:var(--spacing-01)}.callout \u003E span \u003E p:first-child \u003E b{text-transform:uppercase;font-family:'Texta',sans-serif;font-size:16px !important;color:var(--ui-01) !important}.seo-hub-hero__subheadline p{max-width:80ch}#hero:has(.snowflake-youtube-lite) .seo-hub-hero__subheadline p{max-width:50ch}.tag-group ul{list-style-type:none;padding:0;margin:0;display:flex;flex-direction:row;row-gap:12px;column-gap:8px;align-items:center;flex-wrap:wrap}.tag-group ul li:first-child{width:100%;flex-shrink:0}.tag-group ul li a{display:inline-block;padding:2px 12px;border-radius:48px;background-color:#ededed;color:#666;font-size:14px !important}@media screen and (min-width:1367px){.seo-hub-hero__headline span.snowflake-title-v2-line{font-size:56px !important}}",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":false},"markup_editor":{"id":"markup-editor-389c7e37e1","title":" ","cssContent":"div.snowflake-breadcrumb a.snowflake-breadcrumb-item,.snowflake-breadcrumb div.snowflake-breadcrumb-item{text-transform:none;font-weight:500}.snowflake-breadcrumb svg{display:none !important}.snowflake-breadcrumb a:has(svg)::after{content:'/';margin:0 12px;color:#666}.hub-sidebar{padding:0 40px}.sticky-sidebar{max-width:340px;margin-left:auto}.page-toc ul{list-style-type:none;padding:0}.page-toc li{padding:8px 16px;border-left:4px solid var(--ui-01);cursor:pointer;transition:300ms ease all}.page-toc li:hover{color:var(--ui-01);border-color:#7fd3f1;transition:300ms ease all}.callout,.customer-card{background-color:#eef9fd;border-left:4px solid var(--ui-01);padding:24px 24px 24px 32px;border-radius:4px}.logo-container{max-width:180px}.longform-content li{margin-top:1rem !important}div.longform-content p{max-width:80ch}.bolder .snowflake-title-v2-line{font-weight:900 !important}.border-top\u003Ediv{border-top:1px solid #ccc;padding-top:48px}.related-topics ul{list-style-type:none;padding:0;margin:0;display:flex;gap:8px;flex-wrap:wrap}.related-topics li{display:inline-block;border:1px solid #ccc;padding:4px 12px;border-radius:24px}div.longform-content .snowflake-text h2,div.longform-content .snowflake-text .heading-2-v2,div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-title-v2 .heading-3-v2,div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-title-v2 .heading-4-v2,div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-title-v2 .heading-5-v2,div.longform-content .snowflake-text h6,div.longform-content .snowflake-title-v2 .heading-6-v2,div.longform-content .snowflake-text .heading-6-v2{text-transform:none !important}div.longform-content .snowflake-text h2,div.longform-content .snowflake-text .heading-2-v2,div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-text h6,div.longform-content .snowflake-text .heading-6-v2{margin-top:1.5rem !important;line-height:1.1 !important}div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-title-v2 .heading-3-v2,div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-title-v2 .heading-4-v2,div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-title-v2 .heading-5-v2,div.longform-content .snowflake-text h6,div.longform-content .snowflake-text .heading-6-v2,div.longform-content .snowflake-title-v2 .heading-6-v2{font-family:Lato,sans-serif !important;font-weight:800 !important}div.longform-content .snowflake-text h2,div.longform-content .snowflake-text .heading-2-v2,div.longform-content .snowflake-title-v2 .heading-2-v2{text-transform:none !important;font-size:28px !important}div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-title-v2 .heading-3-v2{font-size:22px !important}div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-title-v2 .heading-4-v2{font-size:18px !important}div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-title-v2 .heading-5-v2{font-size:16px !important}div.longform-content .snowflake-text h6,div.longform-content .snowflake-text .heading-6-v2,div.longform-content .snowflake-title-v2 .heading-6-v2{font-size:14px !important}@media screen and (min-width:992px){div.longform-content .snowflake-text h2,div.longform-content .snowflake-text .heading-2-v2,div.longform-content .snowflake-title-v2 .heading-2-v2{font-size:38px !important}div.longform-content .snowflake-text h3,div.longform-content .snowflake-text .heading-3-v2,div.longform-content .snowflake-title-v2 .heading-3-v2{font-size:26px !important}div.longform-content .snowflake-text h4,div.longform-content .snowflake-text .heading-4-v2,div.longform-content .snowflake-title-v2 .heading-4-v2{font-size:22px !important}div.longform-content .snowflake-text h5,div.longform-content .snowflake-text .heading-5-v2,div.longform-content .snowflake-title-v2 .heading-5-v2{font-size:18px !important}div.longform-content .snowflake-text h6,div.longform-content .snowflake-text .heading-6-v2,div.longform-content .snowflake-title-v2 .heading-6-v2{font-size:16px !important}}.sticky-sidebar .page-toc li.is-active{font-weight:600;color:var(--snow-blue,#29b5e8)}.sticky-sidebar .page-toc li[data-anchor]{cursor:pointer}.longform-content table{margin-top:24px;margin-bottom:24px;width:100%;background-color:var(--ui-background-01);border-collapse:collapse;border:2px solid var(--ui-background-09);font-family:'Lato',sans-serif;color:var(--ui-background-09)}.longform-content table thead{background-color:var(--ui-01)}.longform-content th,.longform-content td{min-width:120px;border:2px solid var(--ui-background-09);padding:var(--spacing-01)}.longform-content ol{margin-top:0 !important}.longform-content ol li{margin-bottom:1rem !important}.longform-content ul li{margin:0;padding:0 0 0 32px;position:relative}.longform-content ul{list-style-type:none}.longform-content ul li::before{content:\"\";display:block;border-radius:100%;background:#29b5e8;width:18px;height:18px;position:absolute;top:4px;left:0;border:5px solid #e5f2f7;box-sizing:border-box}.seo-customer.snowflake-card-v2-advanced-horizontal .snowflake-card-v2-advanced-image-container{max-width:200px}.seo-customer.snowflake-card-v2-advanced-horizontal .snowflake-card-v2-advanced-image-container img{object-fit:contain}.related-topics-outer-container \u003E .container \u003E .cmp-container \u003E .aem-container{display:flex;flex-direction:row}.related-topics-outer-container \u003E .container \u003E .cmp-container \u003E .aem-container \u003E div{width:auto !important;margin:0 !important}.related-topics-outer-container \u003E .container \u003E .cmp-container \u003E .aem-container \u003E div:first-child{margin-right:16px !important;flex-shrink:0}","jsContent":"(function(){var OFFSET=100;if(window.gsap&&window.ScrollTrigger){gsap.registerPlugin(ScrollTrigger);var sidebar=document.querySelector('.sticky-sidebar');var body=document.querySelector('.longform-content');if(sidebar&&body){ScrollTrigger.create({trigger:sidebar,start:'top 100px',endTrigger:body,end:'bottom bottom',pin:sidebar,pinSpacing:false});}}document.addEventListener('click',function(e){var li=e.target.closest('li[data-anchor]');if(!li)return;var slug=li.getAttribute('data-anchor');var heading=document.querySelector('.anchor-title--'+CSS.escape(slug));if(!heading)return;e.preventDefault();var top=heading.getBoundingClientRect().top+window.pageYOffset-OFFSET;window.scrollTo({top:top,behavior:'smooth'});history.replaceState(null,'','#'+slug);},false);var headings=document.querySelectorAll('[class*=\"anchor-title--\"]');if(headings.length&&'IntersectionObserver'in window){var io=new IntersectionObserver(function(entries){entries.forEach(function(entry){if(!entry.isIntersecting)return;var cls=Array.from(entry.target.classList).find(function(c){return c.indexOf('anchor-title--')===0;});if(!cls)return;var slug=cls.replace('anchor-title--','');document.querySelectorAll('li[data-anchor]').forEach(function(li){li.classList.toggle('is-active',li.getAttribute('data-anchor')===slug);});});},{rootMargin:'-20% 0px -70% 0px',threshold:0});headings.forEach(function(h){io.observe(h);});}})();",":type":"snowflake-site/components/markup-editor","isGSAPEnabled":true},"experiencefragment-footer":{"id":"experiencefragment-38eacf9ee5","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer/master.xfmodel.json"},"experiencefragment":{"id":"experiencefragment-8ccf63b32a","localizedFragmentVariationPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer-legal-disclaimers/master/jcr:content","configured":true,":type":"snowflake-site/components/experiencefragment","xfModelPath":"/content/experience-fragments/snowflake-site/language-masters/en/site/footer-legal-disclaimers/master.xfmodel.json"}},":itemsOrder":["experiencefragment-banner","experiencefragment-header","responsivegrid","modal_container","markup_editor_928258845","markup_editor_597730182","markup_editor","experiencefragment-footer","experiencefragment"],":type":"wcm/foundation/components/responsivegrid"}},":itemsOrder":["root"],"analyticsDebugMode":false,"analyticsData":{"excludeFromAnalytics":false,"subCategory":"","pageType":"homepage","templateName":"base-page-template54","siteName":"snowflake","pageUrl":"/content/snowflake-site/global/en/artificial-intelligence/ai-engineering/harness-engineering","language":"en","category":"general","pageName":"Harness Engineering: Building the Runtime That Makes AI Agents Reliable","contentTags":[]},"analyticsContentTags":[],"analyticsEnabled":true,"coveoConfig":{"pipeline":"snowflake.com","searchHub":"snowflake.com","organizationId":"snowflakecomputingproduction8neljofn","apiKey":"xx335921a6-2a0a-40f2-a167-e390b4766c3d"},"isPasswordProtected":false,":path":"/content/snowflake-site/global/en/artificial-intelligence/ai-engineering/harness-engineering",":hierarchyType":"page","locale":"en"}
  