[{"data":1,"prerenderedAt":3685},["ShallowReactive",2],{"navigation_docs":3,"docs-page:\u002Ffleet\u002Fcloud-federation":1849,"docs-surround:\u002Ffleet\u002Fcloud-federation":3680},[4,72,214,304,947,1040,1230,1504,1590,1701,1830],{"title":5,"path":6,"stem":7,"children":8,"icon":71},"Get started","\u002Fgetting-started","01.getting-started\u002F00.index",[9,10,15,20,25,36],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","01.getting-started\u002F01.introduction","i-ph-house",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fgetting-started\u002Fquickstart","01.getting-started\u002F02.quickstart","i-ph-rocket-launch",{"title":21,"path":22,"stem":23,"icon":24},"Concepts","\u002Fgetting-started\u002Fconcepts","01.getting-started\u002F03.concepts","i-ph-book-open",{"title":26,"path":27,"stem":28,"children":29,"icon":31},"Install","\u002Fgetting-started\u002Finstall","01.getting-started\u002F04.install\u002F00.index",[30,32],{"title":26,"path":27,"stem":28,"icon":31},"i-ph-download-simple",{"title":33,"path":34,"stem":35},"Prepare the Linux sandbox","\u002Fgetting-started\u002Finstall\u002Flinux-sandbox","01.getting-started\u002F04.install\u002F01.linux-sandbox",{"title":37,"path":38,"stem":39,"children":40,"icon":42},"Web UI","\u002Fgetting-started\u002Fweb-ui","01.getting-started\u002F05.web-ui\u002F00.index",[41,43,47,51,55,59,63,67],{"title":37,"path":38,"stem":39,"icon":42},"i-ph-monitor",{"title":44,"path":45,"stem":46},"Choose a tenant","\u002Fgetting-started\u002Fweb-ui\u002Ftenants","01.getting-started\u002F05.web-ui\u002F01.tenants",{"title":48,"path":49,"stem":50},"Find a page","\u002Fgetting-started\u002Fweb-ui\u002Fnavigation","01.getting-started\u002F05.web-ui\u002F02.navigation",{"title":52,"path":53,"stem":54},"Use the chat drawer","\u002Fgetting-started\u002Fweb-ui\u002Fchats","01.getting-started\u002F05.web-ui\u002F03.chats",{"title":56,"path":57,"stem":58},"Create and edit records","\u002Fgetting-started\u002Fweb-ui\u002Fforms","01.getting-started\u002F05.web-ui\u002F04.forms",{"title":60,"path":61,"stem":62},"Keyboard and accessibility","\u002Fgetting-started\u002Fweb-ui\u002Faccessibility","01.getting-started\u002F05.web-ui\u002F05.accessibility",{"title":64,"path":65,"stem":66},"Accounts and permissions","\u002Fgetting-started\u002Fweb-ui\u002Faccounts","01.getting-started\u002F05.web-ui\u002F06.accounts",{"title":68,"path":69,"stem":70},"Console page directory","\u002Fgetting-started\u002Fweb-ui\u002Fpage-directory","01.getting-started\u002F05.web-ui\u002F07.page-directory",false,{"title":21,"path":73,"stem":74,"children":75,"icon":71},"\u002Fconcepts","02.concepts\u002F00.index",[76,77,82,87,92,123,128,143,166,185,204,209],{"title":21,"path":73,"stem":74},{"title":78,"path":79,"stem":80,"icon":81},"Architecture","\u002Fconcepts\u002Farchitecture","02.concepts\u002F01.architecture","i-ph-planet",{"title":83,"path":84,"stem":85,"icon":86},"Jobs and durability","\u002Fconcepts\u002Fjobs","02.concepts\u002F02.jobs","i-ph-infinity",{"title":88,"path":89,"stem":90,"icon":91},"Routing","\u002Fconcepts\u002Frouting","02.concepts\u002F03.routing","i-ph-path",{"title":93,"path":94,"stem":95,"children":96,"icon":98},"Security model","\u002Fconcepts\u002Fsecurity","02.concepts\u002F04.security\u002F00.index",[97,99,103,107,111,115,119],{"title":93,"path":94,"stem":95,"icon":98},"i-ph-shield-check",{"title":100,"path":101,"stem":102},"Node identity and tenant secrets","\u002Fconcepts\u002Fsecurity\u002Fidentity-and-secrets","02.concepts\u002F04.security\u002F01.identity-and-secrets",{"title":104,"path":105,"stem":106},"Plugin processes and operator exemptions","\u002Fconcepts\u002Fsecurity\u002Fplugins","02.concepts\u002F04.security\u002F02.plugins",{"title":108,"path":109,"stem":110},"Sandbox tiers and routing","\u002Fconcepts\u002Fsecurity\u002Fsandbox-tiers","02.concepts\u002F04.security\u002F03.sandbox-tiers",{"title":112,"path":113,"stem":114},"Sandbox egress rules","\u002Fconcepts\u002Fsecurity\u002Fegress","02.concepts\u002F04.security\u002F04.egress",{"title":116,"path":117,"stem":118},"Protected files and sandbox limits","\u002Fconcepts\u002Fsecurity\u002Fprotected-files","02.concepts\u002F04.security\u002F05.protected-files",{"title":120,"path":121,"stem":122},"Security assurance","\u002Fconcepts\u002Fsecurity\u002Fassurance","02.concepts\u002F04.security\u002F06.assurance",{"title":124,"path":125,"stem":126,"icon":127},"Temporal","\u002Fconcepts\u002Ftemporal","02.concepts\u002F05.temporal","i-ph-clock",{"title":129,"path":130,"stem":131,"children":132,"icon":134},"Limits and scaling","\u002Fconcepts\u002Flimits-and-scaling","02.concepts\u002F06.limits-and-scaling\u002F00.index",[133,135,139],{"title":129,"path":130,"stem":131,"icon":134},"i-ph-gauge",{"title":136,"path":137,"stem":138},"Tenant and queue limits","\u002Fconcepts\u002Flimits-and-scaling\u002Flimits","02.concepts\u002F06.limits-and-scaling\u002F01.limits",{"title":140,"path":141,"stem":142},"Capacity measurements","\u002Fconcepts\u002Flimits-and-scaling\u002Fmeasurements","02.concepts\u002F06.limits-and-scaling\u002F02.measurements",{"title":144,"path":145,"stem":146,"children":147,"icon":149},"Threat model","\u002Fconcepts\u002Fthreat-model","02.concepts\u002F07.threat-model\u002F00.index",[148,150,154,158,162],{"title":144,"path":145,"stem":146,"icon":149},"i-ph-crosshair",{"title":151,"path":152,"stem":153},"Trust boundaries and compromise","\u002Fconcepts\u002Fthreat-model\u002Ftrust-boundaries","02.concepts\u002F07.threat-model\u002F01.trust-boundaries",{"title":155,"path":156,"stem":157},"Harness and tool boundaries","\u002Fconcepts\u002Fthreat-model\u002Fharness-tools","02.concepts\u002F07.threat-model\u002F02.harness-tools",{"title":159,"path":160,"stem":161},"Known security gaps","\u002Fconcepts\u002Fthreat-model\u002Fknown-gaps","02.concepts\u002F07.threat-model\u002F03.known-gaps",{"title":163,"path":164,"stem":165},"Origins, sequences and tool results","\u002Fconcepts\u002Fthreat-model\u002Forigins-and-results","02.concepts\u002F07.threat-model\u002F04.origins-and-results",{"title":167,"path":168,"stem":169,"children":170,"icon":172},"Outbound connections","\u002Fconcepts\u002Foutbound-connections","02.concepts\u002F08.outbound-connections\u002F00.index",[171,173,177,181],{"title":167,"path":168,"stem":169,"icon":172},"i-ph-arrow-square-out",{"title":174,"path":175,"stem":176},"Server outbound connections","\u002Fconcepts\u002Foutbound-connections\u002Fserver","02.concepts\u002F08.outbound-connections\u002F01.server",{"title":178,"path":179,"stem":180},"Node and plugin outbound connections","\u002Fconcepts\u002Foutbound-connections\u002Fnodes-and-plugins","02.concepts\u002F08.outbound-connections\u002F02.nodes-and-plugins",{"title":182,"path":183,"stem":184},"Addresses a model provider fetches","\u002Fconcepts\u002Foutbound-connections\u002Fprovider-fetches","02.concepts\u002F08.outbound-connections\u002F03.provider-fetches",{"title":186,"path":187,"stem":188,"children":189,"icon":191},"Run receipts","\u002Fconcepts\u002Frun-receipts","02.concepts\u002F09.run-receipts\u002F00.index",[190,192,196,200],{"title":186,"path":187,"stem":188,"icon":191},"i-ph-receipt",{"title":193,"path":194,"stem":195},"Authority envelopes and delegation","\u002Fconcepts\u002Frun-receipts\u002Fauthority","02.concepts\u002F09.run-receipts\u002F01.authority",{"title":197,"path":198,"stem":199},"Call bindings and budget charges","\u002Fconcepts\u002Frun-receipts\u002Fcalls-and-charges","02.concepts\u002F09.run-receipts\u002F02.calls-and-charges",{"title":201,"path":202,"stem":203},"Verify run receipts offline","\u002Fconcepts\u002Frun-receipts\u002Fverify","02.concepts\u002F09.run-receipts\u002F03.verify",{"title":205,"path":206,"stem":207,"icon":208},"Delegation and identity","\u002Fconcepts\u002Fdelegation-and-identity","02.concepts\u002F10.delegation-and-identity","i-ph-identification-badge",{"title":210,"path":211,"stem":212,"icon":213},"How a tool call is decided","\u002Fconcepts\u002Fhow-a-tool-call-is-decided","02.concepts\u002F11.how-a-tool-call-is-decided","i-ph-list-checks",{"title":215,"path":216,"stem":217,"children":218,"icon":71},"Run","\u002Fagents","03.agents\u002F00.index",[219,221,226,231,236,240,245,250,268,299],{"title":220,"path":216,"stem":217},"Run agents",{"title":222,"path":223,"stem":224,"icon":225},"Run jobs","\u002Fagents\u002Frun-jobs","03.agents\u002F01.run-jobs","i-ph-play",{"title":227,"path":228,"stem":229,"icon":230},"Job history","\u002Fagents\u002Fhistory","03.agents\u002F02.history","i-ph-clock-counter-clockwise",{"title":232,"path":233,"stem":234,"icon":235},"Long jobs","\u002Fagents\u002Flong-jobs","03.agents\u002F03.long-jobs","i-ph-hourglass-medium",{"title":237,"path":238,"stem":239,"icon":235},"Waiting for events","\u002Fagents\u002Fwaiting-for-events","03.agents\u002F04.waiting-for-events",{"title":241,"path":242,"stem":243,"icon":244},"Delegation","\u002Fagents\u002Fdelegation","03.agents\u002F05.delegation","i-ph-git-fork",{"title":246,"path":247,"stem":248,"icon":249},"Colleagues and the board","\u002Fagents\u002Fcolleagues","03.agents\u002F06.colleagues","i-ph-chats-circle",{"title":251,"path":252,"stem":253,"children":254,"icon":249},"Conversations","\u002Fagents\u002Fconversations","03.agents\u002F07.conversations\u002F00.index",[255,256,260,264],{"title":251,"path":252,"stem":253,"icon":249},{"title":257,"path":258,"stem":259},"Conversation access and history","\u002Fagents\u002Fconversations\u002Faccess-and-history","03.agents\u002F07.conversations\u002F02.access-and-history",{"title":261,"path":262,"stem":263},"Use conversations from an app","\u002Fagents\u002Fconversations\u002Fapps","03.agents\u002F07.conversations\u002F03.apps",{"title":265,"path":266,"stem":267},"Hand off a conversation and use Ask","\u002Fagents\u002Fconversations\u002Fhandoffs-and-ask","03.agents\u002F07.conversations\u002F04.handoffs-and-ask",{"title":269,"path":270,"stem":271,"children":272,"icon":274},"Decide an approval","\u002Fagents\u002Fapprovals","03.agents\u002F08.approvals\u002F00.index",[273,275,279,283,287,291,295],{"title":269,"path":270,"stem":271,"icon":274},"i-ph-hand-palm",{"title":276,"path":277,"stem":278},"Configure approval ownership and deadlines","\u002Fagents\u002Fapprovals\u002Fconfigure","03.agents\u002F08.approvals\u002F02.configure",{"title":280,"path":281,"stem":282},"How approval decisions bind a call","\u002Fagents\u002Fapprovals\u002Fsecurity","03.agents\u002F08.approvals\u002F03.security",{"title":284,"path":285,"stem":286},"Edit an approval or allow repeated calls","\u002Fagents\u002Fapprovals\u002Fedits-and-repeat-calls","03.agents\u002F08.approvals\u002F04.edits-and-repeat-calls",{"title":288,"path":289,"stem":290},"Resolve loop, budget and recovery waits","\u002Fagents\u002Fapprovals\u002Frecovery","03.agents\u002F08.approvals\u002F05.recovery",{"title":292,"path":293,"stem":294},"Review approval statistics and test cards","\u002Fagents\u002Fapprovals\u002Fstatistics","03.agents\u002F08.approvals\u002F06.statistics",{"title":296,"path":297,"stem":298},"Decide approvals from an app","\u002Fagents\u002Fapprovals\u002Fapps","03.agents\u002F08.approvals\u002F07.apps",{"title":300,"path":301,"stem":302,"icon":303},"Asking people","\u002Fagents\u002Fasking-people","03.agents\u002F09.asking-people","i-ph-chat-circle-dots",{"title":305,"path":306,"stem":307,"children":308,"icon":71},"Build","\u002Fbuild","04.build\u002F00.index",[309,310,655,844],{"title":305,"path":306,"stem":307},{"title":311,"path":312,"stem":313,"children":314,"icon":71},"Plugins","\u002Fbuild\u002Fplugins","04.build\u002F01.plugins\u002F00.index",[315,316,321,352,357,362,367,378,397,412,417,422,427,442,447,452,457,472,476,481,492,497,502,640],{"title":311,"path":312,"stem":313},{"title":317,"path":318,"stem":319,"icon":320},"What a plugin is","\u002Fbuild\u002Fplugins\u002Foverview","04.build\u002F01.plugins\u002F01.overview","i-ph-puzzle-piece",{"title":322,"path":323,"stem":324,"children":325,"icon":327},"Install a plugin","\u002Fbuild\u002Fplugins\u002Finstall","04.build\u002F01.plugins\u002F02.install\u002F00.index",[326,328,332,336,340,344,348],{"title":322,"path":323,"stem":324,"icon":327},"i-ph-package",{"title":329,"path":330,"stem":331,"icon":327},"Review an install","\u002Fbuild\u002Fplugins\u002Finstall\u002Freview","04.build\u002F01.plugins\u002F02.install\u002F01.review",{"title":333,"path":334,"stem":335,"icon":327},"Install from a source","\u002Fbuild\u002Fplugins\u002Finstall\u002Fsources","04.build\u002F01.plugins\u002F02.install\u002F02.sources",{"title":337,"path":338,"stem":339,"icon":327},"Update a plugin","\u002Fbuild\u002Fplugins\u002Finstall\u002Fupdate","04.build\u002F01.plugins\u002F02.install\u002F03.update",{"title":341,"path":342,"stem":343,"icon":327},"Roll out a plugin","\u002Fbuild\u002Fplugins\u002Finstall\u002Frollouts","04.build\u002F01.plugins\u002F02.install\u002F04.rollouts",{"title":345,"path":346,"stem":347,"icon":327},"Grant access between plugins","\u002Fbuild\u002Fplugins\u002Finstall\u002Fgrants","04.build\u002F01.plugins\u002F02.install\u002F05.grants",{"title":349,"path":350,"stem":351,"icon":327},"Retire or remove a plugin","\u002Fbuild\u002Fplugins\u002Finstall\u002Fretire-and-remove","04.build\u002F01.plugins\u002F02.install\u002F06.retire-and-remove",{"title":353,"path":354,"stem":355,"icon":356},"Configure an installed plugin","\u002Fbuild\u002Fplugins\u002Fconfigure","04.build\u002F01.plugins\u002F03.configure","i-ph-sliders-horizontal",{"title":358,"path":359,"stem":360,"icon":361},"Sets","\u002Fbuild\u002Fplugins\u002Fsets","04.build\u002F01.plugins\u002F04.sets","i-ph-stack",{"title":363,"path":364,"stem":365,"icon":366},"Your first plugin","\u002Fbuild\u002Fplugins\u002Ffirst-plugin","04.build\u002F01.plugins\u002F05.first-plugin","i-ph-hammer",{"title":368,"path":369,"stem":370,"children":371,"icon":373},"Structure a plugin","\u002Fbuild\u002Fplugins\u002Fstructure","04.build\u002F01.plugins\u002F06.structure\u002F00.index",[372,374],{"title":368,"path":369,"stem":370,"icon":373},"i-ph-tree-structure",{"title":375,"path":376,"stem":377,"icon":373},"Plugin structure rules","\u002Fbuild\u002Fplugins\u002Fstructure\u002Flint-rules","04.build\u002F01.plugins\u002F06.structure\u002F01.lint-rules",{"title":379,"path":380,"stem":381,"children":382,"icon":384},"Develop a plugin","\u002Fbuild\u002Fplugins\u002Fdevelop-and-test","04.build\u002F01.plugins\u002F07.develop-and-test\u002F00.index",[383,385,389,393],{"title":379,"path":380,"stem":381,"icon":384},"i-ph-flask",{"title":386,"path":387,"stem":388,"icon":384},"Check a plugin candidate","\u002Fbuild\u002Fplugins\u002Fdevelop-and-test\u002Fcandidate-checks","04.build\u002F01.plugins\u002F07.develop-and-test\u002F01.candidate-checks",{"title":390,"path":391,"stem":392,"icon":384},"Lint and test a plugin","\u002Fbuild\u002Fplugins\u002Fdevelop-and-test\u002Flint-and-tests","04.build\u002F01.plugins\u002F07.develop-and-test\u002F02.lint-and-tests",{"title":394,"path":395,"stem":396,"icon":384},"Run failure drills","\u002Fbuild\u002Fplugins\u002Fdevelop-and-test\u002Ftests-and-drills","04.build\u002F01.plugins\u002F07.develop-and-test\u002F03.tests-and-drills",{"title":398,"path":399,"stem":400,"children":401,"icon":403},"Build in Studio","\u002Fbuild\u002Fplugins\u002Fstudio","04.build\u002F01.plugins\u002F08.studio\u002F00.index",[402,404,408],{"title":398,"path":399,"stem":400,"icon":403},"i-ph-code",{"title":405,"path":406,"stem":407,"icon":403},"Test and explain a draft","\u002Fbuild\u002Fplugins\u002Fstudio\u002Ftest-and-explain","04.build\u002F01.plugins\u002F08.studio\u002F01.test-and-explain",{"title":409,"path":410,"stem":411,"icon":403},"Release a workspace plugin","\u002Fbuild\u002Fplugins\u002Fstudio\u002Frelease","04.build\u002F01.plugins\u002F08.studio\u002F02.release",{"title":413,"path":414,"stem":415,"icon":416},"The build kit","\u002Fbuild\u002Fplugins\u002Fclaude-code","04.build\u002F01.plugins\u002F09.claude-code","i-ph-sparkle",{"title":418,"path":419,"stem":420,"icon":421},"Example: support triage","\u002Fbuild\u002Fplugins\u002Fexample-support-triage","04.build\u002F01.plugins\u002F10.example-support-triage","i-ph-lifebuoy",{"title":423,"path":424,"stem":425,"icon":426},"Publish and version","\u002Fbuild\u002Fplugins\u002Fpublish","04.build\u002F01.plugins\u002F11.publish","i-ph-tag",{"title":428,"path":429,"stem":430,"children":431,"icon":433},"List a plugin","\u002Fbuild\u002Fplugins\u002Flist-a-plugin","04.build\u002F01.plugins\u002F12.list-a-plugin\u002F00.index",[432,434,438],{"title":428,"path":429,"stem":430,"icon":433},"i-ph-storefront",{"title":435,"path":436,"stem":437,"icon":433},"Hub review checks","\u002Fbuild\u002Fplugins\u002Flist-a-plugin\u002Freview","04.build\u002F01.plugins\u002F12.list-a-plugin\u002F01.review",{"title":439,"path":440,"stem":441,"icon":433},"Maintain a listing","\u002Fbuild\u002Fplugins\u002Flist-a-plugin\u002Fmaintain","04.build\u002F01.plugins\u002F12.list-a-plugin\u002F02.maintain",{"title":443,"path":444,"stem":445,"icon":446},"The catalog","\u002Fbuild\u002Fplugins\u002Fcatalog","04.build\u002F01.plugins\u002F13.catalog","i-ph-books",{"title":448,"path":449,"stem":450,"icon":451},"Folders, bundles and OCI","\u002Fbuild\u002Fplugins\u002Fsources","04.build\u002F01.plugins\u002F14.sources","i-ph-archive",{"title":453,"path":454,"stem":455,"icon":456},"The workspace","\u002Fbuild\u002Fplugins\u002Fworkspace","04.build\u002F01.plugins\u002F15.workspace","i-ph-folder-notch-open",{"title":458,"path":459,"stem":460,"children":461,"icon":463},"Use a plugin index","\u002Fbuild\u002Fplugins\u002Findexes","04.build\u002F01.plugins\u002F16.indexes\u002F00.index",[462,464,468],{"title":458,"path":459,"stem":460,"icon":463},"i-ph-seal-check",{"title":465,"path":466,"stem":467,"icon":463},"Read index version records","\u002Fbuild\u002Fplugins\u002Findexes\u002Fversion-records","04.build\u002F01.plugins\u002F16.indexes\u002F01.version-records",{"title":469,"path":470,"stem":471,"icon":463},"Manage plugin indexes","\u002Fbuild\u002Fplugins\u002Findexes\u002Fmanage","04.build\u002F01.plugins\u002F16.indexes\u002F02.manage",{"title":473,"path":474,"stem":475,"icon":327},"Existing MCP packages","\u002Fbuild\u002Fplugins\u002Fpackages","04.build\u002F01.plugins\u002F17.packages",{"title":477,"path":478,"stem":479,"icon":480},"MCP servers from container images","\u002Fbuild\u002Fplugins\u002Fcontainer-images","04.build\u002F01.plugins\u002F18.container-images","i-ph-cube",{"title":482,"path":483,"stem":484,"children":485,"icon":487},"Import agent plugins","\u002Fbuild\u002Fplugins\u002Fclaude-code-and-agent-plugins","04.build\u002F01.plugins\u002F19.claude-code-and-agent-plugins\u002F00.index",[486,488],{"title":482,"path":483,"stem":484,"icon":487},"i-ph-arrow-square-in",{"title":489,"path":490,"stem":491,"icon":487},"Import from registries","\u002Fbuild\u002Fplugins\u002Fclaude-code-and-agent-plugins\u002Fmarketplaces","04.build\u002F01.plugins\u002F19.claude-code-and-agent-plugins\u002F01.marketplaces",{"title":493,"path":494,"stem":495,"icon":496},"GitHub","\u002Fbuild\u002Fplugins\u002Fgithub","04.build\u002F01.plugins\u002F20.github","i-ph-github-logo",{"title":498,"path":499,"stem":500,"icon":501},"Known vulnerabilities","\u002Fbuild\u002Fplugins\u002Fvulnerabilities","04.build\u002F01.plugins\u002F21.vulnerabilities","i-ph-shield-warning",{"title":503,"path":504,"stem":505,"children":506,"icon":71},"Verified plugins","\u002Fbuild\u002Fplugins\u002Fverified","04.build\u002F01.plugins\u002F22.verified\u002F01.index",[507,508,513,518,523,528,533,538,543,548,553,558,580,585,589,594,599,604,608,612,617,622,626],{"title":503,"path":504,"stem":505,"icon":463},{"title":509,"path":510,"stem":511,"icon":512},"ai.oz0\u002Fweb","\u002Fbuild\u002Fplugins\u002Fverified\u002Fweb","04.build\u002F01.plugins\u002F22.verified\u002F02.web","i-ph-globe",{"title":514,"path":515,"stem":516,"icon":517},"ai.oz0\u002Fnet-diag","\u002Fbuild\u002Fplugins\u002Fverified\u002Fnet-diag","04.build\u002F01.plugins\u002F22.verified\u002F03.net-diag","i-ph-network",{"title":519,"path":520,"stem":521,"icon":522},"ai.oz0\u002Fcve-triage","\u002Fbuild\u002Fplugins\u002Fverified\u002Fcve-triage","04.build\u002F01.plugins\u002F22.verified\u002F04.cve-triage","i-ph-bug",{"title":524,"path":525,"stem":526,"icon":527},"ai.oz0\u002Fhost-health","\u002Fbuild\u002Fplugins\u002Fverified\u002Fhost-health","04.build\u002F01.plugins\u002F22.verified\u002F05.host-health","i-ph-heartbeat",{"title":529,"path":530,"stem":531,"icon":532},"ai.oz0\u002Fpr-reviewer","\u002Fbuild\u002Fplugins\u002Fverified\u002Fpr-reviewer","04.build\u002F01.plugins\u002F22.verified\u002F06.pr-reviewer","i-ph-git-pull-request",{"title":534,"path":535,"stem":536,"icon":537},"Slack","\u002Fbuild\u002Fplugins\u002Fverified\u002Fslack","04.build\u002F01.plugins\u002F22.verified\u002F07.slack","i-ph-slack-logo",{"title":539,"path":540,"stem":541,"icon":542},"Discord","\u002Fbuild\u002Fplugins\u002Fverified\u002Fdiscord","04.build\u002F01.plugins\u002F22.verified\u002F08.discord","i-ph-discord-logo",{"title":544,"path":545,"stem":546,"icon":547},"Microsoft Teams","\u002Fbuild\u002Fplugins\u002Fverified\u002Fteams","04.build\u002F01.plugins\u002F22.verified\u002F09.teams","i-ph-microsoft-teams-logo",{"title":549,"path":550,"stem":551,"icon":552},"ai.oz0\u002Fai-spend","\u002Fbuild\u002Fplugins\u002Fverified\u002Fai-spend","04.build\u002F01.plugins\u002F22.verified\u002F10.ai-spend","i-ph-coins",{"title":554,"path":555,"stem":556,"icon":557},"ai.oz0\u002Fa2a-remote","\u002Fbuild\u002Fplugins\u002Fverified\u002Fa2a-remote","04.build\u002F01.plugins\u002F22.verified\u002F11.a2a-remote","i-ph-arrows-left-right",{"title":559,"path":560,"stem":561,"children":562,"icon":98},"Guardrails","\u002Fbuild\u002Fplugins\u002Fverified\u002Fguardrails","04.build\u002F01.plugins\u002F22.verified\u002F12.guardrails\u002F00.index",[563,564,568,572,576],{"title":559,"path":560,"stem":561,"icon":98},{"title":565,"path":566,"stem":567,"icon":98},"Configure guardrails","\u002Fbuild\u002Fplugins\u002Fverified\u002Fguardrails\u002Fsettings","04.build\u002F01.plugins\u002F22.verified\u002F12.guardrails\u002F01.settings",{"title":569,"path":570,"stem":571,"icon":98},"Check classified text","\u002Fbuild\u002Fplugins\u002Fverified\u002Fguardrails\u002Fclassified-text","04.build\u002F01.plugins\u002F22.verified\u002F12.guardrails\u002F02.classified-text",{"title":573,"path":574,"stem":575,"icon":98},"Check shell commands","\u002Fbuild\u002Fplugins\u002Fverified\u002Fguardrails\u002Fcommands","04.build\u002F01.plugins\u002F22.verified\u002F12.guardrails\u002F03.commands",{"title":577,"path":578,"stem":579,"icon":98},"Guardrail coverage and limits","\u002Fbuild\u002Fplugins\u002Fverified\u002Fguardrails\u002Fintent-and-limits","04.build\u002F01.plugins\u002F22.verified\u002F12.guardrails\u002F04.intent-and-limits",{"title":581,"path":582,"stem":583,"icon":584},"ai.oz0\u002Fmemory","\u002Fbuild\u002Fplugins\u002Fverified\u002Fmemory","04.build\u002F01.plugins\u002F22.verified\u002F13.memory","i-ph-brain",{"title":586,"path":587,"stem":588,"icon":416},"ai.oz0\u002Fsetup-assistant","\u002Fbuild\u002Fplugins\u002Fverified\u002Fsetup-assistant","04.build\u002F01.plugins\u002F22.verified\u002F14.setup-assistant",{"title":590,"path":591,"stem":592,"icon":593},"ai.oz0\u002Fpublic-access","\u002Fbuild\u002Fplugins\u002Fverified\u002Fpublic-access","04.build\u002F01.plugins\u002F22.verified\u002F15.public-access","i-ph-files",{"title":595,"path":596,"stem":597,"icon":598},"ai.oz0\u002Femail","\u002Fbuild\u002Fplugins\u002Fverified\u002Femail","04.build\u002F01.plugins\u002F22.verified\u002F16.email","i-ph-envelope-simple",{"title":600,"path":601,"stem":602,"icon":603},"Atlassian Cloud","\u002Fbuild\u002Fplugins\u002Fverified\u002Fatlassian","04.build\u002F01.plugins\u002F22.verified\u002F17.atlassian","i-ph-kanban",{"title":605,"path":606,"stem":607,"icon":603},"Atlassian Data Center","\u002Fbuild\u002Fplugins\u002Fverified\u002Fatlassian-dc","04.build\u002F01.plugins\u002F22.verified\u002F18.atlassian-dc",{"title":609,"path":610,"stem":611,"icon":421},"ServiceNow","\u002Fbuild\u002Fplugins\u002Fverified\u002Fservicenow","04.build\u002F01.plugins\u002F22.verified\u002F19.servicenow",{"title":613,"path":614,"stem":615,"icon":616},"GitLab","\u002Fbuild\u002Fplugins\u002Fverified\u002Fgitlab","04.build\u002F01.plugins\u002F22.verified\u002F20.gitlab","i-ph-git-merge",{"title":618,"path":619,"stem":620,"icon":621},"Support triage","\u002Fbuild\u002Fplugins\u002Fverified\u002Fsupport-triage","04.build\u002F01.plugins\u002F22.verified\u002F21.support-triage","i-ph-ticket",{"title":623,"path":624,"stem":625,"icon":361},"Essentials","\u002Fbuild\u002Fplugins\u002Fverified\u002Fessentials","04.build\u002F01.plugins\u002F22.verified\u002F22.essentials",{"title":627,"path":628,"stem":629,"children":630,"icon":532},"Plugin improver","\u002Fbuild\u002Fplugins\u002Fverified\u002Fplugin-improver","04.build\u002F01.plugins\u002F22.verified\u002F23.plugin-improver\u002F00.index",[631,632,636],{"title":627,"path":628,"stem":629,"icon":532},{"title":633,"path":634,"stem":635,"icon":532},"How an improvement runs","\u002Fbuild\u002Fplugins\u002Fverified\u002Fplugin-improver\u002Fjob-lifecycle","04.build\u002F01.plugins\u002F22.verified\u002F23.plugin-improver\u002F01.job-lifecycle",{"title":637,"path":638,"stem":639,"icon":532},"Improver limits and records","\u002Fbuild\u002Fplugins\u002Fverified\u002Fplugin-improver\u002Flimits-and-records","04.build\u002F01.plugins\u002F22.verified\u002F23.plugin-improver\u002F02.limits-and-records",{"title":641,"path":642,"stem":643,"children":644,"icon":646},"Plugin size limits","\u002Fbuild\u002Fplugins\u002Flimits","04.build\u002F01.plugins\u002F23.limits\u002F00.index",[645,647,651],{"title":641,"path":642,"stem":643,"icon":646},"i-ph-ruler",{"title":648,"path":649,"stem":650,"icon":646},"Documentation limits","\u002Fbuild\u002Fplugins\u002Flimits\u002Fdocumentation","04.build\u002F01.plugins\u002F23.limits\u002F01.documentation",{"title":652,"path":653,"stem":654,"icon":646},"Artifact and index limits","\u002Fbuild\u002Fplugins\u002Flimits\u002Fartifacts","04.build\u002F01.plugins\u002F23.limits\u002F02.artifacts",{"title":656,"path":657,"stem":658,"children":659,"icon":71},"Parts","\u002Fbuild\u002Fparts","04.build\u002F02.parts\u002F00.index",[660,662,667,672,690,721,726,730,741,756,761,776,791,814,818,823,828,839],{"title":661,"path":657,"stem":658},"Plugin parts",{"title":663,"path":664,"stem":665,"icon":666},"Agents","\u002Fbuild\u002Fparts\u002Fagents","04.build\u002F02.parts\u002F01.agents","i-ph-robot",{"title":668,"path":669,"stem":670,"icon":671},"What an agent combines","\u002Fbuild\u002Fparts\u002Fwhat-an-agent-combines","04.build\u002F02.parts\u002F02.what-an-agent-combines","i-ph-intersect-three",{"title":673,"path":674,"stem":675,"children":676,"icon":646},"Agent contracts","\u002Fbuild\u002Fparts\u002Fcontracts-and-limits","04.build\u002F02.parts\u002F03.contracts-and-limits\u002F00.index",[677,678,682,686],{"title":673,"path":674,"stem":675,"icon":646},{"title":679,"path":680,"stem":681,"icon":646},"Agent failure kinds","\u002Fbuild\u002Fparts\u002Fcontracts-and-limits\u002Ffailures","04.build\u002F02.parts\u002F03.contracts-and-limits\u002F01.failures",{"title":683,"path":684,"stem":685,"icon":646},"Agent limits","\u002Fbuild\u002Fparts\u002Fcontracts-and-limits\u002Flimits","04.build\u002F02.parts\u002F03.contracts-and-limits\u002F02.limits",{"title":687,"path":688,"stem":689,"icon":646},"Agent budgets","\u002Fbuild\u002Fparts\u002Fcontracts-and-limits\u002Fbudgets","04.build\u002F02.parts\u002F03.contracts-and-limits\u002F03.budgets",{"title":691,"path":692,"stem":693,"children":694,"icon":696},"Write a tool","\u002Fbuild\u002Fparts\u002Ftools","04.build\u002F02.parts\u002F04.tools\u002F00.index",[695,697,701,705,709,713,717],{"title":691,"path":692,"stem":693,"icon":696},"i-ph-wrench",{"title":698,"path":699,"stem":700,"icon":696},"Describe tool functions","\u002Fbuild\u002Fparts\u002Ftools\u002Fdefinitions","04.build\u002F02.parts\u002F04.tools\u002F01.definitions",{"title":702,"path":703,"stem":704,"icon":696},"Return results and files","\u002Fbuild\u002Fparts\u002Ftools\u002Fresults-and-files","04.build\u002F02.parts\u002F04.tools\u002F02.results-and-files",{"title":706,"path":707,"stem":708,"icon":696},"Handle tool call lifecycle","\u002Fbuild\u002Fparts\u002Ftools\u002Fcall-lifecycle","04.build\u002F02.parts\u002F04.tools\u002F03.call-lifecycle",{"title":710,"path":711,"stem":712,"icon":696},"Pin tool definitions","\u002Fbuild\u002Fparts\u002Ftools\u002Fsnapshots","04.build\u002F02.parts\u002F04.tools\u002F04.snapshots",{"title":714,"path":715,"stem":716,"icon":696},"Call a model from a tool","\u002Fbuild\u002Fparts\u002Ftools\u002Fmodel-calls","04.build\u002F02.parts\u002F04.tools\u002F05.model-calls",{"title":718,"path":719,"stem":720,"icon":696},"Tool labels and approvals","\u002Fbuild\u002Fparts\u002Ftools\u002Fpolicy","04.build\u002F02.parts\u002F04.tools\u002F06.policy",{"title":722,"path":723,"stem":724,"icon":725},"TypeScript tools","\u002Fbuild\u002Fparts\u002Ftypescript-tools","04.build\u002F02.parts\u002F05.typescript-tools","i-ph-file-code",{"title":727,"path":728,"stem":729,"icon":725},"Import an OpenAPI document","\u002Fbuild\u002Fparts\u002Fopenapi-import","04.build\u002F02.parts\u002F06.openapi-import",{"title":731,"path":732,"stem":733,"children":734,"icon":736},"Write and load skills","\u002Fbuild\u002Fparts\u002Fskills","04.build\u002F02.parts\u002F07.skills\u002F00.index",[735,737],{"title":731,"path":732,"stem":733,"icon":736},"i-ph-graduation-cap",{"title":738,"path":739,"stem":740,"icon":736},"Review skill use and proposals","\u002Fbuild\u002Fparts\u002Fskills\u002Fusage-and-proposals","04.build\u002F02.parts\u002F07.skills\u002F01.usage-and-proposals",{"title":742,"path":743,"stem":744,"children":745,"icon":747},"Write a flow","\u002Fbuild\u002Fparts\u002Fflows","04.build\u002F02.parts\u002F08.flows\u002F00.index",[746,748,752],{"title":742,"path":743,"stem":744,"icon":747},"i-ph-flow-arrow",{"title":749,"path":750,"stem":751,"icon":747},"Flow steps and expressions","\u002Fbuild\u002Fparts\u002Fflows\u002Fsteps-and-expressions","04.build\u002F02.parts\u002F08.flows\u002F01.steps-and-expressions",{"title":753,"path":754,"stem":755,"icon":747},"Expose and explain flows","\u002Fbuild\u002Fparts\u002Fflows\u002Fflow-tools","04.build\u002F02.parts\u002F08.flows\u002F02.flow-tools",{"title":757,"path":758,"stem":759,"icon":760},"Hooks","\u002Fbuild\u002Fparts\u002Fhooks","04.build\u002F02.parts\u002F09.hooks","i-ph-anchor",{"title":762,"path":763,"stem":764,"children":765,"icon":767},"Declare an event source","\u002Fbuild\u002Fparts\u002Fevent-sources","04.build\u002F02.parts\u002F10.event-sources\u002F00.index",[766,768,772],{"title":762,"path":763,"stem":764,"icon":767},"i-ph-broadcast",{"title":769,"path":770,"stem":771,"icon":767},"Bind and answer deliveries","\u002Fbuild\u002Fparts\u002Fevent-sources\u002Fdelivery-binding","04.build\u002F02.parts\u002F10.event-sources\u002F01.delivery-binding",{"title":773,"path":774,"stem":775,"icon":767},"Use platform events","\u002Fbuild\u002Fparts\u002Fevent-sources\u002Fplatform-events","04.build\u002F02.parts\u002F10.event-sources\u002F02.platform-events",{"title":777,"path":778,"stem":779,"children":780,"icon":782},"Declare a connection","\u002Fbuild\u002Fparts\u002Fconnections","04.build\u002F02.parts\u002F11.connections\u002F00.index",[781,783,787],{"title":777,"path":778,"stem":779,"icon":782},"i-ph-plugs-connected",{"title":784,"path":785,"stem":786,"icon":782},"Connection token lifecycle","\u002Fbuild\u002Fparts\u002Fconnections\u002Ftoken-lifecycle","04.build\u002F02.parts\u002F11.connections\u002F01.token-lifecycle",{"title":788,"path":789,"stem":790,"icon":782},"Connection setup and security","\u002Fbuild\u002Fparts\u002Fconnections\u002Fsetup-and-security","04.build\u002F02.parts\u002F11.connections\u002F02.setup-and-security",{"title":792,"path":793,"stem":794,"children":795,"icon":797},"Choose a harness","\u002Fbuild\u002Fparts\u002Fharnesses","04.build\u002F02.parts\u002F12.harnesses\u002F00.index",[796,798,802,806,810],{"title":792,"path":793,"stem":794,"icon":797},"i-ph-cpu",{"title":799,"path":800,"stem":801,"icon":797},"Harness tool controls","\u002Fbuild\u002Fparts\u002Fharnesses\u002Ftool-controls","04.build\u002F02.parts\u002F12.harnesses\u002F01.tool-controls",{"title":803,"path":804,"stem":805,"icon":797},"Recover a harness session","\u002Fbuild\u002Fparts\u002Fharnesses\u002Frecovery","04.build\u002F02.parts\u002F12.harnesses\u002F02.recovery",{"title":807,"path":808,"stem":809,"icon":797},"Write a harness","\u002Fbuild\u002Fparts\u002Fharnesses\u002Fcustom-harnesses","04.build\u002F02.parts\u002F12.harnesses\u002F03.custom-harnesses",{"title":811,"path":812,"stem":813,"icon":797},"Use an ACP agent","\u002Fbuild\u002Fparts\u002Fharnesses\u002Facp","04.build\u002F02.parts\u002F12.harnesses\u002F04.acp",{"title":815,"path":816,"stem":817,"icon":782},"Bring your own agent","\u002Fbuild\u002Fparts\u002Fbring-your-own-agent","04.build\u002F02.parts\u002F13.bring-your-own-agent",{"title":819,"path":820,"stem":821,"icon":822},"Records and start-up text","\u002Fbuild\u002Fparts\u002Frecords-and-startup","04.build\u002F02.parts\u002F14.records-and-startup","i-ph-database",{"title":824,"path":825,"stem":826,"icon":827},"Addresses","\u002Fbuild\u002Fparts\u002Faddresses","04.build\u002F02.parts\u002F15.addresses","i-ph-signpost",{"title":829,"path":830,"stem":831,"children":832,"icon":834},"Define a routine","\u002Fbuild\u002Fparts\u002Froutines","04.build\u002F02.parts\u002F16.routines\u002F00.index",[833,835],{"title":829,"path":830,"stem":831,"icon":834},"i-ph-clock-clockwise",{"title":836,"path":837,"stem":838,"icon":834},"Routine permissions and outputs","\u002Fbuild\u002Fparts\u002Froutines\u002Foutputs-and-permissions","04.build\u002F02.parts\u002F16.routines\u002F01.outputs-and-permissions",{"title":840,"path":841,"stem":842,"icon":843},"When to split an agent","\u002Fbuild\u002Fparts\u002Fwhen-to-split-an-agent","04.build\u002F02.parts\u002F17.when-to-split-an-agent","i-ph-arrows-split",{"title":845,"path":846,"stem":847,"children":848,"icon":71},"Apps on OZ","\u002Fbuild\u002Fapps","04.build\u002F03.apps\u002F00.index",[849,851,862,867,872,876,880,884,894,908,913,928,942],{"title":850,"path":846,"stem":847},"Applications and clients",{"title":852,"path":853,"stem":854,"children":855,"icon":857},"Use the runtime API","\u002Fbuild\u002Fapps\u002Fruntime-api","04.build\u002F03.apps\u002F01.runtime-api\u002F00.index",[856,858],{"title":852,"path":853,"stem":854,"icon":857},"i-ph-plug",{"title":859,"path":860,"stem":861,"icon":857},"Runtime API authentication","\u002Fbuild\u002Fapps\u002Fruntime-api\u002Fauthentication","04.build\u002F03.apps\u002F01.runtime-api\u002F01.authentication",{"title":863,"path":864,"stem":865,"icon":866},"Python SDK","\u002Fbuild\u002Fapps\u002Fsdk-python","04.build\u002F03.apps\u002F02.sdk-python","i-ph-file-py",{"title":868,"path":869,"stem":870,"icon":871},"TypeScript SDK","\u002Fbuild\u002Fapps\u002Fsdk-typescript","04.build\u002F03.apps\u002F03.sdk-typescript","i-ph-file-ts",{"title":873,"path":874,"stem":875,"icon":725},"Go SDK","\u002Fbuild\u002Fapps\u002Fsdk-go","04.build\u002F03.apps\u002F04.sdk-go",{"title":877,"path":878,"stem":879,"icon":782},"AG-UI for your apps","\u002Fbuild\u002Fapps\u002Fag-ui","04.build\u002F03.apps\u002F05.ag-ui",{"title":881,"path":882,"stem":883,"icon":249},"A chat in your own app","\u002Fbuild\u002Fapps\u002Fchat-app","04.build\u002F03.apps\u002F06.chat-app",{"title":885,"path":886,"stem":887,"children":888,"icon":767},"Follow live jobs","\u002Fbuild\u002Fapps\u002Flive-feeds","04.build\u002F03.apps\u002F07.live-feeds\u002F00.index",[889,890],{"title":885,"path":886,"stem":887,"icon":767},{"title":891,"path":892,"stem":893,"icon":767},"Feed access and browser streams","\u002Fbuild\u002Fapps\u002Flive-feeds\u002Fbrowser-and-access","04.build\u002F03.apps\u002F07.live-feeds\u002F01.browser-and-access",{"title":895,"path":896,"stem":897,"children":898,"icon":782},"Call agents over MCP","\u002Fbuild\u002Fapps\u002Fmcp-server","04.build\u002F03.apps\u002F08.mcp-server\u002F00.index",[899,900,904],{"title":895,"path":896,"stem":897,"icon":782},{"title":901,"path":902,"stem":903,"icon":782},"MCP client OAuth","\u002Fbuild\u002Fapps\u002Fmcp-server\u002Foauth","04.build\u002F03.apps\u002F08.mcp-server\u002F01.oauth",{"title":905,"path":906,"stem":907,"icon":782},"MCP security and limits","\u002Fbuild\u002Fapps\u002Fmcp-server\u002Fsecurity-and-limits","04.build\u002F03.apps\u002F08.mcp-server\u002F02.security-and-limits",{"title":909,"path":910,"stem":911,"icon":912},"A2A agents","\u002Fbuild\u002Fapps\u002Fa2a","04.build\u002F03.apps\u002F09.a2a","i-ph-share-network",{"title":914,"path":915,"stem":916,"children":917,"icon":919},"Run a remote agent","\u002Fbuild\u002Fapps\u002Fremote-agents","04.build\u002F03.apps\u002F10.remote-agents\u002F00.index",[918,920,924],{"title":914,"path":915,"stem":916,"icon":919},"i-ph-cloud-arrow-down",{"title":921,"path":922,"stem":923,"icon":919},"Remote sessions and limits","\u002Fbuild\u002Fapps\u002Fremote-agents\u002Fsessions-and-limits","04.build\u002F03.apps\u002F10.remote-agents\u002F01.sessions-and-limits",{"title":925,"path":926,"stem":927,"icon":919},"Connect an outside A2A agent","\u002Fbuild\u002Fapps\u002Fremote-agents\u002Fa2a","04.build\u002F03.apps\u002F10.remote-agents\u002F02.a2a",{"title":929,"path":930,"stem":931,"children":932,"icon":249},"Connect a chat channel","\u002Fbuild\u002Fapps\u002Fchat-channels","04.build\u002F03.apps\u002F11.chat-channels\u002F00.index",[933,934,938],{"title":929,"path":930,"stem":931,"icon":249},{"title":935,"path":936,"stem":937,"icon":249},"Chat channel conversations","\u002Fbuild\u002Fapps\u002Fchat-channels\u002Fconversations","04.build\u002F03.apps\u002F11.chat-channels\u002F01.conversations",{"title":939,"path":940,"stem":941,"icon":249},"Build a chat channel","\u002Fbuild\u002Fapps\u002Fchat-channels\u002Fbuild","04.build\u002F03.apps\u002F11.chat-channels\u002F02.build",{"title":943,"path":944,"stem":945,"icon":946},"Interop matrix","\u002Fbuild\u002Fapps\u002Finterop","04.build\u002F03.apps\u002F12.interop","i-ph-check-square-offset",{"title":948,"path":949,"stem":950,"children":951,"icon":71},"Improve","\u002Fimprove","05.improve\u002F00.index",[952,953,958,963,968,994,1021,1026,1031,1036],{"title":948,"path":949,"stem":950},{"title":954,"path":955,"stem":956,"icon":957},"Search, compare and fix","\u002Fimprove\u002Fsearch-and-compare","05.improve\u002F01.search-and-compare","i-ph-magnifying-glass",{"title":959,"path":960,"stem":961,"icon":962},"Errors and insights","\u002Fimprove\u002Ferrors-and-insights","05.improve\u002F02.errors-and-insights","i-ph-chart-line",{"title":964,"path":965,"stem":966,"icon":967},"Measured savings","\u002Fimprove\u002Fmeasured-savings","05.improve\u002F03.measured-savings","i-ph-scales",{"title":969,"path":970,"stem":971,"children":972,"icon":463},"Evals and quality gates","\u002Fimprove\u002Fevals","05.improve\u002F04.evals\u002F00.index",[973,974,978,982,986,990],{"title":969,"path":970,"stem":971,"icon":463},{"title":975,"path":976,"stem":977},"Case expectations","\u002Fimprove\u002Fevals\u002Fcases","05.improve\u002F04.evals\u002F01.cases",{"title":979,"path":980,"stem":981},"Record and replay answers","\u002Fimprove\u002Fevals\u002Frecordings","05.improve\u002F04.evals\u002F02.recordings",{"title":983,"path":984,"stem":985},"Check policy paths","\u002Fimprove\u002Fevals\u002Fcoverage","05.improve\u002F04.evals\u002F03.coverage",{"title":987,"path":988,"stem":989},"Gate a plugin update","\u002Fimprove\u002Fevals\u002Fquality-gates","05.improve\u002F04.evals\u002F04.quality-gates",{"title":991,"path":992,"stem":993},"Track quality and regressions","\u002Fimprove\u002Fevals\u002Fregressions","05.improve\u002F04.evals\u002F05.regressions",{"title":995,"path":996,"stem":997,"children":998,"icon":1000},"Outcome checks and patterns","\u002Fimprove\u002Foutcome-checks","05.improve\u002F05.outcome-checks\u002F00.index",[999,1001,1005,1009,1013,1017],{"title":995,"path":996,"stem":997,"icon":1000},"i-ph-gavel",{"title":1002,"path":1003,"stem":1004},"Choose a judge and rubric","\u002Fimprove\u002Foutcome-checks\u002Fjudges","05.improve\u002F05.outcome-checks\u002F01.judges",{"title":1006,"path":1007,"stem":1008},"Measure a judge over time","\u002Fimprove\u002Foutcome-checks\u002Fsampling","05.improve\u002F05.outcome-checks\u002F02.sampling",{"title":1010,"path":1011,"stem":1012},"Use a reviewer agent","\u002Fimprove\u002Foutcome-checks\u002Freviewer","05.improve\u002F05.outcome-checks\u002F03.reviewer",{"title":1014,"path":1015,"stem":1016},"Choose among candidate answers","\u002Fimprove\u002Foutcome-checks\u002Fselection","05.improve\u002F05.outcome-checks\u002F04.selection",{"title":1018,"path":1019,"stem":1020},"Test and roll out judged agents","\u002Fimprove\u002Foutcome-checks\u002Frollouts","05.improve\u002F05.outcome-checks\u002F05.rollouts",{"title":1022,"path":1023,"stem":1024,"icon":1025},"Measured results","\u002Fimprove\u002Fmeasured-results","05.improve\u002F06.measured-results","i-ph-chart-bar",{"title":1027,"path":1028,"stem":1029,"icon":1030},"Comparisons of a changed agent","\u002Fimprove\u002Fcomparisons-of-a-changed-agent","05.improve\u002F07.comparisons-of-a-changed-agent","i-ph-git-diff",{"title":1032,"path":1033,"stem":1034,"icon":1035},"Where a fix belongs","\u002Fimprove\u002Fwhere-a-fix-belongs","05.improve\u002F08.where-a-fix-belongs","i-ph-ladder",{"title":1037,"path":1038,"stem":1039,"icon":957},"Evidence for agents","\u002Fimprove\u002Fevidence-for-agents","05.improve\u002F09.evidence-for-agents",{"title":1041,"path":1042,"stem":1043,"children":1044,"icon":71},"Govern","\u002Fgovern","06.govern\u002F00.index",[1045,1047,1085,1089,1111,1115,1120,1151,1170,1175,1180,1184,1207],{"title":1046,"path":1042,"stem":1043},"Govern agents",{"title":1048,"path":1049,"stem":1050,"children":1051,"icon":98},"Tool policy","\u002Fgovern\u002Ftool-policy","06.govern\u002F01.tool-policy\u002F00.index",[1052,1053,1057,1061,1065,1069,1073,1077,1081],{"title":1048,"path":1049,"stem":1050,"icon":98},{"title":1054,"path":1055,"stem":1056},"Export and apply a tool policy","\u002Fgovern\u002Ftool-policy\u002Ffiles","06.govern\u002F01.tool-policy\u002F02.files",{"title":1058,"path":1059,"stem":1060},"Rules for plugin and remote functions","\u002Fgovern\u002Ftool-policy\u002Fplugin-functions","06.govern\u002F01.tool-policy\u002F03.plugin-functions",{"title":1062,"path":1063,"stem":1064},"Function conditions and action classes","\u002Fgovern\u002Ftool-policy\u002Fconditions","06.govern\u002F01.tool-policy\u002F04.conditions",{"title":1066,"path":1067,"stem":1068},"Rules for taint, origins and sequences","\u002Fgovern\u002Ftool-policy\u002Forigins-and-sequences","06.govern\u002F01.tool-policy\u002F05.origins-and-sequences",{"title":1070,"path":1071,"stem":1072},"How the runtime enforces tool policy","\u002Fgovern\u002Ftool-policy\u002Fruntime","06.govern\u002F01.tool-policy\u002F06.runtime",{"title":1074,"path":1075,"stem":1076},"Preview, review and lint tool policy changes","\u002Fgovern\u002Ftool-policy\u002Freview-changes","06.govern\u002F01.tool-policy\u002F07.review-changes",{"title":1078,"path":1079,"stem":1080},"Assign duties to tool calls","\u002Fgovern\u002Ftool-policy\u002Fduties","06.govern\u002F01.tool-policy\u002F08.duties",{"title":1082,"path":1083,"stem":1084},"Command rules in a tool policy","\u002Fgovern\u002Ftool-policy\u002Fcommand-rules","06.govern\u002F01.tool-policy\u002F09.command-rules",{"title":1086,"path":1087,"stem":1088,"icon":230},"Governance replay","\u002Fgovern\u002Fgovernance-replay","06.govern\u002F02.governance-replay",{"title":1090,"path":1091,"stem":1092,"children":1093,"icon":532},"Reviewed changes","\u002Fgovern\u002Freviewed-changes","06.govern\u002F03.reviewed-changes\u002F00.index",[1094,1095,1099,1103,1107],{"title":1090,"path":1091,"stem":1092,"icon":532},{"title":1096,"path":1097,"stem":1098},"Review assistant and job proposals","\u002Fgovern\u002Freviewed-changes\u002Fproposals","06.govern\u002F03.reviewed-changes\u002F02.proposals",{"title":1100,"path":1101,"stem":1102},"Review plugin configurations","\u002Fgovern\u002Freviewed-changes\u002Fplugin-configurations","06.govern\u002F03.reviewed-changes\u002F03.plugin-configurations",{"title":1104,"path":1105,"stem":1106},"Review and roll back changesets","\u002Fgovern\u002Freviewed-changes\u002Fchangesets","06.govern\u002F03.reviewed-changes\u002F04.changesets",{"title":1108,"path":1109,"stem":1110},"Review changes to protected paths","\u002Fgovern\u002Freviewed-changes\u002Fprotected-paths","06.govern\u002F03.reviewed-changes\u002F05.protected-paths",{"title":1112,"path":1113,"stem":1114,"icon":666},"AI labels","\u002Fgovern\u002Fai-labels","06.govern\u002F04.ai-labels",{"title":1116,"path":1117,"stem":1118,"icon":1119},"Kill switches","\u002Fgovern\u002Fkill-switches","06.govern\u002F05.kill-switches","i-ph-power",{"title":1121,"path":1122,"stem":1123,"children":1124,"icon":1126},"Personal data","\u002Fgovern\u002Fpersonal-data","06.govern\u002F06.personal-data\u002F00.index",[1125,1127,1131,1135,1139,1143,1147],{"title":1121,"path":1122,"stem":1123,"icon":1126},"i-ph-user-minus",{"title":1128,"path":1129,"stem":1130},"Associate people and purposes with jobs","\u002Fgovern\u002Fpersonal-data\u002Fassociate-people","06.govern\u002F06.personal-data\u002F01.associate-people",{"title":1132,"path":1133,"stem":1134},"Find and export personal data","\u002Fgovern\u002Fpersonal-data\u002Fexport","06.govern\u002F06.personal-data\u002F02.export",{"title":1136,"path":1137,"stem":1138},"Restrict processing and record contests","\u002Fgovern\u002Fpersonal-data\u002Frestrictions-and-contests","06.govern\u002F06.personal-data\u002F03.restrictions-and-contests",{"title":1140,"path":1141,"stem":1142},"Erase personal data","\u002Fgovern\u002Fpersonal-data\u002Ferase","06.govern\u002F06.personal-data\u002F04.erase",{"title":1144,"path":1145,"stem":1146},"Retain records and restore backups","\u002Fgovern\u002Fpersonal-data\u002Fretention","06.govern\u002F06.personal-data\u002F05.retention",{"title":1148,"path":1149,"stem":1150},"Personal data held by plugins","\u002Fgovern\u002Fpersonal-data\u002Fplugin-records","06.govern\u002F06.personal-data\u002F06.plugin-records",{"title":1152,"path":1153,"stem":1154,"children":1155,"icon":1157},"Taint and labels","\u002Fgovern\u002Ftaint-and-labels","06.govern\u002F07.taint-and-labels\u002F00.index",[1156,1158,1162,1166],{"title":1152,"path":1153,"stem":1154,"icon":1157},"i-ph-drop-half-bottom",{"title":1159,"path":1160,"stem":1161},"Set rules on taint and labels","\u002Fgovern\u002Ftaint-and-labels\u002Frules","06.govern\u002F07.taint-and-labels\u002F02.rules",{"title":1163,"path":1164,"stem":1165},"Set clearance, egress and content walls","\u002Fgovern\u002Ftaint-and-labels\u002Flabel-policies","06.govern\u002F07.taint-and-labels\u002F03.label-policies",{"title":1167,"path":1168,"stem":1169},"Read outside text in a quarantine child","\u002Fgovern\u002Ftaint-and-labels\u002Fquarantine","06.govern\u002F07.taint-and-labels\u002F04.quarantine",{"title":1171,"path":1172,"stem":1173,"icon":1174},"Works-council mode","\u002Fgovern\u002Fworks-council-mode","06.govern\u002F08.works-council-mode","i-ph-users-three",{"title":1176,"path":1177,"stem":1178,"icon":1179},"Incidents","\u002Fgovern\u002Fincidents","06.govern\u002F09.incidents","i-ph-siren",{"title":1181,"path":1182,"stem":1183,"icon":213},"Inventory","\u002Fgovern\u002Finventory","06.govern\u002F10.inventory",{"title":1185,"path":1186,"stem":1187,"children":1188,"icon":1190},"Audit trail","\u002Fgovern\u002Faudit-trail","06.govern\u002F11.audit-trail\u002F00.index",[1189,1191,1195,1199,1203],{"title":1185,"path":1186,"stem":1187,"icon":1190},"i-ph-scroll",{"title":1192,"path":1193,"stem":1194},"Audit records and run identity","\u002Fgovern\u002Faudit-trail\u002Frecords","06.govern\u002F11.audit-trail\u002F02.records",{"title":1196,"path":1197,"stem":1198},"Verify the audit chain","\u002Fgovern\u002Faudit-trail\u002Fverification","06.govern\u002F11.audit-trail\u002F03.verification",{"title":1200,"path":1201,"stem":1202},"Export and verify evidence bundles","\u002Fgovern\u002Faudit-trail\u002Fevidence-bundles","06.govern\u002F11.audit-trail\u002F04.evidence-bundles",{"title":1204,"path":1205,"stem":1206},"Audit retention, erasure and legal holds","\u002Fgovern\u002Faudit-trail\u002Fretention","06.govern\u002F11.audit-trail\u002F05.retention",{"title":1208,"path":1209,"stem":1210,"children":1211,"icon":1213},"Command rules","\u002Fgovern\u002Fcommand-rules","06.govern\u002F12.command-rules\u002F00.index",[1212,1214,1218,1222,1226],{"title":1208,"path":1209,"stem":1210,"icon":1213},"i-ph-terminal",{"title":1215,"path":1216,"stem":1217},"Command rule patterns","\u002Fgovern\u002Fcommand-rules\u002Fpatterns","06.govern\u002F12.command-rules\u002F02.patterns",{"title":1219,"path":1220,"stem":1221},"What the command reader understands","\u002Fgovern\u002Fcommand-rules\u002Fcommand-reader","06.govern\u002F12.command-rules\u002F03.command-reader",{"title":1223,"path":1224,"stem":1225},"Create a command rule from an approval","\u002Fgovern\u002Fcommand-rules\u002Fallow-from-card","06.govern\u002F12.command-rules\u002F04.allow-from-card",{"title":1227,"path":1228,"stem":1229},"Command rule evaluation and limits","\u002Fgovern\u002Fcommand-rules\u002Fevaluation-and-limits","06.govern\u002F12.command-rules\u002F05.evaluation-and-limits",{"title":1231,"path":1232,"stem":1233,"children":1234,"icon":71},"Fleet","\u002Ffleet","07.fleet\u002F00.index",[1235,1237,1242,1247,1251,1256,1260,1265,1270,1274,1278,1297,1302,1307,1325,1329,1333,1352,1357,1380,1385,1390,1395,1399,1458,1462,1467,1481,1486,1490,1494],{"title":1236,"path":1232,"stem":1233},"Operate a fleet",{"title":1238,"path":1239,"stem":1240,"icon":1241},"Dev mode","\u002Ffleet\u002Fdev-mode","07.fleet\u002F01.dev-mode","i-ph-laptop",{"title":1243,"path":1244,"stem":1245,"icon":1246},"Run a cluster","\u002Ffleet\u002Fcluster","07.fleet\u002F02.cluster","i-ph-hard-drives",{"title":1248,"path":1249,"stem":1250,"icon":782},"Join nodes","\u002Ffleet\u002Fjoin-nodes","07.fleet\u002F03.join-nodes",{"title":1252,"path":1253,"stem":1254,"icon":1255},"Manage nodes","\u002Ffleet\u002Fmanage-nodes","07.fleet\u002F04.manage-nodes","i-ph-list-bullets",{"title":1257,"path":1258,"stem":1259,"icon":527},"Node health","\u002Ffleet\u002Fnodes","07.fleet\u002F05.nodes",{"title":1261,"path":1262,"stem":1263,"icon":1264},"Nodes as services","\u002Ffleet\u002Fservices","07.fleet\u002F06.services","i-ph-gear-six",{"title":1266,"path":1267,"stem":1268,"icon":1269},"Doctor","\u002Ffleet\u002Fdoctor","07.fleet\u002F07.doctor","i-ph-stethoscope",{"title":1271,"path":1272,"stem":1273,"icon":421},"Troubleshooting","\u002Ffleet\u002Ftroubleshooting","07.fleet\u002F08.troubleshooting",{"title":1275,"path":1276,"stem":1277,"icon":962},"Tracing and metrics","\u002Ffleet\u002Fobservability","07.fleet\u002F09.observability",{"title":1279,"path":1280,"stem":1281,"children":1282,"icon":1284},"Choose sandbox tier 2","\u002Ffleet\u002Fsandbox-tier-2","07.fleet\u002F10.sandbox-tier-2\u002F00.index",[1283,1285,1289,1293],{"title":1279,"path":1280,"stem":1281,"icon":1284},"i-ph-shield-chevron",{"title":1286,"path":1287,"stem":1288,"icon":1284},"Set up gVisor","\u002Ffleet\u002Fsandbox-tier-2\u002Fgvisor","07.fleet\u002F10.sandbox-tier-2\u002F01.gvisor",{"title":1290,"path":1291,"stem":1292,"icon":1284},"Set up microVM isolation","\u002Ffleet\u002Fsandbox-tier-2\u002Fmicrovms","07.fleet\u002F10.sandbox-tier-2\u002F02.microvms",{"title":1294,"path":1295,"stem":1296,"icon":1284},"Configure remote sandboxes","\u002Ffleet\u002Fsandbox-tier-2\u002Fremote","07.fleet\u002F10.sandbox-tier-2\u002F03.remote",{"title":1298,"path":1299,"stem":1300,"icon":1301},"Sandbox on macOS","\u002Ffleet\u002Fsandbox-on-macos","07.fleet\u002F11.sandbox-on-macos","i-ph-apple-logo",{"title":1303,"path":1304,"stem":1305,"icon":1306},"Sandbox on Windows","\u002Ffleet\u002Fsandbox-on-windows","07.fleet\u002F12.sandbox-on-windows","i-ph-windows-logo",{"title":1308,"path":1309,"stem":1310,"children":1311,"icon":797},"Configure local models","\u002Ffleet\u002Flocal-models","07.fleet\u002F13.local-models\u002F00.index",[1312,1313,1317,1321],{"title":1308,"path":1309,"stem":1310,"icon":797},{"title":1314,"path":1315,"stem":1316,"icon":797},"Share a local model with the fleet","\u002Ffleet\u002Flocal-models\u002Ffleet","07.fleet\u002F13.local-models\u002F01.fleet",{"title":1318,"path":1319,"stem":1320,"icon":797},"Review local-model safety checks","\u002Ffleet\u002Flocal-models\u002Ftrust","07.fleet\u002F13.local-models\u002F02.trust",{"title":1322,"path":1323,"stem":1324,"icon":797},"Size and price local models","\u002Ffleet\u002Flocal-models\u002Fsizing-and-cost","07.fleet\u002F13.local-models\u002F03.sizing-and-cost",{"title":1326,"path":1327,"stem":1328,"icon":1241},"Agents on a Mac with MLX","\u002Ffleet\u002Flocal-models-on-a-mac","07.fleet\u002F14.local-models-on-a-mac",{"title":1330,"path":1331,"stem":1332,"icon":127},"Queues","\u002Ffleet\u002Fqueues","07.fleet\u002F15.queues",{"title":1334,"path":1335,"stem":1336,"children":1337,"icon":1339},"Choose a Temporal backend","\u002Ffleet\u002Ftemporal-backends","07.fleet\u002F16.temporal-backends\u002F00.index",[1338,1340,1344,1348],{"title":1334,"path":1335,"stem":1336,"icon":1339},"i-ph-cloud",{"title":1341,"path":1342,"stem":1343},"Set retention and move tenants","\u002Ffleet\u002Ftemporal-backends\u002Fretention-and-migration","07.fleet\u002F16.temporal-backends\u002F01.retention-and-migration",{"title":1345,"path":1346,"stem":1347},"Encrypt Temporal payloads","\u002Ffleet\u002Ftemporal-backends\u002Fencryption","07.fleet\u002F16.temporal-backends\u002F02.encryption",{"title":1349,"path":1350,"stem":1351},"Read payloads in Temporal UI","\u002Ffleet\u002Ftemporal-backends\u002Fcodec","07.fleet\u002F16.temporal-backends\u002F03.codec",{"title":1353,"path":1354,"stem":1355,"icon":1356},"Regions","\u002Ffleet\u002Fregions","07.fleet\u002F17.regions","i-ph-globe-hemisphere-east",{"title":1358,"path":1359,"stem":1360,"children":1361,"icon":1363},"Run the roles separately","\u002Ffleet\u002Fseparate-roles","07.fleet\u002F18.separate-roles\u002F00.index",[1362,1364,1368,1372,1376],{"title":1358,"path":1359,"stem":1360,"icon":1363},"i-ph-squares-four",{"title":1365,"path":1366,"stem":1367},"Prepare database rights","\u002Ffleet\u002Fseparate-roles\u002Fdatabase-rights","07.fleet\u002F18.separate-roles\u002F01.database-rights",{"title":1369,"path":1370,"stem":1371},"Keep plaintext secrets on edges","\u002Ffleet\u002Fseparate-roles\u002Fsecrets","07.fleet\u002F18.separate-roles\u002F02.secrets",{"title":1373,"path":1374,"stem":1375},"Operate through role outages","\u002Ffleet\u002Fseparate-roles\u002Foutages","07.fleet\u002F18.separate-roles\u002F03.outages",{"title":1377,"path":1378,"stem":1379},"Use Temporal UI with separate roles","\u002Ffleet\u002Fseparate-roles\u002Ftemporal-ui","07.fleet\u002F18.separate-roles\u002F04.temporal-ui",{"title":1381,"path":1382,"stem":1383,"icon":1384},"High availability","\u002Ffleet\u002Fhigh-availability","07.fleet\u002F19.high-availability","i-ph-copy",{"title":1386,"path":1387,"stem":1388,"icon":1389},"Management over a WAN","\u002Ffleet\u002Fmanagement-over-a-wan","07.fleet\u002F20.management-over-a-wan","i-ph-globe-hemisphere-west",{"title":1391,"path":1392,"stem":1393,"icon":1394},"Cloud federation","\u002Ffleet\u002Fcloud-federation","07.fleet\u002F21.cloud-federation","i-ph-cloud-check",{"title":1396,"path":1397,"stem":1398,"icon":451},"Payload storage","\u002Ffleet\u002Fpayload-storage","07.fleet\u002F22.payload-storage",{"title":1400,"path":1401,"stem":1402,"children":1403,"icon":1405},"Upgrade a cluster","\u002Ffleet\u002Fupgrades","07.fleet\u002F23.upgrades\u002F00.index",[1404,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454],{"title":1400,"path":1401,"stem":1402,"icon":1405},"i-ph-arrows-clockwise",{"title":1407,"path":1408,"stem":1409},"Prepare for sandbox changes","\u002Ffleet\u002Fupgrades\u002Fsandbox-changes","07.fleet\u002F23.upgrades\u002F01.sandbox-changes",{"title":1411,"path":1412,"stem":1413},"Review policy changes","\u002Ffleet\u002Fupgrades\u002Fpolicy-changes","07.fleet\u002F23.upgrades\u002F02.policy-changes",{"title":1415,"path":1416,"stem":1417},"Review data and privacy migrations","\u002Ffleet\u002Fupgrades\u002Fdata-migrations","07.fleet\u002F23.upgrades\u002F03.data-migrations",{"title":1419,"path":1420,"stem":1421},"Prepare storage and identity migrations","\u002Ffleet\u002Fupgrades\u002Fstorage-and-identity","07.fleet\u002F23.upgrades\u002F04.storage-and-identity",{"title":1423,"path":1424,"stem":1425},"Prepare plugins for an upgrade","\u002Ffleet\u002Fupgrades\u002Fplugin-changes","07.fleet\u002F23.upgrades\u002F05.plugin-changes",{"title":1427,"path":1428,"stem":1429},"Keep calls compatible during upgrades","\u002Ffleet\u002Fupgrades\u002Fcall-compatibility","07.fleet\u002F23.upgrades\u002F06.call-compatibility",{"title":1431,"path":1432,"stem":1433},"Review model and budget migrations","\u002Ffleet\u002Fupgrades\u002Fmodel-and-budget-changes","07.fleet\u002F23.upgrades\u002F07.model-and-budget-changes",{"title":1435,"path":1436,"stem":1437},"Migrate to shared worker pools","\u002Ffleet\u002Fupgrades\u002Fshared-pools","07.fleet\u002F23.upgrades\u002F08.shared-pools",{"title":1439,"path":1440,"stem":1441},"Upgrade node binaries and runtimes","\u002Ffleet\u002Fupgrades\u002Fnodes","07.fleet\u002F23.upgrades\u002F09.nodes",{"title":1443,"path":1444,"stem":1445},"Understand runtime shutdown","\u002Ffleet\u002Fupgrades\u002Fruntime-shutdown","07.fleet\u002F23.upgrades\u002F10.runtime-shutdown",{"title":1447,"path":1448,"stem":1449},"Review runtime behaviour changes","\u002Ffleet\u002Fupgrades\u002Fruntime-changes","07.fleet\u002F23.upgrades\u002F11.runtime-changes",{"title":1451,"path":1452,"stem":1453},"Verify releases and switch channels","\u002Ffleet\u002Fupgrades\u002Frelease-verification","07.fleet\u002F23.upgrades\u002F12.release-verification",{"title":1455,"path":1456,"stem":1457},"Roll a runtime out in steps","\u002Ffleet\u002Fupgrades\u002Fruntime-rollouts","07.fleet\u002F23.upgrades\u002F13.runtime-rollouts",{"title":1459,"path":1460,"stem":1461,"icon":463},"Releases","\u002Ffleet\u002Freleases","07.fleet\u002F24.releases",{"title":1463,"path":1464,"stem":1465,"icon":1466},"Docker","\u002Ffleet\u002Fdocker","07.fleet\u002F25.docker","i-ph-shipping-container",{"title":1468,"path":1469,"stem":1470,"children":1471,"icon":480},"Deploy with Kubernetes","\u002Ffleet\u002Fkubernetes","07.fleet\u002F26.kubernetes\u002F00.index",[1472,1473,1477],{"title":1468,"path":1469,"stem":1470,"icon":480},{"title":1474,"path":1475,"stem":1476,"icon":480},"Helm objects and values","\u002Ffleet\u002Fkubernetes\u002Fvalues","07.fleet\u002F26.kubernetes\u002F01.values",{"title":1478,"path":1479,"stem":1480,"icon":480},"Maintain a Kubernetes deployment","\u002Ffleet\u002Fkubernetes\u002Fmaintenance","07.fleet\u002F26.kubernetes\u002F02.maintenance",{"title":1482,"path":1483,"stem":1484,"icon":1485},"Offline install","\u002Ffleet\u002Foffline-install","07.fleet\u002F27.offline-install","i-ph-airplane-tilt",{"title":1487,"path":1488,"stem":1489,"icon":98},"FIPS builds","\u002Ffleet\u002Ffips","07.fleet\u002F28.fips",{"title":1491,"path":1492,"stem":1493,"icon":249},"Run Orchestrator Zero from an MCP client","\u002Ffleet\u002Fmcp-client","07.fleet\u002F29.mcp-client",{"title":1495,"path":1496,"stem":1497,"children":1498,"icon":451},"Back up a cluster","\u002Ffleet\u002Fbackups","07.fleet\u002F30.backups\u002F00.index",[1499,1500],{"title":1495,"path":1496,"stem":1497,"icon":451},{"title":1501,"path":1502,"stem":1503},"Restore a cluster","\u002Ffleet\u002Fbackups\u002Frestore","07.fleet\u002F30.backups\u002F01.restore",{"title":1505,"path":1506,"stem":1507,"children":1508,"icon":71},"Spend","\u002Fspend","08.spend\u002F00.index",[1509,1511,1533,1547,1585],{"title":1510,"path":1506,"stem":1507},"Manage model access and spending",{"title":1512,"path":1513,"stem":1514,"children":1515,"icon":552},"Read cost and usage","\u002Fspend\u002Fcost-and-usage","08.spend\u002F01.cost-and-usage\u002F00.index",[1516,1517,1521,1525,1529],{"title":1512,"path":1513,"stem":1514,"icon":552},{"title":1518,"path":1519,"stem":1520},"Understand recorded charges","\u002Fspend\u002Fcost-and-usage\u002Faccounting","08.spend\u002F01.cost-and-usage\u002F01.accounting",{"title":1522,"path":1523,"stem":1524},"Read model call timings","\u002Fspend\u002Fcost-and-usage\u002Ftimings","08.spend\u002F01.cost-and-usage\u002F02.timings",{"title":1526,"path":1527,"stem":1528},"Export usage","\u002Fspend\u002Fcost-and-usage\u002Fexports","08.spend\u002F01.cost-and-usage\u002F03.exports",{"title":1530,"path":1531,"stem":1532},"Explain prices and cache costs","\u002Fspend\u002Fcost-and-usage\u002Fprices-and-cache","08.spend\u002F01.cost-and-usage\u002F04.prices-and-cache",{"title":1534,"path":1535,"stem":1536,"children":1537,"icon":134},"Set budgets and quotas","\u002Fspend\u002Fbudgets-and-quotas","08.spend\u002F02.budgets-and-quotas\u002F00.index",[1538,1539,1543],{"title":1534,"path":1535,"stem":1536,"icon":134},{"title":1540,"path":1541,"stem":1542,"icon":134},"Understand quota charging and refusals","\u002Fspend\u002Fbudgets-and-quotas\u002Fcharging","08.spend\u002F02.budgets-and-quotas\u002F01.charging",{"title":1544,"path":1545,"stem":1546,"icon":134},"Request and review budget","\u002Fspend\u002Fbudgets-and-quotas\u002Frequests","08.spend\u002F02.budgets-and-quotas\u002F02.requests",{"title":1548,"path":1549,"stem":1550,"children":1551,"icon":416},"Connect a model provider","\u002Fspend\u002Fmodels-and-keys","08.spend\u002F03.models-and-keys\u002F00.index",[1552,1553,1557,1561,1565,1569,1573,1577,1581],{"title":1548,"path":1549,"stem":1550,"icon":416},{"title":1554,"path":1555,"stem":1556},"Choose model aliases","\u002Fspend\u002Fmodels-and-keys\u002Faliases","08.spend\u002F03.models-and-keys\u002F01.aliases",{"title":1558,"path":1559,"stem":1560},"Map a plugin's models","\u002Fspend\u002Fmodels-and-keys\u002Fmapping","08.spend\u002F03.models-and-keys\u002F02.mapping",{"title":1562,"path":1563,"stem":1564},"Set reasoning effort and cascades","\u002Fspend\u002Fmodels-and-keys\u002Feffort-and-cascades","08.spend\u002F03.models-and-keys\u002F03.effort-and-cascades",{"title":1566,"path":1567,"stem":1568},"Authenticate model calls","\u002Fspend\u002Fmodels-and-keys\u002Fauthentication","08.spend\u002F03.models-and-keys\u002F04.authentication",{"title":1570,"path":1571,"stem":1572},"Control what model calls can reach","\u002Fspend\u002Fmodels-and-keys\u002Fdata-rules","08.spend\u002F03.models-and-keys\u002F05.data-rules",{"title":1574,"path":1575,"stem":1576},"Pool model deployments","\u002Fspend\u002Fmodels-and-keys\u002Fdeployment-pools","08.spend\u002F03.models-and-keys\u002F06.deployment-pools",{"title":1578,"path":1579,"stem":1580},"Configure caches and server tools","\u002Fspend\u002Fmodels-and-keys\u002Fcache-and-tools","08.spend\u002F03.models-and-keys\u002F07.cache-and-tools",{"title":1582,"path":1583,"stem":1584},"Check model changes and retirement","\u002Fspend\u002Fmodels-and-keys\u002Fcanaries-and-retirement","08.spend\u002F03.models-and-keys\u002F08.canaries-and-retirement",{"title":1586,"path":1587,"stem":1588,"icon":1589},"Translating providers","\u002Fspend\u002Ftranslating-providers","08.spend\u002F04.translating-providers","i-ph-translate",{"title":1591,"path":1592,"stem":1593,"children":1594,"icon":71},"Admin","\u002Fadmin","09.admin\u002F00.index",[1595,1597,1623,1650,1654,1658,1680,1685,1696],{"title":1596,"path":1592,"stem":1593},"Administer access and credentials",{"title":1598,"path":1599,"stem":1600,"children":1601,"icon":98},"Configure sign-in","\u002Fadmin\u002Fsign-in","09.admin\u002F01.sign-in\u002F00.index",[1602,1603,1607,1611,1615,1619],{"title":1598,"path":1599,"stem":1600,"icon":98},{"title":1604,"path":1605,"stem":1606},"Configure an identity provider","\u002Fadmin\u002Fsign-in\u002Fidentity-providers","09.admin\u002F01.sign-in\u002F01.identity-providers",{"title":1608,"path":1609,"stem":1610},"Provision accounts from a directory","\u002Fadmin\u002Fsign-in\u002Fprovisioning","09.admin\u002F01.sign-in\u002F02.provisioning",{"title":1612,"path":1613,"stem":1614},"Manage passwords and second factors","\u002Fadmin\u002Fsign-in\u002Fpasswords","09.admin\u002F01.sign-in\u002F03.passwords",{"title":1616,"path":1617,"stem":1618},"Sign in from the CLI and MCP clients","\u002Fadmin\u002Fsign-in\u002Fclients","09.admin\u002F01.sign-in\u002F04.clients",{"title":1620,"path":1621,"stem":1622},"End sessions and inspect sign-in events","\u002Fadmin\u002Fsign-in\u002Fsessions","09.admin\u002F01.sign-in\u002F05.sessions",{"title":1624,"path":1625,"stem":1626,"children":1627,"icon":1629},"Manage tenant secrets","\u002Fadmin\u002Fsecrets","09.admin\u002F02.secrets\u002F00.index",[1628,1630,1634,1638,1642,1646],{"title":1624,"path":1625,"stem":1626,"icon":1629},"i-ph-key",{"title":1631,"path":1632,"stem":1633},"Bind secrets to destination hosts","\u002Fadmin\u002Fsecrets\u002Fhost-bindings","09.admin\u002F02.secrets\u002F01.host-bindings",{"title":1635,"path":1636,"stem":1637},"Test and rotate secrets","\u002Fadmin\u002Fsecrets\u002Frotation","09.admin\u002F02.secrets\u002F02.rotation",{"title":1639,"path":1640,"stem":1641},"Use an external secret store","\u002Fadmin\u002Fsecrets\u002Fexternal-stores","09.admin\u002F02.secrets\u002F03.external-stores",{"title":1643,"path":1644,"stem":1645},"Deliver and scan plugin secrets","\u002Fadmin\u002Fsecrets\u002Fplugin-secrets","09.admin\u002F02.secrets\u002F04.plugin-secrets",{"title":1647,"path":1648,"stem":1649},"Configure plugin settings","\u002Fadmin\u002Fsecrets\u002Fsettings","09.admin\u002F02.secrets\u002F05.settings",{"title":1651,"path":1652,"stem":1653,"icon":1629},"Credential injection","\u002Fadmin\u002Fcredential-injection","09.admin\u002F03.credential-injection",{"title":1655,"path":1656,"stem":1657,"icon":1629},"Key commands","\u002Fadmin\u002Fkey-commands","09.admin\u002F04.key-commands",{"title":1659,"path":1660,"stem":1661,"children":1662,"icon":782},"Connect a plugin to another system","\u002Fadmin\u002Fconnections","09.admin\u002F05.connections\u002F00.index",[1663,1664,1668,1672,1676],{"title":1659,"path":1660,"stem":1661,"icon":782},{"title":1665,"path":1666,"stem":1667,"icon":782},"Renew and reconnect credentials","\u002Fadmin\u002Fconnections\u002Frenewal","09.admin\u002F05.connections\u002F01.renewal",{"title":1669,"path":1670,"stem":1671,"icon":782},"Restrict connection destinations","\u002Fadmin\u002Fconnections\u002Fdestinations","09.admin\u002F05.connections\u002F02.destinations",{"title":1673,"path":1674,"stem":1675,"icon":782},"Diagnose connection failures","\u002Fadmin\u002Fconnections\u002Ftroubleshooting","09.admin\u002F05.connections\u002F03.troubleshooting",{"title":1677,"path":1678,"stem":1679,"icon":782},"Understand connection security","\u002Fadmin\u002Fconnections\u002Fsecurity","09.admin\u002F05.connections\u002F04.security",{"title":1681,"path":1682,"stem":1683,"icon":1684},"Tenants","\u002Fadmin\u002Ftenants","09.admin\u002F06.tenants","i-ph-buildings",{"title":1686,"path":1687,"stem":1688,"children":1689,"icon":1691},"Export and verify a tenant","\u002Fadmin\u002Ftenant-export","09.admin\u002F07.tenant-export\u002F00.index",[1690,1692],{"title":1686,"path":1687,"stem":1688,"icon":1691},"i-ph-export",{"title":1693,"path":1694,"stem":1695,"icon":1691},"Tenant export format","\u002Fadmin\u002Ftenant-export\u002Fformat","09.admin\u002F07.tenant-export\u002F01.format",{"title":1697,"path":1698,"stem":1699,"icon":1700},"Notifications","\u002Fadmin\u002Fnotifications","09.admin\u002F08.notifications","i-ph-bell-ringing",{"title":1702,"path":1703,"stem":1704,"children":1705,"icon":71},"Reference","\u002Freference","10.reference\u002F00.index",[1706,1707,1726,1760,1794,1798,1803,1807,1812,1817,1822,1826],{"title":1702,"path":1703,"stem":1704},{"title":1708,"path":1709,"stem":1710,"children":1711,"icon":1725},"CLI","\u002Freference\u002Fcli","10.reference\u002F01.cli\u002F00.index",[1712,1713,1719],{"title":1708,"path":1709,"stem":1710},{"title":1714,"path":1715,"stem":1716,"children":1717},"oz0","\u002Freference\u002Fcli\u002Foz0","10.reference\u002F01.cli\u002F01.oz0\u002F00.index",[1718],{"title":1714,"path":1715,"stem":1716},{"title":1720,"path":1721,"stem":1722,"children":1723},"oz0-node","\u002Freference\u002Fcli\u002Foz0-node","10.reference\u002F01.cli\u002F02.oz0-node\u002F00.index",[1724],{"title":1720,"path":1721,"stem":1722},"i-ph-terminal-window",{"title":1727,"path":1728,"stem":1729,"children":1730,"icon":725},"oz0-plugin.yaml","\u002Freference\u002Fplugin-manifest","10.reference\u002F02.plugin-manifest\u002F00.index",[1731,1732,1736,1740,1744,1748,1752,1756],{"title":1727,"path":1728,"stem":1729,"icon":725},{"title":1733,"path":1734,"stem":1735},"Dependencies and cross-plugin access","\u002Freference\u002Fplugin-manifest\u002Fdependencies","10.reference\u002F02.plugin-manifest\u002F01.dependencies",{"title":1737,"path":1738,"stem":1739},"Tool declarations","\u002Freference\u002Fplugin-manifest\u002Ftools","10.reference\u002F02.plugin-manifest\u002F02.tools",{"title":1741,"path":1742,"stem":1743},"Harnesses, events and channels","\u002Freference\u002Fplugin-manifest\u002Fruntimes","10.reference\u002F02.plugin-manifest\u002F03.runtimes",{"title":1745,"path":1746,"stem":1747},"Connections and hooks","\u002Freference\u002Fplugin-manifest\u002Fconnections","10.reference\u002F02.plugin-manifest\u002F04.connections",{"title":1749,"path":1750,"stem":1751},"Plugin sets and policies","\u002Freference\u002Fplugin-manifest\u002Fsets-policy","10.reference\u002F02.plugin-manifest\u002F05.sets-policy",{"title":1753,"path":1754,"stem":1755},"Data, evidence and mail","\u002Freference\u002Fplugin-manifest\u002Fdata","10.reference\u002F02.plugin-manifest\u002F06.data",{"title":1757,"path":1758,"stem":1759},"Generated OpenAPI manifests","\u002Freference\u002Fplugin-manifest\u002Fopenapi","10.reference\u002F02.plugin-manifest\u002F07.openapi",{"title":1761,"path":1762,"stem":1763,"children":1764,"icon":666},"Agent definition","\u002Freference\u002Fagent-definition","10.reference\u002F03.agent-definition\u002F00.index",[1765,1766,1770,1774,1778,1782,1786,1790],{"title":1761,"path":1762,"stem":1763,"icon":666},{"title":1767,"path":1768,"stem":1769},"Identity, instructions and tools","\u002Freference\u002Fagent-definition\u002Fidentity","10.reference\u002F03.agent-definition\u002F01.identity",{"title":1771,"path":1772,"stem":1773},"Models and placement","\u002Freference\u002Fagent-definition\u002Fmodels","10.reference\u002F03.agent-definition\u002F02.models",{"title":1775,"path":1776,"stem":1777},"Limits and spend","\u002Freference\u002Fagent-definition\u002Flimits","10.reference\u002F03.agent-definition\u002F03.limits",{"title":1779,"path":1780,"stem":1781},"Judges and candidate selection","\u002Freference\u002Fagent-definition\u002Fquality","10.reference\u002F03.agent-definition\u002F04.quality",{"title":1783,"path":1784,"stem":1785},"Delegation and human decisions","\u002Freference\u002Fagent-definition\u002Fcoordination","10.reference\u002F03.agent-definition\u002F05.coordination",{"title":1787,"path":1788,"stem":1789},"History and recovery","\u002Freference\u002Fagent-definition\u002Fhistory","10.reference\u002F03.agent-definition\u002F06.history",{"title":1791,"path":1792,"stem":1793},"Sandbox, data and retention","\u002Freference\u002Fagent-definition\u002Fsecurity","10.reference\u002F03.agent-definition\u002F07.security",{"title":1795,"path":1796,"stem":1797,"icon":517},"Ports","\u002Freference\u002Fports","10.reference\u002F04.ports",{"title":1799,"path":1800,"stem":1801,"icon":1802},"Environment variables","\u002Freference\u002Fenvironment","10.reference\u002F05.environment","i-ph-brackets-curly",{"title":1804,"path":1805,"stem":1806,"icon":373},"Files and directories","\u002Freference\u002Ffiles","10.reference\u002F06.files",{"title":1808,"path":1809,"stem":1810,"icon":1811},"Lists and pages","\u002Freference\u002Flist-pages","10.reference\u002F07.list-pages","i-ph-list-numbers",{"title":1813,"path":1814,"stem":1815,"icon":1816},"Spend refusals","\u002Freference\u002Fspend-refusals","10.reference\u002F08.spend-refusals","i-ph-hand-coins",{"title":1818,"path":1819,"stem":1820,"icon":1821},"Admin API","\u002Freference\u002Fadmin-api","10.reference\u002F09.admin-api","i-ph-repeat",{"title":1823,"path":1824,"stem":1825},"Compatibility","\u002Freference\u002Fcompatibility","10.reference\u002F10.compatibility",{"title":1827,"path":1828,"stem":1829},"Known issues","\u002Freference\u002Fknown-issues","10.reference\u002F11.known-issues",{"title":1831,"path":1832,"stem":1833,"children":1834,"icon":71},"About","\u002Fabout","11.about\u002F00.index",[1835,1836,1840,1845],{"title":1831,"path":1832,"stem":1833},{"title":1837,"path":1838,"stem":1839,"icon":967},"Licensing","\u002Fabout\u002Flicensing","11.about\u002F01.licensing",{"title":1841,"path":1842,"stem":1843,"icon":1844},"About these docs","\u002Fabout\u002Fcontributing-docs","11.about\u002F02.contributing-docs","i-ph-pencil-simple",{"title":1846,"path":1847,"stem":1848,"icon":42},"A local environment","\u002Fabout\u002Flocal-environment","11.about\u002F03.local-environment",{"id":1850,"title":1391,"body":1851,"description":3671,"extension":3672,"links":3673,"meta":3674,"navigation":3677,"path":1392,"seo":3678,"stem":1393,"__hash__":3679},"docs\u002F07.fleet\u002F21.cloud-federation.md",{"type":1852,"value":1853,"toc":3659},"minimark",[1854,1858,1861,1870,1895,1906,1917,1924,1927,1930,1935,2036,2068,2072,2451,2455,2575,2579,2653,2658,2665,2702,2724,2737,2751,2769,2772,2776,2783,3309,3399,3410,3427,3431,3434,3535,3539,3633,3637,3655],[1855,1856,1857],"p",{},"For: cluster operators.",[1855,1859,1860],{},"Configure the cloud's trust before using a federated provider or tool. The edge exchanges the calling agent's identity for a short-lived cloud credential.",[1855,1862,1863,1864,1869],{},"AWS, Google Cloud and Microsoft Entra can trust an outside OIDC issuer instead of a key you store. Each tenant has one on\nthe edge (",[1865,1866,1868],"a",{"href":1867},"\u002Fconcepts\u002Fdelegation-and-identity#identity-for-outside-services","identity for outside services","), so a\ncloud can trust the tenant's agents directly:",[1871,1872,1873,1882,1889,1892],"ol",{},[1874,1875,1876,1877,1881],"li",{},"A model call or a tool call needs the cloud. The edge mints the calling agent's workload token for the cloud's\ntoken service (five minutes, one audience, the agent as ",[1878,1879,1880],"code",{},"sub",", never a person).",[1874,1883,1884,1885,1888],{},"The edge exchanges it at the cloud: AWS STS ",[1878,1886,1887],{},"AssumeRoleWithWebIdentity",", Google Cloud's security token service (and,\nif you name one, the service account it impersonates), or Entra's token endpoint with the token as the client\nassertion of an app registration's federated credential.",[1874,1890,1891],{},"The cloud checks the token through the issuer's discovery document and key set, against the trust you set up below,\nand answers a credential that lives an hour.",[1874,1893,1894],{},"For a model call, the edge signs the call with it and nothing else sees it. For a tool call, the credential goes to\nthe node sealed to it, and only the node's egress proxy opens it: it signs the tool's AWS requests or puts the\nGoogle or Entra token on, while the tool holds a placeholder.",[1855,1896,1897,1898,1901,1902,1905],{},"Nothing is stored: the edge keeps a credential in memory for the job's next calls until a few minutes before it ends.\nA credential lives as long as the cloud says (",[1878,1899,1900],{},"expires_in",", or AWS's ",[1878,1903,1904],{},"Expiration","), at most an hour: an answer that\ngives no lifetime, or one that has already ended, is an error, never a credential. When the edge's memory for\ncredentials is full of live ones, a new call's credential serves that call alone, and no other job's is dropped for it.",[1855,1907,1908,1909,1912,1913,1916],{},"A cloud's refusal (a trust policy, an audience: a 4xx answer) is told apart from an outage (no answer, a 5xx, 408 or\n429), which may pass: the refusal names the cloud's own error code, and an outage is audited as a failed exchange\n(",[1878,1910,1911],{},"token.exchange_refused",", marked ",[1878,1914,1915],{},"unavailable",") with its cause.",[1855,1918,1919,1920,1923],{},"The audit log records each exchange as ",[1878,1921,1922],{},"token.exchanged"," (the cloud, the role, pool or application it reached, the\nagent and its subject, the job), never a token or a credential.",[1855,1925,1926],{},"Only the agent's own plugin's tools get its cloud\ncredentials: a tool of another plugin that the agent was granted gets none.",[1855,1928,1929],{},"Nothing is sent to a cloud until a tenant admin sets up a federated\nprovider or installs a plugin with a federated connection.",[1931,1932,1934],"h2",{"id":1933},"what-the-clouds-see","What the clouds see",[1936,1937,1938,1949],"table",{},[1939,1940,1941],"thead",{},[1942,1943,1944,1947],"tr",{},[1945,1946],"th",{},[1945,1948],{},[1950,1951,1952,1971,1984,2010,2025],"tbody",{},[1942,1953,1954,1962],{},[1955,1956,1957,1958,1961],"td",{},"Issuer (",[1878,1959,1960],{},"iss",")",[1955,1963,1964,1967,1968],{},[1878,1965,1966],{},"https:\u002F\u002F\u003Cedge>\u002Foidc\u002F\u003Ctenant>",", from ",[1878,1969,1970],{},"oz0 tenant oidc show \u003Ctenant>",[1942,1972,1973,1978],{},[1955,1974,1975,1976,1961],{},"Subject (",[1878,1977,1880],{},[1955,1979,1980,1983],{},[1878,1981,1982],{},"oz0:agent:\u003Ctenant>:\u003Cagent>:\u003Cinstall generation>",": it survives upgrades of the plugin and changes when the plugin is removed and installed again",[1942,1985,1986,1992],{},[1955,1987,1988,1989,1961],{},"Audience (",[1878,1990,1991],{},"aud",[1955,1993,1994,1995,1998,1999,2002,2003,2006,2007,1961],{},"AWS: ",[1878,1996,1997],{},"https:\u002F\u002Fsts.amazonaws.com","; Google: ",[1878,2000,2001],{},"https:\u002F\u002Fiam.googleapis.com\u002F"," and the pool provider's name; Entra: ",[1878,2004,2005],{},"api:\u002F\u002FAzureADTokenExchange",". A provider or connection may name another (",[1878,2008,2009],{},"audience",[1942,2011,2012,2015],{},[1955,2013,2014],{},"AWS session tag",[1955,2016,2017,2020,2021,2024],{},[1878,2018,2019],{},"oz0-agent",": the agent's name, in the token's ",[1878,2022,2023],{},"https:\u002F\u002Faws.amazon.com\u002Ftags"," claim",[1942,2026,2027,2030],{},[1955,2028,2029],{},"AWS session name",[1955,2031,2032,2035],{},[1878,2033,2034],{},"oz0-"," and the job's ID, so CloudTrail names the job",[1855,2037,2038,2039,2042,2043,2046,2047,2042,2050,2053,2054,2057,2058,2042,2061,2042,2064,2067],{},"The clouds' endpoints are fixed: ",[1878,2040,2041],{},"sts.\u003Cregion>.amazonaws.com",", ",[1878,2044,2045],{},"sts.googleapis.com"," and\n",[1878,2048,2049],{},"iamcredentials.googleapis.com",[1878,2051,2052],{},"login.microsoftonline.com",". A manifest or a tenant names the role, the pool or the\napplication, never where the agent's token goes. An operator can replace an endpoint, for a sovereign cloud, with the\nserver's ",[1878,2055,2056],{},"--cloud-endpoint aws-sts=\u003CURL>"," (also ",[1878,2059,2060],{},"gcp-sts",[1878,2062,2063],{},"gcp-iam",[1878,2065,2066],{},"entra",").",[1931,2069,2071],{"id":2070},"aws","AWS",[1871,2073,2074,2085,2384],{},[1874,2075,2076,2077,2079,2080,2084],{},"An IAM OIDC identity provider for the issuer: in IAM, add an OpenID Connect provider with the provider URL set to\nthe tenant's issuer and the audience ",[1878,2078,1997],{},". AWS fetches the discovery document over the\ninternet; for a private cluster, ",[1865,2081,2083],{"href":2082},"\u002Ffleet\u002Fcloud-federation#private-clusters","publish it"," first.",[1874,2086,2087,2088,2090,2091,2093,2094,2345,2348,2350,2351,2353,2354,2357,2358,2361,2362,2364,2365,2367,2368,2371,2372,2375,2376,2379,2380,2383],{},"A role whose trust policy names the agent, by ",[1878,2089,1991],{}," and ",[1878,2092,1880],{},", and allows the session tag:",[2095,2096,2102],"pre",{"className":2097,"code":2098,"filename":2099,"language":2100,"meta":2101,"style":2101},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [{\n    \"Effect\": \"Allow\",\n    \"Principal\": {\"Federated\": \"arn:aws:iam::123456789012:oidc-provider\u002Foz0-edge.acme.example\u002Foidc\u002Facme\"},\n    \"Action\": [\"sts:AssumeRoleWithWebIdentity\", \"sts:TagSession\"],\n    \"Condition\": {\n      \"StringEquals\": {\n        \"oz0-edge.acme.example\u002Foidc\u002Facme:aud\": \"https:\u002F\u002Fsts.amazonaws.com\",\n        \"oz0-edge.acme.example\u002Foidc\u002Facme:sub\": \"oz0:agent:acme:triage:42\"\n      }\n    }\n  }]\n}\n","trust-policy.json","json","",[1878,2103,2104,2113,2141,2156,2179,2214,2249,2264,2279,2301,2321,2327,2333,2339],{"__ignoreMap":2101},[2105,2106,2109],"span",{"class":2107,"line":2108},"line",1,[2105,2110,2112],{"class":2111},"sMK4o","{\n",[2105,2114,2116,2119,2123,2126,2129,2132,2136,2138],{"class":2107,"line":2115},2,[2105,2117,2118],{"class":2111},"  \"",[2105,2120,2122],{"class":2121},"spNyl","Version",[2105,2124,2125],{"class":2111},"\"",[2105,2127,2128],{"class":2111},":",[2105,2130,2131],{"class":2111}," \"",[2105,2133,2135],{"class":2134},"sfazB","2012-10-17",[2105,2137,2125],{"class":2111},[2105,2139,2140],{"class":2111},",\n",[2105,2142,2144,2146,2149,2151,2153],{"class":2107,"line":2143},3,[2105,2145,2118],{"class":2111},[2105,2147,2148],{"class":2121},"Statement",[2105,2150,2125],{"class":2111},[2105,2152,2128],{"class":2111},[2105,2154,2155],{"class":2111}," [{\n",[2105,2157,2159,2162,2166,2168,2170,2172,2175,2177],{"class":2107,"line":2158},4,[2105,2160,2161],{"class":2111},"    \"",[2105,2163,2165],{"class":2164},"sBMFI","Effect",[2105,2167,2125],{"class":2111},[2105,2169,2128],{"class":2111},[2105,2171,2131],{"class":2111},[2105,2173,2174],{"class":2134},"Allow",[2105,2176,2125],{"class":2111},[2105,2178,2140],{"class":2111},[2105,2180,2182,2184,2187,2189,2191,2194,2196,2200,2202,2204,2206,2209,2211],{"class":2107,"line":2181},5,[2105,2183,2161],{"class":2111},[2105,2185,2186],{"class":2164},"Principal",[2105,2188,2125],{"class":2111},[2105,2190,2128],{"class":2111},[2105,2192,2193],{"class":2111}," {",[2105,2195,2125],{"class":2111},[2105,2197,2199],{"class":2198},"sbssI","Federated",[2105,2201,2125],{"class":2111},[2105,2203,2128],{"class":2111},[2105,2205,2131],{"class":2111},[2105,2207,2208],{"class":2134},"arn:aws:iam::123456789012:oidc-provider\u002Foz0-edge.acme.example\u002Foidc\u002Facme",[2105,2210,2125],{"class":2111},[2105,2212,2213],{"class":2111},"},\n",[2105,2215,2217,2219,2222,2224,2226,2229,2231,2234,2236,2239,2241,2244,2246],{"class":2107,"line":2216},6,[2105,2218,2161],{"class":2111},[2105,2220,2221],{"class":2164},"Action",[2105,2223,2125],{"class":2111},[2105,2225,2128],{"class":2111},[2105,2227,2228],{"class":2111}," [",[2105,2230,2125],{"class":2111},[2105,2232,2233],{"class":2134},"sts:AssumeRoleWithWebIdentity",[2105,2235,2125],{"class":2111},[2105,2237,2238],{"class":2111},",",[2105,2240,2131],{"class":2111},[2105,2242,2243],{"class":2134},"sts:TagSession",[2105,2245,2125],{"class":2111},[2105,2247,2248],{"class":2111},"],\n",[2105,2250,2252,2254,2257,2259,2261],{"class":2107,"line":2251},7,[2105,2253,2161],{"class":2111},[2105,2255,2256],{"class":2164},"Condition",[2105,2258,2125],{"class":2111},[2105,2260,2128],{"class":2111},[2105,2262,2263],{"class":2111}," {\n",[2105,2265,2267,2270,2273,2275,2277],{"class":2107,"line":2266},8,[2105,2268,2269],{"class":2111},"      \"",[2105,2271,2272],{"class":2198},"StringEquals",[2105,2274,2125],{"class":2111},[2105,2276,2128],{"class":2111},[2105,2278,2263],{"class":2111},[2105,2280,2282,2285,2289,2291,2293,2295,2297,2299],{"class":2107,"line":2281},9,[2105,2283,2284],{"class":2111},"        \"",[2105,2286,2288],{"class":2287},"swJcz","oz0-edge.acme.example\u002Foidc\u002Facme:aud",[2105,2290,2125],{"class":2111},[2105,2292,2128],{"class":2111},[2105,2294,2131],{"class":2111},[2105,2296,1997],{"class":2134},[2105,2298,2125],{"class":2111},[2105,2300,2140],{"class":2111},[2105,2302,2304,2306,2309,2311,2313,2315,2318],{"class":2107,"line":2303},10,[2105,2305,2284],{"class":2111},[2105,2307,2308],{"class":2287},"oz0-edge.acme.example\u002Foidc\u002Facme:sub",[2105,2310,2125],{"class":2111},[2105,2312,2128],{"class":2111},[2105,2314,2131],{"class":2111},[2105,2316,2317],{"class":2134},"oz0:agent:acme:triage:42",[2105,2319,2320],{"class":2111},"\"\n",[2105,2322,2324],{"class":2107,"line":2323},11,[2105,2325,2326],{"class":2111},"      }\n",[2105,2328,2330],{"class":2107,"line":2329},12,[2105,2331,2332],{"class":2111},"    }\n",[2105,2334,2336],{"class":2107,"line":2335},13,[2105,2337,2338],{"class":2111},"  }]\n",[2105,2340,2342],{"class":2107,"line":2341},14,[2105,2343,2344],{"class":2111},"}\n",[2346,2347],"br",{},[1878,2349,2243],{}," is required: every token carries the agent as a session tag, and AWS refuses the role without it.",[2346,2352],{},"The subject ends in the agent's install generation (",[1878,2355,2356],{},"42"," here; every exchange's audit entry, refused ones too, names the full subject: ",[1878,2359,2360],{},"oz0 audit --action token.","), so\n",[1878,2363,2272],{}," on it trusts one install of one agent. After a reinstall the agent has a new subject, and you\nupdate the policy on purpose.",[2346,2366],{},"Do not match the generation with a wildcard (",[1878,2369,2370],{},"StringLike"," on\n",[1878,2373,2374],{},"oz0:agent:acme:triage:*","): any later agent named ",[1878,2377,2378],{},"triage"," in the tenant, from any plugin and any publisher, would\nthen assume the role, which is what the generation in the subject is there to prevent. For the same reason\n",[1878,2381,2382],{},"aws:PrincipalTag\u002Foz0-agent"," (the agent's name alone) may narrow a policy but never replaces the subject.",[1874,2385,2386,2387,2444,2446,2447,2067],{},"A model provider for Bedrock:",[2095,2388,2393],{"className":2389,"code":2390,"filename":2391,"language":2392,"meta":2101,"style":2101},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","oz0 provider set bedrock --preset bedrock-federated --base-url https:\u002F\u002Fbedrock-runtime.eu-north-1.amazonaws.com \\\n  --aws-role arn:aws:iam::123456789012:role\u002Foz0-agents --aws-region eu-north-1 --region eu\n","Terminal","bash",[1878,2394,2395,2424],{"__ignoreMap":2101},[2105,2396,2397,2399,2402,2405,2408,2411,2414,2417,2420],{"class":2107,"line":2108},[2105,2398,1714],{"class":2164},[2105,2400,2401],{"class":2134}," provider",[2105,2403,2404],{"class":2134}," set",[2105,2406,2407],{"class":2134}," bedrock",[2105,2409,2410],{"class":2134}," --preset",[2105,2412,2413],{"class":2134}," bedrock-federated",[2105,2415,2416],{"class":2134}," --base-url",[2105,2418,2419],{"class":2134}," https:\u002F\u002Fbedrock-runtime.eu-north-1.amazonaws.com",[2105,2421,2423],{"class":2422},"sTEyZ"," \\\n",[2105,2425,2426,2429,2432,2435,2438,2441],{"class":2107,"line":2115},[2105,2427,2428],{"class":2134},"  --aws-role",[2105,2430,2431],{"class":2134}," arn:aws:iam::123456789012:role\u002Foz0-agents",[2105,2433,2434],{"class":2134}," --aws-region",[2105,2436,2437],{"class":2134}," eu-north-1",[2105,2439,2440],{"class":2134}," --region",[2105,2442,2443],{"class":2134}," eu\n",[2346,2445],{},"or a connection for tools (",[1865,2448,2450],{"href":2449},"\u002Ffleet\u002Fcloud-federation#in-a-plugin","in this guide",[1931,2452,2454],{"id":2453},"google-cloud","Google Cloud",[1871,2456,2457,2490,2521],{},[1874,2458,2459,2460,2463,2464,2467,2468,2463,2471,2473,2474,2477,2478,2481,2482,2485,2486,2489],{},"A workload identity pool and an OIDC provider for the issuer: the issuer URI is the tenant's issuer; map\n",[1878,2461,2462],{},"google.subject"," to ",[1878,2465,2466],{},"assertion.sub"," and, if you like, ",[1878,2469,2470],{},"attribute.agent",[1878,2472,2466],{},"; keep the default allowed\naudience (",[1878,2475,2476],{},"https:\u002F\u002Fiam.googleapis.com\u002Fprojects\u002F\u003Cnumber>\u002Flocations\u002Fglobal\u002FworkloadIdentityPools\u002F\u003Cpool>\u002Fproviders\u002F\u003Cprovider>",").\nGoogle can take the key set as an upload instead of fetching it: ",[1878,2479,2480],{},"oz0 tenant oidc jwks \u003Ctenant> > jwks.json",", then\ngive the file to the provider (",[1878,2483,2484],{},"--jwk-json-path"," in ",[1878,2487,2488],{},"gcloud","), and upload it again after every rotation.",[1874,2491,2492,2493,2496,2497,2499,2500],{},"Access for the agent, one of the following, always by the full subject (with its install generation): a\n",[1878,2494,2495],{},"principalSet"," over an attribute without the generation, such as ",[1878,2498,2470],{}," mapped from the agent's name,\ntrusts every later agent of that name in the tenant.",[2501,2502,2503,2510],"ul",{},[1874,2504,2505,2506,2509],{},"grant roles to the principal ",[1878,2507,2508],{},"principal:\u002F\u002Fiam.googleapis.com\u002Fprojects\u002F\u003Cnumber>\u002Flocations\u002Fglobal\u002FworkloadIdentityPools\u002F\u003Cpool>\u002Fsubject\u002Foz0:agent:acme:triage:\u003Cgeneration>"," directly, or",[1874,2511,2512,2513,2516,2517,2520],{},"grant it ",[1878,2514,2515],{},"roles\u002Fiam.workloadIdentityUser"," on a service account, and name that service account: the edge then\nexchanges the federated token for the service account's own (",[1878,2518,2519],{},"generateAccessToken",", an hour).",[1874,2522,2523,2524],{},"A model provider for Vertex AI:",[2095,2525,2527],{"className":2389,"code":2526,"filename":2391,"language":2392,"meta":2101,"style":2101},"oz0 provider set vertex --preset vertex-federated --base-url https:\u002F\u002Feurope-west1-aiplatform.googleapis.com --region eu \\\n  --gcp-workload-provider \u002F\u002Fiam.googleapis.com\u002Fprojects\u002F123456\u002Flocations\u002Fglobal\u002FworkloadIdentityPools\u002Foz0\u002Fproviders\u002Facme \\\n  --gcp-service-account agents@acme-prod.iam.gserviceaccount.com\n",[1878,2528,2529,2557,2567],{"__ignoreMap":2101},[2105,2530,2531,2533,2535,2537,2540,2542,2545,2547,2550,2552,2555],{"class":2107,"line":2108},[2105,2532,1714],{"class":2164},[2105,2534,2401],{"class":2134},[2105,2536,2404],{"class":2134},[2105,2538,2539],{"class":2134}," vertex",[2105,2541,2410],{"class":2134},[2105,2543,2544],{"class":2134}," vertex-federated",[2105,2546,2416],{"class":2134},[2105,2548,2549],{"class":2134}," https:\u002F\u002Feurope-west1-aiplatform.googleapis.com",[2105,2551,2440],{"class":2134},[2105,2553,2554],{"class":2134}," eu",[2105,2556,2423],{"class":2422},[2105,2558,2559,2562,2565],{"class":2107,"line":2115},[2105,2560,2561],{"class":2134},"  --gcp-workload-provider",[2105,2563,2564],{"class":2134}," \u002F\u002Fiam.googleapis.com\u002Fprojects\u002F123456\u002Flocations\u002Fglobal\u002FworkloadIdentityPools\u002Foz0\u002Fproviders\u002Facme",[2105,2566,2423],{"class":2422},[2105,2568,2569,2572],{"class":2107,"line":2143},[2105,2570,2571],{"class":2134},"  --gcp-service-account",[2105,2573,2574],{"class":2134}," agents@acme-prod.iam.gserviceaccount.com\n",[1931,2576,2578],{"id":2577},"microsoft-entra","Microsoft Entra",[1871,2580,2581,2594,2597],{},[1874,2582,2583,2584,2586,2587,2589,2590],{},"An app registration (or a user-assigned managed identity) with a federated credential: issuer = the\ntenant's issuer, subject identifier = the agent's ",[1878,2585,1880],{},", audience = ",[1878,2588,2005],{},". Entra matches all\nthree exactly and takes no wildcards, so each agent needs a federated credential of its own, and an app\nregistration or managed identity holds at most 20: one app serves at most 20 agents (use more apps for more).\nEntra fetches the discovery document over the internet.",[2591,2592,2593],"warning",{},"Microsoft supports workload identity federation only with issuers that sign their tokens with RS256; tokens signed\nwith other algorithms \"may work, but haven't been tested\". The tenant's issuer signs with ES256, which AWS and\nGoogle document as supported. Entra's path is tested here only against a stand-in of Entra's token endpoint and has\nnot yet run against Microsoft's: treat it as unproven until it has.",[1874,2595,2596],{},"Access for the app: a role on the Azure OpenAI or AI Foundry resource (Cognitive Services OpenAI User, for\nexample).",[1874,2598,2599,2600,2646,2648,2649,2652],{},"A model provider:",[2095,2601,2603],{"className":2389,"code":2602,"filename":2391,"language":2392,"meta":2101,"style":2101},"oz0 provider set foundry --preset azure-foundry-federated --base-url https:\u002F\u002Facme.services.ai.azure.com\u002Fanthropic \\\n  --entra-directory acme.onmicrosoft.com --client-id 11112222-bbbb-3333-cccc-4444dddd5555 --region eu\n",[1878,2604,2605,2628],{"__ignoreMap":2101},[2105,2606,2607,2609,2611,2613,2616,2618,2621,2623,2626],{"class":2107,"line":2108},[2105,2608,1714],{"class":2164},[2105,2610,2401],{"class":2134},[2105,2612,2404],{"class":2134},[2105,2614,2615],{"class":2134}," foundry",[2105,2617,2410],{"class":2134},[2105,2619,2620],{"class":2134}," azure-foundry-federated",[2105,2622,2416],{"class":2134},[2105,2624,2625],{"class":2134}," https:\u002F\u002Facme.services.ai.azure.com\u002Fanthropic",[2105,2627,2423],{"class":2422},[2105,2629,2630,2633,2636,2639,2642,2644],{"class":2107,"line":2115},[2105,2631,2632],{"class":2134},"  --entra-directory",[2105,2634,2635],{"class":2134}," acme.onmicrosoft.com",[2105,2637,2638],{"class":2134}," --client-id",[2105,2640,2641],{"class":2134}," 11112222-bbbb-3333-cccc-4444dddd5555",[2105,2643,2440],{"class":2134},[2105,2645,2443],{"class":2134},[2346,2647],{},"(",[1878,2650,2651],{},"azure-openai-federated"," for Azure OpenAI's v1 API.)",[2654,2655,2657],"h3",{"id":2656},"where-a-providers-token-may-go","Where a provider's token may go",[1855,2659,2660,2661,2664],{},"A Google or Entra token is a bearer token: whoever receives it can call the cloud as the agent until it ends. So a\nfederated provider's ",[1878,2662,2663],{},"--base-url"," must be a host of its cloud's own model API, on https's port:",[1936,2666,2667,2677],{},[1939,2668,2669],{},[1942,2670,2671,2674],{},[1945,2672,2673],{},"Cloud",[1945,2675,2676],{},"Hosts",[1950,2678,2679,2694],{},[1942,2680,2681,2683],{},[1955,2682,2454],{},[1955,2684,2685,2042,2688,2042,2691],{},[1878,2686,2687],{},"aiplatform.googleapis.com",[1878,2689,2690],{},"\u003Cregion>-aiplatform.googleapis.com",[1878,2692,2693],{},"generativelanguage.googleapis.com",[1942,2695,2696,2699],{},[1955,2697,2698],{},"Entra",[1955,2700,2701],{},"None of its own: only the resources the operator names, below",[1855,2703,2704,2707,2708,2711,2712,2715,2716,2719,2720,2723],{},[1878,2705,2706],{},"provider set"," refuses any other address, for the record and for each pool member, and the edge checks the\naddress again at every call, before it asks the cloud for a token; the call follows no redirect. A host\noutside the list (a sovereign cloud's, a private endpoint's, a test's fake) is one the operator names for the cloud\non the servers: ",[1878,2709,2710],{},"--cloud-endpoint entra-models=https:\u002F\u002Faoai.private.acme.example"," (or ",[1878,2713,2714],{},"gcp-models=...","), repeatable.\nA record matches such a host only with the same scheme, host and port, so ",[1878,2717,2718],{},"http:\u002F\u002Faoai.private.acme.example:443"," is\nnot ",[1878,2721,2722],{},"https:\u002F\u002Faoai.private.acme.example"," and is refused: the token never goes out in clear text.",[1855,2725,2726,2727,2042,2730,2140,2733,2736],{},"Azure's model hosts (",[1878,2728,2729],{},"\u003Cresource>.openai.azure.com",[1878,2731,2732],{},"\u003Cresource>.services.ai.azure.com",[1878,2734,2735],{},"\u003Cresource>.cognitiveservices.azure.com",") are names any Azure customer can register, so such a name says Microsoft runs\nthe host, not that the resource is yours: someone who may write a provider record could otherwise point a federated\nprovider at a resource of their own.",[1855,2738,2739,2740,2743,2744,2747,2748,2750],{},"So an Entra record needs its host named on the servers, on management and on the\nedges alike: ",[1878,2741,2742],{},"--cloud-endpoint entra-resources=https:\u002F\u002Facme-ai.openai.azure.com",", repeatable. An Entra token goes to\nthose and to ",[1878,2745,2746],{},"entra-models"," hosts, and to no other host. With neither named, ",[1878,2749,2706],{}," refuses the record, the edge\nrefuses every call of one already saved, and the error names the flag to set.",[1855,2752,2753,2754,2757,2758,2761,2762,2765,2766,2768],{},"An Entra record's ",[1878,2755,2756],{},"auth.scope"," must be a scope of Azure's model API (",[1878,2759,2760],{},"https:\u002F\u002Fcognitiveservices.azure.com\u002F.default"," or\n",[1878,2763,2764],{},"https:\u002F\u002Fai.azure.com\u002F.default",", or a sovereign cloud's), so a record cannot ask for a token of another service; a host\nnamed with ",[1878,2767,2746],{}," answers for itself, and takes the scope its record names.",[1855,2770,2771],{},"An AWS session signs each request for the host it reaches, which no other host can use, so a Bedrock record's address\nis not limited this way.",[1931,2773,2775],{"id":2774},"in-a-plugin","In a plugin",[1855,2777,2778,2779,2782],{},"A tool reaches a cloud through a connection of kind ",[1878,2780,2781],{},"federated",", and runs under bindings of it: its credential reaches\nthe node only sealed, so a connection without bindings, or a remote tool, gets nothing.",[2095,2784,2788],{"className":2785,"code":2786,"filename":1727,"language":2787,"meta":2101,"style":2101},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","egress: [\"*.s3.eu-north-1.amazonaws.com\", \"storage.googleapis.com\"]\nrequires:\n  inject:\n    aws:\n      - {host: \"*.s3.eu-north-1.amazonaws.com\", sigv4: {service: s3, region: eu-north-1}}\n    gcs:\n      - {host: storage.googleapis.com, header: Authorization, format: \"Bearer {secret}\"}\nconnections:\n  - name: aws\n    description: The tenant's AWS account, by the agent's own identity\n    tools: [files]\n    params:\n      - {name: role_arn, description: \"The IAM role the agents assume\"}\n      - {name: region, description: \"The role's region\", default: eu-north-1}\n    token:\n      kind: federated\n      federated: {cloud: aws, role_arn: \"{params.role_arn}\", region: \"{params.region}\"}\n      pass: {region: \"{params.region}\"}\n    scopes:\n      - functions: [files.put, files.get]\n  - name: gcs\n    description: The tenant's Google Cloud project\n    tools: [files]\n    params:\n      - {name: provider, description: \"The workload identity pool provider\"}\n    token:\n      kind: federated\n      federated: {cloud: gcp, workload_provider: \"{params.provider}\"}\n    scopes:\n      - functions: [files.copy_to_gcs]\n","yaml",[1878,2789,2790,2818,2826,2833,2840,2887,2894,2933,2940,2953,2963,2977,2984,3014,3050,3058,3069,3115,3138,3146,3168,3180,3190,3203,3210,3238,3245,3254,3286,3293],{"__ignoreMap":2101},[2105,2791,2792,2795,2797,2799,2801,2804,2806,2808,2810,2813,2815],{"class":2107,"line":2108},[2105,2793,2794],{"class":2287},"egress",[2105,2796,2128],{"class":2111},[2105,2798,2228],{"class":2111},[2105,2800,2125],{"class":2111},[2105,2802,2803],{"class":2134},"*.s3.eu-north-1.amazonaws.com",[2105,2805,2125],{"class":2111},[2105,2807,2238],{"class":2111},[2105,2809,2131],{"class":2111},[2105,2811,2812],{"class":2134},"storage.googleapis.com",[2105,2814,2125],{"class":2111},[2105,2816,2817],{"class":2111},"]\n",[2105,2819,2820,2823],{"class":2107,"line":2115},[2105,2821,2822],{"class":2287},"requires",[2105,2824,2825],{"class":2111},":\n",[2105,2827,2828,2831],{"class":2107,"line":2143},[2105,2829,2830],{"class":2287},"  inject",[2105,2832,2825],{"class":2111},[2105,2834,2835,2838],{"class":2107,"line":2158},[2105,2836,2837],{"class":2287},"    aws",[2105,2839,2825],{"class":2111},[2105,2841,2842,2845,2847,2850,2852,2854,2856,2858,2860,2863,2865,2867,2870,2872,2875,2877,2880,2882,2884],{"class":2107,"line":2181},[2105,2843,2844],{"class":2111},"      -",[2105,2846,2193],{"class":2111},[2105,2848,2849],{"class":2287},"host",[2105,2851,2128],{"class":2111},[2105,2853,2131],{"class":2111},[2105,2855,2803],{"class":2134},[2105,2857,2125],{"class":2111},[2105,2859,2238],{"class":2111},[2105,2861,2862],{"class":2287}," sigv4",[2105,2864,2128],{"class":2111},[2105,2866,2193],{"class":2111},[2105,2868,2869],{"class":2287},"service",[2105,2871,2128],{"class":2111},[2105,2873,2874],{"class":2134}," s3",[2105,2876,2238],{"class":2111},[2105,2878,2879],{"class":2287}," region",[2105,2881,2128],{"class":2111},[2105,2883,2437],{"class":2134},[2105,2885,2886],{"class":2111},"}}\n",[2105,2888,2889,2892],{"class":2107,"line":2216},[2105,2890,2891],{"class":2287},"    gcs",[2105,2893,2825],{"class":2111},[2105,2895,2896,2898,2900,2902,2904,2907,2909,2912,2914,2917,2919,2922,2924,2926,2929,2931],{"class":2107,"line":2251},[2105,2897,2844],{"class":2111},[2105,2899,2193],{"class":2111},[2105,2901,2849],{"class":2287},[2105,2903,2128],{"class":2111},[2105,2905,2906],{"class":2134}," storage.googleapis.com",[2105,2908,2238],{"class":2111},[2105,2910,2911],{"class":2287}," header",[2105,2913,2128],{"class":2111},[2105,2915,2916],{"class":2134}," Authorization",[2105,2918,2238],{"class":2111},[2105,2920,2921],{"class":2287}," format",[2105,2923,2128],{"class":2111},[2105,2925,2131],{"class":2111},[2105,2927,2928],{"class":2134},"Bearer {secret}",[2105,2930,2125],{"class":2111},[2105,2932,2344],{"class":2111},[2105,2934,2935,2938],{"class":2107,"line":2266},[2105,2936,2937],{"class":2287},"connections",[2105,2939,2825],{"class":2111},[2105,2941,2942,2945,2948,2950],{"class":2107,"line":2281},[2105,2943,2944],{"class":2111},"  -",[2105,2946,2947],{"class":2287}," name",[2105,2949,2128],{"class":2111},[2105,2951,2952],{"class":2134}," aws\n",[2105,2954,2955,2958,2960],{"class":2107,"line":2303},[2105,2956,2957],{"class":2287},"    description",[2105,2959,2128],{"class":2111},[2105,2961,2962],{"class":2134}," The tenant's AWS account, by the agent's own identity\n",[2105,2964,2965,2968,2970,2972,2975],{"class":2107,"line":2323},[2105,2966,2967],{"class":2287},"    tools",[2105,2969,2128],{"class":2111},[2105,2971,2228],{"class":2111},[2105,2973,2974],{"class":2134},"files",[2105,2976,2817],{"class":2111},[2105,2978,2979,2982],{"class":2107,"line":2329},[2105,2980,2981],{"class":2287},"    params",[2105,2983,2825],{"class":2111},[2105,2985,2986,2988,2990,2993,2995,2998,3000,3003,3005,3007,3010,3012],{"class":2107,"line":2335},[2105,2987,2844],{"class":2111},[2105,2989,2193],{"class":2111},[2105,2991,2992],{"class":2287},"name",[2105,2994,2128],{"class":2111},[2105,2996,2997],{"class":2134}," role_arn",[2105,2999,2238],{"class":2111},[2105,3001,3002],{"class":2287}," description",[2105,3004,2128],{"class":2111},[2105,3006,2131],{"class":2111},[2105,3008,3009],{"class":2134},"The IAM role the agents assume",[2105,3011,2125],{"class":2111},[2105,3013,2344],{"class":2111},[2105,3015,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3037,3039,3041,3044,3046,3048],{"class":2107,"line":2341},[2105,3017,2844],{"class":2111},[2105,3019,2193],{"class":2111},[2105,3021,2992],{"class":2287},[2105,3023,2128],{"class":2111},[2105,3025,2879],{"class":2134},[2105,3027,2238],{"class":2111},[2105,3029,3002],{"class":2287},[2105,3031,2128],{"class":2111},[2105,3033,2131],{"class":2111},[2105,3035,3036],{"class":2134},"The role's region",[2105,3038,2125],{"class":2111},[2105,3040,2238],{"class":2111},[2105,3042,3043],{"class":2287}," default",[2105,3045,2128],{"class":2111},[2105,3047,2437],{"class":2134},[2105,3049,2344],{"class":2111},[2105,3051,3053,3056],{"class":2107,"line":3052},15,[2105,3054,3055],{"class":2287},"    token",[2105,3057,2825],{"class":2111},[2105,3059,3061,3064,3066],{"class":2107,"line":3060},16,[2105,3062,3063],{"class":2287},"      kind",[2105,3065,2128],{"class":2111},[2105,3067,3068],{"class":2134}," federated\n",[2105,3070,3072,3075,3077,3079,3082,3084,3087,3089,3091,3093,3095,3098,3100,3102,3104,3106,3108,3111,3113],{"class":2107,"line":3071},17,[2105,3073,3074],{"class":2287},"      federated",[2105,3076,2128],{"class":2111},[2105,3078,2193],{"class":2111},[2105,3080,3081],{"class":2287},"cloud",[2105,3083,2128],{"class":2111},[2105,3085,3086],{"class":2134}," aws",[2105,3088,2238],{"class":2111},[2105,3090,2997],{"class":2287},[2105,3092,2128],{"class":2111},[2105,3094,2131],{"class":2111},[2105,3096,3097],{"class":2134},"{params.role_arn}",[2105,3099,2125],{"class":2111},[2105,3101,2238],{"class":2111},[2105,3103,2879],{"class":2287},[2105,3105,2128],{"class":2111},[2105,3107,2131],{"class":2111},[2105,3109,3110],{"class":2134},"{params.region}",[2105,3112,2125],{"class":2111},[2105,3114,2344],{"class":2111},[2105,3116,3118,3121,3123,3125,3128,3130,3132,3134,3136],{"class":2107,"line":3117},18,[2105,3119,3120],{"class":2287},"      pass",[2105,3122,2128],{"class":2111},[2105,3124,2193],{"class":2111},[2105,3126,3127],{"class":2287},"region",[2105,3129,2128],{"class":2111},[2105,3131,2131],{"class":2111},[2105,3133,3110],{"class":2134},[2105,3135,2125],{"class":2111},[2105,3137,2344],{"class":2111},[2105,3139,3141,3144],{"class":2107,"line":3140},19,[2105,3142,3143],{"class":2287},"    scopes",[2105,3145,2825],{"class":2111},[2105,3147,3149,3151,3154,3156,3158,3161,3163,3166],{"class":2107,"line":3148},20,[2105,3150,2844],{"class":2111},[2105,3152,3153],{"class":2287}," functions",[2105,3155,2128],{"class":2111},[2105,3157,2228],{"class":2111},[2105,3159,3160],{"class":2134},"files.put",[2105,3162,2238],{"class":2111},[2105,3164,3165],{"class":2134}," files.get",[2105,3167,2817],{"class":2111},[2105,3169,3171,3173,3175,3177],{"class":2107,"line":3170},21,[2105,3172,2944],{"class":2111},[2105,3174,2947],{"class":2287},[2105,3176,2128],{"class":2111},[2105,3178,3179],{"class":2134}," gcs\n",[2105,3181,3183,3185,3187],{"class":2107,"line":3182},22,[2105,3184,2957],{"class":2287},[2105,3186,2128],{"class":2111},[2105,3188,3189],{"class":2134}," The tenant's Google Cloud project\n",[2105,3191,3193,3195,3197,3199,3201],{"class":2107,"line":3192},23,[2105,3194,2967],{"class":2287},[2105,3196,2128],{"class":2111},[2105,3198,2228],{"class":2111},[2105,3200,2974],{"class":2134},[2105,3202,2817],{"class":2111},[2105,3204,3206,3208],{"class":2107,"line":3205},24,[2105,3207,2981],{"class":2287},[2105,3209,2825],{"class":2111},[2105,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3234,3236],{"class":2107,"line":3212},25,[2105,3214,2844],{"class":2111},[2105,3216,2193],{"class":2111},[2105,3218,2992],{"class":2287},[2105,3220,2128],{"class":2111},[2105,3222,2401],{"class":2134},[2105,3224,2238],{"class":2111},[2105,3226,3002],{"class":2287},[2105,3228,2128],{"class":2111},[2105,3230,2131],{"class":2111},[2105,3232,3233],{"class":2134},"The workload identity pool provider",[2105,3235,2125],{"class":2111},[2105,3237,2344],{"class":2111},[2105,3239,3241,3243],{"class":2107,"line":3240},26,[2105,3242,3055],{"class":2287},[2105,3244,2825],{"class":2111},[2105,3246,3248,3250,3252],{"class":2107,"line":3247},27,[2105,3249,3063],{"class":2287},[2105,3251,2128],{"class":2111},[2105,3253,3068],{"class":2134},[2105,3255,3257,3259,3261,3263,3265,3267,3270,3272,3275,3277,3279,3282,3284],{"class":2107,"line":3256},28,[2105,3258,3074],{"class":2287},[2105,3260,2128],{"class":2111},[2105,3262,2193],{"class":2111},[2105,3264,3081],{"class":2287},[2105,3266,2128],{"class":2111},[2105,3268,3269],{"class":2134}," gcp",[2105,3271,2238],{"class":2111},[2105,3273,3274],{"class":2287}," workload_provider",[2105,3276,2128],{"class":2111},[2105,3278,2131],{"class":2111},[2105,3280,3281],{"class":2134},"{params.provider}",[2105,3283,2125],{"class":2111},[2105,3285,2344],{"class":2111},[2105,3287,3289,3291],{"class":2107,"line":3288},29,[2105,3290,3143],{"class":2287},[2105,3292,2825],{"class":2111},[2105,3294,3296,3298,3300,3302,3304,3307],{"class":2107,"line":3295},30,[2105,3297,2844],{"class":2111},[2105,3299,3153],{"class":2287},[2105,3301,2128],{"class":2111},[2105,3303,2228],{"class":2111},[2105,3305,3306],{"class":2134},"files.copy_to_gcs",[2105,3308,2817],{"class":2111},[1936,3310,3311,3321],{},[1939,3312,3313],{},[1942,3314,3315,3319],{},[1945,3316,3317],{},[1878,3318,2781],{},[1945,3320],{},[1950,3322,3323,3339,3351,3364,3377,3390],{},[1942,3324,3325,3329],{},[1955,3326,3327],{},[1878,3328,3081],{},[1955,3330,3331,2042,3333,3336,3337],{},[1878,3332,2070],{},[1878,3334,3335],{},"gcp"," or ",[1878,3338,2066],{},[1942,3340,3341,3348],{},[1955,3342,3343,2042,3346],{},[1878,3344,3345],{},"role_arn",[1878,3347,3127],{},[1955,3349,3350],{},"AWS: the role and the region of its STS endpoint",[1942,3352,3353,3361],{},[1955,3354,3355,2042,3358],{},[1878,3356,3357],{},"workload_provider",[1878,3359,3360],{},"service_account",[1955,3362,3363],{},"Google Cloud: the pool provider's resource name, and a service account to impersonate",[1942,3365,3366,3374],{},[1955,3367,3368,2042,3371],{},[1878,3369,3370],{},"directory",[1878,3372,3373],{},"client_id",[1955,3375,3376],{},"Entra: the directory and the application with the federated credential",[1942,3378,3379,3384],{},[1955,3380,3381],{},[1878,3382,3383],{},"scope",[1955,3385,3386,3387,1961],{},"What a Google or Entra token is for (Google's default: ",[1878,3388,3389],{},"cloud-platform",[1942,3391,3392,3396],{},[1955,3393,3394],{},[1878,3395,2009],{},[1955,3397,3398],{},"The workload token's audience, when the cloud's trust names another than the default",[1855,3400,3401,3402,3405,3406,3409],{},"Each field is a value or a template of the connection's params; a tenant admin sets the params, never a secret.\n",[1878,3403,3404],{},"plugin lint"," refuses a federated AWS connection bound without ",[1878,3407,3408],{},"sigv4",", a Google or Entra one bound with it, and a\nconnection with no bindings at all.",[1855,3411,3412,3413,3416,3417,3421,3422,3426],{},"In the tool, the call's ",[1878,3414,3415],{},"_meta[\"oz0\u002Fconnections\"][\"aws\"][\"token\"]"," is a placeholder access key ID. Give it to your\nAWS SDK as the access key ID, with any secret access key and no session token; the node's egress proxy takes the SDK's\nsignature off and signs the request again with the session (",[1865,3418,3420],{"href":3419},"\u002Fadmin\u002Fcredential-injection#sign-aws-requests","SigV4 signing",").\nFor Google and Entra, the token is a placeholder bearer token, put on as any ",[1865,3423,3425],{"href":3424},"\u002Fadmin\u002Fcredential-injection#bind-a-connections-token","bound connection's token",".",[1931,3428,3430],{"id":3429},"private-clusters","Private clusters",[1855,3432,3433],{},"AWS and Entra fetch the issuer's discovery document and key set over public HTTPS; Google can take an uploaded key set.\nA cluster whose edges the internet cannot reach:",[1871,3435,3436,3447,3532],{},[1874,3437,3438,3439,3442,3443,3446],{},"Starts its edges with ",[1878,3440,3441],{},"--public-edge-url https:\u002F\u002Foidc.acme.example",": the issuer becomes\n",[1878,3444,3445],{},"https:\u002F\u002Foidc.acme.example\u002Foidc\u002F\u003Ctenant>",", a place you control.",[1874,3448,3449,3450,3507,3509,3510,3513,3514,2090,3517,3520,3521,3524,3525,3528,3529,3426],{},"Publishes the documents there:",[2095,3451,3453],{"className":2389,"code":3452,"filename":2391,"language":2392,"meta":2101,"style":2101},"oz0 tenant oidc publish acme --to \u002Fsrv\u002Fwww\u002Foidc.acme.example        # a folder a web server serves\noz0 tenant oidc publish acme --to 's3:\u002F\u002Facme-oidc?region=eu-north-1' # a bucket behind your https name\n",[1878,3454,3455,3481],{"__ignoreMap":2101},[2105,3456,3457,3459,3462,3465,3468,3471,3474,3477],{"class":2107,"line":2108},[2105,3458,1714],{"class":2164},[2105,3460,3461],{"class":2134}," tenant",[2105,3463,3464],{"class":2134}," oidc",[2105,3466,3467],{"class":2134}," publish",[2105,3469,3470],{"class":2134}," acme",[2105,3472,3473],{"class":2134}," --to",[2105,3475,3476],{"class":2134}," \u002Fsrv\u002Fwww\u002Foidc.acme.example",[2105,3478,3480],{"class":3479},"sHwdD","        # a folder a web server serves\n",[2105,3482,3483,3485,3487,3489,3491,3493,3495,3498,3501,3504],{"class":2107,"line":2115},[2105,3484,1714],{"class":2164},[2105,3486,3461],{"class":2134},[2105,3488,3464],{"class":2134},[2105,3490,3467],{"class":2134},[2105,3492,3470],{"class":2134},[2105,3494,3473],{"class":2134},[2105,3496,3497],{"class":2111}," '",[2105,3499,3500],{"class":2134},"s3:\u002F\u002Facme-oidc?region=eu-north-1",[2105,3502,3503],{"class":2111},"'",[2105,3505,3506],{"class":3479}," # a bucket behind your https name\n",[2346,3508],{},"It reads the documents from an edge (",[1878,3511,3512],{},"--from https:\u002F\u002F\u003Cedge>:\u003Cport>",", by default the CLI context's), checks them,\nand writes ",[1878,3515,3516],{},"oidc\u002F\u003Ctenant>\u002F.well-known\u002Fopenid-configuration",[1878,3518,3519],{},"oidc\u002F\u003Ctenant>\u002Fjwks.json"," with an hour's cache.\nFor an ",[1878,3522,3523],{},"s3:\u002F\u002F"," target the credentials come from the ",[1878,3526,3527],{},"AWS_*"," variables or ",[1878,3530,3531],{},"--credentials-file",[1874,3533,3534],{},"Publishes again after every rotation: the key set holds the next key ahead of a rotation, so tokens keep\nverifying until the following one; after an emergency rotation, publish at once, since its new key is in no\npublished set.",[1931,3536,3538],{"id":3537},"when-it-fails","When it fails",[1936,3540,3541,3551],{},[1939,3542,3543],{},[1942,3544,3545,3548],{},[1945,3546,3547],{},"What you see",[1945,3549,3550],{},"Why",[1950,3552,3553,3564,3575,3593,3603,3614,3625],{},[1942,3554,3555,3561],{},[1955,3556,3557,3560],{},[1878,3558,3559],{},"412 oz0_key_not_bound",": \"its cloud's token goes only to the cloud's own model API\"",[1955,3562,3563],{},"The record's address is not a host of its cloud's model API (see above), so no token was asked for and nothing was sent",[1942,3565,3566,3572],{},[1955,3567,3568,3571],{},[1878,3569,3570],{},"403 oz0_federation",": \"called only by an agent's model call\"",[1955,3573,3574],{},"A call with no agent behind it (an operator's, or an older node's that names no job): there is no agent to name in the token. Use a provider with a key for such calls",[1942,3576,3577,3583],{},[1955,3578,3579,3582],{},[1878,3580,3581],{},"AccessDenied"," from AWS STS",[1955,3584,3585,3586,3336,3588,3590,3591],{},"The trust policy does not match ",[1878,3587,1991],{},[1878,3589,1880],{},", or does not allow ",[1878,3592,2243],{},[1942,3594,3595,3600],{},[1955,3596,3597],{},[1878,3598,3599],{},"InvalidIdentityToken",[1955,3601,3602],{},"AWS could not fetch or match the issuer's documents: the provider URL, or an unpublished private cluster",[1942,3604,3605,3611],{},[1955,3606,3607,3610],{},[1878,3608,3609],{},"invalid_target"," from Google",[1955,3612,3613],{},"The pool provider's name, or its allowed audiences",[1942,3615,3616,3622],{},[1955,3617,3618,3621],{},[1878,3619,3620],{},"AADSTS70021"," from Entra",[1955,3623,3624],{},"No federated credential matches the issuer, the subject and the audience exactly",[1942,3626,3627,3630],{},[1955,3628,3629],{},"A tool's upload is refused for \"chunk by chunk\"",[1955,3631,3632],{},"The SDK signs each chunk of the body with its own key; configure it for unsigned payloads with a trailing checksum (its default over HTTPS) or a hash of the whole body",[1931,3634,3636],{"id":3635},"limits","Limits",[2501,3638,3639,3642,3645,3648],{},[1874,3640,3641],{},"\"Bound to the call\" holds inside Orchestrator Zero. The credential a cloud issues is a bearer credential at that\ncloud for its hour; it reaches only the edge and, sealed, the node's egress proxy.",[1874,3643,3644],{},"Workload tokens only: a cloud never receives a person's identifier from this path.",[1874,3646,3647],{},"Entra: Microsoft supports only RS256-signed issuer tokens, and the issuer signs ES256, so the Entra exchange\nruns outside what Microsoft has tested; an app registration or managed identity holds at most 20 federated\ncredentials, one per agent.",[1874,3649,3650,3651,3426],{},"The fakes these features are tested against are shaped from the clouds' documentation; see\n",[1865,3652,3654],{"href":3653},"\u002Freference\u002Fcompatibility#integrations-awaiting-live-validation","integration maturity",[3656,3657,3658],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":2101,"searchDepth":2115,"depth":2115,"links":3660},[3661,3662,3663,3664,3667,3668,3669,3670],{"id":1933,"depth":2115,"text":1934},{"id":2070,"depth":2115,"text":2071},{"id":2453,"depth":2115,"text":2454},{"id":2577,"depth":2115,"text":2578,"children":3665},[3666],{"id":2656,"depth":2143,"text":2657},{"id":2774,"depth":2115,"text":2775},{"id":3429,"depth":2115,"text":3430},{"id":3537,"depth":2115,"text":3538},{"id":3635,"depth":2115,"text":3636},"Reach AWS, Google Cloud and Azure with no stored key: each cloud trusts the tenant's issuer, and the edge exchanges the agent's own token for a credential that lives an hour.","md",null,{"audience":3675,"doc_type":3676},"cluster operators","how-to",{"icon":1394},{"title":1391,"description":3671},"C5xlFIK9jcWn3eN9muOB1MOoMHx5YAFNOJBpFC1kvrA",[3681,3683],{"title":1386,"path":1387,"stem":1388,"description":3682,"icon":1389,"children":-1},"Run management in one place and the edges far away, across a slow or lossy network, and what that costs.",{"title":1396,"path":1397,"stem":1398,"description":3684,"icon":451,"children":-1},"Keep large payloads and plugin artifacts in an S3-compatible bucket instead of PostgreSQL.",1794442932501]