[{"data":1,"prerenderedAt":2605},["ShallowReactive",2],{"site-nav-content":3,"blog:\u002Fblog\u002Fwhat-is-loop-engineering":177,"blog-index-copy":1090,"blog:\u002Fblog\u002Fwhat-is-loop-engineering:surround":1111,"hiring-banner-content":2574,"site-cta-content":2586},{"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":185,"body":187,"date":1064,"definedTerm":1065,"department":164,"description":1066,"extension":172,"eyebrow":164,"faqHeader":1067,"faqs":1070,"footerBand":164,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":1080,"relatedHeading":164,"seo":1081,"series":1082,"sitemap":131,"status":164,"stem":1083,"subhead":164,"tags":1084,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":1089},"content\u002Fblog\u002Fwhat-is-loop-engineering.md","What is Loop Engineering",[181],{"name":182,"role":183,"to":184},"Jeff Corliss","Co-Founder and CTO","https:\u002F\u002Fgonimbus.ai",{"label":186},"Explainer",{"type":166,"value":188,"toc":1050},[189,197,205,208,243,263,268,279,285,299,317,341,393,404,408,465,468,472,475,481,487,497,500,527,534,541,548,552,564,574,584,594,605,608,612,618,624,634,640,653,659,670,673,677,680,686,691,696,706,721,728,736,739,743,749,755,761,769,778,784,792,800,803,807,810,817,829,840,843,847,854,904,910,913,917,931,940,958,962,989,993,1046],[190,191,192,196],"p",{},[193,194,195],"strong",{},"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.",[190,198,199,204],{},[200,201,203],"a",{"href":202},"https:\u002F\u002Fwww.mckinsey.com\u002Fcapabilities\u002Fquantumblack\u002Four-insights\u002Fthe-state-of-ai","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.",[190,206,207],{},"Three nouns get conflated in every vendor conversation. Separate them before you compile anything:",[209,210,211,223,233],"ul",{},[212,213,214,217,218,222],"li",{},[193,215,216],{},"Eval loop"," — a sensor that grades a run after the fact. Did the write match the signed payload? Did the test pass? See ",[200,219,221],{"href":220},"\u002Fblog\u002Feval-loops-for-enterprise-agent-harnesses\u002F","eval loops for enterprise agent harnesses",".",[212,224,225,228,229,222],{},[193,226,227],{},"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 ",[200,230,232],{"href":231},"\u002Fblog\u002Fwhat-is-a-nimbus-loop\u002F","what is a standing-order loop",[212,234,235,238,239,222],{},[193,236,237],{},"Agentic workflow"," — an interactive path that still reasons step by step when the route is not fully known. See ",[200,240,242],{"href":241},"\u002Fblog\u002Fwhat-is-an-agentic-workflow\u002F","what is an agentic workflow",[190,244,245,246,249,250,254,255,258,259,222],{},"Loop engineering is none of those objects. It is the craft of making the ",[193,247,248],{},"known"," path explicit, cheap, and auditable. ",[200,251,253],{"href":252},"\u002Fblog\u002Fwhat-is-harness-engineering\u002F","Harness engineering"," is the parallel craft for the ",[193,256,257],{},"model"," path: tools, hooks, and sensors around non-deterministic steps. You need both. They solve different failure modes. Compare ",[200,260,262],{"href":261},"\u002Fblog\u002Floop-engineering-vs-harness-engineering\u002F","loop engineering vs harness engineering",[264,265,267],"h2",{"id":266},"what-is-loop-engineering","What is loop engineering?",[190,269,270,271,274,275,278],{},"Loop engineering treats recurring operational work as something you ",[193,272,273],{},"compile",", not something you ",[193,276,277],{},"re-describe"," every time.",[190,280,281,284],{},[193,282,283],{},"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.",[190,286,287,290,291,294,295,298],{},[193,288,289],{},"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 ",[200,292,293],{"href":220},"eval loop",", but the emphasis is earlier: catch drift in the ",[193,296,297],{},"inputs and rules",", not only grade the final artefact.",[190,300,301,304,305,308,309,312,313,316],{},[193,302,303],{},"Record skips."," When the path cannot proceed — missing file, ambiguous row, policy exception — the loop must ",[193,306,307],{},"stop",", ",[193,310,311],{},"say why",", and ",[193,314,315],{},"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.",[190,318,319,323,324,327,328,331,332,336,337,222],{},[200,320,322],{"href":321},"https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flangchain\u002Fagents","LangChain"," defines Agent = Model + Harness. Loop engineering lives ",[193,325,326],{},"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 ",[200,329,330],{"href":241},"agentic workflow"," inside a proper ",[200,333,335],{"href":334},"\u002Fblog\u002Fwhat-is-an-enterprise-agent-harness\u002F","enterprise agent harness",". See ",[200,338,340],{"href":339},"\u002Fblog\u002Fa-loop-is-not-an-agent\u002F","a loop is not an agent",[342,343,347],"pre",{"className":344,"code":345,"language":346,"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",[348,349,350,358,363,369,375,381,387],"code",{"__ignoreMap":169},[351,352,355],"span",{"class":353,"line":354},"line",1,[351,356,357],{},"flowchart LR\n",[351,359,360],{"class":353,"line":170},[351,361,362],{},"  compile[\"Write the known steps\"] --> wait[\"Wait for a trigger\"]\n",[351,364,366],{"class":353,"line":365},3,[351,367,368],{},"  wait --> check{\"Does the world match?\"}\n",[351,370,372],{"class":353,"line":371},4,[351,373,374],{},"  check -->|yes| run[\"Run the known steps\"]\n",[351,376,378],{"class":353,"line":377},5,[351,379,380],{},"  check -->|no| skip[\"Skip and say why\"]\n",[351,382,384],{"class":353,"line":383},6,[351,385,386],{},"  run --> record[\"Leave a run record\"]\n",[351,388,390],{"class":353,"line":389},7,[351,391,392],{},"  skip --> record\n",[190,394,395,399,400,403],{},[200,396,398],{"href":397},"https:\u002F\u002Fwww.thoughtworks.com\u002Finsights\u002Farticles\u002Foperating-system-enterprise-ai","Thoughtworks’ operating system for enterprise AI"," splits harness layers from organisational ownership. Loop engineering is the operator layer for ",[193,401,402],{},"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.",[264,405,407],{"id":406},"words-youll-hear","Words you’ll hear",[209,409,410,416,426,432,443,449,459],{},[212,411,412,415],{},[193,413,414],{},"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.",[212,417,418,421,422,222],{},[193,419,420],{},"Trigger."," What admits a run: schedule, file arrival, threshold, or a deliberate manual start. See ",[200,423,425],{"href":424},"\u002Fblog\u002Fsix-things-that-start-a-loop\u002F","six things that start a loop",[212,427,428,431],{},[193,429,430],{},"Skip."," A deliberate halt when the path cannot proceed safely. Recorded, not hidden.",[212,433,434,437,438,442],{},[193,435,436],{},"Standing order."," A loop that waits for its trigger on a ",[200,439,441],{"href":440},"\u002Fblog\u002Fwhat-is-an-ai-workstream\u002F","workstream",". The job exists before the run starts.",[212,444,445,448],{},[193,446,447],{},"Run page."," One record per execution: inputs observed, steps taken, outputs attached, skips listed with reasons.",[212,450,451,454,455,222],{},[193,452,453],{},"Outputs vs actions."," Outputs are artefacts (report, list, draft). Actions are writes to live systems. Loop engineering defaults to outputs first; actions need ",[200,456,458],{"href":457},"\u002Fblog\u002Fwhat-is-write-back-governance\u002F","write-back governance",[212,460,461,464],{},[193,462,463],{},"Wizard, not chat ritual."," Operators start from a form with known fields, not an open-ended thread.",[190,466,467],{},"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.",[264,469,471],{"id":470},"why-you-should-care","Why you should care",[190,473,474],{},"If recurring work still lives in direct messages and memory, you pay three taxes every quarter.",[190,476,477,480],{},[193,478,479],{},"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.",[190,482,483,486],{},[193,484,485],{},"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.",[190,488,489,492,493,496],{},[193,490,491],{},"The attribution tax."," Spend and outcomes cannot be tied to a named job. ",[200,494,495],{"href":202},"McKinsey"," shows usage without operational redesign; loop engineering is redesign for work that should not need a meeting to start.",[190,498,499],{},"It affects you if:",[209,501,502,505,508,519],{},[212,503,504],{},"the same report runs every week but only one person knows the steps",[212,506,507],{},"exceptions are handled in side threads with no record",[212,509,510,511,514,515,518],{},"auditors ask for evidence of ",[193,512,513],{},"what"," ran, not ",[193,516,517],{},"what was said"," in chat",[212,520,521,522,526],{},"you want ",[200,523,525],{"href":524},"\u002Fblog\u002Fwhat-is-collaborative-ai\u002F","collaborative AI"," on outcomes, not personal copilots on fragments",[190,528,529,533],{},[200,530,532],{"href":531},"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.",[190,535,536,540],{},[200,537,539],{"href":538},"https:\u002F\u002Fwww.nist.gov\u002Fitl\u002Fai-risk-management-framework","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.",[190,542,543,547],{},[200,544,546],{"href":545},"https:\u002F\u002Fwww.iso.org\u002Fstandard\u002F42001","ISO\u002FIEC 42001"," 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.",[264,549,551],{"id":550},"loop-engineering-vs-adjacent-crafts","Loop engineering vs adjacent crafts",[190,553,554,557,558,560,561,222],{},[193,555,556],{},"Harness engineering."," Runtime around the model: tools, hooks, eval sensors. Necessary when the step requires judgement or generation. See ",[200,559,262],{"href":261}," and ",[200,562,563],{"href":252},"what is harness engineering",[190,565,566,569,570,222],{},[193,567,568],{},"Eval loops."," Grade a run. Essential on write paths and agent steps. Not the same as admitting the run. See ",[200,571,573],{"href":572},"\u002Fblog\u002Fhow-to-evaluate-loop-engineering\u002F","how to evaluate loop engineering",[190,575,576,579,580,222],{},[193,577,578],{},"Workflow automation (RPA)."," Brittle screen replay. Loop engineering prefers API reads, explicit rules, and recorded skips over pretending the interface never changed. See ",[200,581,583],{"href":582},"\u002Fblog\u002Floop-vs-rpa\u002F","loop vs RPA",[190,585,586,589,590,222],{},[193,587,588],{},"Agentic workflow."," Reasoning path when the route is not fully known. Loop engineering handles the known segment; agentic workflow handles exploration. See ",[200,591,593],{"href":592},"\u002Fblog\u002Floop-vs-workflow-vs-agent\u002F","loop vs workflow vs agent",[190,595,596,599,600,604],{},[193,597,598],{},"Chat ops."," Fast for novel problems. Expensive and un-auditable for recurring ones. ",[200,601,603],{"href":602},"\u002Fblog\u002Fmultiplayer-ai-and-multi-agent-ai\u002F","Multiplayer AI"," in a shared room is for collaboration; a loop is for repetition.",[190,606,607],{},"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.",[264,609,611],{"id":610},"how-to-do-it","How to do it",[190,613,614,617],{},[193,615,616],{},"1. Name one recurring job with a finish line."," Not “AI for finance.” “Weekly pipeline exception list for EMEA” is a job.",[190,619,620,623],{},[193,621,622],{},"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.",[190,625,626,629,630,222],{},[193,627,628],{},"3. Separate outputs from actions."," Default to read-only connectors and artefact outputs. Promote to signed writes only with ",[200,631,633],{"href":632},"\u002Fblog\u002Fgovernance-as-a-multiplayer-primitive\u002F","governance as a multiplayer primitive",[190,635,636,639],{},[193,637,638],{},"4. Define skips explicitly."," Missing source file → skip with reason. Ambiguous owner on row 47 → skip, assign to queue. Never “best effort fill.”",[190,641,642,645,646,560,649,222],{},[193,643,644],{},"5. Attach the loop to a workstream."," Brief, connectors, roster, budget. See ",[200,647,648],{"href":440},"what is an AI workstream",[200,650,652],{"href":651},"\u002Fblog\u002Ffour-pillars-of-an-enterprise-ai-platform\u002F","four pillars of an enterprise AI platform",[190,654,655,658],{},[193,656,657],{},"6. Review skip rates on a cadence."," Skips are product feedback. A rising skip count means the steps or the world changed.",[190,660,661,664,665,669],{},[193,662,663],{},"7. Keep agents off the happy path."," ",[200,666,668],{"href":667},"\u002Fblog\u002Fagents-should-be-disposable\u002F","Agents should be disposable"," for exploration. The compiled loop should survive model churn.",[190,671,672],{},"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.",[264,674,676],{"id":675},"a-worked-example-weekly-pipeline-exceptions","A worked example: weekly pipeline exceptions",[190,678,679],{},"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.",[190,681,682,685],{},[193,683,684],{},"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.",[190,687,688,690],{},[193,689,289],{}," If the sheet tab name changes, skip — do not guess. If CRM adds a required field, the sensor fires before rows silently drop.",[190,692,693,695],{},[193,694,303],{}," Row with two owners → skip row, add to human queue. Missing sheet → skip run, page on-call. Every skip appears on the run page.",[190,697,698,699,702,703,705],{},"No model on the happy path. If a row needs judgement (“is this deal actually committed?”), the loop ",[193,700,701],{},"escalates"," to a person on the roster — or to an ",[200,704,330],{"href":241}," if you later choose to add one for that class only. The default remains: do not guess.",[190,707,708,709,711,712,560,716,720],{},"This is ",[200,710,525],{"href":524}," for revenue operations without turning Monday into a chat ritual. Compare ",[200,713,715],{"href":714},"\u002Fblog\u002Floops-for-revenue-operations\u002F","loops for revenue operations",[200,717,719],{"href":718},"\u002Fblog\u002Fcollaborative-ai-for-finance-and-planning\u002F","collaborative AI for finance and planning"," when the artefact is a forecast pack.",[190,722,723,727],{},[200,724,726],{"href":725},"https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents","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.",[190,729,730,731,735],{},"Research on human–AI teams (",[200,732,734],{"href":733},"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.",[190,737,738],{},"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.",[264,740,742],{"id":741},"what-goes-wrong","What goes wrong",[190,744,745,748],{},[193,746,747],{},"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.",[190,750,751,754],{},[193,752,753],{},"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.",[190,756,757,760],{},[193,758,759],{},"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.",[190,762,763,766,767,222],{},[193,764,765],{},"Eval as admission."," A sensor that grades runs does not start them. You still need a standing order. See ",[200,768,221],{"href":220},[190,770,771,774,775,222],{},[193,772,773],{},"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 ",[200,776,777],{"href":457},"what is write-back governance",[190,779,780,783],{},[193,781,782],{},"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.",[190,785,786,789,790,222],{},[193,787,788],{},"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 ",[200,791,340],{"href":339},[190,793,794,797,798,222],{},[193,795,796],{},"RPA theatre."," Replaying clicks looks like a compiled path until the interface changes. Prefer APIs and explicit skips. See ",[200,799,583],{"href":582},[190,801,802],{},"Failure looks like a green check and a wrong list. Success looks like a skip with a reason and a human on the roster.",[264,804,806],{"id":805},"governance-and-regulation-plain-english","Governance and regulation (plain English)",[190,808,809],{},"Loop engineering supports controls auditors already ask for, without requiring you to become a lawyer.",[190,811,812,816],{},[200,813,815],{"href":814},"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.”",[190,818,819,820,560,824,828],{},"The ",[200,821,823],{"href":822},"https:\u002F\u002Fartificialintelligenceact.eu\u002F","EU AI Act",[200,825,827],{"href":826},"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.",[190,830,831,835,836,839],{},[200,832,834],{"href":833},"\u002Fblog\u002Fwhat-is-human-in-the-loop-ai\u002F","Human-in-the-loop"," remains mandatory for writes and for judgement calls. Loop engineering makes the ",[193,837,838],{},"automatic"," segment automatic; it does not remove named signers from actions.",[190,841,842],{},"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.",[264,844,846],{"id":845},"how-to-start-this-quarter","How to start this quarter",[190,848,849,850,853],{},"Pick ",[193,851,852],{},"one"," recurring job. Not three. One.",[855,856,857,863,871,877,883,889,895],"ol",{},[212,858,859,862],{},[193,860,861],{},"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.",[212,864,865,868,869,222],{},[193,866,867],{},"Create a workstream"," with the brief, read-only connectors, and the roster who cares about the output. See ",[200,870,648],{"href":440},[212,872,873,876],{},[193,874,875],{},"Implement outputs only"," for the first four weeks. No CRM writes. No journals.",[212,878,879,882],{},[193,880,881],{},"Run on schedule"," twice alongside the legacy process. Diff the artefacts, not the vibes.",[212,884,885,888],{},[193,886,887],{},"Add one skip rule"," you wish you had last month. Missing file, ambiguous row, stale tab name.",[212,890,891,894],{},[193,892,893],{},"Review skip count"," in the fifth week. Update the steps or the wiki — that is loop engineering, not prompt tuning.",[212,896,897,900,901,903],{},[193,898,899],{},"Decide whether any exception class"," deserves an ",[200,902,330],{"href":241},". Most will not, yet.",[190,905,906,909],{},[200,907,908],{"href":572},"How to evaluate loop engineering"," is the buying sheet: can you compile, detect, skip, and replay without opening chat?",[190,911,912],{},"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.",[264,914,916],{"id":915},"how-this-shows-up-in-nimbus","How this shows up in Nimbus",[190,918,919,920,923,924,926,927,930],{},"The platform names a compiled standing order a ",[193,921,922],{},"Loop",". It lives on a ",[200,925,441],{"href":440},": brief, connectors, roster, and ",[200,928,929],{"href":457},"governance",". Operators configure the trigger and the known steps from a wizard; each execution gets a run page with outputs and skips.",[190,932,933,934,936,937,222],{},"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 ",[200,935,458],{"href":457},". Model steps, if you attach any, sit under ",[200,938,939],{"href":252},"harness engineering",[190,941,942,943,308,946,312,948,950,951,560,955,222],{},"See ",[200,944,945],{"href":231},"what is a Nimbus Loop",[200,947,262],{"href":261},[200,949,340],{"href":339},". Product surfaces: ",[200,952,954],{"href":953},"\u002Fproduct\u002Fworkstreams\u002F","workstreams",[200,956,929],{"href":957},"\u002Fproduct\u002Fgovernance\u002F",[264,959,961],{"id":960},"related-reading","Related reading",[209,963,964,969,974,979,984],{},[212,965,966],{},[200,967,968],{"href":231},"What is a Nimbus Loop",[212,970,971],{},[200,972,973],{"href":261},"Loop engineering vs harness engineering",[212,975,976],{},[200,977,978],{"href":339},"A loop is not an agent",[212,980,981],{},[200,982,983],{"href":252},"What is harness engineering",[212,985,986],{},[200,987,988],{"href":440},"What is an AI workstream",[264,990,992],{"id":991},"sources","Sources",[209,994,995,1000,1005,1010,1015,1019,1024,1029,1033,1038,1042],{},[212,996,997],{},[200,998,999],{"href":202},"McKinsey, The state of AI in 2025",[212,1001,1002],{},[200,1003,1004],{"href":321},"LangChain, Agents",[212,1006,1007],{},[200,1008,1009],{"href":397},"Thoughtworks, The operating system for enterprise AI",[212,1011,1012],{},[200,1013,1014],{"href":538},"NIST AI RMF",[212,1016,1017],{},[200,1018,546],{"href":545},[212,1020,1021],{},[200,1022,1023],{"href":531},"Stanford HAI, AI Index",[212,1025,1026],{},[200,1027,1028],{"href":725},"Anthropic, Building effective agents",[212,1030,1031],{},[200,1032,734],{"href":733},[212,1034,1035],{},[200,1036,1037],{"href":814},"Sarbanes-Oxley Act of 2002",[212,1039,1040],{},[200,1041,823],{"href":822},[212,1043,1044],{},[200,1045,827],{"href":826},[1047,1048,1049],"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":1051},[1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063],{"id":266,"depth":170,"text":267},{"id":406,"depth":170,"text":407},{"id":470,"depth":170,"text":471},{"id":550,"depth":170,"text":551},{"id":610,"depth":170,"text":611},{"id":675,"depth":170,"text":676},{"id":741,"depth":170,"text":742},{"id":805,"depth":170,"text":806},{"id":845,"depth":170,"text":846},{"id":915,"depth":170,"text":916},{"id":960,"depth":170,"text":961},{"id":991,"depth":170,"text":992},"2026-09-12","loop engineering","Loop engineering compiles the known path for unattended work, detects when reality changes, and records what was skipped.",{"eyebrow":1068,"title":1069},"Common questions","Loops, harnesses, and sensors",[1071,1074,1077],{"question":1072,"answer":1073},"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":1075,"answer":1076},"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":1078,"answer":1079},"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":179,"description":1066},"explainer","blog\u002Fwhat-is-loop-engineering",[1082,1085,1086,1087,1088],"loop-engineering","loops","enterprise-ai","operations","PDM378jcBmLOdJ8WRUXSpQjF7Gm7--a63h-scBBGn-o",{"hero":1091,"id":1093,"title":1094,"archived":163,"authors":164,"badge":164,"body":1095,"date":164,"definedTerm":164,"department":164,"description":1099,"extension":172,"eyebrow":1100,"faqHeader":164,"faqs":164,"footerBand":1101,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":60,"relatedHeading":1107,"seo":1108,"series":164,"sitemap":131,"status":164,"stem":1109,"subhead":164,"tags":164,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":1110},{"filename":1092},"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":1096,"toc":1097},[],{"title":169,"searchDepth":170,"depth":170,"links":1098},[],"Deep dives into pre-cognitive intelligence, sentient enterprises, and the evolving landscape of AI-driven business transformation.","Latest Research",{"headline":1102,"description":1103,"primaryLabel":1104,"primaryTo":1105,"secondaryLabel":1106,"secondaryTo":12},"Stay at the frontier.","Subscribe for product updates and new insights.","Subscribe","\u002Fnewsletter","Explore the platform","More research",{"title":1094,"description":1099},"blog\u002Findex","BFSWGYO9bcTlaulivKYWyg08_DJHsdGg3OC6g_CG1Hw",[1112,1712],{"id":1113,"title":1114,"archived":163,"authors":1115,"badge":1118,"body":1119,"date":1689,"definedTerm":164,"department":164,"description":1690,"extension":172,"eyebrow":164,"faqHeader":1691,"faqs":1694,"footerBand":164,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":1704,"relatedHeading":164,"seo":1705,"series":1082,"sitemap":131,"status":164,"stem":1706,"subhead":164,"tags":1707,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":1711},"content\u002Fblog\u002Fagent-harness-vs-agent-framework.md","Agent Harness vs Agent Framework",[1116],{"name":1117,"to":184},"Nimbus Research",{"label":186},{"type":166,"value":1120,"toc":1672},[1121,1132,1160,1176,1179,1181,1236,1251,1253,1259,1261,1275,1289,1294,1298,1304,1318,1336,1351,1357,1367,1377,1393,1400,1404,1432,1438,1442,1452,1463,1471,1477,1488,1504,1511,1517,1520,1528,1532,1537,1544,1548,1555,1559,1562,1566,1569,1573,1580,1584,1593,1595,1602,1604],[190,1122,1123,1124,1127,1128,1131],{},"An ",[193,1125,1126],{},"agent framework"," is a library for composing models, tools, and control flow. An ",[193,1129,1130],{},"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.",[190,1133,1134,1137,1138,664,1141,1144,1145,1149,1150,1154,1155,1159],{},[200,1135,1136],{"href":321},"LangChain’s own docs"," are careful with the words. ",[193,1139,1140],{},"Agent = Model + Harness.",[348,1142,1143],{},"create_agent"," is “a highly configurable harness.” ",[200,1146,1148],{"href":1147},"https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagents","Deep Agents"," is “the batteries-included agent harness.” ",[200,1151,1153],{"href":1152},"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 ",[1156,1157,1158],"em",{},"implement"," a harness. Shipping the pip package does not mean you have one operators can hire.",[190,1161,1162,1166,1167,1169,1170,1172,1173,1175],{},[200,1163,1165],{"href":1164},"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. ",[348,1168,1143],{}," 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 ",[200,1171,458],{"href":457},", a ",[200,1174,441],{"href":440},", or a ledger.",[190,1177,1178],{},"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.”",[264,1180,407],{"id":406},[209,1182,1183,1189,1203,1213,1219,1225],{},[212,1184,1185,1188],{},[193,1186,1187],{},"Framework."," SDKs and graphs: LangChain, LangGraph, CrewAI, AutoGen, Semantic Kernel, Pydantic AI. You write code. You own production identity unless you add it.",[212,1190,1191,1194,1195,1199,1200,1202],{},[193,1192,1193],{},"Harness."," Runtime around the model. ",[200,1196,1198],{"href":1197},"\u002Fblog\u002Fwhat-is-an-agent-harness\u002F","What is an agent harness",". May be a product (Claude Code) or a configured framework (your ",[348,1201,1143],{}," plus hooks plus IdP).",[212,1204,1205,1208,1209,222],{},[193,1206,1207],{},"Middleware \u002F hooks."," Framework primitive that becomes harness behaviour when it always runs. LangChain middleware; ",[200,1210,1212],{"href":1211},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fhooks","Claude Code hooks",[212,1214,1215,1218],{},[193,1216,1217],{},"Batteries-included harness."," Deep Agents, Claude Agent SDK, Codex SDK. Opinionated loop, filesystem, subagents, compaction. Still not your CRM grant model.",[212,1220,1221,1224],{},[193,1222,1223],{},"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.",[212,1226,1227,1230,1231,1235],{},[193,1228,1229],{},"MCP."," Plug. ",[200,1232,1234],{"href":1233},"\u002Fblog\u002Fwhat-is-model-context-protocol\u002F","What is Model Context Protocol",". Works behind frameworks and products. Does not choose the framework\u002Fharness cut.",[190,1237,1238,1239,1243,1244,1246,1247,222],{},"In Nimbus you do not import a graph to start a job. You assign an ",[200,1240,1242],{"href":1241},"\u002Fproduct\u002Fagent-teams\u002F","agent team"," on a ",[200,1245,441],{"href":953},". Under the hood there is still a loop, tools, and stops — a harness. The product choice is whether operators must be graph authors. ",[200,1248,1250],{"href":1249},"\u002Fevaluate\u002F","Self-service vs forward-deployed",[264,1252,471],{"id":470},[190,1254,1255,1256,1258],{},"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. ",[200,1257,495],{"href":202}," 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.",[190,1260,499],{},[209,1262,1263,1266,1269,1272],{},[212,1264,1265],{},"the RFP says “must support LangChain” as if that were a control",[212,1267,1268],{},"a vendor says “model-agnostic framework” and prices seats on one flagship",[212,1270,1271],{},"you are asked to rebuild quoting and SoD because “we already have agents in Python”",[212,1273,1274],{},"security reviews the GitHub org and never reviews who can call PATCH",[190,1276,1277,1281,1282,1285,1286,1288],{},[200,1278,1280],{"href":1279},"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 ",[1156,1283,1284],{},"who can change the harness when it fails"," — ",[200,1287,939],{"href":252}," — and whether a fail-closed write exists.",[190,1290,1291,1293],{},[200,1292,1014],{"href":538}," Map\u002FMeasure need a system boundary. “Our framework” is not a boundary. A named runtime with grants and logs is.",[264,1295,1297],{"id":1296},"the-practical-differences","The practical differences",[190,1299,1300,1303],{},[193,1301,1302],{},"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.",[190,1305,1306,1309,1310,1313,1314,1317],{},[193,1307,1308],{},"Where identity lives."," Framework default: service account in ",[348,1311,1312],{},".env",". Product harness: org roster, workstream membership, OAuth grants. You ",[1156,1315,1316],{},"can"," do the latter in LangGraph. You must build it.",[190,1319,1320,1323,1324,560,1327,1331,1332,1335],{},[193,1321,1322],{},"What “done” means."," Framework: your node returned. Inner product harness: tests \u002F hook. Outer product harness: signer. Anthropic’s ",[200,1325,1326],{"href":725},"effective agents",[200,1328,1330],{"href":1329},"https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-harnesses-for-long-running-agents","long-running harness"," notes are about encoding done in the ",[1156,1333,1334],{},"environment",". Frameworks give you the primitives; they do not know your done.",[190,1337,1338,1341,1342,1345,1346,1350],{},[193,1339,1340],{},"Portability."," Frameworks win on model swap ",[1156,1343,1344],{},"if"," tools and middleware stay. Product harnesses win if they actually route and do not bury a flagship default in a seat. ",[200,1347,1349],{"href":1348},"\u002Fblog\u002Fwhat-is-model-routing\u002F","Model routing",". “We wrap LangChain” is not routing.",[190,1352,1353,1356],{},[193,1354,1355],{},"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.",[190,1358,1359,1362,1363,222],{},[193,1360,1361],{},"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. ",[200,1364,1366],{"href":1365},"\u002Fblog\u002Fhow-to-evaluate-an-agent-harness\u002F","Proof of value",[190,1368,1369,1372,1373,1376],{},[193,1370,1371],{},"Lock-in."," Framework lock-in is code and patterns. Product lock-in is data, graph, and operating habits. Both are real. ",[200,1374,1375],{"href":1348},"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.",[190,1378,1379,1380,1384,1385,1388,1389,222],{},"LangChain is not the villain. Their ",[200,1381,1383],{"href":1382},"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 ",[1156,1386,1387],{},"deployment"," has those parts for the job you are buying — repo or company. ",[200,1390,1392],{"href":1391},"\u002Fblog\u002Finner-vs-outer-agent-harness\u002F","Inner vs outer",[190,1394,1395,1396,1399],{},"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 ",[1156,1397,1398],{},"should"," author graphs (unique simulation, exotic tools) can still sit behind a connector. Framework inside a harness. Not a framework instead of one.",[264,1401,1403],{"id":1402},"a-decision-rule","A decision rule",[209,1405,1406,1412,1418,1426],{},[212,1407,1408,1411],{},[193,1409,1410],{},"Building a product or a unique workflow in code, with engineers on the hook:"," framework (or SDK harness) plus your own grants and evals.",[212,1413,1414,1417],{},[193,1415,1416],{},"Hiring a loop for a repository:"," inner product harness (Claude Code, Cursor, Codex). Optionally extend with a framework for custom tools.",[212,1419,1420,664,1423,1425],{},[193,1421,1422],{},"Hiring a loop for CRM\u002FERP\u002Fcross-department work:",[200,1424,335],{"href":334}," \u002F OS-class product. A framework is a build programme.",[212,1427,1428,1431],{},[193,1429,1430],{},"Vendor says “we are a framework and an OS”:"," make them show a failed unsigned write and an operator-attached connector. Words are cheap.",[190,1433,1434,1437],{},[200,1435,1436],{"href":1249},"Build vs buy an enterprise AI OS"," is the longer form of the third bullet.",[264,1439,1441],{"id":1440},"what-each-layer-of-the-stack-is-for","What each layer of the stack is for",[190,1443,1444,1445,1448,1449,1451],{},"LangChain’s own split is the cleanest vendor-native map: use Deep Agents when you want a batteries-included ",[1156,1446,1447],{},"harness","; use ",[348,1450,1143],{}," 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.",[190,1453,1454,1455,1458,1459,1462],{},"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 ",[1156,1456,1457],{},"your"," story unless you add them. ",[200,1460,1461],{"href":1279},"OWASP"," will still fail you if the first graph you merge attaches every production tool “so the demo looks alive.”",[190,1464,1465,1466,1470],{},"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 ",[200,1467,1469],{"href":1468},"\u002Fproduct\u002Fwiki\u002F","wiki"," and the interceptor, and that engineers who need a custom simulator put it behind a connector. Framework inside the harness.",[190,1472,1473,1476],{},[200,1474,1475],{"href":397},"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.",[190,1478,1479,1482,1483,1487],{},[193,1480,1481],{},"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. ",[200,1484,1486],{"href":1485},"\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.",[190,1489,1490,1493,1494,1496,1497,1499,1500,1503],{},[193,1491,1492],{},"Portability, honestly."," Frameworks make model swap easier ",[1156,1495,1344],{}," you used their model interface and did not sprinkle vendor-specific tool formats through application code. Products make operator ratchet easier ",[1156,1498,1344],{}," adding a gate is a UI action. Neither gives you portability of ",[1156,1501,1502],{},"decisions"," unless the ledger exports. Ask for JSON of the quote and the graph, not a promise of “open.”",[190,1505,1506,1507,1510],{},"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 ",[1156,1508,1509],{},"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.",[190,1512,1513,1514,222],{},"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. ",[200,1515,50],{"href":1516},"\u002Fintegrations\u002F",[190,1518,1519],{},"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.",[190,1521,1522,1523,1527],{},"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 ",[200,1524,1526],{"href":1525},"\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.”",[264,1529,1531],{"id":1530},"questions-people-actually-ask","Questions people actually ask",[1533,1534,1536],"h3",{"id":1535},"is-langgraph-a-harness","Is LangGraph a harness?",[190,1538,1539,1540,1543],{},"It is a framework for building one. Your graph ",[1156,1541,1542],{},"becomes"," a harness when it owns tool dispatch, bounds, and (for production) identity and sensors. Empty graph ≠ harness.",[1533,1545,1547],{"id":1546},"is-claude-code-a-framework","Is Claude Code a framework?",[190,1549,1550,1551,222],{},"No. It is a productised inner harness. The Agent SDK is the embeddable form — closer to HaaS in ",[200,1552,1554],{"href":1553},"https:\u002F\u002Faddyosmani.com\u002Fblog\u002Fagent-harness-engineering\u002F","Osmani’s sense",[1533,1556,1558],{"id":1557},"does-mcp-replace-both","Does MCP replace both?",[190,1560,1561],{},"No. Plumbing. Hosts still need a loop and grants.",[1533,1563,1565],{"id":1564},"we-already-standardised-on-crewai","We already standardised on CrewAI.",[190,1567,1568],{},"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.",[1533,1570,1572],{"id":1571},"how-do-we-evaluate-a-vendor-who-wraps-langchain","How do we evaluate a vendor who wraps LangChain?",[190,1574,1575,1576,1579],{},"Ignore the wrapper. Run ",[200,1577,1578],{"href":1365},"how to evaluate an agent harness",". If they cannot refuse a write, you evaluated a demo of a framework.",[1533,1581,1583],{"id":1582},"where-does-nimbus-sit","Where does Nimbus sit?",[190,1585,1586,1587,1590,1591,222],{},"Productised outer harness, not a LangChain distribution. ",[200,1588,11],{"href":1589},"\u002Foverview\u002F",". You should still allow inner harnesses for code. ",[200,1592,1486],{"href":1485},[264,1594,961],{"id":960},[190,1596,1597,560,1599,222],{},[200,1598,983],{"href":252},[200,1600,1601],{"href":1525},"what is multi-agent AI",[264,1603,992],{"id":991},[209,1605,1606,1610,1615,1620,1625,1630,1634,1639,1643,1648,1653,1657,1661,1666],{},[212,1607,1608],{},[200,1609,1004],{"href":321},[212,1611,1612],{},[200,1613,1614],{"href":1164},"LangChain, How to build a custom agent harness",[212,1616,1617],{},[200,1618,1619],{"href":1382},"LangChain, The anatomy of an agent harness",[212,1621,1622],{},[200,1623,1624],{"href":1152},"LangChain, LangGraph overview",[212,1626,1627],{},[200,1628,1629],{"href":1147},"LangChain Deep Agents",[212,1631,1632],{},[200,1633,1009],{"href":397},[212,1635,1636],{},[200,1637,1638],{"href":1553},"Addy Osmani, Agent harness engineering",[212,1640,1641],{},[200,1642,1028],{"href":725},[212,1644,1645],{},[200,1646,1647],{"href":1329},"Anthropic, Effective harnesses for long-running agents",[212,1649,1650],{},[200,1651,1652],{"href":1211},"Claude Code, Hooks",[212,1654,1655],{},[200,1656,999],{"href":202},[212,1658,1659],{},[200,1660,1014],{"href":538},[212,1662,1663],{},[200,1664,1665],{"href":1279},"OWASP Top 10 for LLM applications",[212,1667,1668],{},[200,1669,1671],{"href":1670},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-11-25\u002Findex","Model Context Protocol specification",{"title":169,"searchDepth":170,"depth":170,"links":1673},[1674,1675,1676,1677,1678,1679,1687,1688],{"id":406,"depth":170,"text":407},{"id":470,"depth":170,"text":471},{"id":1296,"depth":170,"text":1297},{"id":1402,"depth":170,"text":1403},{"id":1440,"depth":170,"text":1441},{"id":1530,"depth":170,"text":1531,"children":1680},[1681,1682,1683,1684,1685,1686],{"id":1535,"depth":365,"text":1536},{"id":1546,"depth":365,"text":1547},{"id":1557,"depth":365,"text":1558},{"id":1564,"depth":365,"text":1565},{"id":1571,"depth":365,"text":1572},{"id":1582,"depth":365,"text":1583},{"id":960,"depth":170,"text":961},{"id":991,"depth":170,"text":992},"2026-08-24","An agent framework is a library for assembling a loop.",{"eyebrow":1692,"title":1693},"Short answers","Library versus a system you can run",[1695,1698,1701],{"question":1696,"answer":1697},"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":1699,"answer":1700},"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":1702,"answer":1703},"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":1114,"description":1690},"blog\u002Fagent-harness-vs-agent-framework",[1082,1708,1709,1710],"agent-harness","langchain","frameworks","RIUbWALaQhkECWWg7MZzfWGEoEgdzjiFlnkixJN_2ok",{"id":1713,"title":968,"archived":163,"authors":1714,"badge":1716,"body":1717,"date":1064,"definedTerm":2552,"department":164,"description":2553,"extension":172,"eyebrow":164,"faqHeader":2554,"faqs":2556,"footerBand":164,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":2569,"relatedHeading":164,"seo":2570,"series":1086,"sitemap":131,"status":164,"stem":2571,"subhead":164,"tags":2572,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":2573},"content\u002Fblog\u002Fwhat-is-a-nimbus-loop.md",[1715],{"name":1117,"to":184},{"label":186},{"type":166,"value":1718,"toc":2536},[1719,1726,1731,1734,1759,1768,1772,1775,1783,1789,1795,1805,1815,1860,1868,1878,1880,1929,1932,1936,1942,1951,1954,1965,1973,1978,1982,1989,1992,2012,2017,2020,2024,2032,2035,2061,2064,2074,2080,2082,2088,2097,2106,2112,2126,2129,2133,2136,2141,2158,2163,2180,2193,2198,2204,2208,2214,2223,2229,2238,2246,2252,2256,2288,2297,2303,2305,2311,2317,2323,2329,2337,2346,2355,2358,2360,2363,2411,2418,2421,2423,2432,2445,2458,2460,2486,2488,2534],[190,1720,1721,1722,1725],{},"A ",[193,1723,1724],{},"standing order"," for enterprise AI is a job that already exists before anyone starts a run: a trigger admits work, a compiled recipe executes, and a run record shows outputs and skips. Nobody re-describes the job in a chat thread to make Monday happen.",[190,1727,1728,1730],{},[200,1729,203],{"href":202}," shows organisations using models widely while leaving recurring work in chat and memory. Adoption without redesign means the same exception list is still a ritual: someone remembers the filters, someone else remembers the sheet, and audit asks a person rather than opening a record.",[190,1732,1733],{},"Disambiguate before you build or buy:",[209,1735,1736,1743,1752],{},[212,1737,1738,1740,1741,222],{},[193,1739,216],{}," — a sensor that grades a run. Did the executed write match the signed payload? See ",[200,1742,221],{"href":220},[212,1744,1745,1747,1748,1751],{},[193,1746,227],{}," — this page. A job that ",[193,1749,1750],{},"admits"," a run when a trigger fires.",[212,1753,1754,1756,1757,222],{},[193,1755,237],{}," — an interactive path that still reasons when the route is not fully known. See ",[200,1758,242],{"href":241},[190,1760,1761,1764,1765,1767],{},[200,1762,195],{"href":1763},"\u002Fblog\u002Fwhat-is-loop-engineering\u002F"," is the discipline behind the recipe: compile the known path, detect change, record skips. A standing-order loop is how that discipline shows up as an object operators can own — on a ",[200,1766,441],{"href":440},", with connectors, a roster, and a finish line.",[264,1769,1771],{"id":1770},"what-a-standing-order-loop-is","What a standing-order loop is",[190,1773,1774],{},"Four parts, always visible:",[190,1776,1777,1780,1781,222],{},[193,1778,1779],{},"1. Trigger."," What starts a run. A schedule (every Monday 06:00), a file landing in a folder, a threshold crossed, or a deliberate manual start from a form. See ",[200,1782,425],{"href":424},[190,1784,1785,1788],{},[193,1786,1787],{},"2. Compiled recipe."," The fixed sequence for this job on this workstream: which connectors to read, which rules to apply, what to produce, whom to notify. Not a system prompt. Not “use your judgement.” The same recipe every time until you version it.",[190,1790,1791,1794],{},[193,1792,1793],{},"3. Run page."," One URL per execution. Inputs observed, steps taken, outputs attached, skips listed with reasons, actions proposed or completed. This is what audit walks — not a transcript of vibes.",[190,1796,1797,1800,1801,1804],{},[193,1798,1799],{},"4. Team notified."," The roster on the workstream gets the outcome. Success, partial success with skips, or hard stop. ",[200,1802,1803],{"href":524},"Collaborative AI"," means the right people see the same run page, not a forwarded screenshot.",[190,1806,1807,1808,1811,1812,1814],{},"A standing-order loop is ",[193,1809,1810],{},"not"," an agent you chat with. On the normal path it does not invoke a model. See ",[200,1813,340],{"href":339},". When the path is unknown, the loop escalates — to a person on the roster, or optionally to an agentic workflow you have explicitly attached for that exception class.",[342,1816,1818],{"className":344,"code":1817,"language":346,"meta":169,"style":169},"flowchart LR\n  triggerFires[\"Trigger fires\"] --> admitRun[\"Standing order admits run\"]\n  admitRun --> compiledRecipe[\"Compiled recipe\"]\n  compiledRecipe --> outputsSkips[\"Outputs and skips\"]\n  compiledRecipe --> signedActions[\"Actions if signed\"]\n  compiledRecipe --> escalateUnknown[\"Escalate if unknown\"]\n  outputsSkips --> teamNotified[\"Team notified\"]\n  signedActions --> teamNotified\n",[348,1819,1820,1824,1829,1834,1839,1844,1849,1854],{"__ignoreMap":169},[351,1821,1822],{"class":353,"line":354},[351,1823,357],{},[351,1825,1826],{"class":353,"line":170},[351,1827,1828],{},"  triggerFires[\"Trigger fires\"] --> admitRun[\"Standing order admits run\"]\n",[351,1830,1831],{"class":353,"line":365},[351,1832,1833],{},"  admitRun --> compiledRecipe[\"Compiled recipe\"]\n",[351,1835,1836],{"class":353,"line":371},[351,1837,1838],{},"  compiledRecipe --> outputsSkips[\"Outputs and skips\"]\n",[351,1840,1841],{"class":353,"line":377},[351,1842,1843],{},"  compiledRecipe --> signedActions[\"Actions if signed\"]\n",[351,1845,1846],{"class":353,"line":383},[351,1847,1848],{},"  compiledRecipe --> escalateUnknown[\"Escalate if unknown\"]\n",[351,1850,1851],{"class":353,"line":389},[351,1852,1853],{},"  outputsSkips --> teamNotified[\"Team notified\"]\n",[351,1855,1857],{"class":353,"line":1856},8,[351,1858,1859],{},"  signedActions --> teamNotified\n",[190,1861,1862,1864,1865,1867],{},[200,1863,322],{"href":321}," defines Agent = Model + Harness. A standing order is intentionally ",[193,1866,1810],{}," that object on the happy path. It is closer to a scheduled pipeline with operator UX: a form to configure, a run page to inspect, a roster to notify.",[190,1869,1870,1871,1873,1874,1877],{},"Compare ",[200,1872,593],{"href":592},": workflow is the abstract sequence; a standing-order loop is the ",[193,1875,1876],{},"deployed"," sequence on a named job with connectors and roster; an agent is the reasoning actor for unknown branches.",[264,1879,407],{"id":406},[209,1881,1882,1887,1892,1898,1903,1909,1917,1923],{},[212,1883,1884,1886],{},[193,1885,436],{}," The job waits. It does not need to be re-briefed.",[212,1888,1889,1891],{},[193,1890,420],{}," Schedule, arrival, threshold, or manual start. Deduplicate so unchanged inputs do not page finance.",[212,1893,1894,1897],{},[193,1895,1896],{},"Recipe version."," The compiled steps as of this run. If only a prompt versions, you do not have a recipe.",[212,1899,1900,1902],{},[193,1901,430],{}," Recorded halt. Missing file, ambiguous row, stale schema.",[212,1904,1905,1908],{},[193,1906,1907],{},"Output."," Artefact on the run page. Read-only connectors suffice.",[212,1910,1911,1914,1915,222],{},[193,1912,1913],{},"Action."," Write to a live system. Requires ",[200,1916,458],{"href":457},[212,1918,1919,1922],{},[193,1920,1921],{},"Roster roles."," Owner, signer, subscriber, exception worker — not “whoever is online.”",[212,1924,1925,1928],{},[193,1926,1927],{},"Quiet success."," Ran, nothing to write, record still exists. Month-end with zero exceptions is success, not a missing email.",[190,1930,1931],{},"If a vendor cannot show these nouns as objects — not as slides — you are looking at a copilot with a cron job.",[264,1933,1935],{"id":1934},"outputs-vs-actions","Outputs vs actions",[190,1937,1938,1941],{},[193,1939,1940],{},"Outputs"," are artefacts: CSV, table, PDF draft, exception list, email body for review. They land on the run page and in notifications. Read-only connectors suffice.",[190,1943,1944,1947,1948,1950],{},[193,1945,1946],{},"Actions"," are writes to live systems: CRM stage change, ticket update, approved journal. They follow the same rules as any other write — quoted payload, named signer, ",[200,1949,458],{"href":457},". A loop does not silently become a write tool because the schedule fired.",[190,1952,1953],{},"Good defaults:",[209,1955,1956,1959,1962],{},[212,1957,1958],{},"Month one: outputs only. Prove the recipe matches manual work.",[212,1960,1961],{},"Month two: one action class with a named signer and a stored rejection test.",[212,1963,1964],{},"Never: bulk writes before anyone has rejected a payload on this workstream.",[190,1966,1967,1969,1970,1972],{},[200,1968,253],{"href":252}," covers sensors around model steps. Standing-order loops inherit platform gates for actions without turning the whole job into an agent harness. ",[200,1971,973],{"href":261}," is the split.",[190,1974,1975,1977],{},[200,1976,726],{"href":725}," advises simple pipelines where a fixed sequence will do. Outputs-first is that advice in operations clothing: prove the list before you post the journal.",[264,1979,1981],{"id":1980},"wizard-not-chat-ritual","Wizard, not chat ritual",[190,1983,1984,1985,1988],{},"Operators configure a standing order from a ",[193,1986,1987],{},"form",": name the job, pick the trigger, attach sources, define outputs, choose who gets notified. Starting a run is an explicit start or waiting for the schedule — not typing “please do the usual” into Slack.",[190,1990,1991],{},"Why this matters:",[209,1993,1994,2000,2006],{},[212,1995,1996,1999],{},[193,1997,1998],{},"Chat rituals depend on memory."," The usual drifts. New hires cannot start the job.",[212,2001,2002,2005],{},[193,2003,2004],{},"Forms compile intent."," Fields become recipe parameters. Parameters version.",[212,2007,2008,2011],{},[193,2009,2010],{},"Audit needs objects."," A standing order with version 4 is evidence. A thread is not.",[190,2013,2014,2016],{},[200,2015,203],{"href":202}," reports broad use and narrow redesign. Replacing a chat ritual with a form on a scoped workstream is redesign you can measure: time to first output, skip rate, diff versus manual baseline.",[190,2018,2019],{},"Discovery still happens in conversation. The first time you figure out the filters, chat is fine. The tenth time, chat is a tax. Compile after the second successful manual run, not after the twentieth apology.",[264,2021,2023],{"id":2022},"where-a-standing-order-loop-lives","Where a standing-order loop lives",[190,2025,2026,2027,2029,2030,222],{},"On a ",[193,2028,441],{}," — the shared workspace for one outcome: brief, connectors, people, budget, finish line. See ",[200,2031,648],{"href":440},[190,2033,2034],{},"The loop inherits:",[209,2036,2037,2043,2049,2055],{},[212,2038,2039,2042],{},[193,2040,2041],{},"Least-privilege connectors"," scoped to this job",[212,2044,2045,2048],{},[193,2046,2047],{},"Roster"," who may view, sign, or receive skips",[212,2050,2051,2054],{},[193,2052,2053],{},"Budget"," if a later step adds a model for exceptions",[212,2056,2057,2060],{},[193,2058,2059],{},"Wiki sections"," the recipe may load as feed-forward context",[190,2062,2063],{},"Standing orders stack on the same workstream. “Weekly exceptions” and “month-end accrual list” can coexist with separate triggers and recipes. They share connectors and governance without sharing a Slack channel.",[190,2065,2066,2069,2070,2073],{},[200,2067,2068],{"href":651},"Four pillars of an enterprise AI platform"," — workstream, governance, graph, teams — describe the platform a loop plugs into. The loop is not a fourth pillar; it is how unattended work runs ",[193,2071,2072],{},"inside"," the workstream.",[190,2075,2076,2079],{},[200,2077,2078],{"href":397},"Thoughtworks on the enterprise AI operating system"," stresses organisational ownership. A standing order without an owner on the workstream is automation theatre: the recipe will rot, skip rates will climb, and people will return to the thread they trust.",[264,2081,471],{"id":470},[190,2083,2084,2087],{},[193,2085,2086],{},"Reliability."," The job runs when the trigger fires, even if the usual operator is on leave.",[190,2089,2090,2093,2094,2096],{},[193,2091,2092],{},"Evidence."," Auditors and partners open the run page. ",[200,2095,1014],{"href":538}," Measure functions assume you can observe what ran. Skips are observations, not embarrassments.",[190,2098,2099,2102,2103,2105],{},[193,2100,2101],{},"Cost."," No tokens on the happy path. ",[200,2104,532],{"href":531}," tracks rising capability and cost. Compiled loops avoid paying for reinterpretation every Monday.",[190,2107,2108,2111],{},[193,2109,2110],{},"Safety."," Unknown paths escalate. A standing order that guesses is an unharnessed agent wearing a schedule.",[190,2113,2114,664,2117,2119,2120,2122,2123,2125],{},[193,2115,2116],{},"Regulatory fit.",[200,2118,546],{"href":545}," wants named actors and operational controls. A loop on a roster satisfies the instinct better than a shared login. ",[200,2121,827],{"href":826}," purpose limitation maps to workstream scope. The ",[200,2124,823],{"href":822}," documentation expectations map to run pages and versioned recipes.",[190,2127,2128],{},"It affects you if the same artefact is due every week, if two people already follow a checklist, and if last quarter’s audit asked “what ran on the 12th” and the answer was a search through chat.",[264,2130,2132],{"id":2131},"a-worked-example-month-end-accrual-list","A worked example: month-end accrual list",[190,2134,2135],{},"Finance runs the same accrual exception pass every close: read ERP open items, read the controller’s mapping tab, flag mismatches, send the controller a list — no posting.",[190,2137,2138],{},[193,2139,2140],{},"Configure once.",[209,2142,2143,2146,2149,2152,2155],{},[212,2144,2145],{},"Workstream: “Month-end accrual exceptions — Entity UK”",[212,2147,2148],{},"Trigger: manual start during the close window, plus optional schedule on close day 3",[212,2150,2151],{},"Recipe: read ERP (read-only), read mapping sheet, apply rules from wiki section “UK accrual mapping v3”",[212,2153,2154],{},"Output: exception table on the run page, plus notification to the controller roster role",[212,2156,2157],{},"Skips: missing mapping row → queue to FP&A; ERP timeout → hard stop with reason",[190,2159,2160],{},[193,2161,2162],{},"Each close (unattended).",[209,2164,2165,2168,2171,2177],{},[212,2166,2167],{},"Controller starts the run or the schedule fires",[212,2169,2170],{},"Run page shows 142 rows scanned, 7 exceptions, 2 skips (ambiguous business unit on rows 88 and 91)",[212,2172,2173,2174,2176],{},"Controller works skips in ",[200,2175,525],{"href":524}," on the same workstream — not in a side message",[212,2178,2179],{},"No model on the happy path; no journal posts without a signed action later",[190,2181,2182,2183,2185,2186,2189,2190,2192],{},"If row 88 needs judgement beyond rules, assign to a human. Optionally attach an ",[200,2184,330],{"href":241}," for ",[193,2187,2188],{},"that queue only"," after the compiled path proves stable. ",[200,2191,668],{"href":667},"; the standing order remains.",[190,2194,2195,2197],{},[200,2196,815],{"href":814}," does not mention loops. It asks whether an independent person can reconstruct how a number became the number. A run page with inputs, rules version, and skips is reconstruction-friendly.",[190,2199,2200,2201,2203],{},"Walk a second close. Recipe version is still v3. The mapping tab gained a new entity code. The loop skips those rows instead of inventing a mapping. FP&A updates the wiki, the owner versions the recipe to v4, and close day 3 runs clean. That update is ",[200,2202,1065],{"href":1763}," — not a prompt tweak in a private workspace.",[264,2205,2207],{"id":2206},"standing-orders-vs-things-you-already-have","Standing orders vs things you already have",[190,2209,2210,2213],{},[193,2211,2212],{},"Cron plus script."," Fine for engineers. Standing orders add roster, notifications, skip UX, and workstream scope for operators who will never open a repository.",[190,2215,2216,2219,2220,2222],{},[193,2217,2218],{},"RPA."," Screen replay breaks when the interface changes. See ",[200,2221,583],{"href":582},". Prefer API reads and explicit skips.",[190,2224,2225,2228],{},[193,2226,2227],{},"Personal automation wiring."," Good for individual productivity. Weak on named signers, skip queues, and audit export for regulated teams.",[190,2230,2231,2234,2235,2237],{},[193,2232,2233],{},"Agent in a channel."," Re-describes the job every time. See ",[200,2236,340],{"href":339},". Cost and drift scale with repetition.",[190,2239,2240,2243,2244,222],{},[193,2241,2242],{},"Eval harness only."," Grades agent runs. Does not replace a standing order that starts them. See ",[200,2245,221],{"href":220},[190,2247,2248,2251],{},[193,2249,2250],{},"Shared spreadsheet plus calendar invite."," Common, and honest. It is also how the invite survives and the rules do not. Compile the rules; keep the calendar as a trigger if you must.",[264,2253,2255],{"id":2254},"human-roles-on-the-loop","Human roles on the loop",[209,2257,2258,2264,2272,2278],{},[212,2259,2260,2263],{},[193,2261,2262],{},"Owner."," Maintains recipe and wiki references. Reviews skip trends monthly.",[212,2265,2266,2269,2270,222],{},[193,2267,2268],{},"Signer."," Approves action classes. Same as ",[200,2271,633],{"href":632},[212,2273,2274,2277],{},[193,2275,2276],{},"Subscriber."," Gets notified. May not sign.",[212,2279,2280,2283,2284,2287],{},[193,2281,2282],{},"Exception worker."," Works the skip queue. May use ",[200,2285,2286],{"href":833},"human-in-the-loop"," for judgement calls.",[190,2289,2290,2292,2293,2296],{},[200,2291,603],{"href":602}," is several people in the room at once. A standing order is several people ",[193,2294,2295],{},"aligned on the same run page"," asynchronously — often more realistic for finance and operations.",[190,2298,2299,2300,2302],{},"Research on hybrid human–AI teams (",[200,2301,734],{"href":733},") shows clear role separation improves outcomes. Loops encode machine steps versus human steps explicitly. If everyone is “a user,” you have not assigned override.",[264,2304,742],{"id":741},[190,2306,2307,2310],{},[193,2308,2309],{},"Scheduled prompt."," “Run this chat task every hour.” That is a scheduled agent call. No compiled recipe version. No skip semantics. No diff against last week’s baseline.",[190,2312,2313,2316],{},[193,2314,2315],{},"Silent defaults."," Missing values filled, categories invented, emails sent without a skip. Overnight work that “helped” is how wrong rows become official.",[190,2318,2319,2322],{},[193,2320,2321],{},"Outputs and actions collapsed."," The schedule posts because posting was easier to demo than a table. Prove the artefact first.",[190,2324,2325,2328],{},[193,2326,2327],{},"Ownerless workstream."," Connectors exist; nobody reviews skips. The recipe ages in place.",[190,2330,2331,2334,2335,222],{},[193,2332,2333],{},"Eval as the loop."," A grading harness without a standing order still starts from Slack. See ",[200,2336,221],{"href":220},[190,2338,2339,2342,2343,2345],{},[193,2340,2341],{},"God workspace."," One workspace for every job destroys purpose limitation. Scope the workstream to the finish line. ",[200,2344,827],{"href":826}," cares about purpose; so should you.",[190,2347,2348,2351,2352,2354],{},[193,2349,2350],{},"Exception class as hidden agent."," “If skip, ask the model” injected into the compiled path without a harness. Attach an ",[200,2353,330],{"href":241}," explicitly, or keep the human queue.",[190,2356,2357],{},"Failure looks like a forwarded screenshot and a disagreement about which filters ran. Success looks like a run page two people can open without asking who started it.",[264,2359,846],{"id":845},[190,2361,2362],{},"One standing order. One workstream. Outputs only for four weeks.",[855,2364,2365,2371,2379,2385,2391,2397,2403],{},[212,2366,2367,2370],{},[193,2368,2369],{},"Pick a job"," with a written checklist already used by two people.",[212,2372,2373,2376,2377,222],{},[193,2374,2375],{},"Open a workstream"," with read-only connectors and the real roster. See ",[200,2378,648],{"href":440},[212,2380,2381,2384],{},[193,2382,2383],{},"Configure the standing order"," from a form: trigger, sources, output format, notify list.",[212,2386,2387,2390],{},[193,2388,2389],{},"Run twice manually"," alongside the legacy process. Diff outputs.",[212,2392,2393,2396],{},[193,2394,2395],{},"Add skip rules"," for every difference that required a side message last month.",[212,2398,2399,2402],{},[193,2400,2401],{},"Enable the schedule"," only after skip rate is stable.",[212,2404,2405,2407,2408,2410],{},[193,2406,94],{}," with ",[200,2409,573],{"href":572}," before adding actions.",[190,2412,2413,2417],{},[200,2414,2416],{"href":2415},"\u002Fblog\u002Fhow-to-evaluate-collaborative-ai\u002F","How to evaluate collaborative AI"," applies when the loop’s output becomes a shared artefact people sign — forecast pack, pipeline commit, accrual list.",[190,2419,2420],{},"If step 4 fails, you have not compiled the path yet. Write the steps again. Do not add a model to paper over a fuzzy recipe.",[264,2422,916],{"id":915},[190,2424,2425,2426,2428,2429,2431],{},"Nimbus names this object a ",[193,2427,922],{},". A Loop is a standing order on a ",[200,2430,441],{"href":440},": trigger, compiled recipe, run page, roster notified. Operators configure it from a wizard — not by re-briefing a chat thread — and each execution is inspectable.",[190,2433,2434,2435,2438,2439,2441,2442,2444],{},"The Loop inherits that workstream’s connectors, wiki context, budget, and ",[200,2436,2437],{"href":457},"write-back"," gates. Model steps are not implied. If you later attach an ",[200,2440,330],{"href":241}," to an exception class, ",[200,2443,939],{"href":252}," applies to that branch only.",[190,2446,942,2447,308,2450,312,2452,950,2454,560,2456,222],{},[200,2448,2449],{"href":1763},"what is loop engineering",[200,2451,425],{"href":424},[200,2453,340],{"href":339},[200,2455,954],{"href":953},[200,2457,929],{"href":957},[264,2459,961],{"id":960},[209,2461,2462,2467,2472,2477,2481],{},[212,2463,2464],{},[200,2465,2466],{"href":1763},"What is loop engineering",[212,2468,2469],{},[200,2470,2471],{"href":424},"Six things that start a loop",[212,2473,2474],{},[200,2475,2476],{"href":592},"Loop vs workflow vs agent",[212,2478,2479],{},[200,2480,983],{"href":252},[212,2482,2483],{},[200,2484,2485],{"href":457},"What is write-back governance",[264,2487,992],{"id":991},[209,2489,2490,2494,2498,2502,2506,2510,2514,2518,2522,2526,2530],{},[212,2491,2492],{},[200,2493,999],{"href":202},[212,2495,2496],{},[200,2497,1004],{"href":321},[212,2499,2500],{},[200,2501,1009],{"href":397},[212,2503,2504],{},[200,2505,1014],{"href":538},[212,2507,2508],{},[200,2509,546],{"href":545},[212,2511,2512],{},[200,2513,1023],{"href":531},[212,2515,2516],{},[200,2517,1028],{"href":725},[212,2519,2520],{},[200,2521,734],{"href":733},[212,2523,2524],{},[200,2525,1037],{"href":814},[212,2527,2528],{},[200,2529,823],{"href":822},[212,2531,2532],{},[200,2533,827],{"href":826},[1047,2535,1049],{},{"title":169,"searchDepth":170,"depth":170,"links":2537},[2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551],{"id":1770,"depth":170,"text":1771},{"id":406,"depth":170,"text":407},{"id":1934,"depth":170,"text":1935},{"id":1980,"depth":170,"text":1981},{"id":2022,"depth":170,"text":2023},{"id":470,"depth":170,"text":471},{"id":2131,"depth":170,"text":2132},{"id":2206,"depth":170,"text":2207},{"id":2254,"depth":170,"text":2255},{"id":741,"depth":170,"text":742},{"id":845,"depth":170,"text":846},{"id":915,"depth":170,"text":916},{"id":960,"depth":170,"text":961},{"id":991,"depth":170,"text":992},"Nimbus Loop","A Nimbus Loop is a standing order on a workstream: a trigger, a compiled recipe, and a run page, without turning the job into a chat ritual.",{"eyebrow":1068,"title":2555},"Standing orders, not chat",[2557,2560,2563,2566],{"question":2558,"answer":2559},"Is a Nimbus Loop the same as an eval loop?","No. An eval loop grades a run after it happens — tests, schemas, read-backs, signer checks. A standing-order loop is the job that admits the run when a trigger fires and then executes a compiled recipe. You need the sensor when you write to a live system or when a model step must be independently verified. You need the standing order when the same job should exist before anyone types. Refuse to treat a passing score as proof that Monday's job started, or a schedule as proof that the output was correct. See eval loops for enterprise agent harnesses.",{"question":2561,"answer":2562},"Do I start a Nimbus Loop from chat?","No. You start from a form with known fields — schedule, sources, outputs, roster — on a workstream. Chat is the right surface for novel work; a standing order is for work you have already compiled. If the only way to start the job is to re-describe it in natural language, you do not have a loop yet. Use chat to discover the path once. Then write the path as steps, attach a trigger, and stop asking the model to remember. Refuse a product that treats an open thread as the compiler for recurring operations.",{"question":2564,"answer":2565},"Can a Nimbus Loop write to live systems?","It can, when the recipe includes an action class and a named signer on the workstream. The default posture is outputs first: a table, a list, a draft that humans can diff against last month. Writes follow the same governance as any other proposed change — quoted payload, named identity, fail-closed if nobody signed. Use actions only after the compiled path matches the manual baseline. Refuse bulk writes in week one, and refuse a schedule that becomes a write tool merely because the clock fired. See what is write-back governance.",{"question":2567,"answer":2568},"What happens when the path is unknown?","The standing order skips with a reason and notifies the roster. A person decides next — or, later, an explicit agentic workflow on that exception class only. Guessing is how operational debt compounds overnight: ambiguous input, silent default, wrong row updated, inbox quiet until finance opens the file. Use skips as first-class outcomes, not embarrassments. Review skip rates on a cadence; a rising count means the recipe or the world changed. Refuse silent best-effort fills inside the compiled path. See a loop is not an agent.","\u002Fblog\u002Fwhat-is-a-nimbus-loop",{"title":968,"description":2553},"blog\u002Fwhat-is-a-nimbus-loop",[1086,1082,954,1088,1087],"HnNSbW3Nxyji98JxL-A_4gMAW-71quaDfFrA9rlpFfo",{"enabled":163,"message":2575,"linkLabel":79,"linkHref":80,"id":2576,"title":2577,"archived":163,"authors":164,"badge":164,"body":2578,"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":2582,"relatedHeading":164,"seo":2583,"series":164,"sitemap":163,"status":164,"stem":2584,"subhead":164,"tags":164,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":2585},"We're hiring! Join the team building the Sentient Enterprise.","content\u002Fshared\u002Fhiring.md","Hiring banner",{"type":166,"value":2579,"toc":2580},[],{"title":169,"searchDepth":170,"depth":170,"links":2581},[],"\u002Fshared\u002Fhiring",{"title":2577,"description":169},"shared\u002Fhiring","1zs3boivKda1e-b-hAyuNcmZSKjZUAXmecnwHVgcHzk",{"fold":2587,"id":2591,"title":2592,"archived":163,"authors":164,"badge":164,"body":2593,"date":164,"definedTerm":164,"department":164,"description":169,"extension":172,"eyebrow":164,"faqHeader":164,"faqs":164,"footerBand":2597,"headline":164,"image":164,"industry":164,"jobType":164,"listed":131,"location":164,"navigation":131,"openRoles":164,"pageLayout":164,"path":2601,"relatedHeading":164,"seo":2602,"series":164,"sitemap":163,"status":164,"stem":2603,"subhead":164,"tags":164,"video":164,"whyJoin":164,"workplaceType":164,"__hash__":2604},{"headline":2588,"description":2589,"primaryLabel":8,"primaryTo":2590,"secondaryLabel":1106,"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":2594,"toc":2595},[],{"title":169,"searchDepth":170,"depth":170,"links":2596},[],{"headline":2598,"description":2599,"primaryLabel":8,"primaryTo":2590,"secondaryLabel":2600,"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":2592,"description":169},"shared\u002Fcta","eYqahyaPnbp8GKrWpoORbZdtmkWmgHr5F61ZHOnb8sY",1792999485432]