1:"$Sreact.fragment" 2:I[22016,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/06_fwbpl-tgls.js"],""] 3:I[62474,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ThemeToggle"] e:I[68027,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1] :HL["/_next/static/chunks/15m5f55k..iay.css","style"] :HL["/_next/static/media/0c89a48fa5027cee-s.p.0rd3rjvnnhw7n.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] 0:{"P":null,"c":["","insights","contract-first-multi-agent-workflows"],"q":"","i":false,"f":[[["",{"children":["insights",{"children":["contract-first-multi-agent-workflows",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/15m5f55k..iay.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/02ti70zu7rea_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"inter_2fe1ab3d-module__-T-KAq__variable space_grotesk_6ca79492-module__d8ieqW__variable","data-theme":"dark","suppressHydrationWarning":true,"children":["$","body",null,{"className":"inter_2fe1ab3d-module__-T-KAq__className","children":["$","div",null,{"className":"theme-shell theme-transition min-h-screen flex flex-col","children":[["$","a",null,{"href":"#content","className":"skip-link focus-visible:opacity-100","children":"Skip to content"}],["$","header",null,{"className":"sticky top-0 z-40 border-b theme-surface backdrop-blur supports-[backdrop-filter]:bg-[color:color-mix(in_srgb,var(--bg-secondary)_55%,transparent)]","children":["$","div",null,{"className":"mx-auto max-w-6xl px-4","children":["$","div",null,{"className":"flex items-center justify-between py-4","children":[["$","div",null,{"className":"flex items-center gap-3","children":["$","$L2",null,{"href":"/","className":"text-sm font-semibold tracking-wide theme-text-primary font-[var(--font-heading)]","aria-label":"Jomiko homepage","children":"Mike @ Jomiko Ltd"}]}],["$","div",null,{"className":"hidden md:flex md:items-center md:gap-4","children":["$","nav",null,{"className":"md:flex md:items-center md:gap-6","aria-label":"Primary","children":[[["$","$L2","/services",{"href":"/services","className":"text-sm font-medium theme-text-secondary underline-slide hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 theme-ring-offset rounded px-1 py-0.5 transition","children":"Services"}],["$","$L2","/insights",{"href":"/insights","className":"text-sm font-medium theme-text-secondary underline-slide hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 theme-ring-offset rounded px-1 py-0.5 transition","children":"Insights"}],["$","$L2","/about",{"href":"/about","className":"text-sm font-medium theme-text-secondary underline-slide hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 theme-ring-offset rounded px-1 py-0.5 transition","children":"About"}]],["$","$L3",null,{}],["$","div",null,{"children":["$","$L2",null,{"href":"/contact","className":"inline-flex items-center justify-center rounded-full px-5 py-2.5 text-sm font-semibold transition-all duration-[250ms] ease-in-out hover:scale-[1.01] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 theme-ring-offset bg-[var(--accent)] text-[var(--bg-primary)] hover:bg-[var(--accent-soft)] hover:text-[var(--text-primary)] active:bg-[var(--accent-soft)] ","children":"Book a Strategy Call"}]}]]}]}],["$","div",null,{"className":"md:hidden","children":["$","nav",null,{"className":"flex flex-col items-end gap-2","aria-label":"Primary mobile","children":[[["$","$L2","/services",{"href":"/services","className":"text-sm font-medium theme-text-secondary underline-slide hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 theme-ring-offset rounded px-1 py-0.5 transition","children":"Services"}],["$","$L2","/insights",{"href":"/insights","className":"text-sm font-medium theme-text-secondary underline-slide hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 theme-ring-offset rounded px-1 py-0.5 transition","children":"Insights"}],"$L4"],"$L5","$L6"]}]}]]}]}]}],"$L7","$L8"]}]}]}]]}],{"children":["$L9",{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,"$@c"]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"lfEugLFFjbfrSWt8vjHCz"} 10:I[39756,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] 11:I[37457,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"] 12:I[44223,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/06_fwbpl-tgls.js"],"FadeIn"] 1c:I[97367,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"] 1e:I[97367,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"] 1f:"$Sreact.suspense" 4:["$","$L2","/about",{"href":"/about","className":"text-sm font-medium theme-text-secondary underline-slide hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 theme-ring-offset rounded px-1 py-0.5 transition","children":"About"}] 5:["$","div",null,{"className":"pt-1","children":["$","$L3",null,{}]}] 6:["$","div",null,{"className":"pt-1","children":["$","$L2",null,{"href":"/contact","className":"inline-flex items-center justify-center rounded-full px-5 py-2.5 text-sm font-semibold transition-all duration-[250ms] ease-in-out hover:scale-[1.01] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 theme-ring-offset bg-[var(--accent)] text-[var(--bg-primary)] hover:bg-[var(--accent-soft)] hover:text-[var(--text-primary)] active:bg-[var(--accent-soft)] ","children":"Book a Strategy Call"}]}] 7:["$","main",null,{"id":"content","className":"flex-1","children":["$","$L10",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L11",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}] 8:["$","footer",null,{"className":"border-t theme-surface backdrop-blur depth-section","children":["$","div",null,{"className":"mx-auto max-w-6xl px-4 py-10","children":["$","p",null,{"className":"text-sm theme-text-secondary","children":["© ",2026," Jomiko Ltd. All rights reserved."]}]}]}] 9:["$","$1","c",{"children":[null,["$","$L10",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L11",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] a:["$","$1","c",{"children":[null,["$","$L10",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L11",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] b:["$","$1","c",{"children":[["$","$L12",null,{"children":["$","section",null,{"id":"$undefined","className":"relative overflow-hidden depth-section py-12 sm:py-16 section-insights-bg ","children":["$","div",null,{"className":"mx-auto max-w-6xl px-4","children":["$","div",null,{"className":"section-panel section-foreground-gradient","children":[["$","header",null,{"children":[["$","div",null,{"className":"max-w-3xl","children":[["$","p",null,{"className":"text-sm font-semibold tracking-wide theme-text-accent","children":"INSIGHTS"}],["$","h2",null,{"className":"mt-2 text-2xl font-semibold tracking-tight theme-text-primary sm:text-3xl font-[var(--font-heading)]","children":"The Contract-First Approach to Multi-Agent Workflows"}]]}],["$","p",null,{"className":"mt-3 text-base leading-7 text-pretty theme-text-secondary","children":"Defining boundaries, state, and acceptance criteria so multi-agent systems behave like engineered software."}]]}],["$","div",null,{"className":"mt-8","children":["$","div",null,{"className":"mt-2 max-w-3xl space-y-10","children":[["$","p",null,{"className":"text-base leading-7 theme-text-secondary","children":"Multi-agent demos look impressive until nothing is written down. Without contracts, you cannot test, audit, or blame the right component when behaviour drifts. Through Jomiko, I treat agent workflows like distributed systems: explicit interfaces, versioned state, and criteria that decide pass or fail."}],[["$","section","0",{"className":"space-y-4","children":[["$","h2",null,{"className":"text-lg font-semibold tracking-tight theme-text-primary font-[var(--font-heading)]","children":"What a contract must specify"}],[["$","p","0",{"className":"text-base leading-7 theme-text-secondary","children":"Each agent needs inputs and outputs with schemas—not prose. Tool calls need timeouts, idempotency expectations, and allow-listed endpoints. Shared state needs a single writer or a conflict policy. If two agents can both mutate the same structure, you have a race, not a design."}],["$","p","1",{"className":"text-base leading-7 theme-text-secondary","children":"Contracts also cover failure: what happens when a tool returns 429, when retrieval is empty, or when a human rejects a step. Those paths belong in the workflow definition, not in ad-hoc exception handlers. Version contracts alongside prompts and models so a rollback is a configuration change, not archaeology."}]]]}],["$","section","1",{"className":"space-y-4","children":[["$","h2",null,{"className":"text-lg font-semibold tracking-tight theme-text-primary font-[var(--font-heading)]","children":"State machines over improvisation"}],[["$","p","0",{"className":"text-base leading-7 theme-text-secondary","children":"I model workflows as states and transitions with guards. An agent “step” maps to a transition with preconditions: only run when retrieval confidence exceeds a threshold, or when a prior approval record exists. That makes traces replayable and bugs localisable."}],["$","p","1",{"className":"text-base leading-7 theme-text-secondary","children":"Avoid unconstrained “planner” loops that rewrite the graph at runtime unless you persist the rationale and cap iteration depth. Freedom inside a bounded step is fine; freedom to redefine the journey is how you lose auditability."}]]]}],["$","section","2",{"className":"space-y-4","children":[["$","h2",null,{"className":"text-lg font-semibold tracking-tight theme-text-primary font-[var(--font-heading)]","children":"Acceptance criteria per agent"}],[["$","p","0",{"className":"text-base leading-7 theme-text-secondary","children":"Every agent role gets measurable checks: format validators, golden-output comparisons, or human review queues for high-risk actions. The system is “done” when those checks pass on a regression set—not when the demo looks good on Tuesday."}],"$L13"]]}],"$L14"],["$L15"],"$L16","$L17","$L18"]}]}]]}]}]}]}],["$L19"],"$L1a"]}] 1b:[] c:"$W1b" d:["$","$1","h",{"children":[null,["$","$L1c",null,{"children":"$L1d"}],["$","div",null,{"hidden":true,"children":["$","$L1e",null,{"children":["$","$1f",null,{"name":"Next.Metadata","children":"$L20"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] f:["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/15m5f55k..iay.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] 21:I[97367,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"] 13:["$","p","1",{"className":"text-base leading-7 theme-text-secondary","children":"Criteria should attach to releases: which harness version, which dataset snapshot, which policy pack. That is how you answer “what changed?” when behaviour shifts in production."}] 14:["$","section","3",{"className":"space-y-4","children":[["$","h2",null,{"className":"text-lg font-semibold tracking-tight theme-text-primary font-[var(--font-heading)]","children":"Handover between agents"}],[["$","p","0",{"className":"text-base leading-7 theme-text-secondary","children":"Define handover payloads explicitly—what the next agent may assume, what it must re-validate, and what must never cross the boundary (e.g. raw PII). Implicit context passing through unstructured blobs is where subtle bugs and leakage creep in."}]]]}] 15:["$","p","0",{"className":"text-base leading-7 theme-text-secondary","children":"Contract-first design is how you turn agents from a script into a system. If you want help defining contracts and state for your workflow, I can work through it with you as an architecture engagement."}] 16:["$","p",null,{"className":"text-base leading-7 theme-text-secondary","children":["If you want help applying this to your architecture,"," ",["$","$L2",null,{"href":"/contact","className":"font-semibold underline-slide theme-text-primary","children":"book a strategy call"}]," ","or an architecture review."]}] 17:["$","p",null,{"className":"text-xs theme-text-secondary","children":["Tags:"," ",["$","span",null,{"className":"text-[var(--text-secondary)]","children":"agents · contracts · workflows · architecture"}]]}] 18:["$","p",null,{"children":["$","$L2",null,{"href":"/insights","className":"text-sm font-semibold underline-slide theme-text-secondary hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 theme-ring-offset rounded px-1 py-0.5","children":"← All insights"}]}] 19:["$","script","script-0",{"src":"/_next/static/chunks/06_fwbpl-tgls.js","async":true,"nonce":"$undefined"}] 1a:["$","$L21",null,{"children":["$","$1f",null,{"name":"Next.MetadataOutlet","children":"$@22"}]}] 1d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] 23:I[27201,["/_next/static/chunks/02ti70zu7rea_.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"] 20:[["$","title","0",{"children":"The Contract-First Approach to Multi-Agent Workflows | Mike @ Jomiko Ltd"}],["$","meta","1",{"name":"description","content":"Tool boundaries, state transitions, and acceptance criteria for predictable multi-agent workflows—contract-first architecture for agent systems."}],["$","meta","2",{"property":"og:title","content":"The Contract-First Approach to Multi-Agent Workflows | Mike @ Jomiko Ltd"}],["$","meta","3",{"property":"og:description","content":"Tool boundaries, state transitions, and acceptance criteria for predictable multi-agent workflows—contract-first architecture for agent systems."}],["$","meta","4",{"property":"og:url","content":"https://jomiko.co.uk"}],["$","meta","5",{"property":"og:type","content":"website"}],["$","meta","6",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","7",{"name":"twitter:title","content":"The Contract-First Approach to Multi-Agent Workflows | Mike @ Jomiko Ltd"}],["$","meta","8",{"name":"twitter:description","content":"Tool boundaries, state transitions, and acceptance criteria for predictable multi-agent workflows—contract-first architecture for agent systems."}],["$","link","9",{"rel":"icon","href":"/favicon.ico?favicon.14ijnkx_7krtx.ico","sizes":"256x256","type":"image/x-icon"}],["$","link","10",{"rel":"icon","href":"/icon.png"}],["$","link","11",{"rel":"apple-touch-icon","href":"/apple-icon.png"}],["$","$L23","12",{}]] 22:null