[{"data":1,"prerenderedAt":2365},["ShallowReactive",2],{"site-nav-content":3,"blog:\u002Fblog\u002Fagent-harness-vs-agent-framework":177,"blog-index-copy":821,"blog:\u002Fblog\u002Fagent-harness-vs-agent-framework:surround":842,"hiring-banner-content":2334,"site-cta-content":2346},{"header":4,"productNav":9,"nav":42,"footer":61,"askAI":132,"id":161,"title":162,"archived":163,"authors":164,"badge":164,"body":165,"date":164,"definedTerm":164,"department":164,"description":169,"extension":172,"eyebrow":164,"faqHeader":164,"faqs":164,"footerBand":164,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":173,"relatedHeading":164,"seo":174,"series":164,"sitemap":163,"status":164,"stem":175,"subhead":164,"tags":164,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":176},{"productLabel":5,"loginLabel":6,"contactLabel":7,"contactSalesLabel":8},"Product","Log in","Contact","Get started for free",[10,14,18,22,26,30,34,38],{"label":11,"to":12,"description":13},"Overview","\u002Foverview","Seven layers. One closed loop.",{"label":15,"to":16,"description":17},"Conflux","\u002Fproduct\u002Fconflux","Where your team, workstreams, and agents meet.",{"label":19,"to":20,"description":21},"Agent Teams","\u002Fproduct\u002Fagent-teams","Specialist teams - governed from day one.",{"label":23,"to":24,"description":25},"Lifecycle Graph","\u002Fproduct\u002Flifecycle-graph","Intelligence that compounds across every interaction.",{"label":27,"to":28,"description":29},"Company Wiki","\u002Fproduct\u002Fwiki","Playbooks and policies where expertise stays.",{"label":31,"to":32,"description":33},"Workstreams","\u002Fproduct\u002Fworkstreams","From brief to signed-off deliverable on one canvas.",{"label":35,"to":36,"description":37},"Perception Console","\u002Fproduct\u002Fperception","Ask your whole business in plain English.",{"label":39,"to":40,"description":41},"Governance","\u002Fproduct\u002Fgovernance","Frontier AI you can actually sign off on.",[43,46,49,52,55,58],{"label":44,"to":45},"Models","\u002Fmodels",{"label":47,"to":48},"Pricing","\u002Fpricing",{"label":50,"to":51},"Integrations","\u002Fintegrations",{"label":53,"to":54},"Security","\u002Fsecurity",{"label":56,"to":57},"Partners","\u002Fpartners",{"label":59,"to":60},"Insights","\u002Fblog",{"productHeading":5,"companyHeading":62,"resourcesHeading":63,"legalHeading":64,"docsLabel":65,"docsUrl":66,"statementLines":67,"copyright":70,"companyLinks":71,"resourcesLinks":86,"legalLinks":102,"socialLinks":109,"bottomLinks":119},"Company","Resources","Legal","Docs","https:\u002F\u002Fdocs.gonimbus.ai",[68,69],"Stop training someone else's model.","Control your AI.","© 2026 Nimbus Intelligence, Inc. All rights reserved.",[72,73,74,75,76,78,81,84],{"label":47,"to":48},{"label":50,"to":51},{"label":53,"to":54},{"label":59,"to":60},{"label":77,"to":57},"Partner Program",{"label":79,"to":80},"Careers","\u002Fcareers",{"label":82,"to":83},"System status","\u002Fstatus",{"label":7,"to":85},"\u002Fcontact",[87,90,93,96,99],{"label":88,"to":89},"Glossary","\u002Fglossary",{"label":91,"to":92},"Compare","\u002Fcompare",{"label":94,"to":95},"Evaluate","\u002Fevaluate",{"label":97,"to":98},"Problems","\u002Fproblems",{"label":100,"to":101},"Use cases","\u002Fuse-cases",[103,106],{"label":104,"to":105},"Terms of Service","\u002Fterms",{"label":107,"to":108},"Privacy Policy","\u002Fprivacy",[110,113,116],{"label":111,"href":112},"LinkedIn","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fgonimbusai\u002F",{"label":114,"href":115},"X","https:\u002F\u002Fx.com\u002Fgonimbusai",{"label":117,"href":118},"Instagram","https:\u002F\u002Fwww.instagram.com\u002Fgonimbus_ai\u002F",[120,122,124,127,128],{"label":121,"to":105},"Terms",{"label":123,"to":108},"Privacy",{"label":125,"to":126},"Compliance","\u002Fcompliance",{"label":82,"to":83},{"label":129,"to":130,"external":131},"LLMs.txt","\u002Fllms.txt",true,{"text":133,"prompt":134,"platforms":135},"Ask AI about Nimbus","I'm researching enterprise intelligence platforms and want to know how Nimbus combines perception, collaboration, and autonomous agents to drive strategic decision-making. Summarize the highlights from Nimbus's website: https:\u002F\u002Fgonimbus.ai",[136,141,146,151,156],{"name":137,"label":138,"icon":139,"hrefPrefix":140},"chatgpt","ChatGPT","simple-icons:openai","https:\u002F\u002Fchatgpt.com\u002F?prompt=",{"name":142,"label":143,"icon":144,"hrefPrefix":145},"perplexity","Perplexity","mdi:magnify","https:\u002F\u002Fwww.perplexity.ai\u002Fsearch\u002Fnew?q=",{"name":147,"label":148,"icon":149,"hrefPrefix":150},"grok","Grok","simple-icons:x","https:\u002F\u002Fx.com\u002Fi\u002Fgrok?text=",{"name":152,"label":153,"icon":154,"hrefPrefix":155},"claude","Claude","simple-icons:anthropic","https:\u002F\u002Fclaude.ai\u002Fnew?q=",{"name":157,"label":158,"icon":159,"hrefPrefix":160},"google-ai","Google AI","simple-icons:google","https:\u002F\u002Fwww.google.com\u002Fsearch?udm=50&aep=11&q=","content\u002Fshared\u002Fnav.md","Site navigation",false,null,{"type":166,"value":167,"toc":168},"minimark",[],{"title":169,"searchDepth":170,"depth":170,"links":171},"",2,[],"md","\u002Fshared\u002Fnav",{"title":162,"description":169},"shared\u002Fnav","Q7sDe7TuGEwhwUMamyeOxjvGlsUaF3Iay9VTW0KaE_U",{"id":178,"title":179,"archived":163,"authors":180,"badge":184,"body":186,"date":797,"definedTerm":164,"department":164,"description":798,"extension":172,"eyebrow":164,"faqHeader":799,"faqs":802,"footerBand":164,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":812,"relatedHeading":164,"seo":813,"series":814,"sitemap":131,"status":164,"stem":815,"subhead":164,"tags":816,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":820},"content\u002Fblog\u002Fagent-harness-vs-agent-framework.md","Agent Harness vs Agent Framework",[181],{"name":182,"to":183},"Nimbus Research","https:\u002F\u002Fgonimbus.ai",{"label":185},"Explainer",{"type":166,"value":187,"toc":779},[188,201,233,253,256,261,319,335,339,347,350,364,380,387,391,397,411,431,446,452,462,472,488,495,499,529,535,539,549,560,568,575,586,602,609,615,618,626,630,635,642,646,653,657,660,664,667,671,678,682,691,695,703,707],[189,190,191,192,196,197,200],"p",{},"An ",[193,194,195],"strong",{},"agent framework"," is a library for composing models, tools, and control flow. An ",[193,198,199],{},"agent harness"," is the running environment around a model: the loop, the tools as they are actually granted, the stops, the sensors, and the identity that production will use.",[189,202,203,208,209,212,213,217,218,222,223,227,228,232],{},[204,205,207],"a",{"href":206},"https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flangchain\u002Fagents","LangChain’s own docs"," are careful with the words. ",[193,210,211],{},"Agent = Model + Harness."," ",[214,215,216],"code",{},"create_agent"," is “a highly configurable harness.” ",[204,219,221],{"href":220},"https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagents","Deep Agents"," is “the batteries-included agent harness.” ",[204,224,226],{"href":225},"https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Foverview","LangGraph"," is the low-level orchestration framework when the built-in loop is the wrong shape. That taxonomy is the whole article: a framework can ",[229,230,231],"em",{},"implement"," a harness. Shipping the pip package does not mean you have one operators can hire.",[189,234,235,239,240,242,243,247,248,252],{},[204,236,238],{"href":237},"https:\u002F\u002Fwww.langchain.com\u002Fblog\u002Fhow-to-build-a-custom-agent-harness","LangChain’s custom-harness post"," says the same from the other side. Pre-assembled harnesses (Deep Agents, Claude Agent SDK) get you to a working agent fast. ",[214,241,216],{}," is minimal on purpose: core loop plus middleware. You still choose tools, guardrails, and business logic. CrewAI, Semantic Kernel, AutoGen, and Pydantic AI live in this neighbourhood. They are how engineers assemble loops. They are not a substitute for ",[204,244,246],{"href":245},"\u002Fblog\u002Fwhat-is-write-back-governance\u002F","write-back governance",", a ",[204,249,251],{"href":250},"\u002Fblog\u002Fwhat-is-an-ai-workstream\u002F","workstream",", or a ledger.",[189,254,255],{},"Claude Code and Cursor are harnesses you run, not frameworks you import. Nimbus, Palantir AIP, and Agentforce are (different) harnesses you run for company jobs. Confusing “we use LangGraph” with “we have an enterprise harness” is the 2026 version of “we use Kubernetes” meaning “we have a product.”",[257,258,260],"h2",{"id":259},"words-youll-hear","Words you’ll hear",[262,263,264,271,285,296,302,308],"ul",{},[265,266,267,270],"li",{},[193,268,269],{},"Framework."," SDKs and graphs: LangChain, LangGraph, CrewAI, AutoGen, Semantic Kernel, Pydantic AI. You write code. You own production identity unless you add it.",[265,272,273,276,277,281,282,284],{},[193,274,275],{},"Harness."," Runtime around the model. ",[204,278,280],{"href":279},"\u002Fblog\u002Fwhat-is-an-agent-harness\u002F","What is an agent harness",". May be a product (Claude Code) or a configured framework (your ",[214,283,216],{}," plus hooks plus IdP).",[265,286,287,290,291,295],{},[193,288,289],{},"Middleware \u002F hooks."," Framework primitive that becomes harness behaviour when it always runs. LangChain middleware; ",[204,292,294],{"href":293},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fhooks","Claude Code hooks",".",[265,297,298,301],{},[193,299,300],{},"Batteries-included harness."," Deep Agents, Claude Agent SDK, Codex SDK. Opinionated loop, filesystem, subagents, compaction. Still not your CRM grant model.",[265,303,304,307],{},[193,305,306],{},"Orchestration framework."," LangGraph when you need deterministic nodes mixed with agentic ones. Powerful. Easy to put the orchestrator in a system prompt and call it done.",[265,309,310,313,314,318],{},[193,311,312],{},"MCP."," Plug. ",[204,315,317],{"href":316},"\u002Fblog\u002Fwhat-is-model-context-protocol\u002F","What is Model Context Protocol",". Works behind frameworks and products. Does not choose the framework\u002Fharness cut.",[189,320,321,322,326,327,330,331,295],{},"In Nimbus you do not import a graph to start a job. You assign an ",[204,323,325],{"href":324},"\u002Fproduct\u002Fagent-teams\u002F","agent team"," on a ",[204,328,251],{"href":329},"\u002Fproduct\u002Fworkstreams\u002F",". Under the hood there is still a loop, tools, and stops — a harness. The product choice is whether operators must be graph authors. ",[204,332,334],{"href":333},"\u002Fevaluate\u002F","Self-service vs forward-deployed",[257,336,338],{"id":337},"why-you-should-care","Why you should care",[189,340,341,342,346],{},"Engineers will prefer frameworks. They should. Control, portability, tests in CI. Operators and Legal will prefer a harness they can inspect without a pull request. ",[204,343,345],{"href":344},"https:\u002F\u002Fwww.mckinsey.com\u002Fcapabilities\u002Fquantumblack\u002Four-insights\u002Fthe-state-of-ai","McKinsey"," keeps showing isolated technical use without operating-model change. A beautiful LangGraph in a platform team’s repo is still isolated use if RevOps cannot attach Salesforce or refuse a write.",[189,348,349],{},"It affects you if:",[262,351,352,355,358,361],{},[265,353,354],{},"the RFP says “must support LangChain” as if that were a control",[265,356,357],{},"a vendor says “model-agnostic framework” and prices seats on one flagship",[265,359,360],{},"you are asked to rebuild quoting and SoD because “we already have agents in Python”",[265,362,363],{},"security reviews the GitHub org and never reviews who can call PATCH",[189,365,366,370,371,374,375,379],{},[204,367,369],{"href":368},"https:\u002F\u002Fgenai.owasp.org\u002Fllm-top-10\u002F","OWASP’s LLM Top 10"," excessive agency shows up in both: a framework that exposes every tool by default, or a product that does. The cut is not safety vs convenience. It is ",[229,372,373],{},"who can change the harness when it fails"," — ",[204,376,378],{"href":377},"\u002Fblog\u002Fwhat-is-harness-engineering\u002F","harness engineering"," — and whether a fail-closed write exists.",[189,381,382,386],{},[204,383,385],{"href":384},"https:\u002F\u002Fwww.nist.gov\u002Fitl\u002Fai-risk-management-framework","NIST AI RMF"," Map\u002FMeasure need a system boundary. “Our framework” is not a boundary. A named runtime with grants and logs is.",[257,388,390],{"id":389},"the-practical-differences","The practical differences",[189,392,393,396],{},[193,394,395],{},"Who authors the loop."," Framework: software engineers. Product harness: operators (and maybe SE for custom tools). If only engineers can add a sensor, you will wait on a sprint for a Legal rule.",[189,398,399,402,403,406,407,410],{},[193,400,401],{},"Where identity lives."," Framework default: service account in ",[214,404,405],{},".env",". Product harness: org roster, workstream membership, OAuth grants. You ",[229,408,409],{},"can"," do the latter in LangGraph. You must build it.",[189,412,413,416,417,421,422,426,427,430],{},[193,414,415],{},"What “done” means."," Framework: your node returned. Inner product harness: tests \u002F hook. Outer product harness: signer. Anthropic’s ",[204,418,420],{"href":419},"https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents","effective agents"," and ",[204,423,425],{"href":424},"https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-harnesses-for-long-running-agents","long-running harness"," notes are about encoding done in the ",[229,428,429],{},"environment",". Frameworks give you the primitives; they do not know your done.",[189,432,433,436,437,440,441,445],{},[193,434,435],{},"Portability."," Frameworks win on model swap ",[229,438,439],{},"if"," tools and middleware stay. Product harnesses win if they actually route and do not bury a flagship default in a seat. ",[204,442,444],{"href":443},"\u002Fblog\u002Fwhat-is-model-routing\u002F","Model routing",". “We wrap LangChain” is not routing.",[189,447,448,451],{},[193,449,450],{},"Eval."," Frameworks shine in unit tests of nodes. Inner harnesses shine on SWE-bench \u002F Terminal-Bench. Enterprise harnesses shine when quote hash equals SoR row. Different CI.",[189,453,454,457,458,295],{},[193,455,456],{},"Time-to-first-governed-write."," Framework: months unless you already built the interceptor. Forward-deployed OS: months of people. Self-service outer harness: the product’s week-one claim — verify it. ",[204,459,461],{"href":460},"\u002Fblog\u002Fhow-to-evaluate-an-agent-harness\u002F","Proof of value",[189,463,464,467,468,471],{},[193,465,466],{},"Lock-in."," Framework lock-in is code and patterns. Product lock-in is data, graph, and operating habits. Both are real. ",[204,469,470],{"href":443},"How to solve model lock-in"," is the model slice; harness lock-in is the loop slice. Prefer quoted payloads and exportable ledgers either way.",[189,473,474,475,479,480,483,484,295],{},"LangChain is not the villain. Their ",[204,476,478],{"href":477},"https:\u002F\u002Fwww.langchain.com\u002Fblog\u002Fthe-anatomy-of-an-agent-harness","anatomy post"," is one of the clearer public derivations of harness parts. Use it. Then ask whether your ",[229,481,482],{},"deployment"," has those parts for the job you are buying — repo or company. ",[204,485,487],{"href":486},"\u002Fblog\u002Finner-vs-outer-agent-harness\u002F","Inner vs outer",[189,489,490,491,494],{},"Nimbus’s bet is that most operators should not author LangGraph to update a discount cap. The wiki and the gate should move. Teams that ",[229,492,493],{},"should"," author graphs (unique simulation, exotic tools) can still sit behind a connector. Framework inside a harness. Not a framework instead of one.",[257,496,498],{"id":497},"a-decision-rule","A decision rule",[262,500,501,507,513,523],{},[265,502,503,506],{},[193,504,505],{},"Building a product or a unique workflow in code, with engineers on the hook:"," framework (or SDK harness) plus your own grants and evals.",[265,508,509,512],{},[193,510,511],{},"Hiring a loop for a repository:"," inner product harness (Claude Code, Cursor, Codex). Optionally extend with a framework for custom tools.",[265,514,515,212,518,522],{},[193,516,517],{},"Hiring a loop for CRM\u002FERP\u002Fcross-department work:",[204,519,521],{"href":520},"\u002Fblog\u002Fwhat-is-an-enterprise-agent-harness\u002F","enterprise agent harness"," \u002F OS-class product. A framework is a build programme.",[265,524,525,528],{},[193,526,527],{},"Vendor says “we are a framework and an OS”:"," make them show a failed unsigned write and an operator-attached connector. Words are cheap.",[189,530,531,534],{},[204,532,533],{"href":333},"Build vs buy an enterprise AI OS"," is the longer form of the third bullet.",[257,536,538],{"id":537},"what-each-layer-of-the-stack-is-for","What each layer of the stack is for",[189,540,541,542,545,546,548],{},"LangChain’s own split is the cleanest vendor-native map: use Deep Agents when you want a batteries-included ",[229,543,544],{},"harness","; use ",[214,547,216],{}," when you want a minimal harness you customise with middleware; drop to LangGraph when the agent loop is the wrong shape and you need deterministic nodes mixed with agentic ones; use LangSmith to trace whatever you built. That is a builder’s menu. It does not decide whether RevOps can refuse a write.",[189,550,551,552,555,556,559],{},"CrewAI is a role-and-task framework. AutoGen is a conversation-of-agents framework. Semantic Kernel is Microsoft’s orchestration SDK. Pydantic AI moved toward a “harness-first” design in 2026 (capabilities as tools + hooks + instructions). None of these are wrong. All of them leave identity, SoR quoting, and operator self-service as ",[229,553,554],{},"your"," story unless you add them. ",[204,557,558],{"href":368},"OWASP"," will still fail you if the first graph you merge attaches every production tool “so the demo looks alive.”",[189,561,562,563,567],{},"Product harnesses fail the other way: they hide the graph so operators can work, then surprise engineers who wanted to unit-test a node. Demand an escape hatch — export traces, typed payloads, maybe a documented tool SDK — without requiring every discount cap to be a pull request. Nimbus’s bet is that the cap lives in the ",[204,564,566],{"href":565},"\u002Fproduct\u002Fwiki\u002F","wiki"," and the interceptor, and that engineers who need a custom simulator put it behind a connector. Framework inside the harness.",[189,569,570,574],{},[204,571,573],{"href":572},"https:\u002F\u002Fwww.thoughtworks.com\u002Finsights\u002Farticles\u002Foperating-system-enterprise-ai","Thoughtworks"," would say a company that standardises on LangGraph has invested in layer 2 (builder) and still has to build layers 3–4 (user guides\u002Fsensors, organisational ownership). A company that buys only a coding harness has a strong inner layer 2–3 and a missing outer layer 4. A company that buys an OS-class product is hoping layer 3–4 shipped. Verify with a refused write, not with a README.",[189,576,577,580,581,585],{},[193,578,579],{},"Cost of the wrong cut."," Framework-first for operators: six months of platform work, then shadow copilots anyway. Product-first for a unique research loop: you will fight the product and rebuild the graph in Python by week four. ",[204,582,584],{"href":583},"\u002Fblog\u002Fhow-to-choose-between-a-coding-harness-and-an-enterprise-harness\u002F","How to choose coding vs enterprise"," plus this page: workspace first, then assemble vs hire.",[189,587,588,591,592,594,595,597,598,601],{},[193,589,590],{},"Portability, honestly."," Frameworks make model swap easier ",[229,593,439],{}," you used their model interface and did not sprinkle vendor-specific tool formats through application code. Products make operator ratchet easier ",[229,596,439],{}," adding a gate is a UI action. Neither gives you portability of ",[229,599,600],{},"decisions"," unless the ledger exports. Ask for JSON of the quote and the graph, not a promise of “open.”",[189,603,604,605,608],{},"Inngest and others have argued that durable execution needs “a harness, not a framework”: retries, state, and recovery as infrastructure. That slogan is directionally right for production. It is incomplete for enterprises. Durable retries of an ",[229,606,607],{},"unsigned"," write are a reliable incident. The outer harness adds identity and a stop that retries must not bypass. LangGraph checkpointing is excellent loop infrastructure. It is not a Finance signer.",[189,610,611,612,295],{},"A worked split: the data-science team builds a forecasting graph in LangGraph, evaluates it with their own sensors, exposes it as a tool. RevOps never opens the repo. They brief a workstream, the team calls the forecast tool under read scope, and any CRM write still quotes in the product interceptor. Framework for the specialist. Harness for the company job. Nimbus is the second box; it should consume the first as a connector, not replace the scientists’ graph. ",[204,613,50],{"href":614},"\u002Fintegrations\u002F",[189,616,617],{},"If your platform team’s OKR is “stand up LangChain,” add a second OKR: “unsigned SoR writes are impossible.” The first without the second is a framework programme. The second without any loop is a policy PDF. You need both, in that order of safety.",[189,619,620,621,625],{},"CrewAI marketing will talk about roles. Roles in a YAML file are not roster identity. If the “legal reviewer” crew member can still call the same Salesforce write tool as the “AE,” you have a framework demo of ",[204,622,624],{"href":623},"\u002Fblog\u002Fwhat-is-multi-agent-ai\u002F","agent teams"," without the contract. Ask to see the tool belt per role, then ask what happens when you remove the write tool from legal and the model asks for it anyway. The harness answer is refuse. The framework-only answer is often “we’ll prompt it.”",[257,627,629],{"id":628},"questions-people-actually-ask","Questions people actually ask",[631,632,634],"h3",{"id":633},"is-langgraph-a-harness","Is LangGraph a harness?",[189,636,637,638,641],{},"It is a framework for building one. Your graph ",[229,639,640],{},"becomes"," a harness when it owns tool dispatch, bounds, and (for production) identity and sensors. Empty graph ≠ harness.",[631,643,645],{"id":644},"is-claude-code-a-framework","Is Claude Code a framework?",[189,647,648,649,295],{},"No. It is a productised inner harness. The Agent SDK is the embeddable form — closer to HaaS in ",[204,650,652],{"href":651},"https:\u002F\u002Faddyosmani.com\u002Fblog\u002Fagent-harness-engineering\u002F","Osmani’s sense",[631,654,656],{"id":655},"does-mcp-replace-both","Does MCP replace both?",[189,658,659],{},"No. Plumbing. Hosts still need a loop and grants.",[631,661,663],{"id":662},"we-already-standardised-on-crewai","We already standardised on CrewAI.",[189,665,666],{},"Keep it for the jobs engineers should own. Do not force RevOps to write crews for a renewal write. Put CrewAI behind a scoped tool if the outer harness needs that specialist.",[631,668,670],{"id":669},"how-do-we-evaluate-a-vendor-who-wraps-langchain","How do we evaluate a vendor who wraps LangChain?",[189,672,673,674,677],{},"Ignore the wrapper. Run ",[204,675,676],{"href":460},"how to evaluate an agent harness",". If they cannot refuse a write, you evaluated a demo of a framework.",[631,679,681],{"id":680},"where-does-nimbus-sit","Where does Nimbus sit?",[189,683,684,685,688,689,295],{},"Productised outer harness, not a LangChain distribution. ",[204,686,11],{"href":687},"\u002Foverview\u002F",". You should still allow inner harnesses for code. ",[204,690,584],{"href":583},[257,692,694],{"id":693},"related-reading","Related reading",[189,696,697,421,700,295],{},[204,698,699],{"href":377},"What is harness engineering",[204,701,702],{"href":623},"what is multi-agent AI",[257,704,706],{"id":705},"sources","Sources",[262,708,709,714,719,724,729,734,739,744,749,754,759,764,768,773],{},[265,710,711],{},[204,712,713],{"href":206},"LangChain, Agents",[265,715,716],{},[204,717,718],{"href":237},"LangChain, How to build a custom agent harness",[265,720,721],{},[204,722,723],{"href":477},"LangChain, The anatomy of an agent harness",[265,725,726],{},[204,727,728],{"href":225},"LangChain, LangGraph overview",[265,730,731],{},[204,732,733],{"href":220},"LangChain Deep Agents",[265,735,736],{},[204,737,738],{"href":572},"Thoughtworks, The operating system for enterprise AI",[265,740,741],{},[204,742,743],{"href":651},"Addy Osmani, Agent harness engineering",[265,745,746],{},[204,747,748],{"href":419},"Anthropic, Building effective agents",[265,750,751],{},[204,752,753],{"href":424},"Anthropic, Effective harnesses for long-running agents",[265,755,756],{},[204,757,758],{"href":293},"Claude Code, Hooks",[265,760,761],{},[204,762,763],{"href":344},"McKinsey, The state of AI in 2025",[265,765,766],{},[204,767,385],{"href":384},[265,769,770],{},[204,771,772],{"href":368},"OWASP Top 10 for LLM applications",[265,774,775],{},[204,776,778],{"href":777},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-11-25\u002Findex","Model Context Protocol specification",{"title":169,"searchDepth":170,"depth":170,"links":780},[781,782,783,784,785,786,795,796],{"id":259,"depth":170,"text":260},{"id":337,"depth":170,"text":338},{"id":389,"depth":170,"text":390},{"id":497,"depth":170,"text":498},{"id":537,"depth":170,"text":538},{"id":628,"depth":170,"text":629,"children":787},[788,790,791,792,793,794],{"id":633,"depth":789,"text":634},3,{"id":644,"depth":789,"text":645},{"id":655,"depth":789,"text":656},{"id":662,"depth":789,"text":663},{"id":669,"depth":789,"text":670},{"id":680,"depth":789,"text":681},{"id":693,"depth":170,"text":694},{"id":705,"depth":170,"text":706},"2026-08-24","An agent framework is a library for assembling a loop.",{"eyebrow":800,"title":801},"Short answers","Library versus a system you can run",[803,806,809],{"question":804,"answer":805},"Is an agent framework the same as an agent harness?","No. A framework is a library for assembling a loop. A harness is the loop you can actually run, with tools, stops, identity, and sensors included.",{"question":807,"answer":808},"Does LangChain count as a harness?","LangChain helps you build one. It is not, by itself, a harness you can hire. You still have to add permissions, a stop, and a record of what ran.",{"question":810,"answer":811},"What should we buy if we already use a framework?","Keep the framework for construction. Add a harness where the work touches a live system and a named person has to be able to refuse the change.","\u002Fblog\u002Fagent-harness-vs-agent-framework",{"title":179,"description":798},"explainer","blog\u002Fagent-harness-vs-agent-framework",[814,817,818,819],"agent-harness","langchain","frameworks","RIUbWALaQhkECWWg7MZzfWGEoEgdzjiFlnkixJN_2ok",{"hero":822,"id":824,"title":825,"archived":163,"authors":164,"badge":164,"body":826,"date":164,"definedTerm":164,"department":164,"description":830,"extension":172,"eyebrow":831,"faqHeader":164,"faqs":164,"footerBand":832,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":60,"relatedHeading":838,"seo":839,"series":164,"sitemap":131,"status":164,"stem":840,"subhead":164,"tags":164,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":841},{"filename":823},"u2221455217_Flat_design_of_a_futuristic_minimalist_landscape__5d589295-cdea-4ea9-a262-be766881accf_1.png","content\u002Fblog\u002Findex.md","Exploring the future of intelligence.",{"type":166,"value":827,"toc":828},[],{"title":169,"searchDepth":170,"depth":170,"links":829},[],"Deep dives into pre-cognitive intelligence, sentient enterprises, and the evolving landscape of AI-driven business transformation.","Latest Research",{"headline":833,"description":834,"primaryLabel":835,"primaryTo":836,"secondaryLabel":837,"secondaryTo":12},"Stay at the frontier.","Subscribe for product updates and new insights.","Subscribe","\u002Fnewsletter","Explore the platform","More research",{"title":825,"description":830},"blog\u002Findex","BFSWGYO9bcTlaulivKYWyg08_DJHsdGg3OC6g_CG1Hw",[843,1477],{"id":844,"title":845,"archived":163,"authors":846,"badge":848,"body":850,"date":797,"definedTerm":164,"department":164,"description":1457,"extension":172,"eyebrow":164,"faqHeader":1458,"faqs":1460,"footerBand":164,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":1470,"relatedHeading":164,"seo":1471,"series":1472,"sitemap":131,"status":164,"stem":1473,"subhead":164,"tags":1474,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":1476},"content\u002Fblog\u002Fhow-to-evaluate-an-agent-harness.md","How to Evaluate an Agent Harness",[847],{"name":182,"to":183},{"label":849},"Evaluation",{"type":166,"value":851,"toc":1438},[852,858,876,892,894,958,969,973,976,1008,1014,1017,1021,1035,1052,1070,1080,1092,1101,1113,1122,1133,1137,1163,1166,1170,1176,1185,1188,1192,1195,1204,1210,1221,1231,1240,1248,1256,1265,1271,1274,1281,1285,1307,1309,1313,1316,1320,1325,1329,1332,1336,1339,1343,1357,1359,1368,1370],[189,853,854,855,857],{},"Evaluating an ",[204,856,199],{"href":279}," is checking whether the runtime around the model can finish a job under a stop you trust — not whether a demo answered a question.",[189,859,860,863,864,868,869,872,873,295],{},[204,861,862],{"href":206},"LangChain"," defines the object: Agent = Model + Harness. The scoring sheet is therefore about the harness. If your RFP starts with context-window size and SWE-bench, you are scoring a model (and maybe an inner coding loop). You will miss whether an unsigned Salesforce PATCH is possible. ",[204,865,867],{"href":866},"\u002Fblog\u002Fwhat-is-an-enterprise-ai-operating-system\u002F","What is an enterprise AI operating system"," is the cousin page for wiki, workstreams, and routing as a ",[229,870,871],{},"product category",". This page is the runtime tests that apply to Claude Code, a LangGraph deployment, AIP, Agentforce, and Nimbus alike — then specialised by ",[204,874,875],{"href":486},"inner vs outer",[189,877,878,881,882,886,887,891],{},[204,879,880],{"href":344},"McKinsey’s 2025 State of AI"," already measured the trap: widespread use, limited scale. A fluent demo produces the first. A harness that can refuse, replay, and ratchet produces the second. ",[204,883,885],{"href":884},"https:\u002F\u002Fwww.nist.gov\u002Fitl\u002Fai-risk-management-framework\u002Fnist-ai-rmf-playbook","NIST’s AI RMF Playbook"," is the measurement language. ",[204,888,890],{"href":889},"https:\u002F\u002Fwww.iso.org\u002Fstandard\u002F42001","ISO\u002FIEC 42001"," is the management-system language. Neither is “the model seemed careful.”",[257,893,260],{"id":259},[262,895,896,907,922,931,940,950],{},[265,897,898,901,902,906],{},[193,899,900],{},"Harness vs framework."," Library versus running loop. ",[204,903,905],{"href":904},"\u002Fblog\u002Fagent-harness-vs-agent-framework\u002F","Harness vs framework",". “We use LangChain” is not a passed test.",[265,908,909,912,913,917,918,921],{},[193,910,911],{},"Sensor."," Independent check. ",[204,914,916],{"href":915},"https:\u002F\u002Fmartinfowler.com\u002Farticles\u002Fharness-engineering.html","Böckeler","; ",[204,919,573],{"href":920},"https:\u002F\u002Fwww.thoughtworks.com\u002Fen-us\u002Finsights\u002Fblog\u002Fgenerative-ai\u002Fharness-engineering-agent-feedback-exploring-ai-coding-sensors",". Inner: tests. Outer: quote vs SoR.",[265,923,924,927,928,930],{},[193,925,926],{},"Hook \u002F interceptor."," Always runs. ",[204,929,294],{"href":293},". Outer: fail-closed adapter.",[265,932,933,936,937,295],{},[193,934,935],{},"Quote."," Structured payload, not a paragraph. ",[204,938,939],{"href":245},"Write-back",[265,941,942,945,946,295],{},[193,943,944],{},"Replay."," Can you reconstruct signer, policy version, tool grants. ",[204,947,949],{"href":948},"\u002Fblog\u002Fwhat-is-a-lifecycle-graph\u002F","Lifecycle graph",[265,951,952,955,956,295],{},[193,953,954],{},"Model portability."," Swap weights without rewriting tools. Not a logo on a slide. ",[204,957,444],{"href":443},[189,959,960,961,421,964,968],{},"When you evaluate Nimbus, run these tests on ",[204,962,963],{"href":329},"workstreams",[204,965,967],{"href":966},"\u002Fproduct\u002Fgovernance\u002F","governance",", not on a homepage video. When you evaluate Claude Code, run them on a repo hook and CI, not on a blog SWE-bench screenshot. Same sheet, different workspace.",[257,970,972],{"id":971},"why-evaluation-usually-fails","Why evaluation usually fails",[189,974,975],{},"People score agents like they score chat: quality of the paragraph, latency, brand of the model. That produces three false passes:",[977,978,979,989,999],"ol",{},[265,980,981,984,985,295],{},[193,982,983],{},"The copilot pass."," SSO, a usage dashboard, a good answer. No loop ownership. ",[204,986,988],{"href":987},"\u002Fblog\u002Fcollaborative-ai-and-personal-assistants\u002F","Copilot vs work OS",[265,990,991,994,995,295],{},[193,992,993],{},"The benchmark pass."," SWE-bench or Terminal-Bench for an outer job. Inner eval, outer purchase. ",[204,996,998],{"href":997},"\u002Fblog\u002Feval-loops-for-enterprise-agent-harnesses\u002F","Eval loops",[265,1000,1001,1004,1005,1007],{},[193,1002,1003],{},"The framework pass."," A graph in a notebook with every production tool attached. ",[204,1006,558],{"href":368}," excessive agency with extra nodes.",[189,1009,1010,1013],{},[204,1011,1012],{"href":419},"Anthropic"," is blunt: encode the job, bound the tools, define done. Your proof of value should force those three. Written answers without a failed action are still a slide.",[189,1015,1016],{},"Red flags: chathe entire proof; “we integrate” with no scoped grant; governance as PDF; memory as a long window; “model-agnostic” with a flagship default and seat pricing; MCP write tools that inherit a god service account; vendor database offered as the new system of record.",[257,1018,1020],{"id":1019},"checklist","Checklist",[189,1022,1023,1026,1027,1030,1031,295],{},[193,1024,1025],{},"1. Can it stop an action the model wants?"," Inner: ",[214,1028,1029],{},"PreToolUse"," denies a matched command; tests fail the merge. Outer: unsigned write does not execute; reject leaves SoR unchanged. If the only stop is max tokens, you have a fuse, not a control plane. ",[204,1032,1034],{"href":1033},"\u002Fblog\u002Fwhat-is-human-in-the-loop-ai\u002F","What is human-in-the-loop AI",[189,1036,1037,1038,1042,1043,1047,1048,1051],{},"Why this matters: ",[204,1039,1041],{"href":1040},"https:\u002F\u002Fwww.cbc.ca\u002Fnews\u002Fcanada\u002Fbritish-columbia\u002Fair-canada-chatbot-lawsuit-1.7116416","Air Canada"," and the ",[204,1044,1046],{"href":1045},"https:\u002F\u002Fwww.reuters.com\u002Flegal\u002Fnew-york-lawyers-sanctioned-using-fake-chatgpt-cases-legal-brief-2023-06-22\u002F","sanctioned ChatGPT brief"," are ungated generation reaching a record. Your demo must show a ",[229,1049,1050],{},"failed"," write.",[189,1053,1054,1057,1058,1061,1062,1065,1066,1069],{},[193,1055,1056],{},"2. Can you replay who signed and which harness version ran?"," Signer identity, wiki or ",[214,1059,1060],{},"AGENTS.md"," revision, tool grants, payload hash, model class. If the answer is Slack search or “the transcript,” you do not have a ledger. ",[204,1063,1064],{"href":948},"What is a lifecycle graph",". Nimbus’s ",[204,1067,23],{"href":1068},"\u002Fproduct\u002Flifecycle-graph\u002F"," is one implementation; demand the export without a vendor engineer.",[189,1071,1072,1075,1076,1079],{},[193,1073,1074],{},"3. Can you swap the model without rewriting tools?"," Change compact vs frontier on extract vs judgement. If tools are bound to one vendor’s function-calling dialect in application code with no adapter, portability is a hope. ",[204,1077,1078],{"href":206},"LangChain’s model interface"," exists for this; product harnesses must expose it as policy, not as a rewrite.",[189,1081,1082,1085,1086,1089,1090,295],{},[193,1083,1084],{},"4. Are tools grants or a belt?"," Least privilege per job. Missing Salesforce is a configuration error, not a hallucination. ",[204,1087,1088],{"href":614},"Connector architecture",". MCP servers inherit the same grant. ",[204,1091,317],{"href":316},[189,1093,1094,1097,1098,1100],{},[193,1095,1096],{},"5. Is verification outside the generator?"," Inner: CI the agent cannot mark skip without a hook. Outer: schema of the quote; SoR row matches. Anthropic’s ",[204,1099,425],{"href":424}," refuses “premature victory” by forcing artefacts and tests. Steal that instinct.",[189,1102,1103,212,1106,1109,1110,295],{},[193,1104,1105],{},"6. Can an operator add a sensor without a six-month SOW?",[204,1107,1108],{"href":377},"Harness engineering"," is a ratchet. If only vendor FDE can add a gate, you bought a programme. Fine for AIP-scale. Wrong for a standard CRM field this quarter. ",[204,1111,1112],{"href":333},"Self-service vs FDE",[189,1114,1115,1118,1119,1121],{},[193,1116,1117],{},"7. Is the workspace the job you are buying?"," Repo vs company. ",[204,1120,584],{"href":583},". A single scoring sheet with no workspace column will buy the wrong loop.",[189,1123,1124,1127,1128,1132],{},[193,1125,1126],{},"8. Economics of the loop."," Max steps, spend cap, routing. Seat “unlimited” is often always-flagship. ",[204,1129,1131],{"href":1130},"\u002Fblog\u002Fwhat-is-ai-token-economics\u002F","What is AI token economics",". Ask for a per-step model breakdown on a live run.",[631,1134,1136],{"id":1135},"rfp-questions","RFP questions",[977,1138,1139,1142,1145,1148,1151,1154,1157,1160],{},[265,1140,1141],{},"Show an action the model attempted that the harness refused. What fired?",[265,1143,1144],{},"After a successful write (or merge), show the signer, policy version, and payload (or diff) without Slack.",[265,1146,1147],{},"Change the model on extract this week. Which tools broke?",[265,1149,1150],{},"Attach a connector (or repo permission) as an operator, not as SE. Time?",[265,1152,1153],{},"Detach the grant mid-job. Does the write fail closed?",[265,1155,1156],{},"What is the independent sensor for “done”? Who can mark skip?",[265,1158,1159],{},"Two departments, different scopes, one job — or one god toolbox?",[265,1161,1162],{},"Price: seats, tokens, usage limits, or a services quote? What stops flagship on classify?",[189,1164,1165],{},"Put these in the RFP, then run them in a proof of value. Agents without a harness test are a persona list.",[631,1167,1169],{"id":1168},"proof-of-value-short","Proof of value (short)",[189,1171,1172,1175],{},[193,1173,1174],{},"Inner job:"," real repo, required hook, red test the agent must fix, no production SoR token.",[189,1177,1178,1181,1182,1184],{},[193,1179,1180],{},"Outer job:"," real cross-department write, quoted payload, reject path, export. Nimbus should pass the same live sequence as anyone else: OAuth attach, blocked unsigned write, graph export. ",[204,1183,11],{"href":687}," is not the proof.",[189,1186,1187],{},"Skip any refuse\u002Freplay\u002Fswap and you evaluated a chat product, a benchmark, or a framework notebook.",[257,1189,1191],{"id":1190},"score-inner-and-outer-without-mixing-oracles","Score inner and outer without mixing oracles",[189,1193,1194],{},"Run two short scripts. Do not average them into one “AI score.”",[189,1196,1197,1200,1201,1203],{},[193,1198,1199],{},"Inner script (repo)."," Fresh checkout of a service you own. Required hook: deny a dangerous bash pattern. Agent must add a failing test then make it pass. CI is the merge sensor. No production CRM token in the environment. Record: did the hook fire, did CI stay independent, can you show the ",[214,1202,1060],{}," revision. SWE-bench plots from the vendor are background, not this script.",[189,1205,1206,1209],{},[193,1207,1208],{},"Outer script (SoR)."," Sandbox Salesforce or equivalent. Operator (not SE) attaches OAuth. Model proposes a write. Unsigned path must fail. Reject path must leave records unchanged. Approve path: read-back matches hash. Export signer and wiki revision. Detach the connector and retry the write — must fail closed. Proof of value is this script with two departments on the canvas.",[189,1211,1212,1213,421,1215,1217,1218,295],{},"If a vendor refuses to run the outer script because “we are a coding tool,” believe them and buy them for inner only. If a vendor refuses the inner script because “we are an OS,” believe them and do not replace Cursor. If a vendor claims both and fails one script, you have a category error in their marketing. Nimbus should pass the outer script on ",[204,1214,963],{"href":329},[204,1216,967],{"href":966},". Claude Code should pass the inner script. ",[204,1219,1220],{"href":583},"How to choose",[189,1222,1223,1226,1227,1230],{},[193,1224,1225],{},"Thoughtworks’ layer check."," After the scripts, ask where layer 4 lives: who owns the policy when the agent did what it was allowed to do and harm still happened. If the answer is a steering committee with no interceptor, you evaluated theatre. ",[204,1228,1229],{"href":889},"ISO 42001"," will not save a missing refuse.",[189,1232,1233,1236,1237,295],{},[193,1234,1235],{},"Economics check."," Pull one live run’s step list: model class per step, tokens or cost, which sensor fired. Always-flagship with no cap is a failed harness eval even if the paragraph was good. ",[204,1238,1239],{"href":1130},"Cost control",[189,1241,1242,1245,1246,295],{},[193,1243,1244],{},"MCP check."," One write-capable server. Which workspaces may use it. If the answer is “any host that can see the URL,” fail. ",[204,1247,317],{"href":316},[189,1249,1250,1251,1255],{},"Weight the eight checklist items; do not add a ninth called “brand.” ",[204,1252,1254],{"href":1253},"https:\u002F\u002Fhai.stanford.edu\u002Fai-index\u002F2025-ai-index-report","Stanford AI Index"," is useful context for how fast coding tools moved. It is not a substitute for the outer script.",[189,1257,1258,1259,1261,1262,1264],{},"Score vendorsystems, not as essays. A beautiful ",[204,1260,478],{"href":477}," does not pass the refuse test. A messy UI that blocks the unsigned PATCH does. Watch for “evaluation theatre”: the SE runs the happy path, the fail path is “we’ll configure that in phase two,” the ledger is a screenshot of LangSmith. Phase two is where ",[204,1263,345],{"href":344}," pilots go to die.",[189,1266,1267,1268,1270],{},"Bring your own oracle. For inner: a test the agent did not write. For outer: a sandbox row you control. If the vendor must supply the only success criterion, you are scoring their demo fixtures. Terminal-Bench’s strength is that the ",[229,1269,429],{}," is the grader. Copy that.",[189,1272,1273],{},"People on the bake-off: an operator who will live in the product, someone who owns the SoR, someone who can say no for Legal, an engineer who will keep the inner harness. If only the vendor and an innovation lead attend, you will buy a narrative. Nimbus, AIP, Cursor, and a LangGraph SOW should all survive that room or be narrowed to the job they actually do.",[189,1275,1276,1277,1280],{},"Write the pass\u002Ffail before the demo so the SE cannot redefine success live. “Blocked unsigned write” is a boolean. “Felt enterprise-ready” is not. Record the session. If they cannot fail on camera, assume they cannot fail in production. ",[204,1278,1279],{"href":884},"NIST Playbook"," language helps here: you are Measuring a control, not a vibe.",[257,1282,1284],{"id":1283},"how-this-shows-up-in-nimbus","How this shows up in Nimbus",[189,1286,1287,1288,1291,1292,1294,1295,1298,1299,1301,1302,1306],{},"Nimbus is an ",[204,1289,1290],{"href":520},"enterprise \u002F outer harness",": ",[204,1293,566],{"href":565}," as guides, connectors as grants, ",[204,1296,1297],{"href":324},"teams"," as the hiring object, ",[204,1300,967],{"href":966}," as the interceptor, graph as replay, ",[204,1303,1305],{"href":1304},"\u002Fmodels\u002F","models"," as routing. Score those surfaces against the eight tests. Do not accept “we are a harness” as a substitute for a failed write. AIP and Agentforce deserve the same eight.",[257,1308,629],{"id":628},[631,1310,1312],{"id":1311},"can-we-score-claude-code-and-nimbus-on-one-spreadsheet","Can we score Claude Code and Nimbus on one spreadsheet?",[189,1314,1315],{},"Yes, with a workspace column. Shared rows: refuse, replay, swap, sensors, operator change, economics. Inner-only rows: tests, sandbox, PR. Outer-only rows: SoR quote, roster signer, workstream isolation.",[631,1317,1319],{"id":1318},"the-vendor-sent-a-swe-bench-plot","The vendor sent a SWE-bench plot.",[189,1321,1322,1323,295],{},"File it under inner quality. If you are buying CRM writes, it is not sufficient. ",[204,1324,998],{"href":997},[631,1326,1328],{"id":1327},"we-already-completed-a-copilot-rfp","We already completed a copilot RFP.",[189,1330,1331],{},"Keep it for personal tools. This sheet is for loops that act. Different job.",[631,1333,1335],{"id":1334},"is-iso-42001-certification-the-eval","Is ISO 42001 certification the eval?",[189,1337,1338],{},"It is a management-system signal. Still watch a write fail. Certification without an interceptor is paperwork.",[631,1340,1342],{"id":1341},"what-should-i-read-next","What should I read next?",[189,1344,1345,1349,1350,1353,1354,1356],{},[204,1346,1348],{"href":1347},"\u002Fblog\u002Fagent-harness-architecture\u002F","Agent harness architecture"," to know the parts. ",[204,1351,1352],{"href":245},"What is write-back governance"," for the outer stop in detail. ",[204,1355,699],{"href":377}," for the ratchet after you buy.",[257,1358,694],{"id":693},[189,1360,1361,421,1364,295],{},[204,1362,1363],{"href":623},"What is multi-agent AI",[204,1365,1367],{"href":1366},"\u002Fblog\u002Fwhat-is-ai-governance\u002F","what is AI governance",[257,1369,706],{"id":705},[262,1371,1372,1376,1380,1385,1390,1394,1398,1402,1406,1411,1415,1419,1424,1429,1434],{},[265,1373,1374],{},[204,1375,713],{"href":206},[265,1377,1378],{},[204,1379,723],{"href":477},[265,1381,1382],{},[204,1383,1384],{"href":915},"Böckeler, Harness engineering for coding agent users",[265,1386,1387],{},[204,1388,1389],{"href":920},"Thoughtworks, Harness engineering and agent feedback",[265,1391,1392],{},[204,1393,748],{"href":419},[265,1395,1396],{},[204,1397,753],{"href":424},[265,1399,1400],{},[204,1401,758],{"href":293},[265,1403,1404],{},[204,1405,763],{"href":344},[265,1407,1408],{},[204,1409,1410],{"href":884},"NIST AI RMF Playbook",[265,1412,1413],{},[204,1414,890],{"href":889},[265,1416,1417],{},[204,1418,772],{"href":368},[265,1420,1421],{},[204,1422,1423],{"href":1040},"CBC, Air Canada chatbot lawsuit",[265,1425,1426],{},[204,1427,1428],{"href":1045},"Reuters, ChatGPT legal brief sanctions",[265,1430,1431],{},[204,1432,1433],{"href":1253},"Stanford HAI, 2025 AI Index",[265,1435,1436],{},[204,1437,778],{"href":777},{"title":169,"searchDepth":170,"depth":170,"links":1439},[1440,1441,1442,1446,1447,1448,1455,1456],{"id":259,"depth":170,"text":260},{"id":971,"depth":170,"text":972},{"id":1019,"depth":170,"text":1020,"children":1443},[1444,1445],{"id":1135,"depth":789,"text":1136},{"id":1168,"depth":789,"text":1169},{"id":1190,"depth":170,"text":1191},{"id":1283,"depth":170,"text":1284},{"id":628,"depth":170,"text":629,"children":1449},[1450,1451,1452,1453,1454],{"id":1311,"depth":789,"text":1312},{"id":1318,"depth":789,"text":1319},{"id":1327,"depth":789,"text":1328},{"id":1334,"depth":789,"text":1335},{"id":1341,"depth":789,"text":1342},{"id":693,"depth":170,"text":694},{"id":705,"depth":170,"text":706},"Evaluating an agent harness means checking whether it can stop a write, replay who signed, and swap the model without rewriting the tools.",{"eyebrow":800,"title":1459},"Stops, replay, and a real sensor",[1461,1464,1467],{"question":1462,"answer":1463},"What should an evaluation of a harness check?","Whether it can stop a write, replay who signed, swap the model without rewriting the tools, and fail a real sensor.",{"question":1465,"answer":1466},"Is a good demo answer enough?","No. A fluent answer does not prove the harness can refuse a bad change.",{"question":1468,"answer":1469},"What is a failed evaluation?","The write still lands when the check fails, or nobody can reconstruct who approved last Tuesday's change.","\u002Fblog\u002Fhow-to-evaluate-an-agent-harness",{"title":845,"description":1457},"evaluation","blog\u002Fhow-to-evaluate-an-agent-harness",[1472,817,967,1475],"rfp","Gv9m9kXME8wRmG6-l6R6IYqmcl4wOhGLVhOAjNzk4xU",{"id":1478,"title":1479,"archived":163,"authors":1480,"badge":1484,"body":1485,"date":2309,"definedTerm":2310,"department":164,"description":2311,"extension":172,"eyebrow":164,"faqHeader":2312,"faqs":2315,"footerBand":164,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":2325,"relatedHeading":164,"seo":2326,"series":814,"sitemap":131,"status":164,"stem":2327,"subhead":164,"tags":2328,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":2333},"content\u002Fblog\u002Fwhat-is-loop-engineering.md","What is Loop Engineering",[1481],{"name":1482,"role":1483,"to":183},"Jeff Corliss","Co-Founder and CTO",{"label":185},{"type":166,"value":1486,"toc":2295},[1487,1493,1499,1502,1533,1551,1555,1566,1572,1586,1604,1624,1674,1684,1686,1739,1742,1744,1747,1753,1759,1768,1770,1797,1804,1810,1815,1819,1830,1840,1850,1860,1871,1874,1878,1884,1890,1900,1906,1919,1925,1935,1938,1942,1945,1951,1956,1961,1971,1986,1992,2000,2003,2007,2013,2019,2025,2033,2042,2048,2056,2064,2067,2071,2074,2081,2093,2103,2106,2110,2117,2166,2172,2175,2177,2190,2198,2213,2215,2241,2243,2291],[189,1488,1489,1492],{},[193,1490,1491],{},"Loop engineering"," is the discipline of compiling the known path for unattended work, detecting when reality diverges from that path, and recording every skip — so the same job can be replayed without a model guessing on the happy path.",[189,1494,1495,1498],{},[204,1496,1497],{"href":344},"McKinsey’s State of AI"," keeps finding the same pattern: adoption is widespread, and operational redesign is not. Most organisations use a model somewhere. Few have redesigned how recurring work runs when nobody is watching. Loop engineering is that redesign for the boring path — the job that already has a checklist, a spreadsheet, and a named owner, but still lives in chat and memory.",[189,1500,1501],{},"Three nouns get conflated in every vendor conversation. Separate them before you compile anything:",[262,1503,1504,1513,1523],{},[265,1505,1506,1509,1510,295],{},[193,1507,1508],{},"Eval loop"," — a sensor that grades a run after the fact. Did the write match the signed payload? Did the test pass? See ",[204,1511,1512],{"href":997},"eval loops for enterprise agent harnesses",[265,1514,1515,1518,1519,295],{},[193,1516,1517],{},"Standing-order loop"," — a job that already exists before a run starts. A trigger admits the run; the known steps execute; a run record shows outputs and skips. See ",[204,1520,1522],{"href":1521},"\u002Fblog\u002Fwhat-is-a-nimbus-loop\u002F","what is a standing-order loop",[265,1524,1525,1528,1529,295],{},[193,1526,1527],{},"Agentic workflow"," — an interactive path that still reasons step by step when the route is not fully known. See ",[204,1530,1532],{"href":1531},"\u002Fblog\u002Fwhat-is-an-agentic-workflow\u002F","what is an agentic workflow",[189,1534,1535,1536,1539,1540,1542,1543,1546,1547,295],{},"Loop engineering is none of those objects. It is the craft of making the ",[193,1537,1538],{},"known"," path explicit, cheap, and auditable. ",[204,1541,1108],{"href":377}," is the parallel craft for the ",[193,1544,1545],{},"model"," path: tools, hooks, and sensors around non-deterministic steps. You need both. They solve different failure modes. Compare ",[204,1548,1550],{"href":1549},"\u002Fblog\u002Floop-engineering-vs-harness-engineering\u002F","loop engineering vs harness engineering",[257,1552,1554],{"id":1553},"what-is-loop-engineering","What is loop engineering?",[189,1556,1557,1558,1561,1562,1565],{},"Loop engineering treats recurring operational work as something you ",[193,1559,1560],{},"compile",", not something you ",[193,1563,1564],{},"re-describe"," every time.",[189,1567,1568,1571],{},[193,1569,1570],{},"Compile the known path."," Take the job that already has a finish line — nightly pipeline hygiene, weekly exception report, month-end accrual list — and turn it into a fixed sequence: read these sources, apply these rules, produce these outputs, notify these people. Those are the known steps. It should not depend on someone typing “please do the usual” into a chat box.",[189,1573,1574,1577,1578,1581,1582,1585],{},[193,1575,1576],{},"Detect change."," Reality moves. A new field appears in the CRM. A vendor changes an export format. A policy adds a threshold. Loop engineering includes sensors that notice divergence before the output lands in the wrong inbox. That is adjacent to an ",[204,1579,1580],{"href":997},"eval loop",", but the emphasis is earlier: catch drift in the ",[193,1583,1584],{},"inputs and rules",", not only grade the final artefact.",[189,1587,1588,1591,1592,1595,1596,1599,1600,1603],{},[193,1589,1590],{},"Record skips."," When the path cannot proceed — missing file, ambiguous row, policy exception — the loop must ",[193,1593,1594],{},"stop",", ",[193,1597,1598],{},"say why",", and ",[193,1601,1602],{},"leave a record",". Skips are data. A skip count trending up is how you know the compiled path is stale. Silently “doing your best” overnight is not loop engineering. That is hope.",[189,1605,1606,1608,1609,1612,1613,1616,1617,1619,1620,295],{},[204,1607,862],{"href":206}," defines Agent = Model + Harness. Loop engineering lives ",[193,1610,1611],{},"outside"," that equation on the happy path: no model invocation when the path is known. When the path is unknown, you escalate — to a person, or to an ",[204,1614,1615],{"href":1531},"agentic workflow"," inside a proper ",[204,1618,521],{"href":520},". See ",[204,1621,1623],{"href":1622},"\u002Fblog\u002Fa-loop-is-not-an-agent\u002F","a loop is not an agent",[1625,1626,1630],"pre",{"className":1627,"code":1628,"language":1629,"meta":169,"style":169},"language-mermaid shiki shiki-themes github-light github-dark","flowchart LR\n  compile[\"Write the known steps\"] --> wait[\"Wait for a trigger\"]\n  wait --> check{\"Does the world match?\"}\n  check -->|yes| run[\"Run the known steps\"]\n  check -->|no| skip[\"Skip and say why\"]\n  run --> record[\"Leave a run record\"]\n  skip --> record\n","mermaid",[214,1631,1632,1640,1645,1650,1656,1662,1668],{"__ignoreMap":169},[1633,1634,1637],"span",{"class":1635,"line":1636},"line",1,[1633,1638,1639],{},"flowchart LR\n",[1633,1641,1642],{"class":1635,"line":170},[1633,1643,1644],{},"  compile[\"Write the known steps\"] --> wait[\"Wait for a trigger\"]\n",[1633,1646,1647],{"class":1635,"line":789},[1633,1648,1649],{},"  wait --> check{\"Does the world match?\"}\n",[1633,1651,1653],{"class":1635,"line":1652},4,[1633,1654,1655],{},"  check -->|yes| run[\"Run the known steps\"]\n",[1633,1657,1659],{"class":1635,"line":1658},5,[1633,1660,1661],{},"  check -->|no| skip[\"Skip and say why\"]\n",[1633,1663,1665],{"class":1635,"line":1664},6,[1633,1666,1667],{},"  run --> record[\"Leave a run record\"]\n",[1633,1669,1671],{"class":1635,"line":1670},7,[1633,1672,1673],{},"  skip --> record\n",[189,1675,1676,1679,1680,1683],{},[204,1677,1678],{"href":572},"Thoughtworks’ operating system for enterprise AI"," splits harness layers from organisational ownership. Loop engineering is the operator layer for ",[193,1681,1682],{},"unattended"," work: who owns the known steps, who gets paged on skips, how exceptions re-enter the human queue. It is not layer 1 (pick a model). It is whether Tuesday’s job is the same object as Thursday’s.",[257,1685,260],{"id":259},[262,1687,1688,1694,1704,1710,1719,1725,1733],{},[265,1689,1690,1693],{},[193,1691,1692],{},"Known path."," The fixed steps for a job you already know how to do. Not a prompt. Not “figure it out.” A sequence you can replay.",[265,1695,1696,1699,1700,295],{},[193,1697,1698],{},"Trigger."," What admits a run: schedule, file arrival, threshold, or a deliberate manual start. See ",[204,1701,1703],{"href":1702},"\u002Fblog\u002Fsix-things-that-start-a-loop\u002F","six things that start a loop",[265,1705,1706,1709],{},[193,1707,1708],{},"Skip."," A deliberate halt when the path cannot proceed safely. Recorded, not hidden.",[265,1711,1712,1715,1716,1718],{},[193,1713,1714],{},"Standing order."," A loop that waits for its trigger on a ",[204,1717,251],{"href":250},". The job exists before the run starts.",[265,1720,1721,1724],{},[193,1722,1723],{},"Run page."," One record per execution: inputs observed, steps taken, outputs attached, skips listed with reasons.",[265,1726,1727,1730,1731,295],{},[193,1728,1729],{},"Outputs vs actions."," Outputs are artefacts (report, list, draft). Actions are writes to live systems. Loop engineering defaults to outputs first; actions need ",[204,1732,246],{"href":245},[265,1734,1735,1738],{},[193,1736,1737],{},"Wizard, not chat ritual."," Operators start from a form with known fields, not an open-ended thread.",[189,1740,1741],{},"If a vendor uses “loop” for an eval sensor, a cron plus a prompt, or a multi-agent graph, ask which of the nouns above they actually mean. Vocabulary drift is how programmes buy the wrong control.",[257,1743,338],{"id":337},[189,1745,1746],{},"If recurring work still lives in direct messages and memory, you pay three taxes every quarter.",[189,1748,1749,1752],{},[193,1750,1751],{},"The reinterpretation tax."," Someone re-explains the job in Slack. Someone else runs a slightly different version. Audit asks what ran last month and the answer is a person’s name.",[189,1754,1755,1758],{},[193,1756,1757],{},"The overnight tax."," On-call gets paged. The only documentation is a clever prompt. The model guesses at ambiguous rows because nobody defined a skip.",[189,1760,1761,1764,1765,1767],{},[193,1762,1763],{},"The attribution tax."," Spend and outcomes cannot be tied to a named job. ",[204,1766,345],{"href":344}," shows usage without operational redesign; loop engineering is redesign for work that should not need a meeting to start.",[189,1769,349],{},[262,1771,1772,1775,1778,1789],{},[265,1773,1774],{},"the same report runs every week but only one person knows the steps",[265,1776,1777],{},"exceptions are handled in side threads with no record",[265,1779,1780,1781,1784,1785,1788],{},"auditors ask for evidence of ",[193,1782,1783],{},"what"," ran, not ",[193,1786,1787],{},"what was said"," in chat",[265,1790,1791,1792,1796],{},"you want ",[204,1793,1795],{"href":1794},"\u002Fblog\u002Fwhat-is-collaborative-ai\u002F","collaborative AI"," on outcomes, not personal copilots on fragments",[189,1798,1799,1803],{},[204,1800,1802],{"href":1801},"https:\u002F\u002Faiindex.stanford.edu\u002F","Stanford HAI’s AI Index"," tracks capability and deployment. Capability rises faster than operational maturity. Loop engineering is maturity for the path you already know.",[189,1805,1806,1809],{},[204,1807,1808],{"href":384},"NIST’s AI RMF"," Measure and Manage steps assume you can observe behaviour and change controls. A compiled loop with skip logs is observable. A chat thread is not.",[189,1811,1812,1814],{},[204,1813,890],{"href":889}," asks for documented operational controls and named actors. A standing order on a workstream with a roster beats a shared login to a consumer model.",[257,1816,1818],{"id":1817},"loop-engineering-vs-adjacent-crafts","Loop engineering vs adjacent crafts",[189,1820,1821,1824,1825,421,1827,295],{},[193,1822,1823],{},"Harness engineering."," Runtime around the model: tools, hooks, eval sensors. Necessary when the step requires judgement or generation. See ",[204,1826,1550],{"href":1549},[204,1828,1829],{"href":377},"what is harness engineering",[189,1831,1832,1835,1836,295],{},[193,1833,1834],{},"Eval loops."," Grade a run. Essential on write paths and agent steps. Not the same as admitting the run. See ",[204,1837,1839],{"href":1838},"\u002Fblog\u002Fhow-to-evaluate-loop-engineering\u002F","how to evaluate loop engineering",[189,1841,1842,1845,1846,295],{},[193,1843,1844],{},"Workflow automation (RPA)."," Brittle screen replay. Loop engineering prefers API reads, explicit rules, and recorded skips over pretending the interface never changed. See ",[204,1847,1849],{"href":1848},"\u002Fblog\u002Floop-vs-rpa\u002F","loop vs RPA",[189,1851,1852,1855,1856,295],{},[193,1853,1854],{},"Agentic workflow."," Reasoning path when the route is not fully known. Loop engineering handles the known segment; agentic workflow handles exploration. See ",[204,1857,1859],{"href":1858},"\u002Fblog\u002Floop-vs-workflow-vs-agent\u002F","loop vs workflow vs agent",[189,1861,1862,1865,1866,1870],{},[193,1863,1864],{},"Chat ops."," Fast for novel problems. Expensive and un-auditable for recurring ones. ",[204,1867,1869],{"href":1868},"\u002Fblog\u002Fmultiplayer-ai-and-multi-agent-ai\u002F","Multiplayer AI"," in a shared room is for collaboration; a loop is for repetition.",[189,1872,1873],{},"The test is simple. If a new hire can follow numbered steps and produce the same artefact, compile it. If the next step depends on reading the case, harness it. If you cannot tell which you are doing, you will agent-wrap a checklist and call it innovation.",[257,1875,1877],{"id":1876},"how-to-do-it","How to do it",[189,1879,1880,1883],{},[193,1881,1882],{},"1. Name one recurring job with a finish line."," Not “AI for finance.” “Weekly pipeline exception list for EMEA” is a job.",[189,1885,1886,1889],{},[193,1887,1888],{},"2. Write the path as steps a new hire could follow."," If the path cannot be written, it is not ready to compile. It is still tribal knowledge.",[189,1891,1892,1895,1896,295],{},[193,1893,1894],{},"3. Separate outputs from actions."," Default to read-only connectors and artefact outputs. Promote to signed writes only with ",[204,1897,1899],{"href":1898},"\u002Fblog\u002Fgovernance-as-a-multiplayer-primitive\u002F","governance as a multiplayer primitive",[189,1901,1902,1905],{},[193,1903,1904],{},"4. Define skips explicitly."," Missing source file → skip with reason. Ambiguous owner on row 47 → skip, assign to queue. Never “best effort fill.”",[189,1907,1908,1911,1912,421,1915,295],{},[193,1909,1910],{},"5. Attach the loop to a workstream."," Brief, connectors, roster, budget. See ",[204,1913,1914],{"href":250},"what is an AI workstream",[204,1916,1918],{"href":1917},"\u002Fblog\u002Ffour-pillars-of-an-enterprise-ai-platform\u002F","four pillars of an enterprise AI platform",[189,1920,1921,1924],{},[193,1922,1923],{},"6. Review skip rates on a cadence."," Skips are product feedback. A rising skip count means the steps or the world changed.",[189,1926,1927,212,1930,1934],{},[193,1928,1929],{},"7. Keep agents off the happy path.",[204,1931,1933],{"href":1932},"\u002Fblog\u002Fagents-should-be-disposable\u002F","Agents should be disposable"," for exploration. The compiled loop should survive model churn.",[189,1936,1937],{},"A useful intermediate artefact is a one-page write-up of the known path: trigger, sources, rules, outputs, skip classes, named owner, named exception queue. If you cannot fill that page, you are not compiling — you are hoping a prompt will remember.",[257,1939,1941],{"id":1940},"a-worked-example-weekly-pipeline-exceptions","A worked example: weekly pipeline exceptions",[189,1943,1944],{},"Revenue operations runs the same exception pass every Monday: pull CRM opportunities in stale stages, join the account executive’s sheet, flag conflicts, send finance a list. Today it lives in one person’s notebook and a Slack reminder.",[189,1946,1947,1950],{},[193,1948,1949],{},"Compile."," Step one: read CRM with agreed filters. Step two: read the sheet from the shared drive path. Step three: apply conflict rules documented in the wiki. Step four: produce a table artefact. Step five: notify finance and the regional lead on the workstream roster.",[189,1952,1953,1955],{},[193,1954,1576],{}," If the sheet tab name changes, skip — do not guess. If CRM adds a required field, the sensor fires before rows silently drop.",[189,1957,1958,1960],{},[193,1959,1590],{}," Row with two owners → skip row, add to human queue. Missing sheet → skip run, page on-call. Every skip appears on the run page.",[189,1962,1963,1964,1967,1968,1970],{},"No model on the happy path. If a row needs judgement (“is this deal actually committed?”), the loop ",[193,1965,1966],{},"escalates"," to a person on the roster — or to an ",[204,1969,1615],{"href":1531}," if you later choose to add one for that class only. The default remains: do not guess.",[189,1972,1973,1974,1976,1977,421,1981,1985],{},"This is ",[204,1975,1795],{"href":1794}," for revenue operations without turning Monday into a chat ritual. Compare ",[204,1978,1980],{"href":1979},"\u002Fblog\u002Floops-for-revenue-operations\u002F","loops for revenue operations",[204,1982,1984],{"href":1983},"\u002Fblog\u002Fcollaborative-ai-for-finance-and-planning\u002F","collaborative AI for finance and planning"," when the artefact is a forecast pack.",[189,1987,1988,1991],{},[204,1989,1990],{"href":419},"Anthropic’s guidance on building effective agents"," warns against agentic complexity where a fixed pipeline suffices. Loop engineering is the operational form of that advice: use the simplest architecture that completes the job.",[189,1993,1994,1995,1999],{},"Research on human–AI teams (",[204,1996,1998],{"href":1997},"https:\u002F\u002Fwww.nature.com\u002Farticles\u002Fs41562-022-01358-0","Yang et al., Nature Human Behaviour, 2022",") shows performance gains when roles are clear and humans retain override. Loops encode that split: machine for the known path, human for the exception queue.",[189,2001,2002],{},"Walk the same Monday after compile. The trigger fires at 06:00. The loop reads 1,842 opportunities and 31 sheet rows. It emits 14 exceptions and 3 skips (two dual-owned rows, one missing close date). Finance opens the run page, not a forwarded screenshot. The dual-owned rows sit in a queue with a reason. Nobody re-typed “please do the usual.” That is the job, compiled.",[257,2004,2006],{"id":2005},"what-goes-wrong","What goes wrong",[189,2008,2009,2012],{},[193,2010,2011],{},"Compiling a wish."," “AI for close” is not a known path. If you cannot name the sources and the finish line, you are still in discovery. Run the job manually twice and write what you actually did.",[189,2014,2015,2018],{},[193,2016,2017],{},"Best-effort fills."," A missing owner becomes “unassigned” or a guessed name. That is an agent decision without a harness. It violates the skip rule and teaches operators that silence means success.",[189,2020,2021,2024],{},[193,2022,2023],{},"Chat as the compiler."," A long system prompt is not a version of the known path. Prompts drift. New hires cannot start the job from a prompt they have never seen.",[189,2026,2027,2030,2031,295],{},[193,2028,2029],{},"Eval as admission."," A sensor that grades runs does not start them. You still need a standing order. See ",[204,2032,1512],{"href":997},[189,2034,2035,2038,2039,295],{},[193,2036,2037],{},"Actions before outputs."," Writing to CRM in week one hides a bad path inside live records. Prove the table against the manual baseline first. Then quote a write. See ",[204,2040,2041],{"href":245},"what is write-back governance",[189,2043,2044,2047],{},[193,2045,2046],{},"Ownerless paths."," If nobody reviews skip trends, the compiled path rots. The world changes; the steps do not; skip rates climb; people go back to Slack.",[189,2049,2050,2053,2054,295],{},[193,2051,2052],{},"Agent-wrapping the checklist."," Every Monday a model re-reads instructions and re-derives spreadsheet logic. Cost scales with repetition. Drift scales with temperature. Audit sees a transcript, not which version of the steps ran. See ",[204,2055,1623],{"href":1622},[189,2057,2058,2061,2062,295],{},[193,2059,2060],{},"RPA theatre."," Replaying clicks looks like a compiled path until the interface changes. Prefer APIs and explicit skips. See ",[204,2063,1849],{"href":1848},[189,2065,2066],{},"Failure looks like a green check and a wrong list. Success looks like a skip with a reason and a human on the roster.",[257,2068,2070],{"id":2069},"governance-and-regulation-plain-english","Governance and regulation (plain English)",[189,2072,2073],{},"Loop engineering supports controls auditors already ask for, without requiring you to become a lawyer.",[189,2075,2076,2080],{},[204,2077,2079],{"href":2078},"https:\u002F\u002Fwww.govinfo.gov\u002Fcontent\u002Fpkg\u002FPLAW-107publ204\u002Fhtml\u002FPLAW-107publ204.htm","Sarbanes-Oxley"," cares about trails for financial reporting. A compiled loop that produces a signed exception list — with skips recorded — is easier to walk than “the model said it looked fine.”",[189,2082,2083,2084,421,2088,2092],{},"The ",[204,2085,2087],{"href":2086},"https:\u002F\u002Fartificialintelligenceact.eu\u002F","EU AI Act",[204,2089,2091],{"href":2090},"https:\u002F\u002Fgdpr.eu\u002F","GDPR"," stress purpose limitation and documentation. A standing order on a scoped workstream states purpose (this job), data (these connectors), and actors (this roster). A god workspace does not.",[189,2094,2095,2098,2099,2102],{},[204,2096,2097],{"href":1033},"Human-in-the-loop"," remains mandatory for writes and for judgement calls. Loop engineering makes the ",[193,2100,2101],{},"automatic"," segment automatic; it does not remove named signers from actions.",[189,2104,2105],{},"Regulators rarely use the phrase “loop engineering.” They ask operational questions: who decided, what ran, can you replay it. A compiled path with a run page answers those questions for unattended segments. A chat log answers them poorly.",[257,2107,2109],{"id":2108},"how-to-start-this-quarter","How to start this quarter",[189,2111,2112,2113,2116],{},"Pick ",[193,2114,2115],{},"one"," recurring job. Not three. One.",[977,2118,2119,2125,2133,2139,2145,2151,2157],{},[265,2120,2121,2124],{},[193,2122,2123],{},"Document the path"," as numbered steps. If step three is “ask the person who always knows,” stop — that step is a skip queue, not a step.",[265,2126,2127,2130,2131,295],{},[193,2128,2129],{},"Create a workstream"," with the brief, read-only connectors, and the roster who cares about the output. See ",[204,2132,1914],{"href":250},[265,2134,2135,2138],{},[193,2136,2137],{},"Implement outputs only"," for the first four weeks. No CRM writes. No journals.",[265,2140,2141,2144],{},[193,2142,2143],{},"Run on schedule"," twice alongside the legacy process. Diff the artefacts, not the vibes.",[265,2146,2147,2150],{},[193,2148,2149],{},"Add one skip rule"," you wish you had last month. Missing file, ambiguous row, stale tab name.",[265,2152,2153,2156],{},[193,2154,2155],{},"Review skip count"," in the fifth week. Update the steps or the wiki — that is loop engineering, not prompt tuning.",[265,2158,2159,2162,2163,2165],{},[193,2160,2161],{},"Decide whether any exception class"," deserves an ",[204,2164,1615],{"href":1531},". Most will not, yet.",[189,2167,2168,2171],{},[204,2169,2170],{"href":1838},"How to evaluate loop engineering"," is the buying sheet: can you compile, detect, skip, and replay without opening chat?",[189,2173,2174],{},"Score any product the way you score an operations tool: same job, same output, recorded skips, named humans on exceptions. If the demo starts in a chat box, you are scoring a copilot.",[257,2176,1284],{"id":1283},[189,2178,2179,2180,2183,2184,2186,2187,2189],{},"The platform names a compiled standing order a ",[193,2181,2182],{},"Loop",". It lives on a ",[204,2185,251],{"href":250},": brief, connectors, roster, and ",[204,2188,967],{"href":245},". Operators configure the trigger and the known steps from a wizard; each execution gets a run page with outputs and skips.",[189,2191,2192,2193,2195,2196,295],{},"Loop engineering is the practice around that object — compiling the path, defining skip classes, reviewing skip rates — not a button labelled engineering. Writes still follow ",[204,2194,246],{"href":245},". Model steps, if you attach any, sit under ",[204,2197,378],{"href":377},[189,2199,2200,2201,1595,2204,1599,2206,2208,2209,421,2211,295],{},"See ",[204,2202,2203],{"href":1521},"what is a Nimbus Loop",[204,2205,1550],{"href":1549},[204,2207,1623],{"href":1622},". Product surfaces: ",[204,2210,963],{"href":329},[204,2212,967],{"href":966},[257,2214,694],{"id":693},[262,2216,2217,2222,2227,2232,2236],{},[265,2218,2219],{},[204,2220,2221],{"href":1521},"What is a Nimbus Loop",[265,2223,2224],{},[204,2225,2226],{"href":1549},"Loop engineering vs harness engineering",[265,2228,2229],{},[204,2230,2231],{"href":1622},"A loop is not an agent",[265,2233,2234],{},[204,2235,699],{"href":377},[265,2237,2238],{},[204,2239,2240],{"href":250},"What is an AI workstream",[257,2242,706],{"id":705},[262,2244,2245,2249,2253,2257,2261,2265,2270,2274,2278,2283,2287],{},[265,2246,2247],{},[204,2248,763],{"href":344},[265,2250,2251],{},[204,2252,713],{"href":206},[265,2254,2255],{},[204,2256,738],{"href":572},[265,2258,2259],{},[204,2260,385],{"href":384},[265,2262,2263],{},[204,2264,890],{"href":889},[265,2266,2267],{},[204,2268,2269],{"href":1801},"Stanford HAI, AI Index",[265,2271,2272],{},[204,2273,748],{"href":419},[265,2275,2276],{},[204,2277,1998],{"href":1997},[265,2279,2280],{},[204,2281,2282],{"href":2078},"Sarbanes-Oxley Act of 2002",[265,2284,2285],{},[204,2286,2087],{"href":2086},[265,2288,2289],{},[204,2290,2091],{"href":2090},[2292,2293,2294],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":169,"searchDepth":170,"depth":170,"links":2296},[2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308],{"id":1553,"depth":170,"text":1554},{"id":259,"depth":170,"text":260},{"id":337,"depth":170,"text":338},{"id":1817,"depth":170,"text":1818},{"id":1876,"depth":170,"text":1877},{"id":1940,"depth":170,"text":1941},{"id":2005,"depth":170,"text":2006},{"id":2069,"depth":170,"text":2070},{"id":2108,"depth":170,"text":2109},{"id":1283,"depth":170,"text":1284},{"id":693,"depth":170,"text":694},{"id":705,"depth":170,"text":706},"2026-09-12","loop engineering","Loop engineering compiles the known path for unattended work, detects when reality changes, and records what was skipped.",{"eyebrow":2313,"title":2314},"Common questions","Loops, harnesses, and sensors",[2316,2319,2322],{"question":2317,"answer":2318},"Is loop engineering the same as harness engineering?","No. Harness engineering designs the runtime around a model — which tools it may call, which hooks refuse a bad action, and which sensors grade the claim after the fact. Loop engineering compiles the known path for work that should not need a model on the happy path, and records when that path cannot proceed. Use harness engineering when a step requires generation or judgement. Use loop engineering when the steps are already known and the risk is silent drift rather than a clever prompt. Start with the compiled path if a checklist already exists. Refuse to treat hooks and eval sensors as a substitute for numbered steps you can replay without tokens.",{"question":2320,"answer":2321},"Is an eval loop the same as a Nimbus Loop?","No. An eval loop is a sensor that grades a run after the fact — tests, schemas, read-backs, signer checks. A standing-order loop admits a run when a trigger fires and then executes the known steps. Confusing the two is how programmes buy a grading harness and still start Monday's job from Slack. Use an eval loop on writes and on any model step that needs independent verification. Use a standing order when the job should exist before anyone types. Refuse to treat a score as proof that the same job ran, or a trigger as proof that the output was correct. See eval loops for enterprise agent harnesses and what is a Nimbus Loop.",{"question":2323,"answer":2324},"Do we still need agents if we have loop engineering?","Yes, for the unknown path. Loop engineering makes the known path cheap and unattended: read, rule, output, notify. When a row is ambiguous or a source is missing, the compiled path should skip — not invent. Agents and agentic workflows exist for exploration and judgement when the route is not fully known. Attach them only to an explicit exception class, inside a harness with stops and sensors. Refuse to put a model on the happy path of a job that already has a checklist, and refuse to leave exceptions as silent best-effort fills overnight.","\u002Fblog\u002Fwhat-is-loop-engineering",{"title":1479,"description":2311},"blog\u002Fwhat-is-loop-engineering",[814,2329,2330,2331,2332],"loop-engineering","loops","enterprise-ai","operations","PDM378jcBmLOdJ8WRUXSpQjF7Gm7--a63h-scBBGn-o",{"enabled":163,"message":2335,"linkLabel":79,"linkHref":80,"id":2336,"title":2337,"archived":163,"authors":164,"badge":164,"body":2338,"date":164,"definedTerm":164,"department":164,"description":169,"extension":172,"eyebrow":164,"faqHeader":164,"faqs":164,"footerBand":164,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":2342,"relatedHeading":164,"seo":2343,"series":164,"sitemap":163,"status":164,"stem":2344,"subhead":164,"tags":164,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":2345},"We're hiring! Join the team building the Sentient Enterprise.","content\u002Fshared\u002Fhiring.md","Hiring banner",{"type":166,"value":2339,"toc":2340},[],{"title":169,"searchDepth":170,"depth":170,"links":2341},[],"\u002Fshared\u002Fhiring",{"title":2337,"description":169},"shared\u002Fhiring","1zs3boivKda1e-b-hAyuNcmZSKjZUAXmecnwHVgcHzk",{"fold":2347,"id":2351,"title":2352,"archived":163,"authors":164,"badge":164,"body":2353,"date":164,"definedTerm":164,"department":164,"description":169,"extension":172,"eyebrow":164,"faqHeader":164,"faqs":164,"footerBand":2357,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":2361,"relatedHeading":164,"seo":2362,"series":164,"sitemap":163,"status":164,"stem":2363,"subhead":164,"tags":164,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":2364},{"headline":2348,"description":2349,"primaryLabel":8,"primaryTo":2350,"secondaryLabel":837,"secondaryTo":12},"Run frontier AI your business actually owns.","Governed workstreams, 3,000+ integrations, and a proprietary knowledge graph. Start on Free.","\u002Fsignup?plan=free","content\u002Fshared\u002Fcta.md","Site CTAs",{"type":166,"value":2354,"toc":2355},[],{"title":169,"searchDepth":170,"depth":170,"links":2356},[],{"headline":2358,"description":2359,"primaryLabel":8,"primaryTo":2350,"secondaryLabel":2360,"secondaryTo":85},"See what governed AI looks like on your stack.","Connect your tools, run a workstream, and keep every decision on your ledger. Start on Free.","Talk to our team","\u002Fshared\u002Fcta",{"title":2352,"description":169},"shared\u002Fcta","eYqahyaPnbp8GKrWpoORbZdtmkWmgHr5F61ZHOnb8sY",1792999485461]