1:"$Sreact.fragment" 2:I[39756,["/_next/static/chunks/3fntmmi971322.js"],"default"] 3:I[8821,["/_next/static/chunks/3fntmmi971322.js","/_next/static/chunks/22aga_6h1t_-r.js"],"default"] 4:I[37457,["/_next/static/chunks/3fntmmi971322.js"],"default"] 5:I[22016,["/_next/static/chunks/3fntmmi971322.js","/_next/static/chunks/0ahwd129-7-30.js"],""] 7:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"OutletBoundary"] 8:"$Sreact.suspense" b:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"ViewportBoundary"] d:I[97367,["/_next/static/chunks/3fntmmi971322.js"],"MetadataBoundary"] f:I[68027,["/_next/static/chunks/3fntmmi971322.js"],"default",1] :HL["/_next/static/chunks/0p5_b9mq-qlz-.css","style"] :HL["/_next/static/media/017d9bea37084d9b-s.p.41rroleoq1br7.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2","font",{"crossOrigin":"","type":"font/woff2"}] :HL["/_next/static/chunks/17s1t3rwlqr6e.css","style"] a:X 0:{"P":null,"c":["","docs","open-source","releases","2.5.0"],"q":"","i":false,"f":[[["",{"children":["docs",{"children":["open-source",{"children":[["path","releases/2.5.0","c",[]],{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0p5_b9mq-qlz-.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/3fntmmi971322.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","data-theme":"dark","style":{"colorScheme":"dark"},"children":["$","body",null,{"className":"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$3","errorStyles":[],"errorScripts":[["$","script","script-0",{"src":"/_next/static/chunks/22aga_6h1t_-r.js","async":true,"nonce":"$undefined"}]],"template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","div",null,{"className":"flex min-h-screen flex-col items-center justify-center bg-stone-950 text-stone-100","children":[["$","h1",null,{"className":"text-6xl font-bold tracking-tight text-stone-400","children":"404"}],["$","p",null,{"className":"mt-4 text-lg text-stone-500","children":"Page not found"}],["$","$L5",null,{"href":"/","className":"mt-8 rounded-md bg-stone-800 px-5 py-2.5 text-sm font-medium text-stone-200 transition hover:bg-stone-700","children":"Back to home"}]]}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$L6",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/17s1t3rwlqr6e.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0ahwd129-7-30.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,null]},null,false,"$a"]},null,false,"$a"]},null,false,"$a"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0p5_b9mq-qlz-.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"B8hBXTSnfA3UAgbX2EKsx"} a:C c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] 10:I[29306,["/_next/static/chunks/3fntmmi971322.js","/_next/static/chunks/0ahwd129-7-30.js"],"ProductMenu"] 11:I[5014,["/_next/static/chunks/3fntmmi971322.js","/_next/static/chunks/0ahwd129-7-30.js"],"default"] 12:I[33964,["/_next/static/chunks/3fntmmi971322.js","/_next/static/chunks/0ahwd129-7-30.js"],"PublicMobileNav"] 15:I[27201,["/_next/static/chunks/3fntmmi971322.js"],"IconMark"] 6:["$","div",null,{"className":"bricolage_grotesque_bcc75999-module__ZKECFW__variable relative min-h-screen overflow-x-clip bg-[#07090E] text-[#EAEDF2]","children":[["$","header",null,{"className":"sticky top-0 z-40 border-b border-white/[0.07] bg-[#07090E]/85 backdrop-blur-md","children":["$","div",null,{"className":"mx-auto flex max-w-7xl items-center justify-between gap-4 px-4 py-3.5 sm:px-6","children":[["$","div",null,{"className":"flex min-w-0 items-center gap-8","children":[["$","$L5",null,{"href":"/","className":"font-display inline-flex items-baseline gap-2 text-lg font-bold tracking-tight text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-emerald-400","children":[["$","span",null,{"className":"h-2 w-2 translate-y-[-1px] bg-emerald-400","aria-hidden":"true"}],"ShakerScan"]}],["$","nav",null,{"className":"hidden items-center gap-6 text-sm text-[#98A2B3] lg:flex","aria-label":"Primary","children":[["$","$L10",null,{"items":[{"label":"Scan","href":"/product/scan","description":"Repeatable DAST for web apps and APIs","badge":"$undefined"},{"label":"Hunt","href":"/product/hunt","description":"Adaptive investigation with your coding agent","badge":"$undefined"},{"label":"AI Security","href":"/product/ai-security","description":"Test chat, RAG, agent, and MCP systems","badge":"Preview"},{"label":"Model Intake","href":"/product/model-intake","description":"Check model artifacts before deployment","badge":"Preview"},{"label":"Attack Surface","href":"/product/attack-surface","description":"Endpoint inventory, subdomains, CT monitoring","badge":"$undefined"},{"label":"Connected Devices","href":"/product/connected-devices","description":"TVs, cameras, printers, routers, appliances","badge":"$undefined"}]}],[["$","a","/check/",{"href":"/check/","className":"transition-colors hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-emerald-400","children":"Free check"}],["$","$L5","/docs",{"href":"/docs","className":"transition-colors hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-emerald-400","children":"Docs"}],["$","$L5","/enterprise",{"href":"/enterprise","className":"transition-colors hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-emerald-400 font-semibold text-[#EAEDF2]","children":"Enterprise"}]],["$","a",null,{"href":"https://github.com/andriyze/shakerscan","target":"_blank","rel":"noreferrer","className":"inline-flex items-center gap-1.5 transition-colors hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-emerald-400","children":[["$","$L11",null,{"ref":"$undefined","icon":{"name":"git-fork","size":24,"node":[["circle",{"cx":"12","cy":"18","r":"3","key":"1mpf1b"}],["circle",{"cx":"6","cy":"6","r":"3","key":"1lh9wr"}],["circle",{"cx":"18","cy":"6","r":"3","key":"1h7g24"}],["path",{"d":"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9","key":"1uq4wg"}],["path",{"d":"M12 12v3","key":"158kv8"}]]},"className":"h-3.5 w-3.5","aria-hidden":"true"}],"GitHub"]}]]}]]}],["$","div",null,{"className":"flex items-center gap-2 sm:gap-4","children":[["$","$L12",null,{"items":[{"label":"Scan","href":"/product/scan"},{"label":"Hunt","href":"/product/hunt"},{"label":"AI Security","href":"/product/ai-security"},{"label":"Model Intake","href":"/product/model-intake"},{"label":"Attack Surface","href":"/product/attack-surface"},{"label":"Connected Devices","href":"/product/connected-devices"},{"label":"Free check","href":"/check/","isAnchor":true,"emphasis":false},{"label":"Docs","href":"/docs","isAnchor":false,"emphasis":false},{"label":"Enterprise","href":"/enterprise","isAnchor":false,"emphasis":true},{"label":"GitHub","href":"https://github.com/andriyze/shakerscan"},{"label":"Open Source","href":"/open-source"}]}],["$","$L5",null,{"href":"/open-source#install","className":"rounded-lg bg-emerald-400 px-3.5 py-2 text-sm font-semibold text-emerald-950 transition-colors hover:bg-emerald-300 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-emerald-400","children":"Install ShakerScan"}]]}]]}]}],"$L13","$L14"]}] 9:null e:[["$","title","0",{"children":"ShakerScan 2.5.0 — ShakerScan Docs"}],["$","meta","1",{"name":"description","content":"Hunt stops refusing work the operator already authorized, a connected device is examined like any other target, and the web UI works at every address that…"}],["$","meta","2",{"name":"robots","content":"index, follow"}],["$","link","3",{"rel":"canonical","href":"https://shakerscan.com/docs/open-source/releases/2.5.0"}],["$","meta","4",{"property":"og:title","content":"ShakerScan 2.5.0 — ShakerScan Docs"}],["$","meta","5",{"property":"og:description","content":"Hunt stops refusing work the operator already authorized, a connected device is examined like any other target, and the web UI works at every address that…"}],["$","meta","6",{"property":"og:url","content":"https://shakerscan.com/docs/open-source/releases/2.5.0"}],["$","meta","7",{"property":"og:site_name","content":"ShakerScan"}],["$","meta","8",{"property":"og:type","content":"article"}],["$","meta","9",{"name":"twitter:card","content":"summary"}],["$","meta","10",{"name":"twitter:title","content":"ShakerScan 2.5.0 — ShakerScan Docs"}],["$","meta","11",{"name":"twitter:description","content":"Hunt stops refusing work the operator already authorized, a connected device is examined like any other target, and the web UI works at every address that…"}],["$","link","12",{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml"}],["$","link","13",{"rel":"apple-touch-icon","href":"/apple-icon.svg","type":"image/svg+xml"}],["$","$L15","14",{}]] 13:["$","div",null,{"className":"mx-auto max-w-7xl px-4 py-8 sm:px-6 sm:py-12 lg:grid lg:grid-cols-[230px_minmax(0,1fr)] lg:gap-10 xl:grid-cols-[230px_minmax(0,1fr)_200px]","children":[["$","aside",null,{"className":"lg:sticky lg:top-20 lg:self-start","children":[["$","details",null,{"className":"rounded-lg border border-white/10 bg-[#0C1118] lg:hidden","children":[["$","summary",null,{"className":"cursor-pointer px-4 py-3 text-sm font-medium text-white","children":"Documentation menu"}],["$","div",null,{"className":"border-t border-white/[0.07] px-4 py-4","children":["$","nav",null,{"aria-label":"Open-source documentation","className":"space-y-6","children":[["$","$L5",null,{"href":"/docs/open-source","className":"block text-sm font-semibold text-white hover:text-emerald-200","children":"Documentation home"}],[["$","div","Getting started",{"children":[["$","h2",null,{"className":"font-mono text-[10px] tracking-[0.2em] text-[#5F6B7A] uppercase","children":"Getting started"}],["$","ul",null,{"className":"mt-2.5 space-y-1","children":[["$","li","README.md",{"children":["$","$L5",null,{"href":"/docs/open-source/readme","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"README: install and first scan"}]}],["$","li","WALKTHROUGH.md",{"children":["$","$L5",null,{"href":"/docs/open-source/walkthrough","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"First-run walkthrough"}]}],["$","li","docs/upgrade-and-rollback.md",{"children":["$","$L5",null,{"href":"/docs/open-source/upgrade-and-rollback","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Upgrade and rollback"}]}],["$","li","docs/client.md",{"children":["$","$L5",null,{"href":"/docs/open-source/client","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Client, CLI and public checks"}]}],["$","li","skills/README.md",{"children":["$","$L5",null,{"href":"/docs/open-source/skills","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Agent skills and setup"}]}]]}]]}],["$","div","Workflows",{"children":[["$","h2",null,{"className":"font-mono text-[10px] tracking-[0.2em] text-[#5F6B7A] uppercase","children":"Workflows"}],["$","ul",null,{"className":"mt-2.5 space-y-1","children":[["$","li","docs/product-model.md",{"children":["$","$L5",null,{"href":"/docs/open-source/product-model","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Product model and vocabulary"}]}],["$","li","docs/hunt-architecture.md",{"children":["$","$L5",null,{"href":"/docs/open-source/hunt-architecture","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Hunt architecture"}]}],["$","li","docs/hunt-authorization-workflow.md",{"children":["$","$L5",null,{"href":"/docs/open-source/hunt-authorization-workflow","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Hunt authorization workflow"}]}],["$","li","docs/hunt-authorization-behavior.md",{"children":["$","$L5",null,{"href":"/docs/open-source/hunt-authorization-behavior","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Hunt authorization behavior"}]}],"$L16","$L17","$L18"]}]]}],"$L19","$L1a"],"$L1b"]}]}]]}],"$L1c"]}],"$L1d","$L1e"]}] 14:["$","footer",null,{"className":"border-t border-white/[0.07]","children":["$","div",null,{"className":"mx-auto max-w-7xl px-4 py-12 sm:px-6 sm:py-16","children":[["$","div",null,{"className":"grid gap-10 sm:grid-cols-2 lg:grid-cols-[1.4fr_1fr_1fr_1fr]","children":[["$","div",null,{"children":[["$","$L5",null,{"href":"/","className":"font-display inline-flex items-baseline gap-2 text-lg font-bold tracking-tight text-white","children":[["$","span",null,{"className":"h-2 w-2 translate-y-[-1px] bg-emerald-400","aria-hidden":"true"}],"ShakerScan"]}],["$","p",null,{"className":"mt-3 max-w-xs text-sm leading-6 text-[#7C8798]","children":"Open-source security testing platform for web applications, APIs, AI systems, and network-connected devices. Self-hosted in Docker."}],["$","p",null,{"className":"mt-4 text-xs leading-5 text-[#5F6B7A]","children":"Only test systems you own or are explicitly authorized to assess."}]]}],[["$","div","Product",{"children":[["$","h4",null,{"className":"font-mono text-[11px] tracking-[0.22em] text-[#5F6B7A] uppercase","children":"Product"}],["$","ul",null,{"className":"mt-4 space-y-2.5","children":[["$","li","/product/scan",{"children":["$","$L5",null,{"href":"/product/scan","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Scan"}]}],["$","li","/product/hunt",{"children":["$","$L5",null,{"href":"/product/hunt","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Hunt"}]}],["$","li","/product/ai-security",{"children":["$","$L5",null,{"href":"/product/ai-security","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"AI Security"}]}],["$","li","/product/model-intake",{"children":["$","$L5",null,{"href":"/product/model-intake","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Model Intake"}]}],["$","li","/product/attack-surface",{"children":["$","$L5",null,{"href":"/product/attack-surface","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Attack Surface"}]}],["$","li","/product/connected-devices",{"children":["$","$L5",null,{"href":"/product/connected-devices","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Connected Devices"}]}]]}]]}],["$","div","Resources",{"children":[["$","h4",null,{"className":"font-mono text-[11px] tracking-[0.22em] text-[#5F6B7A] uppercase","children":"Resources"}],["$","ul",null,{"className":"mt-4 space-y-2.5","children":[["$","li","/open-source",{"children":["$","$L5",null,{"href":"/open-source","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Open Source"}]}],["$","li","/check/",{"children":["$","a",null,{"href":"/check/","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Free posture check"}]}],["$","li","/docs",{"children":["$","$L5",null,{"href":"/docs","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Documentation"}]}],["$","li","/research",{"children":["$","$L5",null,{"href":"/research","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Research"}]}],["$","li","/about",{"children":["$","$L5",null,{"href":"/about","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"About"}]}]]}]]}],["$","div","Trust",{"children":[["$","h4",null,{"className":"font-mono text-[11px] tracking-[0.22em] text-[#5F6B7A] uppercase","children":"Trust"}],["$","ul",null,{"className":"mt-4 space-y-2.5","children":[["$","li","/security",{"children":["$","$L5",null,{"href":"/security","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Security"}]}],"$L1f","$L20","$L21"]}]]}]]]}],"$L22"]}]}] 16:["$","li","docs/AI_TEST_WORKFLOWS.md",{"children":["$","$L5",null,{"href":"/docs/open-source/AI_TEST_WORKFLOWS","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"AI test workflows"}]}] 17:["$","li","docs/connected-device-security.md",{"children":["$","$L5",null,{"href":"/docs/open-source/connected-device-security","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Connected-device security"}]}] 18:["$","li","docs/model-intake-security-review-roadmap.md",{"children":["$","$L5",null,{"href":"/docs/open-source/model-intake-security-review-roadmap","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Model Intake boundary"}]}] 19:["$","div","Architecture and operations",{"children":[["$","h2",null,{"className":"font-mono text-[10px] tracking-[0.2em] text-[#5F6B7A] uppercase","children":"Architecture and operations"}],["$","ul",null,{"className":"mt-2.5 space-y-1","children":[["$","li","docs/dast-asm-architecture.md",{"children":["$","$L5",null,{"href":"/docs/open-source/dast-asm-architecture","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"DAST execution and Continuous ASM"}]}],["$","li","docs/multi-node-guide.md",{"children":["$","$L5",null,{"href":"/docs/open-source/multi-node-guide","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Multi-node Fleet guide"}]}],["$","li","docs/multi-node-architecture.md",{"children":["$","$L5",null,{"href":"/docs/open-source/multi-node-architecture","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Multi-node architecture"}]}],["$","li","docs/mcp.md",{"children":["$","$L5",null,{"href":"/docs/open-source/mcp","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"MCP adapter"}]}],["$","li","docs/owasp-coverage-matrix.md",{"children":["$","$L5",null,{"href":"/docs/open-source/owasp-coverage-matrix","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"OWASP coverage matrix"}]}],["$","li","docs/functionality-reference.md",{"children":["$","$L5",null,{"href":"/docs/open-source/functionality-reference","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Functionality reference"}]}]]}]]}] 1a:["$","div","Releases and process",{"children":[["$","h2",null,{"className":"font-mono text-[10px] tracking-[0.2em] text-[#5F6B7A] uppercase","children":"Releases and process"}],["$","ul",null,{"className":"mt-2.5 space-y-1","children":[["$","li","docs/release-process.md",{"children":["$","$L5",null,{"href":"/docs/open-source/release-process","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Release process"}]}],["$","li","docs/sbom.md",{"children":["$","$L5",null,{"href":"/docs/open-source/sbom","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Release SBOMs"}]}],["$","li","docs/releases/README.md",{"children":["$","$L5",null,{"href":"/docs/open-source/releases/README","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Release notes index"}]}],["$","li","RELEASES.md",{"children":["$","$L5",null,{"href":"/docs/open-source/release-mapping","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Release mapping"}]}],["$","li","benchmarks/README.md",{"children":["$","$L5",null,{"href":"/docs/open-source/benchmarks","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Benchmark fixtures"}]}],["$","li","AGENTS.md",{"children":["$","$L5",null,{"href":"/docs/open-source/agents","aria-current":"$undefined","className":"block rounded-md px-2 py-1.5 text-sm leading-5 transition-colors text-[#98A2B3] hover:bg-white/[0.04] hover:text-white","children":"Agent operating policy"}]}]]}]]}] 1b:["$","div",null,{"className":"border-t border-white/[0.07] pt-4 text-xs leading-5 text-[#5F6B7A]","children":["Rendered from"," ",["$","a",null,{"href":"https://github.com/andriyze/shakerscan/tree/v2.5.4/docs","target":"_blank","rel":"noreferrer","className":"inline-flex items-center gap-1 text-[#98A2B3] hover:text-white","children":["v2.5.4"," ",["$","$L11",null,{"ref":"$undefined","icon":{"name":"external-link","size":24,"node":[["path",{"d":"M15 3h6v6","key":"1q9fwt"}],["path",{"d":"M10 14 21 3","key":"gplh6r"}],["path",{"d":"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6","key":"a6xqqp"}]]},"className":"h-3 w-3","aria-hidden":"true"}]]}],", the current stable channel."]}] 1c:["$","div",null,{"className":"hidden max-h-[calc(100vh-6rem)] overflow-y-auto pr-2 lg:block","children":"$13:props:children:0:props:children:0:props:children:1:props:children"}] 1d:["$","main",null,{"className":"mt-8 min-w-0 lg:mt-0","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://shakerscan.com/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docs\",\"item\":\"https://shakerscan.com/docs\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Open Source\",\"item\":\"https://shakerscan.com/docs/open-source\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"ShakerScan 2.5.0\",\"item\":\"https://shakerscan.com/docs/open-source/releases/2.5.0\"}]}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"TechArticle\",\"headline\":\"ShakerScan 2.5.0\",\"description\":\"Hunt stops refusing work the operator already authorized, a connected device is examined like any other target, and the web UI works at every address that…\",\"url\":\"https://shakerscan.com/docs/open-source/releases/2.5.0\",\"version\":\"2.5.4\",\"inLanguage\":\"en\",\"author\":{\"@type\":\"Organization\",\"name\":\"ShakerScan\",\"url\":\"https://shakerscan.com\"},\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"ShakerScan\",\"url\":\"https://shakerscan.com\"}}"}}],["$","nav",null,{"className":"font-mono text-[11px] tracking-wide text-[#5F6B7A] uppercase","aria-label":"Breadcrumb","children":[["$","$L5",null,{"href":"/docs","className":"transition-colors hover:text-[#98A2B3]","children":"Docs"}],["$","span",null,{"className":"mx-2 text-white/20","children":"/"}],["$","$L5",null,{"href":"/docs/open-source","className":"transition-colors hover:text-[#98A2B3]","children":"Open Source"}],["$","span",null,{"className":"mx-2 text-white/20","children":"/"}],["$","span",null,{"className":"normal-case","children":"docs/releases/2.5.0.md"}]]}],["$","div",null,{"className":"mt-4 flex flex-wrap items-center gap-x-5 gap-y-2 border-b border-white/[0.07] pb-4 text-xs text-[#7C8798]","children":[["$","span",null,{"children":["Pinned to ",["$","span",null,{"className":"font-mono text-[#C6CDD8]","children":"v2.5.4"}]]}],["$","a",null,{"href":"https://github.com/andriyze/shakerscan/blob/v2.5.4/docs/releases/2.5.0.md","target":"_blank","rel":"noreferrer","className":"inline-flex items-center gap-1 text-[#98A2B3] hover:text-white","children":["View source on GitHub ",["$","$L11",null,{"ref":"$undefined","icon":"$1b:props:children:2:props:children:2:props:icon","className":"h-3 w-3","aria-hidden":"true"}]]}],["$","a",null,{"href":"https://github.com/andriyze/shakerscan/issues","target":"_blank","rel":"noreferrer","className":"inline-flex items-center gap-1 text-[#98A2B3] hover:text-white","children":["Report an issue ",["$","$L11",null,{"ref":"$undefined","icon":"$1b:props:children:2:props:children:2:props:icon","className":"h-3 w-3","aria-hidden":"true"}]]}]]}],["$","article",null,{"className":"mt-6","children":["$","div",null,{"className":"oss-markdown","children":[["$","h1","h1-0",{"id":"shakerscan-250","children":["$","a",null,{"href":"#shakerscan-250","className":"oss-heading-anchor","children":"ShakerScan 2.5.0"}]}],"\n",["$","p","p-0",{"children":"Hunt stops refusing work the operator already authorized, a connected device is examined like\nany other target, and the web UI works at every address that reaches the engine. Every change\nhere was found by driving the product from a second machine over a LAN, and each was verified\nlive on a clean source build before merging. Upgrade in place from 2.4.1. No change to the\ndeterministic proof boundary."}],"\n",["$","h2","h2-0",{"id":"changes","children":["$","a",null,{"href":"#changes","className":"oss-heading-anchor","children":"Changes"}]}],"\n",["$","h3","h3-0",{"id":"hunt-resolves-what-it-can-and-says-what-it-resolved-193","children":["$","a",null,{"href":"#hunt-resolves-what-it-can-and-says-what-it-resolved-193","className":"oss-heading-anchor","children":"Hunt resolves what it can, and says what it resolved (#193)"}]}],"\n",["$","ul","ul-0",{"children":["\n","$L23","\n","$L24","\n","$L25","\n","$L26","\n","$L27","\n","$L28","\n"]}],"\n","$L29","\n","$L2a","\n","$L2b","\n","$L2c","\n","$L2d","\n","$L2e"]}]}],"$L2f"]}] 1e:["$","aside",null,{"className":"hidden xl:sticky xl:top-20 xl:block xl:self-start","children":["$","nav",null,{"aria-label":"On this page","children":[["$","h2",null,{"className":"font-mono text-[10px] tracking-[0.2em] text-[#5F6B7A] uppercase","children":"On this page"}],["$","ul",null,{"className":"mt-2.5 max-h-[calc(100vh-8rem)] space-y-1 overflow-y-auto border-l border-white/[0.07] pl-3 text-xs leading-5","children":[["$","li","changes-2",{"children":["$","a",null,{"href":"#changes","className":"block text-[#98A2B3] hover:text-white ","children":"Changes"}]}],["$","li","hunt-resolves-what-it-can-and-says-what-it-resolved-193-3",{"children":["$","a",null,{"href":"#hunt-resolves-what-it-can-and-says-what-it-resolved-193","className":"block text-[#98A2B3] hover:text-white pl-3 text-[#7C8798]","children":"Hunt resolves what it can, and says what it resolved (#193)"}]}],["$","li","a-connected-device-is-authorized-and-examined-like-any-other-target-197-199-3",{"children":["$","a",null,{"href":"#a-connected-device-is-authorized-and-examined-like-any-other-target-197-199","className":"block text-[#98A2B3] hover:text-white pl-3 text-[#7C8798]","children":"A connected device is authorized and examined like any other target (#197, #199)"}]}],["$","li","the-web-ui-works-at-every-address-that-reaches-the-engine-195-198-199-3",{"children":["$","a",null,{"href":"#the-web-ui-works-at-every-address-that-reaches-the-engine-195-198-199","className":"block text-[#98A2B3] hover:text-white pl-3 text-[#7C8798]","children":"The web UI works at every address that reaches the engine (#195, #198, #199)"}]}],["$","li","operations-3",{"children":["$","a",null,{"href":"#operations","className":"block text-[#98A2B3] hover:text-white pl-3 text-[#7C8798]","children":"Operations"}]}]]}]]}]}] 1f:["$","li","/vulnerability-disclosure",{"children":["$","$L5",null,{"href":"/vulnerability-disclosure","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Vulnerability disclosure"}]}] 20:["$","li","/privacy",{"children":["$","$L5",null,{"href":"/privacy","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Privacy"}]}] 21:["$","li","/terms",{"children":["$","$L5",null,{"href":"/terms","className":"inline-flex items-center gap-1 text-sm text-[#98A2B3] transition-colors hover:text-white","children":"Terms"}]}] 22:["$","div",null,{"className":"mt-12 flex flex-col items-center justify-between gap-4 border-t border-white/[0.07] pt-6 sm:flex-row","children":[["$","span",null,{"className":"font-mono text-[11px] text-[#5F6B7A]","children":["© ",2026," ShakerScan. Source available under"," ",["$","a",null,{"href":"https://github.com/andriyze/shakerscan/blob/main/LICENSE","target":"_blank","rel":"noreferrer","className":"text-[#7C8798] underline decoration-white/20 underline-offset-2 transition-colors hover:text-white","children":"AGPL-3.0"}],"."]}],["$","div",null,{"className":"flex flex-wrap items-center justify-center gap-x-5 gap-y-2","children":[[["$","$L5","/enterprise",{"href":"/enterprise","className":"inline-flex items-center gap-1 font-mono text-[11px] text-[#7C8798] transition-colors hover:text-white","children":"Enterprise"}],["$","a","mailto:sales@shakerscan.com",{"href":"mailto:sales@shakerscan.com","target":"_blank","rel":"noreferrer","className":"inline-flex items-center gap-1 font-mono text-[11px] text-[#7C8798] transition-colors hover:text-white","children":["Contact",["$","$L11",null,{"ref":"$undefined","icon":"$1b:props:children:2:props:children:2:props:icon","className":"h-3 w-3","aria-hidden":"true"}]]}]],["$","a",null,{"href":"https://github.com/andriyze/shakerscan","target":"_blank","rel":"noreferrer","className":"inline-flex items-center gap-2 font-mono text-[11px] text-[#7C8798] transition-colors hover:text-white","children":[["$","$L11",null,{"ref":"$undefined","icon":"$6:props:children:0:props:children:props:children:0:props:children:1:props:children:2:props:children:0:props:icon","className":"h-3.5 w-3.5","aria-hidden":"true"}],"github.com/andriyze/shakerscan"]}]]}]]}] 23:["$","li","li-0",{"children":["Asking for state-changing HTTP, network discovery, out-of-band interactions, identity-header\nforgery or direct-origin requests now enables ",["$","code","code-0",{"children":"active_testing"}]," rather than refusing with a\n422 that asked the caller to restate a decision already in the same request."]}] 24:["$","li","li-1",{"children":"A budget dimension whose authority is off resolves to 0. It used to resolve to 0 silently\nwhen the field was omitted and hard-refuse when it was written down, so the same request had\ntwo outcomes depending on whether a number was explicit. Funding a dimension still never\ngrants its authority."}] 25:["$","li","li-2",{"children":[["$","code","code-0",{"children":"policy_adjustments"}]," on the Hunt reports every authority the server implied and every\ndimension it zeroed. Unauthorized privileged work is rejected, not silently stored or\nexecuted as passive."]}] 26:["$","li","li-3",{"children":[["$","code","code-0",{"children":"direct_origin_addresses"}]," follows the deployment's own target policy instead of a hardcoded\nprivate-range list, so the field is usable on a LAN install. Link-local, multicast,\nunspecified and broadcast addresses stay refused under every policy, and hostnames are still\nrefused."]}] 27:["$","li","li-4",{"children":["A ",["$","code","code-0",{"children":"network"}]," Hunt resolves against the same targets table and context pack as ",["$","code","code-1",{"children":"web"}],", so it\ncarries the HTTP capabilities: 3 capabilities became 21. Skills raised from 4 to 12 and\ndirect-origin addresses from 8 to 32; both are context bounds, not authority."]}] 28:["$","li","li-5",{"children":"The authorization gate itself is unchanged and still refuses."}] 29:["$","h3","h3-1",{"id":"a-connected-device-is-authorized-and-examined-like-any-other-target-197-199","children":["$","a",null,{"href":"#a-connected-device-is-authorized-and-examined-like-any-other-target-197-199","className":"oss-heading-anchor","children":"A connected device is authorized and examined like any other target (#197, #199)"}]}] 2a:["$","ul","ul-1",{"children":["\n",["$","li","li-0",{"children":[["$","code","code-0",{"children":"POST /targets/{id}/authorization"}]," records a standing authorization for a device. It answered\n404 before, because it read only the web targets table, so a device was the one asset whose\npermission could not be recorded once and reused. A device scan now reuses it instead of\ndemanding ",["$","code","code-1",{"children":"confirm_authorized"}]," on every submission."]}],"\n",["$","li","li-1",{"children":[["$","code","code-0",{"children":"device.http.probe"}]," accepts an operator-named ",["$","code","code-1",{"children":"origin_port"}],". A device locator cannot carry a\nport, so requiring a discovery scan first made a known service unreachable and unsayable."]}],"\n",["$","li","li-2",{"children":"A device Hunt carries the HTTP capabilities: 6 became 28. Execution routes by the\ncapability's own placement rather than by target kind, the HTTP binding resolves either\ninventory, and the worker digests a device run by the same id the control plane used."}],"\n",["$","li","li-3",{"children":"Device safety applies to every capability that reaches a device, not only the device-placed\nones. The health circuit breaker, the request pacing and the per-device daily fragility\nbudget now govern an ordinary HTTP, network or browser capability as well, settled through\nthe worker's terminal transaction so the device's own counters advance."}],"\n",["$","li","li-4",{"children":"Browser capabilities accept a bound service origin, so a device on a non-default port is\nreachable in a browser."}],"\n"]}] 2b:["$","h3","h3-2",{"id":"the-web-ui-works-at-every-address-that-reaches-the-engine-195-198-199","children":["$","a",null,{"href":"#the-web-ui-works-at-every-address-that-reaches-the-engine-195-198-199","className":"oss-heading-anchor","children":"The web UI works at every address that reaches the engine (#195, #198, #199)"}]}] 2c:["$","ul","ul-2",{"children":["\n",["$","li","li-0",{"children":"The CORS allowlist is built from one configured address, so the same engine opened by public\nIP or through a forwarded port lost its CORS header on every read and answered 403 to every\nwrite. An Origin is now also admitted when it is the same address literal the API was reached\non, at this deployment's own UI or API port."}],"\n",["$","li","li-1",{"children":"The UI follows the address it was opened at, when both that address and the configured API\nhost are address literals. It previously dialled the configured host whatever address the\npage came from, so the browser either could not route to it or refused it as a\nprivate-network request from a public page."}],"\n",["$","li","li-2",{"children":"Both halves are needed: the server was willing after the first change, but the client was\nstill asking the wrong host."}],"\n",["$","li","li-3",{"children":["Only address literals are followed, on either side. A name may legitimately be a gateway in\nfront of a different API host, and following names is the shape a rebound DNS name relies on.\nNames stay with ",["$","code","code-0",{"children":"SHAKERSCAN_CORS_ALLOW_ORIGINS"}],"."]}],"\n"]}] 2d:["$","h3","h3-3",{"id":"operations","children":["$","a",null,{"href":"#operations","className":"oss-heading-anchor","children":"Operations"}]}] 2e:["$","ul","ul-3",{"children":["\n",["$","li","li-0",{"children":"Signed SBOMs published with expanded runtime coverage (#186)."}],"\n",["$","li","li-1",{"children":"A clean reinstall script for macOS and Linux that refuses unsafe paths and reports Docker\ncleanup failures honestly (#188, #196)."}],"\n"]}] 2f:["$","p",null,{"className":"mt-10 border-t border-white/[0.07] pt-4 text-xs leading-5 text-[#5F6B7A]","children":["This page is rendered from ",["$","span",null,{"className":"font-mono","children":"docs/releases/2.5.0.md"}]," in the open-source repository at ","v2.5.4",". When documentation and implementation disagree, the code, database schema, and tests at that tag are authoritative."]}]