[{"data":1,"prerenderedAt":4172},["ShallowReactive",2],{"navigation_docs":3,"docs-page:\u002Fbuild\u002Fapps\u002Fsdk-typescript":1849,"docs-surround:\u002Fbuild\u002Fapps\u002Fsdk-typescript":4167},[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":868,"body":1851,"description":4158,"extension":4159,"links":4160,"meta":4161,"navigation":4164,"path":869,"seo":4165,"stem":870,"__hash__":4166},"docs\u002F04.build\u002F03.apps\u002F03.sdk-typescript.md",{"type":1852,"value":1853,"toc":4145},"minimark",[1854,1858,1866,1901,1909,1914,2061,2116,2132,2136,2309,2368,2372,2385,2521,2549,2570,2574,2867,2909,2926,2930,2957,2961,2972,3282,3328,3332,3351,3701,3726,3730,3775,3841,3845,3860,3994,3998,4035,4134,4141],[1855,1856,1857],"p",{},"For: application developers.",[1855,1859,1860,1861,1865],{},"Use ",[1862,1863,1864],"code",{},"@oz0\u002Fclient"," from Node 24 to start agents and flows, wait for answers, watch jobs, answer questions, decide approvals, read the catalog and inspect cost.",[1855,1867,1868,1869,1873,1874,1880,1881,1884,1885,1888,1889,1892,1893,1896,1897,1900],{},"The SDK calls the ",[1870,1871,1872],"a",{"href":853},"runtime API"," through ",[1870,1875,1879],{"href":1876,"rel":1877},"https:\u002F\u002Fconnectrpc.com\u002Fdocs\u002Fweb\u002F",[1878],"nofollow","connect-es",", using messages generated from ",[1862,1882,1883],{},"runtime.proto"," by ",[1862,1886,1887],{},"protoc-gen-es",". Its dependencies are ",[1862,1890,1891],{},"@connectrpc\u002Fconnect",", ",[1862,1894,1895],{},"@connectrpc\u002Fconnect-web"," and ",[1862,1898,1899],{},"@bufbuild\u002Fprotobuf",".",[1902,1903,1905,1906,1900],"callout",{"icon":1904},"i-ph-info","The package is not on npm yet: the name is reserved for the first public release. Until then, install it from a checkout of the repository with ",[1862,1907,1908],{},"npm install .\u002Fsdk\u002Ftypescript",[1910,1911,1913],"h2",{"id":1912},"connect","Connect",[1915,1916,1922],"pre",{"className":1917,"code":1918,"filename":1919,"language":1920,"meta":1921,"style":1921},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Client } from \"@oz0\u002Fclient\";\n\nconst oz0 = new Client({ baseUrl: \"https:\u002F\u002Fedge.example.com:7443\", apiKey: process.env.OZ0_API_KEY, tenant: \"acme\", caFile: \"ca.crt\" });\n","app.ts","ts","",[1862,1923,1924,1959,1966],{"__ignoreMap":1921},[1925,1926,1929,1933,1937,1941,1944,1947,1950,1953,1956],"span",{"class":1927,"line":1928},"line",1,[1925,1930,1932],{"class":1931},"s7zQu","import",[1925,1934,1936],{"class":1935},"sMK4o"," {",[1925,1938,1940],{"class":1939},"sTEyZ"," Client",[1925,1942,1943],{"class":1935}," }",[1925,1945,1946],{"class":1931}," from",[1925,1948,1949],{"class":1935}," \"",[1925,1951,1864],{"class":1952},"sfazB",[1925,1954,1955],{"class":1935},"\"",[1925,1957,1958],{"class":1935},";\n",[1925,1960,1962],{"class":1927,"line":1961},2,[1925,1963,1965],{"emptyLinePlaceholder":1964},true,"\n",[1925,1967,1969,1973,1976,1979,1982,1985,1988,1991,1995,1998,2000,2003,2005,2008,2011,2013,2016,2018,2021,2023,2026,2028,2031,2033,2035,2038,2040,2042,2045,2047,2049,2052,2054,2056,2059],{"class":1927,"line":1968},3,[1925,1970,1972],{"class":1971},"spNyl","const",[1925,1974,1975],{"class":1939}," oz0 ",[1925,1977,1978],{"class":1935},"=",[1925,1980,1981],{"class":1935}," new",[1925,1983,1940],{"class":1984},"s2Zo4",[1925,1986,1987],{"class":1939},"(",[1925,1989,1990],{"class":1935},"{",[1925,1992,1994],{"class":1993},"swJcz"," baseUrl",[1925,1996,1997],{"class":1935},":",[1925,1999,1949],{"class":1935},[1925,2001,2002],{"class":1952},"https:\u002F\u002Fedge.example.com:7443",[1925,2004,1955],{"class":1935},[1925,2006,2007],{"class":1935},",",[1925,2009,2010],{"class":1993}," apiKey",[1925,2012,1997],{"class":1935},[1925,2014,2015],{"class":1939}," process",[1925,2017,1900],{"class":1935},[1925,2019,2020],{"class":1939},"env",[1925,2022,1900],{"class":1935},[1925,2024,2025],{"class":1939},"OZ0_API_KEY",[1925,2027,2007],{"class":1935},[1925,2029,2030],{"class":1993}," tenant",[1925,2032,1997],{"class":1935},[1925,2034,1949],{"class":1935},[1925,2036,2037],{"class":1952},"acme",[1925,2039,1955],{"class":1935},[1925,2041,2007],{"class":1935},[1925,2043,2044],{"class":1993}," caFile",[1925,2046,1997],{"class":1935},[1925,2048,1949],{"class":1935},[1925,2050,2051],{"class":1952},"ca.crt",[1925,2053,1955],{"class":1935},[1925,2055,1943],{"class":1935},[1925,2057,2058],{"class":1939},")",[1925,2060,1958],{"class":1935},[2062,2063,2064,2077,2088,2102],"ul",{},[2065,2066,2067,2068,2072,2073,2076],"li",{},"The key is a tenant ",[1870,2069,2071],{"href":2070},"\u002Fbuild\u002Fapps\u002Fruntime-api\u002Fauthentication#authentication","API key",". In Node, ",[1862,2074,2075],{},"clientCert: { cert, key }"," takes an operator's certificate instead.",[2065,2078,2079,2080,2083,2084,2087],{},"The CA: ",[1862,2081,2082],{},"caFile"," or ",[1862,2085,2086],{},"caCert"," (PEM) trusts the cluster's CA for this client only, in Node, without changing the process's TLS defaults.",[2065,2089,2090,2091,1892,2094,1892,2096,1896,2099,1900],{},"In Node, without options, the client reads ",[1862,2092,2093],{},"OZ0_URL",[1862,2095,2025],{},[1862,2097,2098],{},"OZ0_TENANT",[1862,2100,2101],{},"OZ0_CA_FILE",[2065,2103,2104,2107,2108,2111,2112,2115],{},[1862,2105,2106],{},"timeoutMs"," is each call's (30 s by default); streams have none. ",[1862,2109,2110],{},"fetch"," takes a fetch of your own, ",[1862,2113,2114],{},"interceptors"," more Connect interceptors.",[1902,2117,2119,2122],{"icon":2118},"i-ph-warning",[1855,2120,2121],{},"Keep tenant API keys on your backend. Their permissions and scopes can allow starting agents and reading jobs; never put them in code a browser downloads. The SDK's Connect RPC routes have no CORS support. Browser code needs a same-origin backend or proxy that supplies its own authentication.",[1855,2123,2124,2125,1896,2128,2131],{},"The edge does support tenant-configured CORS on its browser-facing ",[1870,2126,2127],{"href":892},"stream and ticket routes",[1870,2129,2130],{"href":878},"AG-UI routes",". Use those routes with their documented browser credentials and allowed origins.",[1910,2133,2135],{"id":2134},"run-an-agent","Run an agent",[1915,2137,2139],{"className":1917,"code":2138,"filename":1919,"language":1920,"meta":1921,"style":1921},"import { outputOf } from \"@oz0\u002Fclient\";\n\nconst job = await oz0.run(\"acme-reviewer\", { repo: \"acme\u002Fapi\", pr: 42 }, { timeoutMs: 900_000, budgetUsd: 0.5, tags: [\"ci\"] });\nconsole.log(outputOf(job), job.cost?.usd);\n",[1862,2140,2141,2162,2166,2272],{"__ignoreMap":1921},[1925,2142,2143,2145,2147,2150,2152,2154,2156,2158,2160],{"class":1927,"line":1928},[1925,2144,1932],{"class":1931},[1925,2146,1936],{"class":1935},[1925,2148,2149],{"class":1939}," outputOf",[1925,2151,1943],{"class":1935},[1925,2153,1946],{"class":1931},[1925,2155,1949],{"class":1935},[1925,2157,1864],{"class":1952},[1925,2159,1955],{"class":1935},[1925,2161,1958],{"class":1935},[1925,2163,2164],{"class":1927,"line":1961},[1925,2165,1965],{"emptyLinePlaceholder":1964},[1925,2167,2168,2170,2173,2175,2178,2181,2183,2186,2188,2190,2193,2195,2197,2199,2202,2204,2206,2209,2211,2213,2216,2218,2222,2225,2227,2230,2232,2235,2237,2240,2242,2245,2247,2250,2252,2255,2257,2260,2262,2265,2268,2270],{"class":1927,"line":1968},[1925,2169,1972],{"class":1971},[1925,2171,2172],{"class":1939}," job ",[1925,2174,1978],{"class":1935},[1925,2176,2177],{"class":1931}," await",[1925,2179,2180],{"class":1939}," oz0",[1925,2182,1900],{"class":1935},[1925,2184,2185],{"class":1984},"run",[1925,2187,1987],{"class":1939},[1925,2189,1955],{"class":1935},[1925,2191,2192],{"class":1952},"acme-reviewer",[1925,2194,1955],{"class":1935},[1925,2196,2007],{"class":1935},[1925,2198,1936],{"class":1935},[1925,2200,2201],{"class":1993}," repo",[1925,2203,1997],{"class":1935},[1925,2205,1949],{"class":1935},[1925,2207,2208],{"class":1952},"acme\u002Fapi",[1925,2210,1955],{"class":1935},[1925,2212,2007],{"class":1935},[1925,2214,2215],{"class":1993}," pr",[1925,2217,1997],{"class":1935},[1925,2219,2221],{"class":2220},"sbssI"," 42",[1925,2223,2224],{"class":1935}," },",[1925,2226,1936],{"class":1935},[1925,2228,2229],{"class":1993}," timeoutMs",[1925,2231,1997],{"class":1935},[1925,2233,2234],{"class":2220}," 900_000",[1925,2236,2007],{"class":1935},[1925,2238,2239],{"class":1993}," budgetUsd",[1925,2241,1997],{"class":1935},[1925,2243,2244],{"class":2220}," 0.5",[1925,2246,2007],{"class":1935},[1925,2248,2249],{"class":1993}," tags",[1925,2251,1997],{"class":1935},[1925,2253,2254],{"class":1939}," [",[1925,2256,1955],{"class":1935},[1925,2258,2259],{"class":1952},"ci",[1925,2261,1955],{"class":1935},[1925,2263,2264],{"class":1939},"] ",[1925,2266,2267],{"class":1935},"}",[1925,2269,2058],{"class":1939},[1925,2271,1958],{"class":1935},[1925,2273,2275,2278,2280,2283,2285,2288,2291,2293,2296,2298,2301,2304,2307],{"class":1927,"line":2274},4,[1925,2276,2277],{"class":1939},"console",[1925,2279,1900],{"class":1935},[1925,2281,2282],{"class":1984},"log",[1925,2284,1987],{"class":1939},[1925,2286,2287],{"class":1984},"outputOf",[1925,2289,2290],{"class":1939},"(job)",[1925,2292,2007],{"class":1935},[1925,2294,2295],{"class":1939}," job",[1925,2297,1900],{"class":1935},[1925,2299,2300],{"class":1939},"cost",[1925,2302,2303],{"class":1935},"?.",[1925,2305,2306],{"class":1939},"usd)",[1925,2308,1958],{"class":1935},[1855,2310,2311,2313,2314,2317,2318,2321,2322,2325,2326,2329,2330,1892,2333,1896,2336,2339,2340,2343,2344,2347,2348,2351,2352,2355,2356,2359,2360,2363,2364,2367],{},[1862,2312,2185],{}," throws ",[1862,2315,2316],{},"JobFailed"," (with the job in ",[1862,2319,2320],{},".job",") when the job did not complete; ",[1862,2323,2324],{},"check: false"," returns it instead, and ",[1862,2327,2328],{},"waitMs"," limits the wait. ",[1862,2331,2332],{},"start",[1862,2334,2335],{},"wait(id, { waitMs, signal })",[1862,2337,2338],{},"get(id)"," are the steps. The input goes as ",[1862,2341,2342],{},"JSON.stringify"," writes it: a property that is ",[1862,2345,2346],{},"undefined"," is left out and a ",[1862,2349,2350],{},"Date"," is its ISO string. ",[1862,2353,2354],{},"outputOf(job)"," is the answer as JSON. Errors are connect-es's ",[1862,2357,2358],{},"ConnectError",", with a ",[1862,2361,2362],{},"Code"," such as ",[1862,2365,2366],{},"Code.InvalidArgument"," for an input that does not fit the agent's schema.",[2369,2370,251],"h3",{"id":2371},"conversations",[1855,2373,2374,2377,2378,2381,2382,2384],{},[1862,2375,2376],{},"continueFrom: \u003Cjob>"," makes the job the next turn of that job's conversation, and ",[1862,2379,2380],{},"conversation: \u003Cid>"," the next turn of the conversation with that ID (its first, when there is none yet): the agent gets the earlier turns (",[1870,2383,251],{"href":252},"). The job says which turn it is.",[1915,2386,2388],{"className":1917,"code":2387,"filename":1919,"language":1920,"meta":1921,"style":1921},"const first = await oz0.run(\"acme-assistant\", \"Our release is on Friday.\");\nconst second = await oz0.run(\"acme-assistant\", \"When is the release?\", { continueFrom: first.id });\nconsole.log(second.turn, second.conversation, outputOf(second));\n",[1862,2389,2390,2429,2486],{"__ignoreMap":1921},[1925,2391,2392,2394,2397,2399,2401,2403,2405,2407,2409,2411,2414,2416,2418,2420,2423,2425,2427],{"class":1927,"line":1928},[1925,2393,1972],{"class":1971},[1925,2395,2396],{"class":1939}," first ",[1925,2398,1978],{"class":1935},[1925,2400,2177],{"class":1931},[1925,2402,2180],{"class":1939},[1925,2404,1900],{"class":1935},[1925,2406,2185],{"class":1984},[1925,2408,1987],{"class":1939},[1925,2410,1955],{"class":1935},[1925,2412,2413],{"class":1952},"acme-assistant",[1925,2415,1955],{"class":1935},[1925,2417,2007],{"class":1935},[1925,2419,1949],{"class":1935},[1925,2421,2422],{"class":1952},"Our release is on Friday.",[1925,2424,1955],{"class":1935},[1925,2426,2058],{"class":1939},[1925,2428,1958],{"class":1935},[1925,2430,2431,2433,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2458,2461,2463,2465,2467,2470,2472,2475,2477,2480,2482,2484],{"class":1927,"line":1961},[1925,2432,1972],{"class":1971},[1925,2434,2435],{"class":1939}," second ",[1925,2437,1978],{"class":1935},[1925,2439,2177],{"class":1931},[1925,2441,2180],{"class":1939},[1925,2443,1900],{"class":1935},[1925,2445,2185],{"class":1984},[1925,2447,1987],{"class":1939},[1925,2449,1955],{"class":1935},[1925,2451,2413],{"class":1952},[1925,2453,1955],{"class":1935},[1925,2455,2007],{"class":1935},[1925,2457,1949],{"class":1935},[1925,2459,2460],{"class":1952},"When is the release?",[1925,2462,1955],{"class":1935},[1925,2464,2007],{"class":1935},[1925,2466,1936],{"class":1935},[1925,2468,2469],{"class":1993}," continueFrom",[1925,2471,1997],{"class":1935},[1925,2473,2474],{"class":1939}," first",[1925,2476,1900],{"class":1935},[1925,2478,2479],{"class":1939},"id ",[1925,2481,2267],{"class":1935},[1925,2483,2058],{"class":1939},[1925,2485,1958],{"class":1935},[1925,2487,2488,2490,2492,2494,2497,2499,2502,2504,2507,2509,2512,2514,2516,2519],{"class":1927,"line":1968},[1925,2489,2277],{"class":1939},[1925,2491,1900],{"class":1935},[1925,2493,2282],{"class":1984},[1925,2495,2496],{"class":1939},"(second",[1925,2498,1900],{"class":1935},[1925,2500,2501],{"class":1939},"turn",[1925,2503,2007],{"class":1935},[1925,2505,2506],{"class":1939}," second",[1925,2508,1900],{"class":1935},[1925,2510,2511],{"class":1939},"conversation",[1925,2513,2007],{"class":1935},[1925,2515,2149],{"class":1984},[1925,2517,2518],{"class":1939},"(second))",[1925,2520,1958],{"class":1935},[1855,2522,2523,1896,2525,2527,2528,2531,2532,2535,2536,2539,2540,2543,2544,2548],{},[1862,2524,2332],{},[1862,2526,2185],{}," retry a start that meets ",[1862,2529,2530],{},"unavailable"," twice, with the same key: without ",[1862,2533,2534],{},"id",", each start sends an ",[1862,2537,2538],{},"Idempotency-Key"," of its own, so the server gives the retries the same job, and with an ID the retries repeat it. A start again under an ID with the same request returns that job, running or ended; another request under it rejects with ",[1862,2541,2542],{},"Code.AlreadyExists"," (",[1870,2545,2547],{"href":2546},"\u002Fbuild\u002Fapps\u002Fruntime-api#job-ids-and-retries","job IDs and retries",").",[1855,2550,2551,2554,2555,2559,2560,1896,2563,2566,2567,1900],{},[1862,2552,2553],{},"candidate: \u003Cid>"," starts a job on a ",[1870,2556,2558],{"href":2557},"\u002Fbuild\u002Fplugins\u002Fdevelop-and-test\u002Fcandidate-checks#try-it-on-a-real-cluster","private candidate"," instead of the installed version. Every RPC of the API, ",[1862,2561,2562],{},"getConversation",[1862,2564,2565],{},"listConversations"," included, is typed on ",[1862,2568,2569],{},"oz0.runtime",[1910,2571,2573],{"id":2572},"watch-questions-and-approvals","Watch, questions and approvals",[1915,2575,2578],{"className":1917,"code":2576,"filename":2577,"language":1920,"meta":1921,"style":1921},"const job = await oz0.start(\"acme-asker\", \"Pick a colour for the report\");\nfor await (const ev of oz0.watch(job.id)) {\n  if (ev.event.case === \"approvalRequested\" && ev.event.value.kind === \"question\") await oz0.answer(ev.event.value, \"blue\");\n  if (ev.event.case === \"text\") process.stdout.write(ev.event.value);\n  if (ev.event.case === \"finished\") console.log(outputOf(ev.event.value));\n}\n","watch.ts",[1862,2579,2580,2618,2653,2750,2806,2861],{"__ignoreMap":1921},[1925,2581,2582,2584,2586,2588,2590,2592,2594,2596,2598,2600,2603,2605,2607,2609,2612,2614,2616],{"class":1927,"line":1928},[1925,2583,1972],{"class":1971},[1925,2585,2172],{"class":1939},[1925,2587,1978],{"class":1935},[1925,2589,2177],{"class":1931},[1925,2591,2180],{"class":1939},[1925,2593,1900],{"class":1935},[1925,2595,2332],{"class":1984},[1925,2597,1987],{"class":1939},[1925,2599,1955],{"class":1935},[1925,2601,2602],{"class":1952},"acme-asker",[1925,2604,1955],{"class":1935},[1925,2606,2007],{"class":1935},[1925,2608,1949],{"class":1935},[1925,2610,2611],{"class":1952},"Pick a colour for the report",[1925,2613,1955],{"class":1935},[1925,2615,2058],{"class":1939},[1925,2617,1958],{"class":1935},[1925,2619,2620,2623,2625,2627,2629,2632,2635,2637,2639,2642,2645,2647,2650],{"class":1927,"line":1961},[1925,2621,2622],{"class":1931},"for",[1925,2624,2177],{"class":1931},[1925,2626,2543],{"class":1939},[1925,2628,1972],{"class":1971},[1925,2630,2631],{"class":1939}," ev ",[1925,2633,2634],{"class":1935},"of",[1925,2636,2180],{"class":1939},[1925,2638,1900],{"class":1935},[1925,2640,2641],{"class":1984},"watch",[1925,2643,2644],{"class":1939},"(job",[1925,2646,1900],{"class":1935},[1925,2648,2649],{"class":1939},"id)) ",[1925,2651,2652],{"class":1935},"{\n",[1925,2654,2655,2658,2660,2663,2665,2668,2670,2673,2676,2678,2681,2683,2686,2689,2691,2693,2695,2698,2700,2703,2705,2707,2710,2712,2715,2718,2720,2722,2725,2727,2729,2731,2733,2735,2737,2739,2741,2744,2746,2748],{"class":1927,"line":1968},[1925,2656,2657],{"class":1931},"  if",[1925,2659,2543],{"class":1993},[1925,2661,2662],{"class":1939},"ev",[1925,2664,1900],{"class":1935},[1925,2666,2667],{"class":1939},"event",[1925,2669,1900],{"class":1935},[1925,2671,2672],{"class":1939},"case",[1925,2674,2675],{"class":1935}," ===",[1925,2677,1949],{"class":1935},[1925,2679,2680],{"class":1952},"approvalRequested",[1925,2682,1955],{"class":1935},[1925,2684,2685],{"class":1935}," &&",[1925,2687,2688],{"class":1939}," ev",[1925,2690,1900],{"class":1935},[1925,2692,2667],{"class":1939},[1925,2694,1900],{"class":1935},[1925,2696,2697],{"class":1939},"value",[1925,2699,1900],{"class":1935},[1925,2701,2702],{"class":1939},"kind",[1925,2704,2675],{"class":1935},[1925,2706,1949],{"class":1935},[1925,2708,2709],{"class":1952},"question",[1925,2711,1955],{"class":1935},[1925,2713,2714],{"class":1993},") ",[1925,2716,2717],{"class":1931},"await",[1925,2719,2180],{"class":1939},[1925,2721,1900],{"class":1935},[1925,2723,2724],{"class":1984},"answer",[1925,2726,1987],{"class":1993},[1925,2728,2662],{"class":1939},[1925,2730,1900],{"class":1935},[1925,2732,2667],{"class":1939},[1925,2734,1900],{"class":1935},[1925,2736,2697],{"class":1939},[1925,2738,2007],{"class":1935},[1925,2740,1949],{"class":1935},[1925,2742,2743],{"class":1952},"blue",[1925,2745,1955],{"class":1935},[1925,2747,2058],{"class":1993},[1925,2749,1958],{"class":1935},[1925,2751,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2773,2775,2777,2780,2782,2785,2787,2790,2792,2794,2796,2798,2800,2802,2804],{"class":1927,"line":2274},[1925,2753,2657],{"class":1931},[1925,2755,2543],{"class":1993},[1925,2757,2662],{"class":1939},[1925,2759,1900],{"class":1935},[1925,2761,2667],{"class":1939},[1925,2763,1900],{"class":1935},[1925,2765,2672],{"class":1939},[1925,2767,2675],{"class":1935},[1925,2769,1949],{"class":1935},[1925,2771,2772],{"class":1952},"text",[1925,2774,1955],{"class":1935},[1925,2776,2714],{"class":1993},[1925,2778,2779],{"class":1939},"process",[1925,2781,1900],{"class":1935},[1925,2783,2784],{"class":1939},"stdout",[1925,2786,1900],{"class":1935},[1925,2788,2789],{"class":1984},"write",[1925,2791,1987],{"class":1993},[1925,2793,2662],{"class":1939},[1925,2795,1900],{"class":1935},[1925,2797,2667],{"class":1939},[1925,2799,1900],{"class":1935},[1925,2801,2697],{"class":1939},[1925,2803,2058],{"class":1993},[1925,2805,1958],{"class":1935},[1925,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2830,2832,2834,2836,2838,2840,2842,2844,2846,2848,2850,2852,2854,2856,2859],{"class":1927,"line":2808},5,[1925,2810,2657],{"class":1931},[1925,2812,2543],{"class":1993},[1925,2814,2662],{"class":1939},[1925,2816,1900],{"class":1935},[1925,2818,2667],{"class":1939},[1925,2820,1900],{"class":1935},[1925,2822,2672],{"class":1939},[1925,2824,2675],{"class":1935},[1925,2826,1949],{"class":1935},[1925,2828,2829],{"class":1952},"finished",[1925,2831,1955],{"class":1935},[1925,2833,2714],{"class":1993},[1925,2835,2277],{"class":1939},[1925,2837,1900],{"class":1935},[1925,2839,2282],{"class":1984},[1925,2841,1987],{"class":1993},[1925,2843,2287],{"class":1984},[1925,2845,1987],{"class":1993},[1925,2847,2662],{"class":1939},[1925,2849,1900],{"class":1935},[1925,2851,2667],{"class":1939},[1925,2853,1900],{"class":1935},[1925,2855,2697],{"class":1939},[1925,2857,2858],{"class":1993},"))",[1925,2860,1958],{"class":1935},[1925,2862,2864],{"class":1927,"line":2863},6,[1925,2865,2866],{"class":1935},"}\n",[1855,2868,2869,2870,1896,2873,2876,2877,1892,2880,1896,2883,2885,2886,1892,2889,1892,2892,1892,2895,1896,2897,2900,2901,2905,2906,2908],{},"Leaving the loop early stops the stream. ",[1862,2871,2872],{},"approvals({ job, tree })",[1862,2874,2875],{},"questions(...)"," list what waits for a person, ",[1862,2878,2879],{},"approve",[1862,2881,2882],{},"deny",[1862,2884,2724],{}," decide it, and ",[1862,2887,2888],{},"cancel",[1862,2890,2891],{},"jobs",[1862,2893,2894],{},"catalog",[1862,2896,2300],{},[1862,2898,2899],{},"openapi({ etag })"," do what the ",[1870,2902,2904],{"href":2903},"\u002Fbuild\u002Fapps\u002Fsdk-python#watch-questions-and-approvals","Python SDK's"," methods of the same names do. Every other method is on ",[1862,2907,2569],{},", typed, and the messages and enums are exported from the package.",[1855,2910,2911,2913,2914,2917,2918,2921,2922,2925],{},[1862,2912,2641],{}," resumes a broken stream by itself after the last event (",[1862,2915,2916],{},"sinceSeq"," and the resume token), so no event comes twice; an event whose case is ",[1862,2919,2920],{},"resync"," says a gap could not be resumed over, and the job is fetched again. ",[1862,2923,2924],{},"watch(id, { sinceSeq, resumeToken })"," resumes a watch an earlier process made.",[1910,2927,2929],{"id":2928},"feeds","Feeds",[1855,2931,2932,2935,2936,2939,2940,1896,2943,2946,2947,1896,2950,2953,2954,1900],{},[1862,2933,2934],{},"oz0.feed(conversation(id), job(id), myActivity())"," follows many chats and jobs on one stream; iterate ",[1862,2937,2938],{},"feed.events()",", which resumes by itself on any edge, change what it follows with ",[1862,2941,2942],{},"subscribe",[1862,2944,2945],{},"unsubscribe",", and resume it in another process with ",[1862,2948,2949],{},"state()",[1862,2951,2952],{},"resumeFrom(state)",". See ",[1870,2955,2956],{"href":886},"Live feeds",[1910,2958,2960],{"id":2959},"server-sent-events-in-a-browser","Server-Sent Events in a browser",[1855,2962,2963,2964,2967,2968,2971],{},"A browser's ",[1862,2965,2966],{},"EventSource"," cannot send your API key, and the key must not reach the browser. Ask for a one-time stream ticket where the key lives, and open the stream in the browser with ",[1862,2969,2970],{},"eventStream",", which asks for a new ticket and resumes after the last event whenever the stream breaks (a used ticket is refused):",[1915,2973,2975],{"className":1917,"code":2974,"language":1920,"meta":1921,"style":1921},"\u002F\u002F Your backend, with the key:\nconst ticket = await oz0.streamTicket({ job: jobId }); \u002F\u002F or { feed: feed.id } from oz0.createFeed(...)\n\n\u002F\u002F The browser, with only tickets your backend hands it:\nimport { eventStream } from \"@oz0\u002Fclient\";\nconst stop = eventStream(\n  { ticket: () => fetch(`\u002Fmy-backend\u002Foz0-ticket?job=${jobId}`).then((r) => r.json()) },\n  {\n    baseUrl: \"https:\u002F\u002Fedge.example.com:7443\",\n    onEvent: (name, data) => name === \"text\" && append((data as { text: string }).text),\n    onEnd: (why) => console.log(\"ended:\", why), \u002F\u002F finished, revoked, or an error\n  },\n);\n",[1862,2976,2977,2983,3022,3026,3031,3052,3066,3136,3142,3159,3226,3269,3275],{"__ignoreMap":1921},[1925,2978,2979],{"class":1927,"line":1928},[1925,2980,2982],{"class":2981},"sHwdD","\u002F\u002F Your backend, with the key:\n",[1925,2984,2985,2987,2990,2992,2994,2996,2998,3001,3003,3005,3007,3009,3012,3014,3016,3019],{"class":1927,"line":1961},[1925,2986,1972],{"class":1971},[1925,2988,2989],{"class":1939}," ticket ",[1925,2991,1978],{"class":1935},[1925,2993,2177],{"class":1931},[1925,2995,2180],{"class":1939},[1925,2997,1900],{"class":1935},[1925,2999,3000],{"class":1984},"streamTicket",[1925,3002,1987],{"class":1939},[1925,3004,1990],{"class":1935},[1925,3006,2295],{"class":1993},[1925,3008,1997],{"class":1935},[1925,3010,3011],{"class":1939}," jobId ",[1925,3013,2267],{"class":1935},[1925,3015,2058],{"class":1939},[1925,3017,3018],{"class":1935},";",[1925,3020,3021],{"class":2981}," \u002F\u002F or { feed: feed.id } from oz0.createFeed(...)\n",[1925,3023,3024],{"class":1927,"line":1968},[1925,3025,1965],{"emptyLinePlaceholder":1964},[1925,3027,3028],{"class":1927,"line":2274},[1925,3029,3030],{"class":2981},"\u002F\u002F The browser, with only tickets your backend hands it:\n",[1925,3032,3033,3035,3037,3040,3042,3044,3046,3048,3050],{"class":1927,"line":2808},[1925,3034,1932],{"class":1931},[1925,3036,1936],{"class":1935},[1925,3038,3039],{"class":1939}," eventStream",[1925,3041,1943],{"class":1935},[1925,3043,1946],{"class":1931},[1925,3045,1949],{"class":1935},[1925,3047,1864],{"class":1952},[1925,3049,1955],{"class":1935},[1925,3051,1958],{"class":1935},[1925,3053,3054,3056,3059,3061,3063],{"class":1927,"line":2863},[1925,3055,1972],{"class":1971},[1925,3057,3058],{"class":1939}," stop ",[1925,3060,1978],{"class":1935},[1925,3062,3039],{"class":1984},[1925,3064,3065],{"class":1939},"(\n",[1925,3067,3069,3072,3075,3077,3080,3083,3086,3088,3091,3094,3097,3100,3103,3105,3107,3110,3112,3114,3118,3120,3122,3125,3127,3130,3133],{"class":1927,"line":3068},7,[1925,3070,3071],{"class":1935},"  {",[1925,3073,3074],{"class":1984}," ticket",[1925,3076,1997],{"class":1935},[1925,3078,3079],{"class":1935}," ()",[1925,3081,3082],{"class":1971}," =>",[1925,3084,3085],{"class":1984}," fetch",[1925,3087,1987],{"class":1939},[1925,3089,3090],{"class":1935},"`",[1925,3092,3093],{"class":1952},"\u002Fmy-backend\u002Foz0-ticket?job=",[1925,3095,3096],{"class":1935},"${",[1925,3098,3099],{"class":1939},"jobId",[1925,3101,3102],{"class":1935},"}`",[1925,3104,2058],{"class":1939},[1925,3106,1900],{"class":1935},[1925,3108,3109],{"class":1984},"then",[1925,3111,1987],{"class":1939},[1925,3113,1987],{"class":1935},[1925,3115,3117],{"class":3116},"sHdIc","r",[1925,3119,2058],{"class":1935},[1925,3121,3082],{"class":1971},[1925,3123,3124],{"class":1939}," r",[1925,3126,1900],{"class":1935},[1925,3128,3129],{"class":1984},"json",[1925,3131,3132],{"class":1939},"()) ",[1925,3134,3135],{"class":1935},"},\n",[1925,3137,3139],{"class":1927,"line":3138},8,[1925,3140,3141],{"class":1935},"  {\n",[1925,3143,3145,3148,3150,3152,3154,3156],{"class":1927,"line":3144},9,[1925,3146,3147],{"class":1993},"    baseUrl",[1925,3149,1997],{"class":1935},[1925,3151,1949],{"class":1935},[1925,3153,2002],{"class":1952},[1925,3155,1955],{"class":1935},[1925,3157,3158],{"class":1935},",\n",[1925,3160,3162,3165,3167,3169,3172,3174,3177,3179,3181,3184,3187,3189,3191,3193,3195,3198,3201,3204,3206,3209,3211,3215,3217,3219,3221,3224],{"class":1927,"line":3161},10,[1925,3163,3164],{"class":1984},"    onEvent",[1925,3166,1997],{"class":1935},[1925,3168,2543],{"class":1935},[1925,3170,3171],{"class":3116},"name",[1925,3173,2007],{"class":1935},[1925,3175,3176],{"class":3116}," data",[1925,3178,2058],{"class":1935},[1925,3180,3082],{"class":1971},[1925,3182,3183],{"class":1939}," name ",[1925,3185,3186],{"class":1935},"===",[1925,3188,1949],{"class":1935},[1925,3190,2772],{"class":1952},[1925,3192,1955],{"class":1935},[1925,3194,2685],{"class":1935},[1925,3196,3197],{"class":1984}," append",[1925,3199,3200],{"class":1939},"((data ",[1925,3202,3203],{"class":1931},"as",[1925,3205,1936],{"class":1935},[1925,3207,3208],{"class":1993}," text",[1925,3210,1997],{"class":1935},[1925,3212,3214],{"class":3213},"sBMFI"," string",[1925,3216,1943],{"class":1935},[1925,3218,2058],{"class":1939},[1925,3220,1900],{"class":1935},[1925,3222,3223],{"class":1939},"text)",[1925,3225,3158],{"class":1935},[1925,3227,3229,3232,3234,3236,3239,3241,3243,3246,3248,3250,3252,3254,3257,3259,3261,3264,3266],{"class":1927,"line":3228},11,[1925,3230,3231],{"class":1984},"    onEnd",[1925,3233,1997],{"class":1935},[1925,3235,2543],{"class":1935},[1925,3237,3238],{"class":3116},"why",[1925,3240,2058],{"class":1935},[1925,3242,3082],{"class":1971},[1925,3244,3245],{"class":1939}," console",[1925,3247,1900],{"class":1935},[1925,3249,2282],{"class":1984},[1925,3251,1987],{"class":1939},[1925,3253,1955],{"class":1935},[1925,3255,3256],{"class":1952},"ended:",[1925,3258,1955],{"class":1935},[1925,3260,2007],{"class":1935},[1925,3262,3263],{"class":1939}," why)",[1925,3265,2007],{"class":1935},[1925,3267,3268],{"class":2981}," \u002F\u002F finished, revoked, or an error\n",[1925,3270,3272],{"class":1927,"line":3271},12,[1925,3273,3274],{"class":1935},"  },\n",[1925,3276,3278,3280],{"class":1927,"line":3277},13,[1925,3279,2058],{"class":1939},[1925,3281,1958],{"class":1935},[1855,3283,3284,3287,3288,3290,3291,3294,3295,3298,3299,3302,3303,3305,3306,1892,3308,2083,3311,3314,3315,3317,3318,3320,3321,3324,3325,1900],{},[1862,3285,3286],{},"oz0.createFeed(...subscriptions)"," makes a feed for SSE and answers its ",[1862,3289,2534],{}," (for its events' URL) and its ",[1862,3292,3293],{},"token"," (for ",[1862,3296,3297],{},"runtime.updateFeed","; never put it in a URL). Pass ",[1862,3300,3301],{},"names: feedEventNames"," to ",[1862,3304,2970],{}," for a feed. A job's stream ends on ",[1862,3307,2829],{},[1862,3309,3310],{},"revoked",[1862,3312,3313],{},"error","; a feed's only on ",[1862,3316,3313],{},", since a feed's ",[1862,3319,3310],{}," is one subscription's and the others go on (",[1862,3322,3323],{},"endOn"," chooses other names). A page on another origin needs the tenant to allow it: see ",[1870,3326,2956],{"href":3327},"\u002Fbuild\u002Fapps\u002Flive-feeds\u002Fbrowser-and-access#other-origins-cors",[1910,3329,3331],{"id":3330},"an-app-that-acts-as-each-person","An app that acts as each person",[1855,3333,3334,3335,3339,3340,3343,3344,3347,3348,3350],{},"A backend whose people sign in with your identity provider exchanges each person's ID token for an app token that acts as them (",[1870,3336,3338],{"href":3337},"\u002Fbuild\u002Fapps\u002Fruntime-api\u002Fauthentication#apps-that-act-as-their-people","apps that act as their people","), and makes its calls with it. ",[1862,3341,3342],{},"exchangeToken"," posts the exchange with the app's key, and follows no redirect, since fetch would carry the person's token along it; a ",[1862,3345,3346],{},"Client"," with a ",[1862,3349,3293],{}," function asks it for the current token on every call:",[1915,3352,3354],{"className":1917,"code":3353,"language":1920,"meta":1921,"style":1921},"import { Client, exchangeToken, TokenExchangeError } from \"@oz0\u002Fclient\";\n\nconst appKey = process.env.OZ0_APP_KEY!;\nlet current = await exchangeToken({ baseUrl, appKey, subjectToken: idToken, caFile: \"ca.crt\" });\nconst asThePerson = new Client({\n  baseUrl, tenant: \"acme\", caFile: \"ca.crt\",\n  token: async () => {\n    if (current.expiresAt.getTime() - Date.now() \u003C 60_000) current = await exchangeToken({ baseUrl, appKey, subjectToken: idToken, caFile: \"ca.crt\" });\n    return current.accessToken;\n  },\n});\nawait asThePerson.start(\"helper\", \"hello\", { conversation: \"chat-1\" }); \u002F\u002F the person's own turn\n",[1862,3355,3356,3386,3390,3413,3466,3483,3514,3531,3620,3635,3639,3647],{"__ignoreMap":1921},[1925,3357,3358,3360,3362,3364,3366,3369,3371,3374,3376,3378,3380,3382,3384],{"class":1927,"line":1928},[1925,3359,1932],{"class":1931},[1925,3361,1936],{"class":1935},[1925,3363,1940],{"class":1939},[1925,3365,2007],{"class":1935},[1925,3367,3368],{"class":1939}," exchangeToken",[1925,3370,2007],{"class":1935},[1925,3372,3373],{"class":1939}," TokenExchangeError",[1925,3375,1943],{"class":1935},[1925,3377,1946],{"class":1931},[1925,3379,1949],{"class":1935},[1925,3381,1864],{"class":1952},[1925,3383,1955],{"class":1935},[1925,3385,1958],{"class":1935},[1925,3387,3388],{"class":1927,"line":1961},[1925,3389,1965],{"emptyLinePlaceholder":1964},[1925,3391,3392,3394,3397,3399,3401,3403,3405,3407,3410],{"class":1927,"line":1968},[1925,3393,1972],{"class":1971},[1925,3395,3396],{"class":1939}," appKey ",[1925,3398,1978],{"class":1935},[1925,3400,2015],{"class":1939},[1925,3402,1900],{"class":1935},[1925,3404,2020],{"class":1939},[1925,3406,1900],{"class":1935},[1925,3408,3409],{"class":1939},"OZ0_APP_KEY",[1925,3411,3412],{"class":1935},"!;\n",[1925,3414,3415,3418,3421,3423,3425,3427,3429,3431,3433,3435,3438,3440,3443,3445,3448,3450,3452,3454,3456,3458,3460,3462,3464],{"class":1927,"line":2274},[1925,3416,3417],{"class":1971},"let",[1925,3419,3420],{"class":1939}," current ",[1925,3422,1978],{"class":1935},[1925,3424,2177],{"class":1931},[1925,3426,3368],{"class":1984},[1925,3428,1987],{"class":1939},[1925,3430,1990],{"class":1935},[1925,3432,1994],{"class":1939},[1925,3434,2007],{"class":1935},[1925,3436,3437],{"class":1939}," appKey",[1925,3439,2007],{"class":1935},[1925,3441,3442],{"class":1993}," subjectToken",[1925,3444,1997],{"class":1935},[1925,3446,3447],{"class":1939}," idToken",[1925,3449,2007],{"class":1935},[1925,3451,2044],{"class":1993},[1925,3453,1997],{"class":1935},[1925,3455,1949],{"class":1935},[1925,3457,2051],{"class":1952},[1925,3459,1955],{"class":1935},[1925,3461,1943],{"class":1935},[1925,3463,2058],{"class":1939},[1925,3465,1958],{"class":1935},[1925,3467,3468,3470,3473,3475,3477,3479,3481],{"class":1927,"line":2808},[1925,3469,1972],{"class":1971},[1925,3471,3472],{"class":1939}," asThePerson ",[1925,3474,1978],{"class":1935},[1925,3476,1981],{"class":1935},[1925,3478,1940],{"class":1984},[1925,3480,1987],{"class":1939},[1925,3482,2652],{"class":1935},[1925,3484,3485,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512],{"class":1927,"line":2863},[1925,3486,3487],{"class":1939},"  baseUrl",[1925,3489,2007],{"class":1935},[1925,3491,2030],{"class":1993},[1925,3493,1997],{"class":1935},[1925,3495,1949],{"class":1935},[1925,3497,2037],{"class":1952},[1925,3499,1955],{"class":1935},[1925,3501,2007],{"class":1935},[1925,3503,2044],{"class":1993},[1925,3505,1997],{"class":1935},[1925,3507,1949],{"class":1935},[1925,3509,2051],{"class":1952},[1925,3511,1955],{"class":1935},[1925,3513,3158],{"class":1935},[1925,3515,3516,3519,3521,3524,3526,3528],{"class":1927,"line":3068},[1925,3517,3518],{"class":1984},"  token",[1925,3520,1997],{"class":1935},[1925,3522,3523],{"class":1971}," async",[1925,3525,3079],{"class":1935},[1925,3527,3082],{"class":1971},[1925,3529,3530],{"class":1935}," {\n",[1925,3532,3533,3536,3538,3541,3543,3546,3548,3551,3554,3557,3560,3562,3565,3567,3570,3573,3575,3577,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618],{"class":1927,"line":3138},[1925,3534,3535],{"class":1931},"    if",[1925,3537,2543],{"class":1993},[1925,3539,3540],{"class":1939},"current",[1925,3542,1900],{"class":1935},[1925,3544,3545],{"class":1939},"expiresAt",[1925,3547,1900],{"class":1935},[1925,3549,3550],{"class":1984},"getTime",[1925,3552,3553],{"class":1993},"() ",[1925,3555,3556],{"class":1935},"-",[1925,3558,3559],{"class":1939}," Date",[1925,3561,1900],{"class":1935},[1925,3563,3564],{"class":1984},"now",[1925,3566,3553],{"class":1993},[1925,3568,3569],{"class":1935},"\u003C",[1925,3571,3572],{"class":2220}," 60_000",[1925,3574,2714],{"class":1993},[1925,3576,3540],{"class":1939},[1925,3578,3579],{"class":1935}," =",[1925,3581,2177],{"class":1931},[1925,3583,3368],{"class":1984},[1925,3585,1987],{"class":1993},[1925,3587,1990],{"class":1935},[1925,3589,1994],{"class":1939},[1925,3591,2007],{"class":1935},[1925,3593,3437],{"class":1939},[1925,3595,2007],{"class":1935},[1925,3597,3442],{"class":1993},[1925,3599,1997],{"class":1935},[1925,3601,3447],{"class":1939},[1925,3603,2007],{"class":1935},[1925,3605,2044],{"class":1993},[1925,3607,1997],{"class":1935},[1925,3609,1949],{"class":1935},[1925,3611,2051],{"class":1952},[1925,3613,1955],{"class":1935},[1925,3615,1943],{"class":1935},[1925,3617,2058],{"class":1993},[1925,3619,1958],{"class":1935},[1925,3621,3622,3625,3628,3630,3633],{"class":1927,"line":3144},[1925,3623,3624],{"class":1931},"    return",[1925,3626,3627],{"class":1939}," current",[1925,3629,1900],{"class":1935},[1925,3631,3632],{"class":1939},"accessToken",[1925,3634,1958],{"class":1935},[1925,3636,3637],{"class":1927,"line":3161},[1925,3638,3274],{"class":1935},[1925,3640,3641,3643,3645],{"class":1927,"line":3228},[1925,3642,2267],{"class":1935},[1925,3644,2058],{"class":1939},[1925,3646,1958],{"class":1935},[1925,3648,3649,3651,3654,3656,3658,3660,3662,3665,3667,3669,3671,3674,3676,3678,3680,3683,3685,3687,3690,3692,3694,3696,3698],{"class":1927,"line":3271},[1925,3650,2717],{"class":1931},[1925,3652,3653],{"class":1939}," asThePerson",[1925,3655,1900],{"class":1935},[1925,3657,2332],{"class":1984},[1925,3659,1987],{"class":1939},[1925,3661,1955],{"class":1935},[1925,3663,3664],{"class":1952},"helper",[1925,3666,1955],{"class":1935},[1925,3668,2007],{"class":1935},[1925,3670,1949],{"class":1935},[1925,3672,3673],{"class":1952},"hello",[1925,3675,1955],{"class":1935},[1925,3677,2007],{"class":1935},[1925,3679,1936],{"class":1935},[1925,3681,3682],{"class":1993}," conversation",[1925,3684,1997],{"class":1935},[1925,3686,1949],{"class":1935},[1925,3688,3689],{"class":1952},"chat-1",[1925,3691,1955],{"class":1935},[1925,3693,1943],{"class":1935},[1925,3695,2058],{"class":1939},[1925,3697,3018],{"class":1935},[1925,3699,3700],{"class":2981}," \u002F\u002F the person's own turn\n",[1855,3702,3703,3704,3707,3708,2543,3710,3713,3714,3717,3718,3721,3722,3725],{},"A refused exchange throws ",[1862,3705,3706],{},"TokenExchangeError"," with OAuth's ",[1862,3709,1862],{},[1862,3711,3712],{},"invalid_grant"," when the person must sign in again). The key and the tokens stay in the backend. The ",[1870,3715,3716],{"href":882},"chat app example"," is a whole backend and browser UI built this way. ",[1862,3719,3720],{},"tlsFetch({ caFile })"," is the fetch that trusts the cluster's CA, for the routes you call yourself, and ",[1862,3723,3724],{},"toJson"," turns a message into the JSON the runtime API's HTTP routes use.",[1910,3727,3729],{"id":3728},"lists-page-after-page","Lists, page after page",[1855,3731,3732,3733,3736,3737,1892,3740,1892,3743,1892,3746,1896,3749,3752,3753,3756,3757,3760,3761,3763,3764,3767,3768,3771,3772,1900],{},"The runtime API's lists that can grow ",[1870,3734,3735],{"href":1809},"come a page at a time",". ",[1862,3738,3739],{},"allJobs()",[1862,3741,3742],{},"allApprovals()",[1862,3744,3745],{},"allConversations()",[1862,3747,3748],{},"allConnections()",[1862,3750,3751],{},"allRoutineFires()"," are async iterables over every row that read the next page only when the loop reaches it, so a loop that stops early reads no further; ",[1862,3754,3755],{},"jobs(limit)"," is the first ",[1862,3758,3759],{},"limit"," rows of ",[1862,3762,3739],{}," (20 when it is 0 or less), read in pages of that size up to 100, and ",[1862,3765,3766],{},"approvals()"," reads every page. The exported ",[1862,3769,3770],{},"pages()"," does the same for any other list method of ",[1862,3773,3774],{},"client.runtime",[1915,3776,3778],{"className":1917,"code":3777,"language":1920,"meta":1921,"style":1921},"for await (const job of client.allJobs({ mine: true })) console.log(job.id, job.status);\n",[1862,3779,3780],{"__ignoreMap":1921},[1925,3781,3782,3784,3786,3788,3790,3792,3794,3797,3799,3802,3804,3806,3809,3811,3815,3817,3820,3822,3824,3826,3828,3830,3832,3834,3836,3839],{"class":1927,"line":1928},[1925,3783,2622],{"class":1931},[1925,3785,2177],{"class":1931},[1925,3787,2543],{"class":1939},[1925,3789,1972],{"class":1971},[1925,3791,2172],{"class":1939},[1925,3793,2634],{"class":1935},[1925,3795,3796],{"class":1939}," client",[1925,3798,1900],{"class":1935},[1925,3800,3801],{"class":1984},"allJobs",[1925,3803,1987],{"class":1939},[1925,3805,1990],{"class":1935},[1925,3807,3808],{"class":1993}," mine",[1925,3810,1997],{"class":1935},[1925,3812,3814],{"class":3813},"sfNiH"," true",[1925,3816,1943],{"class":1935},[1925,3818,3819],{"class":1939},")) console",[1925,3821,1900],{"class":1935},[1925,3823,2282],{"class":1984},[1925,3825,2644],{"class":1939},[1925,3827,1900],{"class":1935},[1925,3829,2534],{"class":1939},[1925,3831,2007],{"class":1935},[1925,3833,2295],{"class":1939},[1925,3835,1900],{"class":1935},[1925,3837,3838],{"class":1939},"status)",[1925,3840,1958],{"class":1935},[1910,3842,3844],{"id":3843},"a-persons-chats","A person's chats",[1855,3846,3847,3850,3851,3855,3856,3859],{},[1862,3848,3849],{},"myChats()"," yields the caller's own ",[1870,3852,3854],{"href":3853},"\u002Fagents\u002Fconversations\u002Faccess-and-history#chats-yours-private-by-default","chats"," and those shared with them, page after page; ",[1862,3857,3858],{},"updateChat()"," pins, archives, marks read, renames (the owner) or removes one from the caller's list, which erases nothing. Both need a person's credentials: an app's key or an operator's certificate has no chats.",[1915,3861,3863],{"className":1917,"code":3862,"language":1920,"meta":1921,"style":1921},"import { ChatAction } from \"@oz0\u002Fclient\";\n\nfor await (const chat of client.myChats({ agent: \"helper\" })) console.log(chat.id, chat.title, chat.unread);\nawait client.updateChat(\"conv-1\", ChatAction.PIN);\n",[1862,3864,3865,3886,3890,3963],{"__ignoreMap":1921},[1925,3866,3867,3869,3871,3874,3876,3878,3880,3882,3884],{"class":1927,"line":1928},[1925,3868,1932],{"class":1931},[1925,3870,1936],{"class":1935},[1925,3872,3873],{"class":1939}," ChatAction",[1925,3875,1943],{"class":1935},[1925,3877,1946],{"class":1931},[1925,3879,1949],{"class":1935},[1925,3881,1864],{"class":1952},[1925,3883,1955],{"class":1935},[1925,3885,1958],{"class":1935},[1925,3887,3888],{"class":1927,"line":1961},[1925,3889,1965],{"emptyLinePlaceholder":1964},[1925,3891,3892,3894,3896,3898,3900,3903,3905,3907,3909,3912,3914,3916,3919,3921,3923,3925,3927,3929,3931,3933,3935,3938,3940,3942,3944,3947,3949,3952,3954,3956,3958,3961],{"class":1927,"line":1968},[1925,3893,2622],{"class":1931},[1925,3895,2177],{"class":1931},[1925,3897,2543],{"class":1939},[1925,3899,1972],{"class":1971},[1925,3901,3902],{"class":1939}," chat ",[1925,3904,2634],{"class":1935},[1925,3906,3796],{"class":1939},[1925,3908,1900],{"class":1935},[1925,3910,3911],{"class":1984},"myChats",[1925,3913,1987],{"class":1939},[1925,3915,1990],{"class":1935},[1925,3917,3918],{"class":1993}," agent",[1925,3920,1997],{"class":1935},[1925,3922,1949],{"class":1935},[1925,3924,3664],{"class":1952},[1925,3926,1955],{"class":1935},[1925,3928,1943],{"class":1935},[1925,3930,3819],{"class":1939},[1925,3932,1900],{"class":1935},[1925,3934,2282],{"class":1984},[1925,3936,3937],{"class":1939},"(chat",[1925,3939,1900],{"class":1935},[1925,3941,2534],{"class":1939},[1925,3943,2007],{"class":1935},[1925,3945,3946],{"class":1939}," chat",[1925,3948,1900],{"class":1935},[1925,3950,3951],{"class":1939},"title",[1925,3953,2007],{"class":1935},[1925,3955,3946],{"class":1939},[1925,3957,1900],{"class":1935},[1925,3959,3960],{"class":1939},"unread)",[1925,3962,1958],{"class":1935},[1925,3964,3965,3967,3969,3971,3974,3976,3978,3981,3983,3985,3987,3989,3992],{"class":1927,"line":2274},[1925,3966,2717],{"class":1931},[1925,3968,3796],{"class":1939},[1925,3970,1900],{"class":1935},[1925,3972,3973],{"class":1984},"updateChat",[1925,3975,1987],{"class":1939},[1925,3977,1955],{"class":1935},[1925,3979,3980],{"class":1952},"conv-1",[1925,3982,1955],{"class":1935},[1925,3984,2007],{"class":1935},[1925,3986,3873],{"class":1939},[1925,3988,1900],{"class":1935},[1925,3990,3991],{"class":1939},"PIN)",[1925,3993,1958],{"class":1935},[1910,3995,3997],{"id":3996},"typed-agents","Typed agents",[1915,3999,4004],{"className":4000,"code":4001,"filename":4002,"language":4003,"meta":1921,"style":1921},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx oz0-client generate --tenant acme --ca-file ca.crt --out src\u002Fagents.ts\n","Terminal","bash",[1862,4005,4006],{"__ignoreMap":1921},[1925,4007,4008,4011,4014,4017,4020,4023,4026,4029,4032],{"class":1927,"line":1928},[1925,4009,4010],{"class":3213},"npx",[1925,4012,4013],{"class":1952}," oz0-client",[1925,4015,4016],{"class":1952}," generate",[1925,4018,4019],{"class":1952}," --tenant",[1925,4021,4022],{"class":1952}," acme",[1925,4024,4025],{"class":1952}," --ca-file",[1925,4027,4028],{"class":1952}," ca.crt",[1925,4030,4031],{"class":1952}," --out",[1925,4033,4034],{"class":1952}," src\u002Fagents.ts\n",[1915,4036,4038],{"className":1917,"code":4037,"filename":1919,"language":1920,"meta":1921,"style":1921},"import { Agents } from \".\u002Fagents.js\";\n\nconst agents = new Agents(oz0);\nconst review = await agents.runAcmeReviewer({ repo: \"acme\u002Fapi\", pr: 42 }); \u002F\u002F an AcmeReviewerOutput\n",[1862,4039,4040,4062,4066,4084],{"__ignoreMap":1921},[1925,4041,4042,4044,4046,4049,4051,4053,4055,4058,4060],{"class":1927,"line":1928},[1925,4043,1932],{"class":1931},[1925,4045,1936],{"class":1935},[1925,4047,4048],{"class":1939}," Agents",[1925,4050,1943],{"class":1935},[1925,4052,1946],{"class":1931},[1925,4054,1949],{"class":1935},[1925,4056,4057],{"class":1952},".\u002Fagents.js",[1925,4059,1955],{"class":1935},[1925,4061,1958],{"class":1935},[1925,4063,4064],{"class":1927,"line":1961},[1925,4065,1965],{"emptyLinePlaceholder":1964},[1925,4067,4068,4070,4073,4075,4077,4079,4082],{"class":1927,"line":1968},[1925,4069,1972],{"class":1971},[1925,4071,4072],{"class":1939}," agents ",[1925,4074,1978],{"class":1935},[1925,4076,1981],{"class":1935},[1925,4078,4048],{"class":1984},[1925,4080,4081],{"class":1939},"(oz0)",[1925,4083,1958],{"class":1935},[1925,4085,4086,4088,4091,4093,4095,4098,4100,4103,4105,4107,4109,4111,4113,4115,4117,4119,4121,4123,4125,4127,4129,4131],{"class":1927,"line":2274},[1925,4087,1972],{"class":1971},[1925,4089,4090],{"class":1939}," review ",[1925,4092,1978],{"class":1935},[1925,4094,2177],{"class":1931},[1925,4096,4097],{"class":1939}," agents",[1925,4099,1900],{"class":1935},[1925,4101,4102],{"class":1984},"runAcmeReviewer",[1925,4104,1987],{"class":1939},[1925,4106,1990],{"class":1935},[1925,4108,2201],{"class":1993},[1925,4110,1997],{"class":1935},[1925,4112,1949],{"class":1935},[1925,4114,2208],{"class":1952},[1925,4116,1955],{"class":1935},[1925,4118,2007],{"class":1935},[1925,4120,2215],{"class":1993},[1925,4122,1997],{"class":1935},[1925,4124,2221],{"class":2220},[1925,4126,1943],{"class":1935},[1925,4128,2058],{"class":1939},[1925,4130,3018],{"class":1935},[1925,4132,4133],{"class":2981}," \u002F\u002F an AcmeReviewerOutput\n",[1855,4135,4136,4137,4140],{},"The module has an interface per object of the agents' schemas, and per agent and flow a method that starts it and one that runs it and returns its typed answer. It records the catalog's ETag and the generator's version, and is left alone until the catalog changes or the package is upgraded; ",[1862,4138,4139],{},"oz0 client generate --lang ts"," writes the same file.",[4142,4143,4144],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":1921,"searchDepth":1961,"depth":1961,"links":4146},[4147,4148,4151,4152,4153,4154,4155,4156,4157],{"id":1912,"depth":1961,"text":1913},{"id":2134,"depth":1961,"text":2135,"children":4149},[4150],{"id":2371,"depth":1968,"text":251},{"id":2572,"depth":1961,"text":2573},{"id":2928,"depth":1961,"text":2929},{"id":2959,"depth":1961,"text":2960},{"id":3330,"depth":1961,"text":3331},{"id":3728,"depth":1961,"text":3729},{"id":3843,"depth":1961,"text":3844},{"id":3996,"depth":1961,"text":3997},"@oz0\u002Fclient, the typed TypeScript client of the runtime API for Node 24, with typed agents per tenant.","md",null,{"audience":4162,"doc_type":4163},"application developers","how-to",{"icon":871},{"title":868,"description":4158},"9RBXH21JHm8LyKN5jYIUAxm61MTmt04wCDl16MQmfmw",[4168,4170],{"title":863,"path":864,"stem":865,"description":4169,"icon":866,"children":-1},"oz0-client, the typed Python client of the runtime API, sync and asyncio, with typed agents per tenant.",{"title":873,"path":874,"stem":875,"description":4171,"icon":725,"children":-1},"The typed Go client of the runtime API, a module of its own, with typed agents per tenant.",1794442987571]