{"_id":"@advantech-axa/nemoclaw-deploy","_rev":"7-31579dd347d6329613f1f6ab552937d8","name":"@advantech-axa/nemoclaw-deploy","dist-tags":{"latest":"0.0.8"},"versions":{"0.2.0":{"name":"@advantech-axa/nemoclaw-deploy","version":"0.2.0","_id":"@advantech-axa/nemoclaw-deploy@0.2.0","maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"},{"name":"axayu.jiang","email":"axayu.jiang@advantech.com.cn"}],"bin":{"nemoclaw-deploy":"bin/nemoclaw-deploy.js"},"dist":{"shasum":"0e10b207068981f8c1ccf29425434602d6918f40","tarball":"https://registry.npmjs.org/@advantech-axa/nemoclaw-deploy/-/nemoclaw-deploy-0.2.0.tgz","fileCount":95,"integrity":"sha512-J4PQSWtSjpWXHV+KkxOjbq/R5bLGubvnZFjG7tlEgNG4UbvWhjfVMsqm8aUpbanG2AOu0GPw54p62szmlfb7GA==","signatures":[{"sig":"MEQCIEYFv8fhBn2JN8XDpsQj436X2KfgT/OtPXY0e45SzcVQAiA9Oe0lrZwkq9WAoLFNbJZJHG9wm2+gtkDNO1pu8rYUxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":250849},"type":"module","engines":{"node":">=20"},"gitHead":"1b03bab9ddd8606daa23a6b1740b69c3bc3a9cbb","scripts":{"dev":"tsx src/index.ts","build":"tsc","prepack":"npm run build"},"_npmUser":{"name":"adxie-owner","email":"pgxie0223@gmail.com"},"_npmVersion":"11.5.1","description":"Safe OpenClaw agent deployment helper for existing NemoClaw sandboxes.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"zod":"^4.1.13","yaml":"^2.8.1","execa":"^9.6.0","fs-extra":"^11.3.2","commander":"^14.0.2","picocolors":"^1.1.1","@inquirer/prompts":"^7.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.10.1","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/nemoclaw-deploy_0.2.0_1783584828933_0.40652920260527625","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@advantech-axa/nemoclaw-deploy","version":"0.0.3","_id":"@advantech-axa/nemoclaw-deploy@0.0.3","maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"},{"name":"axayu.jiang","email":"axayu.jiang@advantech.com.cn"}],"bin":{"nemoclaw-deploy":"bin/nemoclaw-deploy.js"},"dist":{"shasum":"b92586a561a9d1bfa5c01052587330f8972fc954","tarball":"https://registry.npmjs.org/@advantech-axa/nemoclaw-deploy/-/nemoclaw-deploy-0.0.3.tgz","fileCount":111,"integrity":"sha512-Xbj+e8jjZZOh8jJx90jQZh7zrQvLYQUzefJM52CLoFHvg4eiyF8a5mCt4XCjBlEWvbCV4XEqCtlRvxdccuQ0nA==","signatures":[{"sig":"MEQCIER0hTB811J05LJ7/k0cR/IuWHHD+tDD+FgbJvIMrQEwAiAxmnCQ/N1a5epplRbnr69sJdL+jN81T8c8zjq3TLr1yA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":345875},"type":"module","_from":"file:advantech-axa-nemoclaw-deploy-0.0.3.tgz","engines":{"node":">=20"},"scripts":{"dev":"tsx src/index.ts","build":"tsc","prepack":"npm run build"},"_npmUser":{"name":"adxie-owner","email":"pgxie0223@gmail.com"},"_resolved":"/home/jim/Workspace/nodejs/nemoclaw-deploy/advantech-axa-nemoclaw-deploy-0.0.3.tgz","_integrity":"sha512-Xbj+e8jjZZOh8jJx90jQZh7zrQvLYQUzefJM52CLoFHvg4eiyF8a5mCt4XCjBlEWvbCV4XEqCtlRvxdccuQ0nA==","_npmVersion":"11.5.1","description":"Install and onboard NemoClaw, then safely deploy one or more OpenClaw agents.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"zod":"^4.1.13","yaml":"^2.8.1","execa":"^9.6.0","fs-extra":"^11.3.2","commander":"^14.0.2","picocolors":"^1.1.1","@inquirer/prompts":"^7.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.10.1","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/nemoclaw-deploy_0.0.3_1784256289197_0.9066947212554834","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@advantech-axa/nemoclaw-deploy","version":"0.0.4","_id":"@advantech-axa/nemoclaw-deploy@0.0.4","maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"},{"name":"axayu.jiang","email":"axayu.jiang@advantech.com.cn"}],"bin":{"nemoclaw-deploy":"bin/nemoclaw-deploy.js"},"dist":{"shasum":"5ce20d678e0db666428c356c087ca951a68d61c1","tarball":"https://registry.npmjs.org/@advantech-axa/nemoclaw-deploy/-/nemoclaw-deploy-0.0.4.tgz","fileCount":115,"integrity":"sha512-xj8CcbWkRvYCWckB+Zm6Pc9oLelDvo5SRHuHr3vjiSc5OU0RW0+BScCWbymRY1QuBA8sqaNmmoxSaITKJufmyg==","signatures":[{"sig":"MEYCIQC4fhqMFt4Xkl0XCB2pzBzK436/bzBuVe07s6VPmWKjjQIhALosENzNVQOJJVF9CKRUN4jE3e4bKOCPZdu1BNvhJ7LY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404163},"type":"module","_from":"file:advantech-axa-nemoclaw-deploy-0.0.4.tgz","engines":{"node":">=20"},"scripts":{"dev":"tsx src/index.ts","build":"tsc","prepack":"npm run build"},"_npmUser":{"name":"adxie-owner","email":"pgxie0223@gmail.com"},"_resolved":"/home/jim/Workspace/nodejs/nemoclaw-deploy/advantech-axa-nemoclaw-deploy-0.0.4.tgz","_integrity":"sha512-xj8CcbWkRvYCWckB+Zm6Pc9oLelDvo5SRHuHr3vjiSc5OU0RW0+BScCWbymRY1QuBA8sqaNmmoxSaITKJufmyg==","_npmVersion":"11.5.1","description":"Install and onboard NemoClaw, then safely deploy one or more OpenClaw agents.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"zod":"^4.1.13","yaml":"^2.8.1","execa":"^9.6.0","fs-extra":"^11.3.2","commander":"^14.0.2","picocolors":"^1.1.1","@inquirer/prompts":"^7.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.10.1","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/nemoclaw-deploy_0.0.4_1784692142135_0.21852151781008344","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@advantech-axa/nemoclaw-deploy","version":"0.0.5","_id":"@advantech-axa/nemoclaw-deploy@0.0.5","maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"},{"name":"axayu.jiang","email":"axayu.jiang@advantech.com.cn"}],"bin":{"nemoclaw-deploy":"bin/nemoclaw-deploy.js"},"dist":{"shasum":"62fef05ecbcccf05a1435ada0ddf200e897a6ba8","tarball":"https://registry.npmjs.org/@advantech-axa/nemoclaw-deploy/-/nemoclaw-deploy-0.0.5.tgz","fileCount":115,"integrity":"sha512-lXkLjXAMnv67OIUnljrNq7wsKd65G3pSS56fl2B4szp8TBRUkGMM+FfkWQFVowJSbOkq22OPATFAcmHgaGO/Yg==","signatures":[{"sig":"MEYCIQDy3vz7EYnE+UbFRMea3HqUXhOx2IahqiotRiiQEviVWAIhAIwl5xP7f0gzsEDsPfqMV5q7YpncR1aLhnXbRjxK+Jh7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":409598},"type":"module","_from":"file:advantech-axa-nemoclaw-deploy-0.0.5.tgz","engines":{"node":">=20"},"scripts":{"dev":"tsx src/index.ts","build":"tsc","prepack":"npm run build"},"_npmUser":{"name":"adxie-owner","email":"pgxie0223@gmail.com"},"_resolved":"/home/jim/Workspace/nodejs/nemoclaw-deploy/advantech-axa-nemoclaw-deploy-0.0.5.tgz","_integrity":"sha512-lXkLjXAMnv67OIUnljrNq7wsKd65G3pSS56fl2B4szp8TBRUkGMM+FfkWQFVowJSbOkq22OPATFAcmHgaGO/Yg==","_npmVersion":"11.5.1","description":"Install and onboard NemoClaw, then safely deploy one or more OpenClaw agents.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"zod":"^4.1.13","yaml":"^2.8.1","execa":"^9.6.0","fs-extra":"^11.3.2","commander":"^14.0.2","picocolors":"^1.1.1","@inquirer/prompts":"^7.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.10.1","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/nemoclaw-deploy_0.0.5_1784698011901_0.9328647241332106","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@advantech-axa/nemoclaw-deploy","version":"0.0.6","_id":"@advantech-axa/nemoclaw-deploy@0.0.6","maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"},{"name":"axayu.jiang","email":"axayu.jiang@advantech.com.cn"}],"bin":{"nemoclaw-deploy":"bin/nemoclaw-deploy.js"},"dist":{"shasum":"e65bf6fca9273cc56a07d9f1a563b202b19b734c","tarball":"https://registry.npmjs.org/@advantech-axa/nemoclaw-deploy/-/nemoclaw-deploy-0.0.6.tgz","fileCount":115,"integrity":"sha512-hquSiLzAojyFcL/gkzVAM6GvE/Akf1w/8efzeNpaYaNvKsIJtXrp2c7frHOu7Y1bbRsh0vEM7CncESfpnukAxQ==","signatures":[{"sig":"MEYCIQD1q7gwyj+Zz3diIkViNirOuJ4xS2oiWESpQ9XzjIgzgAIhAId7s1ue7HF2Ih1FszUTnsh6PLGf60Y0xykrsBOImqRe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417100},"type":"module","_from":"file:advantech-axa-nemoclaw-deploy-0.0.6.tgz","engines":{"node":">=20"},"scripts":{"dev":"tsx src/index.ts","build":"tsc","prepack":"npm run build"},"_npmUser":{"name":"adxie-owner","email":"pgxie0223@gmail.com"},"_resolved":"/home/jim/Workspace/nodejs/nemoclaw-deploy/advantech-axa-nemoclaw-deploy-0.0.6.tgz","_integrity":"sha512-hquSiLzAojyFcL/gkzVAM6GvE/Akf1w/8efzeNpaYaNvKsIJtXrp2c7frHOu7Y1bbRsh0vEM7CncESfpnukAxQ==","_npmVersion":"11.5.1","description":"Install and onboard NemoClaw, then safely deploy one or more OpenClaw agents.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"zod":"^4.1.13","yaml":"^2.8.1","execa":"^9.6.0","fs-extra":"^11.3.2","commander":"^14.0.2","picocolors":"^1.1.1","@inquirer/prompts":"^7.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.10.1","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/nemoclaw-deploy_0.0.6_1784700786315_0.30161839987699324","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@advantech-axa/nemoclaw-deploy","version":"0.0.7","_id":"@advantech-axa/nemoclaw-deploy@0.0.7","maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"},{"name":"axayu.jiang","email":"axayu.jiang@advantech.com.cn"}],"bin":{"nemoclaw-deploy":"bin/nemoclaw-deploy.js"},"dist":{"shasum":"e146466dbf0c469c60eb3d141948ff33120108e2","tarball":"https://registry.npmjs.org/@advantech-axa/nemoclaw-deploy/-/nemoclaw-deploy-0.0.7.tgz","fileCount":115,"integrity":"sha512-+j472jv0qTMM7MuzbGpYCCDo6Y47bx6k45uNkUWqQhJo3fUow3W/3IrHMMYdme/0R5f/W6/fULv7VRI7dNiL8g==","signatures":[{"sig":"MEUCIHlc7IV+kGXmivSG3NoSFgREaTe6Nz/DRm0nbED+d1zoAiEArm5Nbk4+9oAz5ts+x9Fj5hgg5XlF1km2WbUcG5F+CLo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":410663},"type":"module","_from":"file:advantech-axa-nemoclaw-deploy-0.0.7.tgz","engines":{"node":">=20"},"scripts":{"dev":"tsx src/index.ts","build":"tsc","prepack":"npm run build"},"_npmUser":{"name":"adxie-owner","email":"pgxie0223@gmail.com"},"_resolved":"/home/jim/Workspace/nodejs/nemoclaw-deploy/advantech-axa-nemoclaw-deploy-0.0.7.tgz","_integrity":"sha512-+j472jv0qTMM7MuzbGpYCCDo6Y47bx6k45uNkUWqQhJo3fUow3W/3IrHMMYdme/0R5f/W6/fULv7VRI7dNiL8g==","_npmVersion":"11.5.1","description":"Install and onboard NemoClaw, then safely deploy one or more OpenClaw agents.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"zod":"^4.1.13","yaml":"^2.8.1","execa":"^9.6.0","fs-extra":"^11.3.2","commander":"^14.0.2","picocolors":"^1.1.1","@inquirer/prompts":"^7.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.10.1","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/nemoclaw-deploy_0.0.7_1784790727052_0.487351815079724","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@advantech-axa/nemoclaw-deploy","version":"0.0.8","description":"Install and onboard NemoClaw, then safely deploy one or more OpenClaw agents.","type":"module","bin":{"nemoclaw-deploy":"bin/nemoclaw-deploy.js"},"scripts":{"build":"tsc","dev":"tsx src/index.ts","prepack":"npm run build"},"engines":{"node":">=20"},"dependencies":{"@inquirer/prompts":"^7.8.0","commander":"^14.0.2","execa":"^9.6.0","fs-extra":"^11.3.2","picocolors":"^1.1.1","yaml":"^2.8.1","zod":"^4.1.13"},"devDependencies":{"@types/fs-extra":"^11.0.4","@types/node":"^24.10.1","tsx":"^4.21.0","typescript":"^5.9.3"},"_id":"@advantech-axa/nemoclaw-deploy@0.0.8","_integrity":"sha512-JUC6LOE6jChRo19WBEdanMS9/zI6+V4G8qQTJUJGsyvhNG9x/7gFL1CJ7uGQE4+oGBLrwWvrCP40x1bYbCgZCQ==","_resolved":"/home/jim/Workspace/nodejs/nemoclaw-deploy/advantech-axa-nemoclaw-deploy-0.0.8.tgz","_from":"file:/home/jim/Workspace/nodejs/nemoclaw-deploy/advantech-axa-nemoclaw-deploy-0.0.8.tgz","_nodeVersion":"24.5.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-JUC6LOE6jChRo19WBEdanMS9/zI6+V4G8qQTJUJGsyvhNG9x/7gFL1CJ7uGQE4+oGBLrwWvrCP40x1bYbCgZCQ==","shasum":"176e200f3818ef7acf399b3be7067b0284ab0864","tarball":"https://registry.npmjs.org/@advantech-axa/nemoclaw-deploy/-/nemoclaw-deploy-0.0.8.tgz","fileCount":115,"unpackedSize":408235,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE8T6jbDpXvWQbd0uGwI1OFIab8gCydAdud8myWc4tU5AiBYy+GcpnH2tg9k7xZZYiVzQImezUaB6jMWG5xfMANCLA=="}]},"_npmUser":{"name":"adxie-owner","email":"pgxie0223@gmail.com"},"directories":{},"maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"},{"name":"axayu.jiang","email":"axayu.jiang@advantech.com.cn"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nemoclaw-deploy_0.0.8_1785477691608_0.46763675590596754"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-09T08:13:48.756Z","modified":"2026-07-31T06:01:32.105Z","0.2.0":"2026-07-09T08:13:49.082Z","0.0.3":"2026-07-17T02:44:49.340Z","0.0.4":"2026-07-22T03:49:02.278Z","0.0.5":"2026-07-22T05:26:52.106Z","0.0.6":"2026-07-22T06:13:06.484Z","0.0.7":"2026-07-23T07:12:07.226Z","0.0.8":"2026-07-31T06:01:31.765Z"},"description":"Install and onboard NemoClaw, then safely deploy one or more OpenClaw agents.","maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"},{"name":"axayu.jiang","email":"axayu.jiang@advantech.com.cn"}],"readme":"# nemoclaw-deploy\n\n使用一个 `onboard.yaml` 安装/onboard NemoClaw，并向同一个 sandbox 部署一个或多个 OpenClaw agent。\n\n## 快速开始\n\n要求 Node.js >= 20。\n\n```bash\nnpm install -g @advantech-axa/nemoclaw-deploy\nnemoclaw-deploy init-config --output onboard.yaml\nnemoclaw-deploy up --config onboard.yaml --dry-run\nnemoclaw-deploy up --config onboard.yaml\n```\n\n默认不传 `--config` 时读取当前目录的 `onboard.yaml`。\n`init-config` 默认生成精简配置，只包含日常需要修改的字段；所有高级字段可参考 `templates/onboard.full.yaml`。\n\n统一配置使用 `schemaVersion: 3`，分为三个区域：\n\n- `install`：NemoClaw 安装版本和安装策略。\n- `onboard`：sandbox、推理模型、GPU、policy 和服务端口。\n- `deploy`：OpenClaw 共享配置以及 agents。\n\n`deploy` 自动使用 `onboard.sandbox.name`，不需要重复填写 sandbox 名称。\n\n## 常用命令\n\n```bash\n# 完整流程\nnemoclaw-deploy up --config onboard.yaml\n\n# 只执行安装/onboard 分区\nnemoclaw-deploy bootstrap --config onboard.yaml\n\n# sandbox 已存在时，只执行 deploy 分区\nnemoclaw-deploy deploy --config onboard.yaml\n\n# 检查环境\nnemoclaw-deploy doctor\nnemoclaw-deploy doctor --sandbox demo\n```\n\n根命令 `nemoclaw-deploy` 等价于 `nemoclaw-deploy up`。\n\n## 模型与版本\n\n```yaml\nschemaVersion: 3\n\ninstall:\n  enabled: true\n  mode: if-missing\n  version: v0.0.75\n\nonboard:\n  mode: ensure\n  sandbox:\n    name: demo\n    runtime: openclaw\n    # 留空使用 NemoClaw 官方镜像。\n    # 填写时目录内必须包含 Dockerfile。\n    dockerfileDir: \"\"\n  inference:\n    provider: custom\n    model: Qwen3.6-35B\n    endpointUrl: https://ai.example.com/v1\n    preferredApi: openai-completions\n```\n\n如果本机 NemoClaw 低于 `install.version`，交互模式会询问是否更新，默认选择“否”；拒绝后继续后续流程。相同或更高版本直接复用，非交互模式发现旧版本时自动更新，`mode: reinstall` 始终按配置显式重装。\n\n`onboard.inference.model` 是创建或重建 sandbox 时使用的默认模型。`deploy.agents[].model` 留空时保留 OpenClaw 当前值；填写后仅覆盖对应 agent。已有 sandbox 在 `ensure` 模式下会跳过 onboard，因此需要修改已有 agent 模型时应填写 agent 的 `model`。\n\n模型 API key 直接从 `onboard.yaml` 读取：\n\n```yaml\nonboard:\n  inference:\n    provider: custom\n    apiKey: \"your-api-key\"\n```\n\nCLI 不会再为模型 API key 弹出输入框。该值只会在执行安装/onboard 时注入 provider 对应的 credential 环境变量，命令计划和日志不会显示明文。请使用仅保存在本机且不提交到版本库的配置文件。\n\n## 自定义 sandbox Dockerfile\n\n默认不设置 `onboard.sandbox.dockerfileDir`，由 NemoClaw 使用官方 sandbox 镜像。需要自定义镜像时填写 Dockerfile 所在目录：\n\n```yaml\nonboard:\n  sandbox:\n    name: demo\n    runtime: openclaw\n    dockerfileDir: ./sandbox-image\n```\n\n目录内必须存在名为 `Dockerfile` 的普通文件。相对目录按 `onboard.yaml` 所在目录解析；CLI 会将其转换为 `nemoclaw onboard --from <绝对目录>/Dockerfile`。Dockerfile 的父目录会作为完整 Docker build context，因此 `COPY` 使用的文件也应放在该目录内。使用自定义 Dockerfile 时，它定义的是完整 sandbox 镜像，不会自动叠加在 NemoClaw 官方镜像上。\n\n## Agent sandbox 上传和命令\n\n每个 agent 都能上传主机文件或目录到任意 sandbox 绝对路径，并在指定目录执行 shell 命令：\n\n```yaml\ndeploy:\n  agents:\n    - name: python-agent\n      workspace: \"\"\n\n      sandbox:\n        uploads:\n          enabled: true\n          items:\n            - source: ./config\n              destination: /sandbox/opt/python-agent/config\n              overwrite: true\n            - source: /opt/company/settings.json\n              destination: /sandbox/opt/python-agent/settings.json\n              overwrite: false\n\n        commands:\n          enabled: true\n          workingDir: \"\"\n          items:\n            - python3 -m venv \"$VIRTUAL_ENV\"\n            - '\"$PYTHON\" -m pip install -r requirements.txt'\n          continueOnError: false\n```\n\n上传规则：\n\n- `source` 可以是文件或目录；相对路径按 `onboard.yaml` 所在目录解析。\n- `destination` 必须是 sandbox 绝对路径。\n- 目录会递归合并。`overwrite: true` 覆盖冲突项并保留目标中的额外文件；`false` 会在写入前检查冲突并失败。\n\n命令规则：\n\n- `workingDir: \"\"` 默认使用当前 agent workspace。\n- 相对 `workingDir` 位于 workspace 内，也可以填写 sandbox 绝对路径。\n- 命令按 `items` 顺序执行，并注入 `WORKSPACE`、`VIRTUAL_ENV`、`PYTHON`。\n- 每条命令会先上传成临时 shell 脚本再执行，因此支持多行命令。\n\n## OpenClaw 配置\n\n`deploy.shared.openclawConfig.file` 指向不完整的 `openclaw.json` overlay，也是 `models`、`tools`、`channels`、`mcp` 等 OpenClaw 业务配置的用户配置源。\n\n```yaml\ndeploy:\n  shared:\n    openclawConfig:\n      enabled: true\n      file: ./openclaw.json\n```\n\n普通对象递归合并，标量和数组覆盖，`null` 删除字段。partial 不允许包含 `agents`；channel 的 `secret` 等 OpenClaw 业务字段会直接合并，CLI 不额外拦截。agent 由 OpenClaw 管理，只有显式填写的 `deploy.agents[].model` 会按 agent ID 定向更新。\n\n插件的 `id/source/force` 留在 `onboard.yaml`，插件 channel 业务配置放在 partial。`deploy.shared.channelServer` 只负责 ChannelServer URL、agent 注册以及 advbot 的动态 gateway 字段。\n\n## 部署脚本\n\n将 `install-and-up.sh` 和 `onboard.yaml` 放在同一目录：\n\n```bash\nchmod +x install-and-up.sh\n./install-and-up.sh --dry-run\n./install-and-up.sh\n```\n\n脚本会准备 Node.js、安装 CLI，然后执行：\n\n```bash\nnemoclaw-deploy up --config onboard.yaml\n```\n\n如果当前 `PATH` 或脚本专用 npm prefix 中已经存在 `nemoclaw-deploy`，脚本会直接复用，不访问 npm 获取新版本。需要显式重新安装时使用：\n\n```bash\nFORCE_CLI_INSTALL=1 ./install-and-up.sh\n```\n\n## 安全提示\n\n- `onboard.inference.apiKey` 可以保存模型凭据，但包含真实值的配置文件不要提交到仓库。\n- partial 中可以保存 channel secret，但包含真实凭据的文件不要提交到版本库，并应限制本地文件权限。\n- `agentContent.conflictStrategy: ask` 在非交互模式下按 `fail` 处理。\n- `--dry-run` 不执行安装、onboard、上传或 sandbox 命令。\n\n精简配置见 [onboard.yaml](templates/onboard.yaml)，完整字段示例见 [onboard.full.yaml](templates/onboard.full.yaml)，详细说明见 [docs/USAGE.md](docs/USAGE.md)。\n","readmeFilename":"README.md"}