Run agents and evaluations on more machines, such as a GPU box, with one daemon.
A worker runs the daemon’s jobs: agent sessions and evaluations. piloop serve has one, and piloop worker adds
one on another machine. A job’s code, inputs and results go through the CAS, so the
worker and the server share one.
Set tls in [plugins.network]: a certificate, tls = { cert = "<cert.pem>", key = "<key.pem>" }, or "proxy"
when a reverse proxy or an SSH tunnel ends TLS. Only a loopback address may go without it.Then listen, serve the CAS, and make the worker’s token:
piloop cas serve serves the server’s [plugins.cas] until you stop it. When that is a bucket that the worker can
reach, skip it, and give the worker the same [plugins.cas]. token create prints the token once: piloop keeps only
its hash.
The worker’s name is the token’s name. It calls the server, and the server never calls it. For a certificate that
your system does not trust, set SSL_CERT_FILE. On the server, piloop worker list shows it:
worker pool seen load memory disk agents evaluations no lease gpu1 gpu 6s ago 21.8/32 103.8 GB 816.4 GB 1 0 nothing serve serve 6s ago 21.8/32 103.8 GB 816.4 GB 0 0 slots
The server refuses a worker with another piloop protocol, an unknown pool, a revoked token, or a [plugins.cas] that
is not the server’s. The worker then stops its jobs and exits with the reason.
A pool with a provisioner starts its workers when its jobs wait, and stops them when they idle. On Modal, each worker
is a sandbox of an image with piloop in it:
Each worker gets a token of its own, and dials url. Give it the server’s [plugins.cas] in its image, or as
PILOOP_PLUGINS in the provider’s env. The server needs Modal’s credentials and piloop[modal]. To stop every
worker of the pool, drain them:
piloop limits set executor.pools.gpu.provisioner.max=0 --reason "the GPU budget is spent"
piloop worker list shows each worker that the server started, until it ends.
The environment of the worker, with the keys that its MCP servers need.
A clone of the campaign’s repo and a copy of the shared workspace. Its commits
and its workspace writes come back when it ends.
Its piloop commands, which the worker relays to the server while the agent’s lease is live.
Until it ends, its output is in the worker’s $PILOOP_HOME, and piloop attach names the worker.
An agent on a worker runs as the worker’s user, so it holds the worker’s token. It can do whatever the worker can
do on the server, as an agent of piloop serve can open its database. Run a worker as a user that you give that
trust.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"piloop","colors":{"primary":"#C8552B","light":"#D98A3F","dark":"#A8431F"},"favicon":"https://mintcdn.com/piloop/SdzzsA21hyuTjjpm/favicon.svg?fit=max\u0026auto=format\u0026n=SdzzsA21hyuTjjpm\u0026q=85\u0026s=1f46856b084a9f1b3b964e81e170c3b4","navbar":{"links":[{"href":"https://github.com/hiloopai/piloop","label":"GitHub"}]},"footer":{"socials":{"github":"https://github.com/hiloopai/piloop"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"piloop","hasAudioNarration":false,"actualSubdomain":"piloop","customDomains":["piloop.autoresearch.inc"],"gitSource":{"type":"github","owner":"hiloopai","repo":"piloop","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6adc388f5b523d61834e2543","collectionId":"bc9ee9de-4f3f-4ff8-9453-7173848644a7","liveDeploymentHistoryId":"6adc388f5b523d61834e2543","schemaVersion":"v3"},"entitlements":{},"buildId":"6adc3b1867db488daad4d5e6","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"Concepts","count":9},{"language":"default","tag":"Architecture","count":7},{"language":"default","tag":"Guides","count":7},{"language":"default","tag":"Reference","count":5},{"language":"default","tag":"Get started","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/remote-workers","slug":"/guides/remote-workers","pageMetadata":{"title":"Workers on other machines","description":"Run agents and evaluations on more machines, such as a GPU box, with one daemon.","href":"/guides/remote-workers"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Run agents and evaluations on more machines, such as a GPU box, with one daemon.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A `,_jsx(_components.strong,{children:`worker`}),` runs the daemon’s jobs: agent sessions and evaluations. `,_jsx(_components.code,{children:`piloop serve`}),` has one, and `,_jsx(_components.code,{children:`piloop worker`}),` adds\none on another machine. A job’s code, inputs and results go through the `,_jsx(_components.a,{href:`/concepts/artifact-store`,children:`CAS`}),`, so the\nworker and the server share one.`]}),`\n`,_jsx(Heading,{level:`2`,id:`on-the-server`,children:`On the server`}),`\n`,_jsxs(_components.p,{children:[`Give the worker’s `,_jsx(_components.a,{href:`/architecture/leases#capacity`,children:`pool`}),` its slots in `,_jsx(_components.code,{children:`config.toml`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`toml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`toml`,children:_jsxs(_components.code,{language:`toml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`plugins`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`executor`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`pools`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`gpu`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`agents`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`evaluations`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`tls`}),` in `,_jsx(_components.code,{children:`[plugins.network]`}),`: a certificate, `,_jsx(_components.code,{children:`tls = { cert = \"\u003ccert.pem>\", key = \"\u003ckey.pem>\" }`}),`, or `,_jsx(_components.code,{children:`\"proxy\"`}),`\nwhen a reverse proxy or an SSH tunnel ends TLS. Only a loopback address may go without it.`]}),`\n`,_jsx(_components.p,{children:`Then listen, serve the CAS, and make the worker’s token:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`piloop`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` serve`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --detach`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --listen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 0.0.0.0:8443`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`piloop`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cas`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` serve`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --listen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 0.0.0.0:7701`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`piloop`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` token`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` gpu1`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`piloop cas serve`}),` serves the server’s `,_jsx(_components.code,{children:`[plugins.cas]`}),` until you stop it. When that is a bucket that the worker can\nreach, skip it, and give the worker the same `,_jsx(_components.code,{children:`[plugins.cas]`}),`. `,_jsx(_components.code,{children:`token create`}),` prints the token once: piloop keeps only\nits hash.`]}),`\n`,_jsx(Heading,{level:`2`,id:`on-the-worker`,children:`On the worker`}),`\n`,_jsxs(_components.p,{children:[`Install the same piloop as on the server, and log in to the harnesses that its agents use. In its `,_jsx(_components.code,{children:`config.toml`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`toml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`toml`,children:_jsxs(_components.code,{language:`toml`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`plugins`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`cas`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`provider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cached\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`local_max_gb`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`50`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`remote`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`provider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"http\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://piloop.example.com:7701\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Start it with the token:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`PILOOP_HTTPS_TOKEN`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`token`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` piloop`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` worker`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --server`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://piloop.example.com:8443`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --pool`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` gpu`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The worker’s name is the token’s name. It calls the server, and the server never calls it. For a certificate that\nyour system does not trust, set `,_jsx(_components.code,{children:`SSL_CERT_FILE`}),`. On the server, `,_jsx(_components.code,{children:`piloop worker list`}),` shows it:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` worker pool seen load memory disk agents evaluations no lease`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` gpu1 gpu 6s ago 21.8/32 103.8 GB 816.4 GB 1 0 nothing`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` serve serve 6s ago 21.8/32 103.8 GB 816.4 GB 0 0 slots`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The server refuses a worker with another piloop protocol, an unknown pool, a revoked token, or a `,_jsx(_components.code,{children:`[plugins.cas]`}),` that\nis not the server’s. The worker then stops its jobs and exits with the reason.`]}),`\n`,_jsx(Heading,{level:`2`,id:`workers-that-the-server-starts`,children:`Workers that the server starts`}),`\n`,_jsxs(_components.p,{children:[`A pool with a provisioner starts its workers when its jobs wait, and stops them when they idle. On Modal, each worker\nis a sandbox of an image with `,_jsx(_components.code,{children:`piloop`}),` in it:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`18`,language:`toml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`toml`,children:_jsxs(_components.code,{language:`toml`,numberOfLines:`18`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`plugins`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`network`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`listen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0.0.0.0:8443\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`tls`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"proxy\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://piloop.example.com:8443\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`plugins`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`executor`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`pools`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`gpu`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`agents`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`evaluations`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`runners`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"process\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`plugins`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`executor`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`pools`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`gpu`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`provisioner`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`max`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`plugins`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`executor`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`pools`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`gpu`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`provisioner`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`compute`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`provider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"modal\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`image`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ghcr.io/acme/piloop-worker:0.3\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`gpu`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"A100\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`secrets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"piloop-cas\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Each worker gets a token of its own, and dials `,_jsx(_components.code,{children:`url`}),`. Give it the server’s `,_jsx(_components.code,{children:`[plugins.cas]`}),` in its image, or as\n`,_jsx(_components.code,{children:`PILOOP_PLUGINS`}),` in the provider’s `,_jsx(_components.code,{children:`env`}),`. The server needs Modal’s credentials and `,_jsx(_components.code,{children:`piloop[modal]`}),`. To stop every\nworker of the pool, drain them:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`piloop`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` limits`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` set`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` executor.pools.gpu.provisioner.max=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --reason`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"the GPU budget is spent\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`piloop worker list`}),` shows each worker that the server started, until it ends.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-an-agent-on-a-worker-gets`,children:`What an agent on a worker gets`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The environment of the worker, with the keys that its `,_jsx(_components.a,{href:`/guides/mcp-servers`,children:`MCP servers`}),` need.`]}),`\n`,_jsxs(_components.li,{children:[`A clone of the campaign’s repo and a copy of the shared `,_jsx(_components.a,{href:`/concepts/campaigns#shared-files`,children:`workspace`}),`. Its commits\nand its workspace writes come back when it ends.`]}),`\n`,_jsxs(_components.li,{children:[`Its `,_jsx(_components.code,{children:`piloop`}),` commands, which the worker relays to the server while the agent’s lease is live.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Until it ends, its output is in the worker’s `,_jsx(_components.code,{children:`$PILOOP_HOME`}),`, and `,_jsx(_components.code,{children:`piloop attach`}),` names the worker.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`An agent on a worker runs as the worker’s user, so it holds the worker’s token. It can do whatever the worker can\ndo on the server, as an agent of `,_jsx(_components.code,{children:`piloop serve`}),` can open its database. Run a worker as a user that you give that\ntrust.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Workers on other machines","description":"Run agents and evaluations on more machines, such as a GPU box, with one daemon.","href":"/guides/remote-workers"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"On the server","slug":"on-the-server","depth":2,"children":[]},{"title":"On the worker","slug":"on-the-worker","depth":2,"children":[]},{"title":"Workers that the server starts","slug":"workers-that-the-server-starts","depth":2,"children":[]},{"title":"What an agent on a worker gets","slug":"what-an-agent-on-a-worker-gets","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"piloop","siteName":"piloop","title":"Workers on other machines - piloop","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-24T04:59:10.581Z","originalFileLocation":"guides/remote-workers.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Run agents and evaluations on more machines, such as a GPU box, with one daemon.\">\u003cmeta data-mint-head name=\"application-name\" content=\"piloop\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Workers on other machines - piloop\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run agents and evaluations on more machines, such as a GPU box, with one daemon.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"piloop\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://piloop.autoresearch.inc/guides/remote-workers\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://piloop.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Workers+on+other+machines\u0026amp;description=Run+agents+and+evaluations+on+more+machines%2C+such+as+a+GPU+box%2C+with+one+daemon.\u0026amp;theme=8132dcf6f88e9d78cec08531\u0026amp;signature=338a2ed04ac44bd5ffbe25b0b40a153fb9a705c401952baacf1e7ce903b6eaf0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Workers on other machines - piloop\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run agents and evaluations on more machines, such as a GPU box, with one daemon.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://piloop.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Workers+on+other+machines\u0026amp;description=Run+agents+and+evaluations+on+more+machines%2C+such+as+a+GPU+box%2C+with+one+daemon.\u0026amp;theme=8132dcf6f88e9d78cec08531\u0026amp;signature=338a2ed04ac44bd5ffbe25b0b40a153fb9a705c401952baacf1e7ce903b6eaf0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/piloop/jssF9qKLHZWmHMeA/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"piloop\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#C8552B\">\u003clink data-mint-head rel=\"canonical\" href=\"https://piloop.autoresearch.inc/guides/remote-workers\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/remote-workers.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://piloop.autoresearch.inc/#organization\",\"name\":\"piloop\",\"url\":\"https://piloop.autoresearch.inc\"},{\"@type\":\"WebSite\",\"@id\":\"https://piloop.autoresearch.inc#website\",\"name\":\"piloop\",\"url\":\"https://piloop.autoresearch.inc\",\"publisher\":{\"@id\":\"https://piloop.autoresearch.inc/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://piloop.autoresearch.inc/guides/remote-workers#webpage\",\"url\":\"https://piloop.autoresearch.inc/guides/remote-workers\",\"name\":\"Workers on other machines\",\"description\":\"Run agents and evaluations on more machines, such as a GPU box, with one daemon.\",\"dateModified\":\"2026-10-24T04:59:10.581Z\",\"isPartOf\":{\"@id\":\"https://piloop.autoresearch.inc#website\"},\"breadcrumb\":{\"@id\":\"https://piloop.autoresearch.inc/guides/remote-workers#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://piloop.autoresearch.inc/guides/remote-workers#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://piloop.autoresearch.inc/guides/running-for-days\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Workers on other machines\",\"item\":\"https://piloop.autoresearch.inc/guides/remote-workers\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://piloop.autoresearch.inc/guides/remote-workers#article\",\"headline\":\"Workers on other machines\",\"name\":\"Workers on other machines\",\"description\":\"Run agents and evaluations on more machines, such as a GPU box, with one daemon.\",\"url\":\"https://piloop.autoresearch.inc/guides/remote-workers\",\"mainEntityOfPage\":{\"@id\":\"https://piloop.autoresearch.inc/guides/remote-workers#webpage\"},\"dateModified\":\"2026-10-24T04:59:10.581Z\",\"publisher\":{\"@id\":\"https://piloop.autoresearch.inc/#organization\"},\"isPartOf\":{\"@id\":\"https://piloop.autoresearch.inc#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"piloop\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"piloop","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"Introduction","href":"/index"},{"title":"Quickstart","href":"/quickstart"},{"title":"Run a campaign by hand","href":"/by-hand"}]},{"group":"Concepts","pages":[{"title":"Campaigns and the evaluate command","sidebarTitle":"Campaigns","href":"/concepts/campaigns"},{"title":"Ideas, seeds and runs","sidebarTitle":"Ideas and runs","href":"/concepts/ideas-and-runs"},{"title":"Candidates, the head and the verdict","href":"/concepts/verdict"},{"title":"Agents and roles","href":"/concepts/roles"},{"title":"The orchestrator and the inbox","sidebarTitle":"Orchestrator and inbox","href":"/concepts/orchestrator"},{"title":"Tracks","href":"/concepts/tracks"},{"title":"Memory and sessions","href":"/concepts/research-memory"},{"title":"Cost and spend limits","href":"/concepts/cost"},{"title":"The artifact store","href":"/concepts/artifact-store"}]},{"group":"Architecture","pages":[{"title":"Overview","href":"/architecture/overview"},{"title":"One run's life","href":"/architecture/run-lifecycle"},{"title":"Leases","href":"/architecture/leases"},{"title":"Data model","href":"/architecture/data-model"},{"title":"State machines","href":"/architecture/state-machines"},{"title":"Code layout","href":"/architecture/code-layout"},{"title":"Extension points","href":"/architecture/extension-points"}]},{"group":"Guides","pages":[{"title":"Running for days","href":"/guides/running-for-days"},{"title":"Secrets","description":"Give the daemon the API keys that MCP servers and the spend command need.","href":"/guides/secrets"},{"title":"Workers on other machines","href":"/guides/remote-workers"},{"title":"MCP servers","description":"Give the agents of a role extra tools, such as web search, with one definition for every harness.","href":"/guides/mcp-servers"},{"title":"Upgrading","href":"/guides/upgrading"},{"title":"Watching a campaign","href":"/guides/watch"},{"title":"Reviewing a campaign","href":"/guides/reviewing"}]},{"group":"Reference","pages":[{"title":"CLI","href":"/reference/cli"},{"title":"Event feed","href":"/reference/event-feed"},{"title":"Configuration","href":"/reference/configuration"},{"title":"Database schema","href":"/reference/schema"},{"title":"Environment variables","href":"/reference/environment"}]}]},"title":"Workers on other machines - piloop","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":[],"chunks":[]}