[{"data":1,"prerenderedAt":1171},["ShallowReactive",2],{"navigation_docs":3,"-reference-plugin-manifest":320,"-reference-plugin-manifest-surround":1166},[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":282,"body":322,"description":1159,"extension":1160,"links":1161,"meta":1162,"navigation":1163,"path":283,"seo":1164,"stem":284,"__hash__":1165},"docs\u002F8.reference\u002F2.plugin-manifest.md",{"type":323,"value":324,"toc":1152},"minimark",[325,342,731,736,851,858,862,935,940,960,1036,1041,1049,1070,1075,1080,1148],[326,327,328,329,332,333,337,338,341],"p",{},"The manifest is ",[330,331,282],"code",{}," at the root of the plugin's repository. It is read strictly: ",[334,335,336],"strong",{},"unknown fields are errors",", so a typo does not pass silently. ",[330,339,340],{},"orchestrator-zero plugin lint"," runs the same checks as the edge.",[343,344,349],"pre",{"className":345,"code":346,"filename":282,"language":347,"meta":348,"style":348},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","apiVersion: oz0\u002Fv1\nname: github-tools\nversion: 1.4.0\ndescription: Tools and agents for working in GitHub\nruntime: python\nrequires:\n  oz0: \">=0.4\"\n  platforms: [linux\u002Famd64, darwin\u002Farm64]\n  secrets: [GITHUB_TOKEN]\ntools:\n  - id: github\n    mcp: [\"python\", \"-m\", \"github_tools.mcp\"]\n    requires_approval: [github.merge]\n  - id: fetch\n    package: pypi:mcp-server-fetch==2026.8.18\n    affinity: any\nagents: [agents\u002Fpr-reviewer.yaml]\nskills: [skills\u002F]\nhooks:\n  - on: pre_tool_call\n    call: github.check_merge\n    match: { tools: [\"github.merge\"] }\n    timeout: 2s\n    on_timeout: escalate\nflows: [flows\u002F]\nevals: [evals\u002F]\n","yaml","",[330,350,351,368,379,391,402,413,422,439,462,477,485,499,537,552,564,575,586,601,616,624,638,649,679,690,701,716],{"__ignoreMap":348},[352,353,356,360,364],"span",{"class":354,"line":355},"line",1,[352,357,359],{"class":358},"swJcz","apiVersion",[352,361,363],{"class":362},"sMK4o",":",[352,365,367],{"class":366},"sfazB"," oz0\u002Fv1\n",[352,369,371,374,376],{"class":354,"line":370},2,[352,372,373],{"class":358},"name",[352,375,363],{"class":362},[352,377,378],{"class":366}," github-tools\n",[352,380,382,385,387],{"class":354,"line":381},3,[352,383,384],{"class":358},"version",[352,386,363],{"class":362},[352,388,390],{"class":389},"sbssI"," 1.4.0\n",[352,392,394,397,399],{"class":354,"line":393},4,[352,395,396],{"class":358},"description",[352,398,363],{"class":362},[352,400,401],{"class":366}," Tools and agents for working in GitHub\n",[352,403,405,408,410],{"class":354,"line":404},5,[352,406,407],{"class":358},"runtime",[352,409,363],{"class":362},[352,411,412],{"class":366}," python\n",[352,414,416,419],{"class":354,"line":415},6,[352,417,418],{"class":358},"requires",[352,420,421],{"class":362},":\n",[352,423,425,428,430,433,436],{"class":354,"line":424},7,[352,426,427],{"class":358},"  oz0",[352,429,363],{"class":362},[352,431,432],{"class":362}," \"",[352,434,435],{"class":366},">=0.4",[352,437,438],{"class":362},"\"\n",[352,440,442,445,447,450,453,456,459],{"class":354,"line":441},8,[352,443,444],{"class":358},"  platforms",[352,446,363],{"class":362},[352,448,449],{"class":362}," [",[352,451,452],{"class":366},"linux\u002Famd64",[352,454,455],{"class":362},",",[352,457,458],{"class":366}," darwin\u002Farm64",[352,460,461],{"class":362},"]\n",[352,463,465,468,470,472,475],{"class":354,"line":464},9,[352,466,467],{"class":358},"  secrets",[352,469,363],{"class":362},[352,471,449],{"class":362},[352,473,474],{"class":366},"GITHUB_TOKEN",[352,476,461],{"class":362},[352,478,480,483],{"class":354,"line":479},10,[352,481,482],{"class":358},"tools",[352,484,421],{"class":362},[352,486,488,491,494,496],{"class":354,"line":487},11,[352,489,490],{"class":362},"  -",[352,492,493],{"class":358}," id",[352,495,363],{"class":362},[352,497,498],{"class":366}," github\n",[352,500,502,505,507,509,512,515,517,519,521,524,526,528,530,533,535],{"class":354,"line":501},12,[352,503,504],{"class":358},"    mcp",[352,506,363],{"class":362},[352,508,449],{"class":362},[352,510,511],{"class":362},"\"",[352,513,514],{"class":366},"python",[352,516,511],{"class":362},[352,518,455],{"class":362},[352,520,432],{"class":362},[352,522,523],{"class":366},"-m",[352,525,511],{"class":362},[352,527,455],{"class":362},[352,529,432],{"class":362},[352,531,532],{"class":366},"github_tools.mcp",[352,534,511],{"class":362},[352,536,461],{"class":362},[352,538,540,543,545,547,550],{"class":354,"line":539},13,[352,541,542],{"class":358},"    requires_approval",[352,544,363],{"class":362},[352,546,449],{"class":362},[352,548,549],{"class":366},"github.merge",[352,551,461],{"class":362},[352,553,555,557,559,561],{"class":354,"line":554},14,[352,556,490],{"class":362},[352,558,493],{"class":358},[352,560,363],{"class":362},[352,562,563],{"class":366}," fetch\n",[352,565,567,570,572],{"class":354,"line":566},15,[352,568,569],{"class":358},"    package",[352,571,363],{"class":362},[352,573,574],{"class":366}," pypi:mcp-server-fetch==2026.8.18\n",[352,576,578,581,583],{"class":354,"line":577},16,[352,579,580],{"class":358},"    affinity",[352,582,363],{"class":362},[352,584,585],{"class":366}," any\n",[352,587,589,592,594,596,599],{"class":354,"line":588},17,[352,590,591],{"class":358},"agents",[352,593,363],{"class":362},[352,595,449],{"class":362},[352,597,598],{"class":366},"agents\u002Fpr-reviewer.yaml",[352,600,461],{"class":362},[352,602,604,607,609,611,614],{"class":354,"line":603},18,[352,605,606],{"class":358},"skills",[352,608,363],{"class":362},[352,610,449],{"class":362},[352,612,613],{"class":366},"skills\u002F",[352,615,461],{"class":362},[352,617,619,622],{"class":354,"line":618},19,[352,620,621],{"class":358},"hooks",[352,623,421],{"class":362},[352,625,627,629,633,635],{"class":354,"line":626},20,[352,628,490],{"class":362},[352,630,632],{"class":631},"sfNiH"," on",[352,634,363],{"class":362},[352,636,637],{"class":366}," pre_tool_call\n",[352,639,641,644,646],{"class":354,"line":640},21,[352,642,643],{"class":358},"    call",[352,645,363],{"class":362},[352,647,648],{"class":366}," github.check_merge\n",[352,650,652,655,657,660,663,665,667,669,671,673,676],{"class":354,"line":651},22,[352,653,654],{"class":358},"    match",[352,656,363],{"class":362},[352,658,659],{"class":362}," {",[352,661,662],{"class":358}," tools",[352,664,363],{"class":362},[352,666,449],{"class":362},[352,668,511],{"class":362},[352,670,549],{"class":366},[352,672,511],{"class":362},[352,674,675],{"class":362},"]",[352,677,678],{"class":362}," }\n",[352,680,682,685,687],{"class":354,"line":681},23,[352,683,684],{"class":358},"    timeout",[352,686,363],{"class":362},[352,688,689],{"class":366}," 2s\n",[352,691,693,696,698],{"class":354,"line":692},24,[352,694,695],{"class":358},"    on_timeout",[352,697,363],{"class":362},[352,699,700],{"class":366}," escalate\n",[352,702,704,707,709,711,714],{"class":354,"line":703},25,[352,705,706],{"class":358},"flows",[352,708,363],{"class":362},[352,710,449],{"class":362},[352,712,713],{"class":366},"flows\u002F",[352,715,461],{"class":362},[352,717,719,722,724,726,729],{"class":354,"line":718},26,[352,720,721],{"class":358},"evals",[352,723,363],{"class":362},[352,725,449],{"class":362},[352,727,728],{"class":366},"evals\u002F",[352,730,461],{"class":362},[732,733,735],"h2",{"id":734},"top-level","Top level",[737,738,739,749,752,759,762,786,790,797,825,846],"field-group",{},[740,741,744,745,748],"field",{"name":359,"type":742,":required":743},"string","true","Must be ",[330,746,747],{},"oz0\u002Fv1",".",[740,750,751],{"name":373,"type":742,":required":743},"Lowercase letters, digits and dashes, at most 63 characters, starting and ending with a letter or digit.",[740,753,754,755,758],{"name":384,"type":742,":required":743},"A semantic version such as ",[330,756,757],{},"1.4.0",", with an optional pre-release or build suffix.",[740,760,761],{"name":396,"type":742},"One line about what the plugin does. Missing it is a warning.",[740,763,764,765,767,768,767,771,774,775,778,779,781,782,785],{"name":407,"type":742,":required":743},"The language of the plugin's own code: ",[330,766,514],{},", ",[330,769,770],{},"node",[330,772,773],{},"go"," or ",[330,776,777],{},"binary",". Nodes build ",[330,780,514],{}," plugins with a ",[330,783,784],{},"pyproject.toml"," today.",[740,787,789],{"name":591,"type":788},"string[]","Agent definition files, or folders of them, relative to the plugin's root.",[740,791,792,793,796],{"name":606,"type":788},"Skill folders (with a ",[330,794,795],{},"SKILL.md","), or folders of them.",[740,798,799,800,803,804,767,806,767,808,767,811,767,814,817,818,821,822,748],{"name":706,"type":788},"Flow files, or folders of ",[330,801,802],{},"*.yaml"," flows, each with ",[330,805,373],{},[330,807,396],{},[330,809,810],{},"input_schema",[330,812,813],{},"trigger.webhook.secret",[330,815,816],{},"steps"," and ",[330,819,820],{},"output",". See ",[823,824,184],"a",{"href":185},[740,826,827,828,830,831,774,834,767,837,817,840,821,843,748],{"name":721,"type":788},"Eval files, or folders of ",[330,829,802],{}," evals, each with ",[330,832,833],{},"agent",[330,835,836],{},"flow",[330,838,839],{},"threshold",[330,841,842],{},"cases",[823,844,845],{"href":190},"Evals",[740,847,850],{"name":848,"type":849},"harnesses","list","Agent harnesses this plugin provides. See below.",[326,852,853,854,857],{},"Paths must be relative to the plugin's root, use forward slashes and stay inside the plugin (no ",[330,855,856],{},"..","). A plugin with no tools, agents, skills, hooks or flows gets a warning.",[732,859,860],{"id":418},[330,861,418],{},[737,863,864,895,925],{},[740,865,867,868,774,870,873,874,767,877,767,880,767,883,767,886,767,889,774,892,748],{"name":866,"type":742},"oz0","The Orchestrator Zero versions the plugin works with: one or more constraints such as ",[330,869,435],{},[330,871,872],{},">=0.4, \u003C0.6",", using ",[330,875,876],{},">=",[330,878,879],{},"\u003C=",[330,881,882],{},">",[330,884,885],{},"\u003C",[330,887,888],{},"=",[330,890,891],{},"^",[330,893,894],{},"~",[740,896,898,901,902,905,906,767,909,767,912,817,915,905,918,767,921,924],{"name":897,"type":788},"platforms",[330,899,900],{},"os\u002Farch"," pairs, with ",[330,903,904],{},"os"," in ",[330,907,908],{},"linux",[330,910,911],{},"darwin",[330,913,914],{},"windows",[330,916,917],{},"arch",[330,919,920],{},"amd64",[330,922,923],{},"arm64",". Empty means every platform.",[740,926,928,929,931,932,748],{"name":927,"type":788},"secrets","Tenant secrets the plugin's processes get as environment variables of the same names, such as ",[330,930,474],{},": its tools, hooks and harnesses, on every node that runs it, held in memory only. A node does not start the plugin while one of them is not set in the tenant. See ",[823,933,95],{"href":934},"\u002Ffleet\u002Fsecrets#secrets-for-plugins",[732,936,937],{"id":482},[330,938,939],{},"tools[]",[326,941,942,943,946,947,774,950,953,954,956,957,959],{},"Each tool is an MCP server. Set exactly one of ",[330,944,945],{},"mcp"," (your own code), ",[330,948,949],{},"package",[330,951,952],{},"url","; ",[330,955,949],{}," may also set ",[330,958,945],{}," to name the command to run.",[737,961,962,969,981,1004,1014,1024,1031],{},[740,963,965,966,748],{"name":964,"type":742,":required":743},"id","Lowercase letters, digits, dashes and underscores, unique in the plugin. Agents call the tool's functions as ",[330,967,968],{},"\u003Cid>.\u003Cfunction>",[740,970,971,972,974,975,977,978,980],{"name":945,"type":788},"The command that starts the MCP server over stdio. Without ",[330,973,949],{},", it runs in the plugin's own environment, and ",[330,976,514],{}," means that environment's Python. With ",[330,979,949],{},", it runs in the package's environment.",[740,982,983,984,767,987,767,990,774,993,996,997,817,1000,1003],{"name":949,"type":742},"An existing MCP server: ",[330,985,986],{},"pypi:\u003Cname>[==\u003Cversion>]",[330,988,989],{},"npm:\u003Cname>[@\u003Cversion>]",[330,991,992],{},"oci:\u003Cimage>",[330,994,995],{},"binary:\u003Curl>",". Unpinned packages are a warning; the edge pins them at install time. ",[330,998,999],{},"oci:",[330,1001,1002],{},"binary:"," are not run yet.",[740,1005,1006,1007,1010,1011,748],{"name":952,"type":742},"A remote MCP server over Streamable HTTP. ",[330,1008,1009],{},"http:\u002F\u002F"," is a warning; use ",[330,1012,1013],{},"https:\u002F\u002F",[740,1015,1017,1019,1020,1023],{"name":1016,"type":742},"affinity",[330,1018,770],{}," (default): runs on the job's home node. ",[330,1021,1022],{},"any",": runs on any node that has the plugin.",[740,1025,1027,1028,1030],{"name":1026,"type":788},"requires_approval","This tool's functions that pause a job for a person, as ",[330,1029,968],{},". Checked today; enforced from M5.",[740,1032,1035],{"name":1033,"type":1034},"env","map","Extra environment variables for the tool's process. Keys must be environment variable names.",[732,1037,1038],{"id":848},[330,1039,1040],{},"harnesses[]",[326,1042,1043,1044,821,1047,748],{},"A harness runs one session of an agent harness per job. Agents use it with ",[330,1045,1046],{},"runtime: harness:\u003Cname>",[823,1048,144],{"href":145},[737,1050,1051,1054,1061],{},[740,1052,1053],{"name":373,"type":742,":required":743},"The harness's name, as agents refer to it.",[740,1055,1057,1058,1060],{"name":1056,"type":788,":required":743},"command","The command that starts one session, resolved like a tool's ",[330,1059,945],{}," command. It speaks the harness protocol in JSON lines over stdin and stdout.",[740,1062,1065,1066,748],{"name":1063,"type":1064},"permissions","boolean","The harness asks before each tool call, so the job's hooks and approvals decide it. See ",[823,1067,1069],{"href":1068},"\u002Fbuild-plugins\u002Fharnesses#write-a-harness-for-another-tool","Write a harness for another tool",[732,1071,1072],{"id":621},[330,1073,1074],{},"hooks[]",[326,1076,1077,1078,748],{},"See ",[823,1079,179],{"href":180},[737,1081,1082,1102,1110,1121,1125,1134],{},[740,1083,1085,767,1088,767,1091,774,1094,1097,1098,1101],{"name":1084,"type":742,":required":743},"on",[330,1086,1087],{},"pre_tool_call",[330,1089,1090],{},"post_tool_call",[330,1092,1093],{},"job_start",[330,1095,1096],{},"job_end",". ",[330,1099,1100],{},"pre_llm_call"," is accepted and does not run yet.",[740,1103,1105,1106,1109],{"name":1104,"type":742,":required":743},"call","The function that answers, ",[330,1107,1108],{},"\u003Ctool>.\u003Cfunction>",", of one of this plugin's tools.",[740,1111,1113,1114,1116,1117,1120],{"name":1112,"type":788},"match.tools","For tool events: the ",[330,1115,1108],{}," names the hook applies to; ",[330,1118,1119],{},"*"," matches any function. Empty means every call.",[740,1122,1124],{"name":1123,"type":788},"match.agents","Only these agents' calls and jobs. Empty means every agent of the tenant.",[740,1126,1129,1130,1133],{"name":1127,"type":1128},"timeout","duration","How long the hook may take, such as ",[330,1131,1132],{},"2s",". The default is 2 seconds, the most 30.",[740,1135,1137,1138,767,1141,1144,1145,748],{"name":1136,"type":742},"on_timeout","What a hook that does not answer in time, fails, or gives no decision counts as: ",[330,1139,1140],{},"allow",[330,1142,1143],{},"deny"," (the default) or ",[330,1146,1147],{},"escalate",[1149,1150,1151],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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}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);}",{"title":348,"searchDepth":370,"depth":370,"links":1153},[1154,1155,1156,1157,1158],{"id":734,"depth":370,"text":735},{"id":418,"depth":370,"text":418},{"id":482,"depth":370,"text":939},{"id":848,"depth":370,"text":1040},{"id":621,"depth":370,"text":1074},"Every field of the plugin manifest, and the rules plugin lint checks.","md",null,{},{"icon":285},{"title":282,"description":1159},"TjCfz7_1Sz3uK23NBdnoLthiFOaxpAPcSkVXmnBEsk8",[1167,1169],{"title":278,"path":279,"stem":280,"description":1168,"children":-1},"The node binary: join a cluster and run agents on this machine.",{"title":287,"path":288,"stem":289,"description":1170,"icon":162,"children":-1},"Every field of an agent's YAML file.",1791135413809]