[{"data":1,"prerenderedAt":3238},["ShallowReactive",2],{"navigation_docs":3,"docs-page:\u002Ffleet\u002Flocal-models-on-a-mac":1849,"docs-surround:\u002Ffleet\u002Flocal-models-on-a-mac":3233},[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":1326,"body":1851,"description":3224,"extension":3225,"links":3226,"meta":3227,"navigation":3230,"path":1327,"seo":3231,"stem":1328,"__hash__":3232},"docs\u002F07.fleet\u002F14.local-models-on-a-mac.md",{"type":1852,"value":1853,"toc":3212},"minimark",[1854,1858,1861,1869,1874,1896,2112,2119,2126,2137,2160,2175,2178,2181,2212,2295,2301,2306,2309,2400,2424,2428,2456,2460,2478,2561,2574,2578,2581,2670,2677,2688,2730,2734,2741,2792,2795,2799,2807,2877,2903,2907,2910,2918,2921,2925,2929,2944,3169,3172,3208],[1855,1856,1857],"p",{},"For: cluster operators.",[1855,1859,1860],{},"Set up mlx-lm or LM Studio on an Apple silicon Mac, choose a harness that speaks its API, then configure model prices and routing.",[1855,1862,1863,1864,1868],{},"A Mac with Apple silicon runs models well: its memory is shared between the CPU and the GPU, so a 64 GB Mac holds a model that would need a large GPU elsewhere. A node on a Mac serves its models as any ",[1865,1866,1867],"a",{"href":1309},"local model server"," does: on loopback, pinned, metered and under the same budgets. This page covers the two servers that are most at home on a Mac, mlx-lm's server and LM Studio, which harness can use which, and how to price and route the work.",[1870,1871,1873],"h2",{"id":1872},"serve-a-model-with-mlx-lm","Serve a model with mlx-lm",[1855,1875,1876,1882,1883,1887,1888,1891,1892,1895],{},[1865,1877,1881],{"href":1878,"rel":1879},"https:\u002F\u002Fgithub.com\u002Fml-explore\u002Fmlx-lm",[1880],"nofollow","mlx-lm"," is Apple's MLX library for language models. Its server, ",[1884,1885,1886],"code",{},"mlx_lm.server",", speaks OpenAI's Chat Completions. The node installs it itself, the first time a server needs it, from a lock built into the node: every package at an exact version and the hash of its file (mlx-lm 0.32.0 in this release), installed with the node's uv into ",[1884,1889,1890],{},"\u003Cdata-dir>\u002Ftools\u002Fmlx-lm\u002F",", from PyPI or, on an ",[1865,1893,1894],{"href":1483},"offline node",", from the edge's toolchain. It needs macOS 14 or newer on Apple silicon.",[1897,1898,1899,1940,2097],"ol",{},[1900,1901,1902,1903,1929,1932,1933,1935,1936,1939],"li",{},"Put the model in the Hugging Face cache. The node never downloads a model, and starts mlx-lm offline, so a call naming another model cannot make it download one:",[1904,1905,1911],"pre",{"className":1906,"code":1907,"filename":1908,"language":1909,"meta":1910,"style":1910},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","hf download mlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit\n","Terminal","bash","",[1884,1912,1913],{"__ignoreMap":1910},[1914,1915,1918,1922,1926],"span",{"class":1916,"line":1917},"line",1,[1914,1919,1921],{"class":1920},"sBMFI","hf",[1914,1923,1925],{"class":1924},"sfazB"," download",[1914,1927,1928],{"class":1924}," mlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit\n",[1930,1931],"br",{},"(",[1884,1934,1921],{}," comes with mlx-lm; once the node has installed it, it is in ",[1884,1937,1938],{},"\u003Cdata-dir>\u002Ftools\u002Fmlx-lm\u002F*\u002Fbin\u002Fhf",".)",[1900,1941,1942,1943,1946,1947],{},"Name the server in the node's ",[1884,1944,1945],{},"models.yaml",":",[1904,1948,1952],{"className":1949,"code":1950,"filename":1945,"language":1951,"meta":1910,"style":1910},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","servers:\n  - name: mlx\n    kind: mlx\n    url: http:\u002F\u002F127.0.0.1:8080\n    # mlx_lm.server is the node's own install; an absolute path runs an install of yours instead.\n    start: [mlx_lm.server, --model, mlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit, --host, \"{host}\", --port, \"{port}\"]\n    models:\n      - name: mlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit\n        digest: sha256:...   # the model folder's digest (below)\n","yaml",[1884,1953,1954,1964,1978,1988,1999,2006,2063,2071,2083],{"__ignoreMap":1910},[1914,1955,1956,1960],{"class":1916,"line":1917},[1914,1957,1959],{"class":1958},"swJcz","servers",[1914,1961,1963],{"class":1962},"sMK4o",":\n",[1914,1965,1967,1970,1973,1975],{"class":1916,"line":1966},2,[1914,1968,1969],{"class":1962},"  -",[1914,1971,1972],{"class":1958}," name",[1914,1974,1946],{"class":1962},[1914,1976,1977],{"class":1924}," mlx\n",[1914,1979,1981,1984,1986],{"class":1916,"line":1980},3,[1914,1982,1983],{"class":1958},"    kind",[1914,1985,1946],{"class":1962},[1914,1987,1977],{"class":1924},[1914,1989,1991,1994,1996],{"class":1916,"line":1990},4,[1914,1992,1993],{"class":1958},"    url",[1914,1995,1946],{"class":1962},[1914,1997,1998],{"class":1924}," http:\u002F\u002F127.0.0.1:8080\n",[1914,2000,2002],{"class":1916,"line":2001},5,[1914,2003,2005],{"class":2004},"sHwdD","    # mlx_lm.server is the node's own install; an absolute path runs an install of yours instead.\n",[1914,2007,2009,2012,2014,2017,2019,2022,2025,2027,2030,2032,2035,2037,2040,2043,2046,2048,2051,2053,2055,2058,2060],{"class":1916,"line":2008},6,[1914,2010,2011],{"class":1958},"    start",[1914,2013,1946],{"class":1962},[1914,2015,2016],{"class":1962}," [",[1914,2018,1886],{"class":1924},[1914,2020,2021],{"class":1962},",",[1914,2023,2024],{"class":1924}," --model",[1914,2026,2021],{"class":1962},[1914,2028,2029],{"class":1924}," mlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit",[1914,2031,2021],{"class":1962},[1914,2033,2034],{"class":1924}," --host",[1914,2036,2021],{"class":1962},[1914,2038,2039],{"class":1962}," \"",[1914,2041,2042],{"class":1924},"{host}",[1914,2044,2045],{"class":1962},"\"",[1914,2047,2021],{"class":1962},[1914,2049,2050],{"class":1924}," --port",[1914,2052,2021],{"class":1962},[1914,2054,2039],{"class":1962},[1914,2056,2057],{"class":1924},"{port}",[1914,2059,2045],{"class":1962},[1914,2061,2062],{"class":1962},"]\n",[1914,2064,2066,2069],{"class":1916,"line":2065},7,[1914,2067,2068],{"class":1958},"    models",[1914,2070,1963],{"class":1962},[1914,2072,2074,2077,2079,2081],{"class":1916,"line":2073},8,[1914,2075,2076],{"class":1962},"      -",[1914,2078,1972],{"class":1958},[1914,2080,1946],{"class":1962},[1914,2082,1928],{"class":1924},[1914,2084,2086,2089,2091,2094],{"class":1916,"line":2085},9,[1914,2087,2088],{"class":1958},"        digest",[1914,2090,1946],{"class":1962},[1914,2092,2093],{"class":1924}," sha256:...",[1914,2095,2096],{"class":2004},"   # the model folder's digest (below)\n",[1900,2098,2099,2100,2103,2104,2107,2108,2111],{},"Restart the node (its service, or ",[1884,2101,2102],{},"oz0-node run","), and check it with ",[1884,2105,2106],{},"oz0-node doctor",": ",[1884,2109,2110],{},"model server mlx ... ok: serves mlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit (mlx 0.32.0; 32 at once; openai-chat)",". The doctor hashes the model's files to check the pin, which takes a while for a large model; it waits up to 3 minutes, and says it is still hashing after that.",[1855,2113,2114,2115,2118],{},"An agent names the model as ",[1884,2116,2117],{},"local\u002Fmlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit",", which routes its jobs to the Macs that serve it.",[1855,2120,2121,2122,2125],{},"mlx-lm's server checks no key, so it stays on ",[1884,2123,2124],{},"127.0.0.1",", where only users of the Mac reach it; the node refuses one that answers on the Mac's network address.",[1855,2127,2128,2129,2132,2133,2136],{},"Its model list names every MLX model in the cache, and a call naming one would load it: the node serves only the models pinned under ",[1884,2130,2131],{},"models:",", or, with no pins, only the one the start command names with ",[1884,2134,2135],{},"--model",".",[1855,2138,2139,2140,2143,2144,2147,2148,2151,2152,2155,2156,2159],{},"A call's body can also name an adapter (",[1884,2141,2142],{},"adapters",") or a draft model (",[1884,2145,2146],{},"draft_model",", ",[1884,2149,2150],{},"num_draft_tokens","), which mlx-lm loads from any path or cached model: the node's proxy refuses such a call with ",[1884,2153,2154],{},"400 oz0_local_field",", and a body that names the model a second time in another case (",[1884,2157,2158],{},"MODEL","), which mlx-lm would read differently from the node.",[1855,2161,2162,2163,2166,2167,2170,2171,2174],{},"The node also refuses a ",[1884,2164,2165],{},"start:"," with ",[1884,2168,2169],{},"--draft-model"," or ",[1884,2172,2173],{},"--adapter-path",", whose weights it would neither hash nor check, so a server the node starts serves only the pinned weights.",[1855,2176,2177],{},"A server you start yourself runs what its command line names: leave those flags out there too.",[1855,2179,2180],{},"mlx-lm says no version over HTTP, so the node reads it from the installed packages, and refuses an mlx older than 0.29.4 (CVE-2025-62608, CVE-2025-62609), and a server whose mlx it cannot read at all.",[1855,2182,2183,2184,2186,2187,2189,2190,2170,2193,2196,2197,2200,2201,2203,2204,2207,2208,2211],{},"To use an install of your own, on a Mac or on another machine (mlx has CUDA builds for Linux), give ",[1884,2185,2165],{}," the absolute path of its ",[1884,2188,1886],{},": the node reads the versions from that program's environment, following a link such as the one ",[1884,2191,2192],{},"uv tool install mlx-lm",[1884,2194,2195],{},"pipx"," puts in ",[1884,2198,2199],{},"~\u002F.local\u002Fbin",". For a server you start yourself, without ",[1884,2202,2165],{},", name its environment with ",[1884,2205,2206],{},"environment:",", the folder that ",[1884,2209,2210],{},"python -c 'import sys; print(sys.prefix)'"," prints in it:",[1904,2213,2215],{"className":1949,"code":2214,"filename":1945,"language":1951,"meta":1910,"style":1910},"servers:\n  - name: mlx\n    kind: mlx\n    url: http:\u002F\u002F127.0.0.1:8080\n    environment: \u002FUsers\u002Fme\u002F.local\u002Fshare\u002Fuv\u002Ftools\u002Fmlx-lm   # where the node reads mlx-lm's and mlx's versions\n    models: [{name: mlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit, digest: \"sha256:...\"}]\n",[1884,2216,2217,2223,2233,2241,2249,2262],{"__ignoreMap":1910},[1914,2218,2219,2221],{"class":1916,"line":1917},[1914,2220,1959],{"class":1958},[1914,2222,1963],{"class":1962},[1914,2224,2225,2227,2229,2231],{"class":1916,"line":1966},[1914,2226,1969],{"class":1962},[1914,2228,1972],{"class":1958},[1914,2230,1946],{"class":1962},[1914,2232,1977],{"class":1924},[1914,2234,2235,2237,2239],{"class":1916,"line":1980},[1914,2236,1983],{"class":1958},[1914,2238,1946],{"class":1962},[1914,2240,1977],{"class":1924},[1914,2242,2243,2245,2247],{"class":1916,"line":1990},[1914,2244,1993],{"class":1958},[1914,2246,1946],{"class":1962},[1914,2248,1998],{"class":1924},[1914,2250,2251,2254,2256,2259],{"class":1916,"line":2001},[1914,2252,2253],{"class":1958},"    environment",[1914,2255,1946],{"class":1962},[1914,2257,2258],{"class":1924}," \u002FUsers\u002Fme\u002F.local\u002Fshare\u002Fuv\u002Ftools\u002Fmlx-lm",[1914,2260,2261],{"class":2004},"   # where the node reads mlx-lm's and mlx's versions\n",[1914,2263,2264,2266,2268,2271,2274,2276,2278,2280,2283,2285,2287,2290,2292],{"class":1916,"line":2008},[1914,2265,2068],{"class":1958},[1914,2267,1946],{"class":1962},[1914,2269,2270],{"class":1962}," [{",[1914,2272,2273],{"class":1958},"name",[1914,2275,1946],{"class":1962},[1914,2277,2029],{"class":1924},[1914,2279,2021],{"class":1962},[1914,2281,2282],{"class":1958}," digest",[1914,2284,1946],{"class":1962},[1914,2286,2039],{"class":1962},[1914,2288,2289],{"class":1924},"sha256:...",[1914,2291,2045],{"class":1962},[1914,2293,2294],{"class":1962},"}]\n",[1855,2296,2297,2300],{},[1884,2298,2299],{},"start: [mlx_lm.server, ...]"," on a machine other than a Mac with Apple silicon is refused, since the node's own lock is for macOS on Apple silicon.",[2302,2303,2305],"h3",{"id":2304},"pin-the-model","Pin the model",[1855,2307,2308],{},"mlx-lm reports no digest of a model's files, so the node computes one: it hashes the model's folder, each file once, in the background (a large model takes a while the first time, and the server's reason says it is hashing). The digest is the SHA-256 of the files' own SHA-256 lines, sorted by path, which you can compute by hand in the snapshot's folder:",[1904,2310,2312],{"className":1906,"code":2311,"filename":1908,"language":1909,"meta":1910,"style":1910},"cd ~\u002F.cache\u002Fhuggingface\u002Fhub\u002Fmodels--mlx-community--Qwen3-Coder-30B-A3B-Instruct-4bit\u002Fsnapshots\u002F*\u002F\nfind -L . -type f | sed 's|^\\.\u002F||' | LC_ALL=C sort | xargs shasum -a 256 | shasum -a 256\n",[1884,2313,2314,2330],{"__ignoreMap":1910},[1914,2315,2316,2320,2323,2327],{"class":1916,"line":1917},[1914,2317,2319],{"class":2318},"s2Zo4","cd",[1914,2321,2322],{"class":1924}," ~\u002F.cache\u002Fhuggingface\u002Fhub\u002Fmodels--mlx-community--Qwen3-Coder-30B-A3B-Instruct-4bit\u002Fsnapshots\u002F",[1914,2324,2326],{"class":2325},"sTEyZ","*",[1914,2328,2329],{"class":1924},"\u002F\n",[1914,2331,2332,2335,2338,2341,2344,2347,2350,2353,2356,2359,2362,2364,2367,2370,2373,2376,2378,2381,2384,2387,2391,2393,2395,2397],{"class":1916,"line":1966},[1914,2333,2334],{"class":1920},"find",[1914,2336,2337],{"class":1924}," -L",[1914,2339,2340],{"class":1924}," .",[1914,2342,2343],{"class":1924}," -type",[1914,2345,2346],{"class":1924}," f",[1914,2348,2349],{"class":1962}," |",[1914,2351,2352],{"class":1920}," sed",[1914,2354,2355],{"class":1962}," '",[1914,2357,2358],{"class":1924},"s|^\\.\u002F||",[1914,2360,2361],{"class":1962},"'",[1914,2363,2349],{"class":1962},[1914,2365,2366],{"class":2325}," LC_ALL",[1914,2368,2369],{"class":1962},"=",[1914,2371,2372],{"class":1924},"C",[1914,2374,2375],{"class":1920}," sort",[1914,2377,2349],{"class":1962},[1914,2379,2380],{"class":1920}," xargs",[1914,2382,2383],{"class":1924}," shasum",[1914,2385,2386],{"class":1924}," -a",[1914,2388,2390],{"class":2389},"sbssI"," 256",[1914,2392,2349],{"class":1962},[1914,2394,2383],{"class":1920},[1914,2396,2386],{"class":1924},[1914,2398,2399],{"class":2389}," 256\n",[1855,2401,2402,2403,2405,2406,2409,2410,2147,2413,2147,2416,2419,2420,2423],{},"Or leave the digest out the first time: the server is refused, and its reason on the Nodes page and in ",[1884,2404,2106],{}," gives the digest the node found (",[1884,2407,2408],{},"their files' digests: mlx-community\u002F... sha256:...","). A folder with pickled weights (",[1884,2411,2412],{},".bin",[1884,2414,2415],{},".pt",[1884,2417,2418],{},".ckpt"," and the like) is refused. ",[1884,2421,2422],{},"allow_unpinned: true"," serves the model without a pin, and says so.",[2302,2425,2427],{"id":2426},"how-many-calls-at-once","How many calls at once",[1855,2429,2430,2431,2434,2435,2438,2439,2442,2443,2447,2448,2451,2452,2455],{},"mlx-lm batches calls: it decodes up to 32 at once (",[1884,2432,2433],{},"--decode-concurrency","), and one at a time with a quantized KV cache (",[1884,2436,2437],{},"--kv-bits","). The node reports that number, and a server with ",[1884,2440,2441],{},"fleet: true"," gets as many ",[1865,2444,2446],{"href":2445},"\u002Ffleet\u002Flocal-models#parallelism","slots",", so two agents delegated at once both run. ",[1884,2449,2450],{},"parallel:"," in models.yaml says another number, and ",[1884,2453,2454],{},"slots:"," caps the node's own proxy. Memory is the real limit on a Mac: each call in flight holds its own context.",[1870,2457,2459],{"id":2458},"reach-lm-studio","Reach LM Studio",[1855,2461,2462,2467,2468,2470,2471,2473,2474,2477],{},[1865,2463,2466],{"href":2464,"rel":2465},"https:\u002F\u002Flmstudio.ai",[1880],"LM Studio"," runs as the person who started it, with the models they downloaded, so the node reaches it while it runs and never starts it (",[1884,2469,2165],{}," is refused). Start its server on ",[1884,2472,2124],{}," (Developer, Start server, or ",[1884,2475,2476],{},"lms server start","), leave Serve on Local Network off, and name it:",[1904,2479,2481],{"className":1949,"code":2480,"filename":1945,"language":1951,"meta":1910,"style":1910},"servers:\n  - name: lmstudio\n    kind: lmstudio\n    url: http:\u002F\u002F127.0.0.1:1234\n    key_env: LMSTUDIO_API_TOKEN   # when Require Authentication is on: a variable of the node's that holds the token\n    allow_unpinned: true          # LM Studio reports no digests\n    models:\n      - name: qwen\u002Fqwen3-coder-30b\n",[1884,2482,2483,2489,2500,2508,2517,2530,2544,2550],{"__ignoreMap":1910},[1914,2484,2485,2487],{"class":1916,"line":1917},[1914,2486,1959],{"class":1958},[1914,2488,1963],{"class":1962},[1914,2490,2491,2493,2495,2497],{"class":1916,"line":1966},[1914,2492,1969],{"class":1962},[1914,2494,1972],{"class":1958},[1914,2496,1946],{"class":1962},[1914,2498,2499],{"class":1924}," lmstudio\n",[1914,2501,2502,2504,2506],{"class":1916,"line":1980},[1914,2503,1983],{"class":1958},[1914,2505,1946],{"class":1962},[1914,2507,2499],{"class":1924},[1914,2509,2510,2512,2514],{"class":1916,"line":1990},[1914,2511,1993],{"class":1958},[1914,2513,1946],{"class":1962},[1914,2515,2516],{"class":1924}," http:\u002F\u002F127.0.0.1:1234\n",[1914,2518,2519,2522,2524,2527],{"class":1916,"line":2001},[1914,2520,2521],{"class":1958},"    key_env",[1914,2523,1946],{"class":1962},[1914,2525,2526],{"class":1924}," LMSTUDIO_API_TOKEN",[1914,2528,2529],{"class":2004},"   # when Require Authentication is on: a variable of the node's that holds the token\n",[1914,2531,2532,2535,2537,2541],{"class":1916,"line":2008},[1914,2533,2534],{"class":1958},"    allow_unpinned",[1914,2536,1946],{"class":1962},[1914,2538,2540],{"class":2539},"sfNiH"," true",[1914,2542,2543],{"class":2004},"          # LM Studio reports no digests\n",[1914,2545,2546,2548],{"class":1916,"line":2065},[1914,2547,2068],{"class":1958},[1914,2549,1963],{"class":1962},[1914,2551,2552,2554,2556,2558],{"class":1916,"line":2073},[1914,2553,2076],{"class":1962},[1914,2555,1972],{"class":1958},[1914,2557,1946],{"class":1962},[1914,2559,2560],{"class":1924}," qwen\u002Fqwen3-coder-30b\n",[1855,2562,2563,2564,2147,2567,2570,2571,2573],{},"The node reads LM Studio's REST API for each model's file format (GGUF or MLX) and for the Max Concurrent Predictions of each loaded model (4 by default), which it reports as the server's parallelism. Its proxy passes only inference calls, so LM Studio's own model loading and downloads (",[1884,2565,2566],{},"\u002Fapi\u002Fv1\u002Fmodels\u002Fload",[1884,2568,2569],{},"\u002Fapi\u002Fv1\u002Fmodels\u002Fdownload",") stay behind, and it refuses a call whose body names a ",[1884,2572,2146],{},", which LM Studio would load from any model you downloaded. A default draft model you set in LM Studio's own settings is LM Studio's to load: the node does not see it.",[1870,2575,2577],{"id":2576},"which-harness-on-which-server","Which harness on which server",[1855,2579,2580],{},"The node's proxy never translates one model API into another: an agent runs on a local model only in a format its server serves. The edge knows each server's formats from the node, and offers a harness a local model in one of them.",[2582,2583,2584,2602],"table",{},[2585,2586,2587],"thead",{},[2588,2589,2590,2594,2597,2599],"tr",{},[2591,2592,2593],"th",{},"Agent",[2591,2595,2596],{},"Speaks",[2591,2598,1881],{},[2591,2600,2601],{},"LM Studio, Ollama, llama.cpp, vLLM",[2603,2604,2605,2626,2640,2655],"tbody",{},[2588,2606,2607,2618,2621,2624],{},[2608,2609,2610,2611,2147,2614,2617],"td",{},"Pydantic AI and OpenAI Agents SDK agents (",[1884,2612,2613],{},"runtime: pydantic-ai",[1884,2615,2616],{},"openai-agents",")",[2608,2619,2620],{},"Chat Completions",[2608,2622,2623],{},"Yes",[2608,2625,2623],{},[2588,2627,2628,2634,2636,2638],{},[2608,2629,2630,2631,2617],{},"OpenCode and goose (",[1884,2632,2633],{},"harness-acp",[2608,2635,2620],{},[2608,2637,2623],{},[2608,2639,2623],{},[2588,2641,2642,2647,2650,2653],{},[2608,2643,2644,2645,2617],{},"Codex (",[1884,2646,2633],{},[2608,2648,2649],{},"Responses",[2608,2651,2652],{},"No",[2608,2654,2623],{},[2588,2656,2657,2663,2666,2668],{},[2608,2658,2659,2660,2617],{},"The Claude Agent SDK (",[1884,2661,2662],{},"harness-claude",[2608,2664,2665],{},"Messages",[2608,2667,2652],{},[2608,2669,2623],{},[1855,2671,2672,2673,2676],{},"A server's ",[1884,2674,2675],{},"formats:"," in models.yaml narrows what it serves, for a server whose Responses or Messages you do not want used.",[1855,2678,2679,2680,2683,2684,2687],{},"Harness agents cannot keep their data on the node with ",[1884,2681,2682],{},"data: local"," yet. A harness agent runs on a local model by its placement: name the model in ",[1884,2685,2686],{},"model.primary",", which routes its jobs to the nodes that serve it; its calls then go to the node's own server.",[1904,2689,2692],{"className":1949,"code":2690,"filename":2691,"language":1951,"meta":1910,"style":1910},"name: mac-coder\nruntime: harness:opencode\nmodel:\n  primary: local\u002Fmlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit\n","agents\u002Fmac-coder.yaml",[1884,2693,2694,2703,2713,2720],{"__ignoreMap":1910},[1914,2695,2696,2698,2700],{"class":1916,"line":1917},[1914,2697,2273],{"class":1958},[1914,2699,1946],{"class":1962},[1914,2701,2702],{"class":1924}," mac-coder\n",[1914,2704,2705,2708,2710],{"class":1916,"line":1966},[1914,2706,2707],{"class":1958},"runtime",[1914,2709,1946],{"class":1962},[1914,2711,2712],{"class":1924}," harness:opencode\n",[1914,2714,2715,2718],{"class":1916,"line":1980},[1914,2716,2717],{"class":1958},"model",[1914,2719,1963],{"class":1962},[1914,2721,2722,2725,2727],{"class":1916,"line":1990},[1914,2723,2724],{"class":1958},"  primary",[1914,2726,1946],{"class":1962},[1914,2728,2729],{"class":1924}," local\u002Fmlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit\n",[1870,2731,2733],{"id":2732},"price-the-hardware","Price the hardware",[1855,2735,2736,2737,2740],{},"A local model costs $0 unless the tenant prices it, so a budget would not see what the Mac costs. Give it a price per million tokens, or per second a call runs, in the tenant's ",[1884,2738,2739],{},"local"," record:",[1904,2742,2744],{"className":1906,"code":2743,"filename":1908,"language":1909,"meta":1910,"style":1910},"oz0 provider model local mlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit --input 0.05 --output 0.20\noz0 provider model local qwen\u002Fqwen3-coder-30b --per-second 0.0002\n",[1884,2745,2746,2773],{"__ignoreMap":1910},[1914,2747,2748,2750,2753,2756,2759,2761,2764,2767,2770],{"class":1916,"line":1917},[1914,2749,1714],{"class":1920},[1914,2751,2752],{"class":1924}," provider",[1914,2754,2755],{"class":1924}," model",[1914,2757,2758],{"class":1924}," local",[1914,2760,2029],{"class":1924},[1914,2762,2763],{"class":1924}," --input",[1914,2765,2766],{"class":2389}," 0.05",[1914,2768,2769],{"class":1924}," --output",[1914,2771,2772],{"class":2389}," 0.20\n",[1914,2774,2775,2777,2779,2781,2783,2786,2789],{"class":1916,"line":1966},[1914,2776,1714],{"class":1920},[1914,2778,2752],{"class":1924},[1914,2780,2755],{"class":1924},[1914,2782,2758],{"class":1924},[1914,2784,2785],{"class":1924}," qwen\u002Fqwen3-coder-30b",[1914,2787,2788],{"class":1924}," --per-second",[1914,2790,2791],{"class":2389}," 0.0002\n",[1855,2793,2794],{},"Every local call is then priced on the job, counted against its budget and shown on the Cost page beside cloud calls, with the node that ran it.",[1870,2796,2798],{"id":2797},"local-first-the-cloud-when-a-round-fails","Local first, the cloud when a round fails",[1855,2800,2801,2802,2806],{},"A ",[1865,2803,2805],{"href":2804},"\u002Fspend\u002Fmodels-and-keys\u002Feffort-and-cascades#a-cascade-the-next-model-only-when-a-round-fails","cascade"," runs a round on a local model first, and restarts it on a larger model only when its answer fails the agent's check:",[1904,2808,2811],{"className":1949,"code":2809,"filename":2810,"language":1951,"meta":1910,"style":1910},"model:\n  primary: local\u002Fmlx-community\u002FQwen3-Coder-30B-A3B-Instruct-4bit\n  cascade: [anthropic\u002Fclaude-sonnet-5-5]   # only when the local round fails\noutcome:\n  grader:\n    contains: [\"## Summary\"]\n","agents\u002Fsummarizer.yaml",[1884,2812,2813,2819,2827,2845,2852,2859],{"__ignoreMap":1910},[1914,2814,2815,2817],{"class":1916,"line":1917},[1914,2816,2717],{"class":1958},[1914,2818,1963],{"class":1962},[1914,2820,2821,2823,2825],{"class":1916,"line":1966},[1914,2822,2724],{"class":1958},[1914,2824,1946],{"class":1962},[1914,2826,2729],{"class":1924},[1914,2828,2829,2832,2834,2836,2839,2842],{"class":1916,"line":1980},[1914,2830,2831],{"class":1958},"  cascade",[1914,2833,1946],{"class":1962},[1914,2835,2016],{"class":1962},[1914,2837,2838],{"class":1924},"anthropic\u002Fclaude-sonnet-5-5",[1914,2840,2841],{"class":1962},"]",[1914,2843,2844],{"class":2004},"   # only when the local round fails\n",[1914,2846,2847,2850],{"class":1916,"line":1990},[1914,2848,2849],{"class":1958},"outcome",[1914,2851,1963],{"class":1962},[1914,2853,2854,2857],{"class":1916,"line":2001},[1914,2855,2856],{"class":1958},"  grader",[1914,2858,1963],{"class":1962},[1914,2860,2861,2864,2866,2868,2870,2873,2875],{"class":1916,"line":2008},[1914,2862,2863],{"class":1958},"    contains",[1914,2865,1946],{"class":1962},[1914,2867,2016],{"class":1962},[1914,2869,2045],{"class":1962},[1914,2871,2872],{"class":1924},"## Summary",[1914,2874,2045],{"class":1962},[1914,2876,2062],{"class":1962},[2878,2879,2880,2890,2896],"ul",{},[1900,2881,2882,2883,2885,2886,2889],{},"An agent with ",[1884,2884,2682],{}," names only ",[1884,2887,2888],{},"local\u002F"," models in its cascade: every round stays on the node, and nothing escalates to the cloud. Escalating to a cloud model is for agents without it.",[1900,2891,2892,2893,2895],{},"The nodes that run a cascading agent must serve every ",[1884,2894,2888],{}," model it names, since a restarted round runs on the job's node.",[1900,2897,2898,2899,2902],{},"A cascade does not go with ",[1884,2900,2901],{},"model.placement: fleet",", so it cannot use a model another Mac serves to the fleet.",[1870,2904,2906],{"id":2905},"stable-prompts-keep-the-local-cache-warm","Stable prompts keep the local cache warm",[1855,2908,2909],{},"mlx-lm keeps the KV cache of recent prompts and reuses the longest prefix a new call shares with one of them, as llama.cpp's slots, vLLM's prefix cache and Ollama do.",[1855,2911,2912,2913,2917],{},"The runtime keeps each prompt's stable parts first: instructions, the skills index, tool definitions in a fixed order, then the history, with the status block and fresh results last (",[1865,2914,2916],{"href":2915},"\u002Fspend\u002Fcost-and-usage\u002Fprices-and-cache#prompts-with-their-stable-parts-first","prompts with their stable parts first",").",[1855,2919,2920],{},"A long agent's next call then shares all but its last part with the one before, and the server reads it from its cache instead of computing it again. Keep your own instructions free of times and counters for the same reason.",[1870,2922,2924],{"id":2923},"a-mac-studio-cluster-over-thunderbolt","A Mac Studio cluster over Thunderbolt",[2926,2927,2928],"warning",{},"This is a recipe nobody has run end to end yet. Each part is documented by mlx and mlx-lm, and the node's checks are tested with stand-ins; try it on your own machines first.",[1855,2930,2931,2932,2935,2936,2939,2940,2943],{},"mlx can spread one model across several Macs connected with Thunderbolt cables (",[1884,2933,2934],{},"mlx.launch"," with its ",[1884,2937,2938],{},"ring"," backend, or ",[1884,2941,2942],{},"jaccl"," for RDMA over Thunderbolt 5), and mlx-lm's server runs on such a group: every Mac loads its part of the model, and only the first (rank 0) answers HTTP. Such a group can be a fleet model server, with the first Mac as its node:",[1897,2945,2946,2957,2983],{},[1900,2947,2948,2949,2952,2953,2956],{},"Connect the Macs with Thunderbolt and let mlx find the links: ",[1884,2950,2951],{},"mlx.distributed_config --over thunderbolt --hosts mac1,mac2 --output-hostfile ~\u002Fhosts.json"," (it may ask for ",[1884,2954,2955],{},"sudo"," to set up the links). The first host in the file is rank 0: make it the node's Mac.",[1900,2958,2959,2960,2962,2963,2967,2968,2971,2972,2975,2976,2979,2980,2136],{},"Install the same mlx-lm at the same path on every Mac, for example from the lock the node installs its own from: once the node has started an ",[1884,2961,1886],{}," of its own (",[1865,2964,2966],{"href":2965},"\u002Ffleet\u002Flocal-models-on-a-mac#serve-a-model-with-mlx-lm","in this guide","), it is in ",[1884,2969,2970],{},"\u003Cdata-dir>\u002Ftools\u002Fmlx-lm\u002F\u003Cid>\u002Frequirements.txt"," on the node's Mac. Copy it to each Mac and run ",[1884,2973,2974],{},"uv venv ~\u002Fmlx-lm"," and then ",[1884,2977,2978],{},"uv pip install --require-hashes --no-deps --python ~\u002Fmlx-lm\u002Fbin\u002Fpython -r requirements.txt"," there. Download the model into each Mac's cache, and let the node's user reach the others with ",[1884,2981,2982],{},"ssh",[1900,2984,2985,2986,3154,3156,3157,3160,3161,3164,3165,2136],{},"Start the group from the node:",[1904,2987,2989],{"className":1949,"code":2988,"filename":1945,"language":1951,"meta":1910,"style":1910},"servers:\n  - name: studio-cluster\n    kind: mlx\n    url: http:\u002F\u002F127.0.0.1:8080\n    start: [\u002FUsers\u002Fme\u002Fmlx-lm\u002Fbin\u002Fmlx.launch, --hostfile, \u002FUsers\u002Fme\u002Fhosts.json, --backend, ring, --env, HF_HUB_OFFLINE=1, --,\n            \u002FUsers\u002Fme\u002Fmlx-lm\u002Fbin\u002Fmlx_lm.server, --model, mlx-community\u002FQwen3-Coder-480B-A35B-Instruct-4bit,\n            --host, \"{host}\", --port, \"{port}\"]\n    models: [{name: mlx-community\u002FQwen3-Coder-480B-A35B-Instruct-4bit, digest: \"sha256:...\"}]\n    fleet: true\n",[1884,2990,2991,2997,3008,3016,3024,3073,3089,3116,3144],{"__ignoreMap":1910},[1914,2992,2993,2995],{"class":1916,"line":1917},[1914,2994,1959],{"class":1958},[1914,2996,1963],{"class":1962},[1914,2998,2999,3001,3003,3005],{"class":1916,"line":1966},[1914,3000,1969],{"class":1962},[1914,3002,1972],{"class":1958},[1914,3004,1946],{"class":1962},[1914,3006,3007],{"class":1924}," studio-cluster\n",[1914,3009,3010,3012,3014],{"class":1916,"line":1980},[1914,3011,1983],{"class":1958},[1914,3013,1946],{"class":1962},[1914,3015,1977],{"class":1924},[1914,3017,3018,3020,3022],{"class":1916,"line":1990},[1914,3019,1993],{"class":1958},[1914,3021,1946],{"class":1962},[1914,3023,1998],{"class":1924},[1914,3025,3026,3028,3030,3032,3035,3037,3040,3042,3045,3047,3050,3052,3055,3057,3060,3062,3065,3067,3070],{"class":1916,"line":2001},[1914,3027,2011],{"class":1958},[1914,3029,1946],{"class":1962},[1914,3031,2016],{"class":1962},[1914,3033,3034],{"class":1924},"\u002FUsers\u002Fme\u002Fmlx-lm\u002Fbin\u002Fmlx.launch",[1914,3036,2021],{"class":1962},[1914,3038,3039],{"class":1924}," --hostfile",[1914,3041,2021],{"class":1962},[1914,3043,3044],{"class":1924}," \u002FUsers\u002Fme\u002Fhosts.json",[1914,3046,2021],{"class":1962},[1914,3048,3049],{"class":1924}," --backend",[1914,3051,2021],{"class":1962},[1914,3053,3054],{"class":1924}," ring",[1914,3056,2021],{"class":1962},[1914,3058,3059],{"class":1924}," --env",[1914,3061,2021],{"class":1962},[1914,3063,3064],{"class":1924}," HF_HUB_OFFLINE=1",[1914,3066,2021],{"class":1962},[1914,3068,3069],{"class":1924}," --",[1914,3071,3072],{"class":1962},",\n",[1914,3074,3075,3078,3080,3082,3084,3087],{"class":1916,"line":2008},[1914,3076,3077],{"class":1924},"            \u002FUsers\u002Fme\u002Fmlx-lm\u002Fbin\u002Fmlx_lm.server",[1914,3079,2021],{"class":1962},[1914,3081,2024],{"class":1924},[1914,3083,2021],{"class":1962},[1914,3085,3086],{"class":1924}," mlx-community\u002FQwen3-Coder-480B-A35B-Instruct-4bit",[1914,3088,3072],{"class":1962},[1914,3090,3091,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114],{"class":1916,"line":2065},[1914,3092,3093],{"class":1924},"            --host",[1914,3095,2021],{"class":1962},[1914,3097,2039],{"class":1962},[1914,3099,2042],{"class":1924},[1914,3101,2045],{"class":1962},[1914,3103,2021],{"class":1962},[1914,3105,2050],{"class":1924},[1914,3107,2021],{"class":1962},[1914,3109,2039],{"class":1962},[1914,3111,2057],{"class":1924},[1914,3113,2045],{"class":1962},[1914,3115,2062],{"class":1962},[1914,3117,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142],{"class":1916,"line":2073},[1914,3119,2068],{"class":1958},[1914,3121,1946],{"class":1962},[1914,3123,2270],{"class":1962},[1914,3125,2273],{"class":1958},[1914,3127,1946],{"class":1962},[1914,3129,3086],{"class":1924},[1914,3131,2021],{"class":1962},[1914,3133,2282],{"class":1958},[1914,3135,1946],{"class":1962},[1914,3137,2039],{"class":1962},[1914,3139,2289],{"class":1924},[1914,3141,2045],{"class":1962},[1914,3143,2294],{"class":1962},[1914,3145,3146,3149,3151],{"class":1916,"line":2085},[1914,3147,3148],{"class":1958},"    fleet",[1914,3150,1946],{"class":1962},[1914,3152,3153],{"class":2539}," true\n",[1930,3155],{},"and give the node the ",[1884,3158,3159],{},"fleet"," label on its join token (",[1884,3162,3163],{},"oz0 token create --label fleet=true",") or when accepting it, as for any ",[1865,3166,3168],{"href":3167},"\u002Ffleet\u002Flocal-models\u002Ffleet#share-a-gpu-with-the-fleet","fleet server",[1855,3170,3171],{},"How it meets the node's checks, and what it does not do yet:",[2878,3173,3174,3180,3183,3189,3205],{},[1900,3175,3176,3177,3179],{},"The HTTP server listens on ",[1884,3178,2124],{}," of the first Mac only, so the node's check that a server answers on no network address passes. The Macs' own links between ranks use other ports on the Thunderbolt interfaces, which the node does not check: anything on those cables can reach them, so connect only the cluster's Macs.",[1900,3181,3182],{},"The node checks, pins and hashes the first Mac's copy of the model, and reads the versions of the first Mac's mlx-lm. It cannot see the other Macs' copies or versions: keep them the same by hand.",[1900,3184,3185,3186,3188],{},"The node starts and stops ",[1884,3187,2934],{}," on its own Mac; whether the other Macs' processes stop with it is up to mlx's launcher. A hung group is started again like any server the node starts.",[1900,3190,3191,3193,3194,3197,3198,3201,3202,3204],{},[1884,3192,2934],{}," runs the program after ",[1884,3195,3196],{},"--"," at the same path on every Mac, so give it by its absolute path, as above. With the node's own install (",[1884,3199,3200],{},"start: [mlx.launch, ..., --, mlx_lm.server, ...]","), the node gives both programs by their paths in ",[1884,3203,1890],{},", and the other Macs need the same install at that path.",[1900,3206,3207],{},"Only the node's Mac is a node: the other Macs run no jobs and report nothing to the cluster.",[3209,3210,3211],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":1910,"searchDepth":1966,"depth":1966,"links":3213},[3214,3218,3219,3220,3221,3222,3223],{"id":1872,"depth":1966,"text":1873,"children":3215},[3216,3217],{"id":2304,"depth":1980,"text":2305},{"id":2426,"depth":1980,"text":2427},{"id":2458,"depth":1966,"text":2459},{"id":2576,"depth":1966,"text":2577},{"id":2732,"depth":1966,"text":2733},{"id":2797,"depth":1966,"text":2798},{"id":2905,"depth":1966,"text":2906},{"id":2923,"depth":1966,"text":2924},"Run agents on a Mac's own models with mlx-lm or LM Studio, choose the harness each server can serve, price the hardware, and go local first.","md",null,{"audience":3228,"doc_type":3229},"cluster operators","how-to",{"icon":1241},{"title":1326,"description":3224},"ai5PWkIVBiaBZREonUG0xTQkawlwyLE2uAwAfXLQA2k",[3234,3236],{"title":1322,"path":1323,"stem":1324,"description":3235,"icon":797,"children":-1},"Use measured timings and model prices to plan local capacity.",{"title":1330,"path":1331,"stem":1332,"description":3237,"icon":127,"children":-1},"Why a job is waiting, and what each task queue holds, its backlog and the nodes that poll it.",1794442949872]