[{"data":1,"prerenderedAt":680},["ShallowReactive",2],{"navigation_docs":3,"-build-plugins-publish":320,"-build-plugins-publish-surround":675},[4,35,69,109,133,193,228,262,305],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-ph-house",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart","i-ph-rocket-launch",{"title":21,"path":22,"stem":23,"icon":24},"Concepts","\u002Fgetting-started\u002Fconcepts","1.getting-started\u002F3.concepts","i-ph-book-open",{"title":26,"path":27,"stem":28,"icon":29},"Install","\u002Fgetting-started\u002Finstall","1.getting-started\u002F4.install","i-ph-download-simple",{"title":31,"path":32,"stem":33,"icon":34},"What works today","\u002Fgetting-started\u002Fstatus","1.getting-started\u002F5.status","i-ph-list-checks",{"title":21,"icon":6,"path":36,"stem":37,"children":38,"page":6},"\u002Fconcepts","2.concepts",[39,44,49,54,59,64],{"title":40,"path":41,"stem":42,"icon":43},"Architecture","\u002Fconcepts\u002Farchitecture","2.concepts\u002F1.architecture","i-ph-planet",{"title":45,"path":46,"stem":47,"icon":48},"Jobs and durability","\u002Fconcepts\u002Fjobs","2.concepts\u002F2.jobs","i-ph-infinity",{"title":50,"path":51,"stem":52,"icon":53},"Routing","\u002Fconcepts\u002Frouting","2.concepts\u002F3.routing","i-ph-path",{"title":55,"path":56,"stem":57,"icon":58},"Security model","\u002Fconcepts\u002Fsecurity","2.concepts\u002F4.security","i-ph-shield-check",{"title":60,"path":61,"stem":62,"icon":63},"Tenants","\u002Fconcepts\u002Ftenants","2.concepts\u002F5.tenants","i-ph-buildings",{"title":65,"path":66,"stem":67,"icon":68},"Temporal","\u002Fconcepts\u002Ftemporal","2.concepts\u002F6.temporal","i-ph-clock",{"title":70,"icon":6,"path":71,"stem":72,"children":73,"page":6},"Run a fleet","\u002Ffleet","3.fleet",[74,79,84,89,94,99,104],{"title":75,"path":76,"stem":77,"icon":78},"Dev mode","\u002Ffleet\u002Fdev-mode","3.fleet\u002F1.dev-mode","i-ph-laptop",{"title":80,"path":81,"stem":82,"icon":83},"Run a cluster","\u002Ffleet\u002Fcluster","3.fleet\u002F2.cluster","i-ph-hard-drives",{"title":85,"path":86,"stem":87,"icon":88},"Join nodes","\u002Ffleet\u002Fjoin-nodes","3.fleet\u002F3.join-nodes","i-ph-plugs-connected",{"title":90,"path":91,"stem":92,"icon":93},"Manage nodes","\u002Ffleet\u002Fmanage-nodes","3.fleet\u002F4.manage-nodes","i-ph-list-bullets",{"title":95,"path":96,"stem":97,"icon":98},"Secrets","\u002Ffleet\u002Fsecrets","3.fleet\u002F5.secrets","i-ph-key",{"title":100,"path":101,"stem":102,"icon":103},"High availability","\u002Ffleet\u002Fhigh-availability","3.fleet\u002F6.high-availability","i-ph-copy",{"title":105,"path":106,"stem":107,"icon":108},"Upgrades, backups and restores","\u002Ffleet\u002Fupgrades","3.fleet\u002F7.upgrades","i-ph-arrows-clockwise",{"title":110,"icon":6,"path":111,"stem":112,"children":113,"page":6},"Use plugins","\u002Fplugins","4.plugins",[114,119,124,128],{"title":115,"path":116,"stem":117,"icon":118},"What a plugin is","\u002Fplugins\u002Foverview","4.plugins\u002F1.overview","i-ph-puzzle-piece",{"title":120,"path":121,"stem":122,"icon":123},"Install and update","\u002Fplugins\u002Finstall","4.plugins\u002F2.install","i-ph-package",{"title":125,"path":126,"stem":127,"icon":123},"Existing MCP packages","\u002Fplugins\u002Fpackages","4.plugins\u002F3.packages",{"title":129,"path":130,"stem":131,"icon":132},"The catalog","\u002Fplugins\u002Fcatalog","4.plugins\u002F4.catalog","i-ph-books",{"title":134,"icon":6,"path":135,"stem":136,"children":137,"page":6},"Build plugins","\u002Fbuild-plugins","5.build-plugins",[138,143,148,153,158,163,168,173,178,183,188],{"title":139,"path":140,"stem":141,"icon":142},"Your first plugin","\u002Fbuild-plugins\u002Ffirst-plugin","5.build-plugins\u002F1.first-plugin","i-ph-hammer",{"title":144,"path":145,"stem":146,"icon":147},"Harnesses","\u002Fbuild-plugins\u002Fharnesses","5.build-plugins\u002F10.harnesses","i-ph-cpu",{"title":149,"path":150,"stem":151,"icon":152},"Example: support triage","\u002Fbuild-plugins\u002Fexample-support-triage","5.build-plugins\u002F11.example-support-triage","i-ph-lifebuoy",{"title":154,"path":155,"stem":156,"icon":157},"Tools","\u002Fbuild-plugins\u002Ftools","5.build-plugins\u002F2.tools","i-ph-wrench",{"title":159,"path":160,"stem":161,"icon":162},"Agents","\u002Fbuild-plugins\u002Fagents","5.build-plugins\u002F3.agents","i-ph-robot",{"title":164,"path":165,"stem":166,"icon":167},"Skills","\u002Fbuild-plugins\u002Fskills","5.build-plugins\u002F4.skills","i-ph-graduation-cap",{"title":169,"path":170,"stem":171,"icon":172},"Develop and test","\u002Fbuild-plugins\u002Fdevelop-and-test","5.build-plugins\u002F5.develop-and-test","i-ph-flask",{"title":174,"path":175,"stem":176,"icon":177},"Publish and version","\u002Fbuild-plugins\u002Fpublish","5.build-plugins\u002F6.publish","i-ph-tag",{"title":179,"path":180,"stem":181,"icon":182},"Hooks","\u002Fbuild-plugins\u002Fhooks","5.build-plugins\u002F7.hooks","i-ph-anchor",{"title":184,"path":185,"stem":186,"icon":187},"Flows","\u002Fbuild-plugins\u002Fflows","5.build-plugins\u002F8.flows","i-ph-flow-arrow",{"title":189,"path":190,"stem":191,"icon":192},"Evals and quality gates","\u002Fbuild-plugins\u002Fevals","5.build-plugins\u002F9.evals","i-ph-seal-check",{"title":194,"icon":6,"path":195,"stem":196,"children":197,"page":6},"Run agents","\u002Fagents","6.agents",[198,203,208,213,218,223],{"title":199,"path":200,"stem":201,"icon":202},"Run jobs","\u002Fagents\u002Frun-jobs","6.agents\u002F1.run-jobs","i-ph-play",{"title":204,"path":205,"stem":206,"icon":207},"Models and keys","\u002Fagents\u002Fmodels-and-keys","6.agents\u002F2.models-and-keys","i-ph-sparkle",{"title":209,"path":210,"stem":211,"icon":212},"Delegation","\u002Fagents\u002Fdelegation","6.agents\u002F3.delegation","i-ph-git-fork",{"title":214,"path":215,"stem":216,"icon":217},"Contracts and limits","\u002Fagents\u002Fcontracts-and-limits","6.agents\u002F4.contracts-and-limits","i-ph-ruler",{"title":219,"path":220,"stem":221,"icon":222},"Runtime API","\u002Fagents\u002Fruntime-api","6.agents\u002F5.runtime-api","i-ph-plug",{"title":224,"path":225,"stem":226,"icon":227},"Approvals","\u002Fagents\u002Fapprovals","6.agents\u002F6.approvals","i-ph-hand-palm",{"title":229,"icon":6,"path":230,"stem":231,"children":232,"page":6},"Monitor","\u002Fmonitor","7.monitor",[233,238,243,248,253,258],{"title":234,"path":235,"stem":236,"icon":237},"Web UI","\u002Fmonitor\u002Fweb-ui","7.monitor\u002F0.web-ui","i-ph-monitor",{"title":239,"path":240,"stem":241,"icon":242},"Cost and usage","\u002Fmonitor\u002Fcost-and-usage","7.monitor\u002F1.cost-and-usage","i-ph-coins",{"title":244,"path":245,"stem":246,"icon":247},"Node health","\u002Fmonitor\u002Fnodes","7.monitor\u002F2.nodes","i-ph-heartbeat",{"title":249,"path":250,"stem":251,"icon":252},"Job history","\u002Fmonitor\u002Fhistory","7.monitor\u002F3.history","i-ph-clock-counter-clockwise",{"title":254,"path":255,"stem":256,"icon":257},"Tracing and metrics","\u002Fmonitor\u002Fobservability","7.monitor\u002F4.observability","i-ph-chart-line",{"title":259,"path":260,"stem":261,"icon":152},"Troubleshooting","\u002Fmonitor\u002Ftroubleshooting","7.monitor\u002F5.troubleshooting",{"title":263,"icon":6,"path":264,"stem":265,"children":266,"page":6},"Reference","\u002Freference","8.reference",[267,281,286,290,295,300],{"title":268,"icon":269,"path":270,"stem":271,"children":272,"page":6},"CLI","i-ph-terminal-window","\u002Freference\u002Fcli","8.reference\u002F1.cli",[273,277],{"title":274,"path":275,"stem":276},"orchestrator-zero","\u002Freference\u002Fcli\u002Forchestrator-zero","8.reference\u002F1.cli\u002F1.orchestrator-zero",{"title":278,"path":279,"stem":280},"orchestrator-zero-node","\u002Freference\u002Fcli\u002Forchestrator-zero-node","8.reference\u002F1.cli\u002F2.orchestrator-zero-node",{"title":282,"path":283,"stem":284,"icon":285},"oz0-plugin.yaml","\u002Freference\u002Fplugin-manifest","8.reference\u002F2.plugin-manifest","i-ph-file-code",{"title":287,"path":288,"stem":289,"icon":162},"Agent definition","\u002Freference\u002Fagent-definition","8.reference\u002F3.agent-definition",{"title":291,"path":292,"stem":293,"icon":294},"Ports","\u002Freference\u002Fports","8.reference\u002F4.ports","i-ph-network",{"title":296,"path":297,"stem":298,"icon":299},"Environment variables","\u002Freference\u002Fenvironment","8.reference\u002F5.environment","i-ph-brackets-curly",{"title":301,"path":302,"stem":303,"icon":304},"Files and directories","\u002Freference\u002Ffiles","8.reference\u002F6.files","i-ph-tree-structure",{"title":306,"icon":6,"path":307,"stem":308,"children":309,"page":6},"About","\u002Fabout","9.about",[310,315],{"title":311,"path":312,"stem":313,"icon":314},"Licensing","\u002Fabout\u002Flicensing","9.about\u002F1.licensing","i-ph-scales",{"title":316,"path":317,"stem":318,"icon":319},"About these docs","\u002Fabout\u002Fcontributing-docs","9.about\u002F2.contributing-docs","i-ph-pencil-simple",{"id":321,"title":174,"body":322,"description":668,"extension":669,"links":670,"meta":671,"navigation":672,"path":175,"seo":673,"stem":176,"__hash__":674},"docs\u002F5.build-plugins\u002F6.publish.md",{"type":323,"value":324,"toc":661},"minimark",[325,330,334,350,354,402,408,466,473,508,512,536,540,622,650,654,657],[326,327,329],"h2",{"id":328},"a-plugin-is-a-git-repository","A plugin is a Git repository",[331,332,333],"p",{},"Push the plugin's folder to a Git repository the edge can reach over HTTPS. The edge fetches exactly one commit, packs it and serves it to the nodes; nodes never reach Git.",[331,335,336,337,340,341,344,345,349],{},"One repository can also hold several plugins, each in a folder with its own ",[338,339,282],"code",{},"; operators install one with ",[338,342,343],{},"plugin install --path",". A private repository works too, with a token the tenant keeps as a secret. See ",[346,347,120],"a",{"href":348},"\u002Fplugins\u002Finstall#a-plugin-in-a-folder",".",[326,351,353],{"id":352},"versions","Versions",[355,356,357,374,396],"ul",{},[358,359,360,366,367,369,370,373],"li",{},[361,362,363],"strong",{},[338,364,365],{},"version"," in ",[338,368,282],{}," is a semantic version, such as ",[338,371,372],{},"1.4.0",". It is for people.",[358,375,376,379,380,383,384,387,388,391,392,395],{},[361,377,378],{},"Release tags"," are ",[338,381,382],{},"v1.4.0",". ",[338,385,386],{},"plugin install"," without ",[338,389,390],{},"--ref"," takes the highest ",[338,393,394],{},"vX.Y.Z"," tag, compared as numbers, or the default branch when there is none.",[358,397,398,401],{},[361,399,400],{},"The commit"," is what actually installs. Every install is locked to one.",[331,403,404,405,407],{},"Bump ",[338,406,365],{},", commit, tag and push:",[409,410,416],"pre",{"className":411,"code":412,"filename":413,"language":414,"meta":415,"style":415},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git commit -am \"ops-tools 0.2.0\"\ngit tag v0.2.0\ngit push --tags\n","Terminal","bash","",[338,417,418,444,455],{"__ignoreMap":415},[419,420,423,427,431,434,438,441],"span",{"class":421,"line":422},"line",1,[419,424,426],{"class":425},"sBMFI","git",[419,428,430],{"class":429},"sfazB"," commit",[419,432,433],{"class":429}," -am",[419,435,437],{"class":436},"sMK4o"," \"",[419,439,440],{"class":429},"ops-tools 0.2.0",[419,442,443],{"class":436},"\"\n",[419,445,447,449,452],{"class":421,"line":446},2,[419,448,426],{"class":425},[419,450,451],{"class":429}," tag",[419,453,454],{"class":429}," v0.2.0\n",[419,456,458,460,463],{"class":421,"line":457},3,[419,459,426],{"class":425},[419,461,462],{"class":429}," push",[419,464,465],{"class":429}," --tags\n",[331,467,468,469,472],{},"Then install the new tag, or let ",[338,470,471],{},"plugin update"," resolve a branch again:",[409,474,476],{"className":411,"code":475,"filename":413,"language":414,"meta":415,"style":415},"orchestrator-zero plugin install https:\u002F\u002Fgithub.com\u002Fyour-org\u002Fops-tools --ref v0.2.0\norchestrator-zero plugin update ops-tools\n",[338,477,478,496],{"__ignoreMap":415},[419,479,480,482,485,488,491,494],{"class":421,"line":422},[419,481,274],{"class":425},[419,483,484],{"class":429}," plugin",[419,486,487],{"class":429}," install",[419,489,490],{"class":429}," https:\u002F\u002Fgithub.com\u002Fyour-org\u002Fops-tools",[419,492,493],{"class":429}," --ref",[419,495,454],{"class":429},[419,497,498,500,502,505],{"class":421,"line":446},[419,499,274],{"class":425},[419,501,484],{"class":429},[419,503,504],{"class":429}," update",[419,506,507],{"class":429}," ops-tools\n",[326,509,511],{"id":510},"lock-your-dependencies","Lock your dependencies",[355,513,514,525],{},[358,515,516,517,520,521,524],{},"Commit ",[338,518,519],{},"uv.lock",". The node builds the plugin's environment with ",[338,522,523],{},"uv sync --frozen",", so it installs exactly what you locked.",[358,526,527,528,531,532,535],{},"Pin packages: ",[338,529,530],{},"pypi:name==1.2.3",", ",[338,533,534],{},"npm:name@1.2.3",". Unpinned packages are pinned by the edge at install time, but pinning them yourself means you know what runs.",[326,537,539],{"id":538},"say-what-you-need","Say what you need",[409,541,545],{"className":542,"code":543,"filename":282,"language":544,"meta":415,"style":415},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","requires:\n  oz0: \">=0.4\"                       # the Orchestrator Zero versions it works with\n  platforms: [linux\u002Famd64, linux\u002Farm64, darwin\u002Farm64]\n  secrets: [GITHUB_TOKEN]            # tenant secrets its processes need\n","yaml",[338,546,547,556,576,603],{"__ignoreMap":415},[419,548,549,553],{"class":421,"line":422},[419,550,552],{"class":551},"swJcz","requires",[419,554,555],{"class":436},":\n",[419,557,558,561,564,566,569,572],{"class":421,"line":446},[419,559,560],{"class":551},"  oz0",[419,562,563],{"class":436},":",[419,565,437],{"class":436},[419,567,568],{"class":429},">=0.4",[419,570,571],{"class":436},"\"",[419,573,575],{"class":574},"sHwdD","                       # the Orchestrator Zero versions it works with\n",[419,577,578,581,583,586,589,592,595,597,600],{"class":421,"line":457},[419,579,580],{"class":551},"  platforms",[419,582,563],{"class":436},[419,584,585],{"class":436}," [",[419,587,588],{"class":429},"linux\u002Famd64",[419,590,591],{"class":436},",",[419,593,594],{"class":429}," linux\u002Farm64",[419,596,591],{"class":436},[419,598,599],{"class":429}," darwin\u002Farm64",[419,601,602],{"class":436},"]\n",[419,604,606,609,611,613,616,619],{"class":421,"line":605},4,[419,607,608],{"class":551},"  secrets",[419,610,563],{"class":436},[419,612,585],{"class":436},[419,614,615],{"class":429},"GITHUB_TOKEN",[419,617,618],{"class":436},"]",[419,620,621],{"class":574},"            # tenant secrets its processes need\n",[331,623,624,627,628,631,632,531,635,638,639,642,643,638,646,649],{},[338,625,626],{},"platforms"," lists ",[338,629,630],{},"os\u002Farch"," pairs from ",[338,633,634],{},"linux",[338,636,637],{},"darwin"," and ",[338,640,641],{},"windows"," with ",[338,644,645],{},"amd64",[338,647,648],{},"arm64","; empty means every platform.",[326,651,653],{"id":652},"keep-it-neutral-and-small","Keep it neutral and small",[331,655,656],{},"One plugin per concern is easier to roll out and roll back than one plugin with everything. Put your company's models, rules and services in your own plugins; the core never needs to change for them.",[658,659,660],"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 pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":415,"searchDepth":446,"depth":446,"links":662},[663,664,665,666,667],{"id":328,"depth":446,"text":329},{"id":352,"depth":446,"text":353},{"id":510,"depth":446,"text":511},{"id":538,"depth":446,"text":539},{"id":652,"depth":446,"text":653},"Ship a plugin with a Git tag, and control exactly what every node runs.","md",null,{},{"icon":177},{"title":174,"description":668},"B7NZBrl-VevYhFCvTM0zTlxfYzSGUAMAn7LBn-XioCk",[676,678],{"title":169,"path":170,"stem":171,"description":677,"icon":172,"children":-1},"The dev loop with live reload, linting, and calling a tool directly.",{"title":179,"path":180,"stem":181,"description":679,"icon":182,"children":-1},"Your own checks before and after tool calls and at the start and end of a job.",1791135411526]