跳转至

配置文件参考

把一次已经跑通的命令保存为 TOML,就能在本机、CI 和批量任务里复用同一套运行设置。先从下面的本地示例开始:它把输出留在 Stage,方便检查后再决定是否写回项目。

需要查命令行参数时,使用 CLI 参考;需要限制具体文件或网络目标时,使用策略字段参考。

当前可用的配置入口

--config 读取 TOML RunConfig;--spec 读取已解析的 JSON RunSpec,两者不是同一种文件。配置必须显式传入,不会自动读取项目里的 run.toml。工作区 policy.toml 则会自动加载,见策略字段。

下面的配置在宿主执行一个不需要网络的任务,捕获标准输出,并把改动保留在项目外:

filesystem = "sandbox"

[run]
executor = "host"
command = ["/bin/sh", "-c", "printf 'ready\n' > result.txt"]
timeout_ms = 30000
stdio = "capture"

[overlayfs]
stage = "../stage-config-001"
max_size = 67108864

[overlaynet]
mode = "proxy"
policy = "deny"
pvisor run --config run.toml
pvisor status --review ../stage-config-001
pvisor inspect ../stage-config-001 -- cat result.txt

proxy 的 deny 策略只约束经过代理的流量;这个例子不等价于强制离线。需要普通出口不可绕过地被阻止时,加上 --overlaynet-deny-all。暂存与文件 sandbox 也相互独立。

实验性特性配置

在显式加载的 Run 配置中,用 [features] 下的布尔值选择特性:

[run]
executor = "vm"
command = ["/bin/sleep", "10"]

[features]
workload-aware-memory-offloading = true

features.workload-aware-memory-offloading 默认 false,启用 EXP-001 M0 原生 VM 观测。要求 Linux x86_64/KVM 或 Apple Silicon macOS/HVF 的 VM executor;自动 offload 尚未实现,HVF 运行验收尚未完成。未知特性键和非布尔值会导致加载失败。

--feature workload-aware-memory-offloading 在配置合并后启用特性,包括配置值为 false 的情况。省略则保留配置值。设置显式传递到原生 runner,并保留在存储的 Run 配置中。pvisor feature 不加载该文件,只列出注册默认值和本次 CLI 启用值。见特性命令。

Daemon 配置

pvisor-daemon serve 使用命令行设置,不读取这里的原生 RunConfig TOML 或已解析 RunSpec。OPEN_SANDBOX_API_KEY 使用至少 32 字节的受保护秘密。见 daemon 启动与 daemon 与缓存入口。

选项 默认值 / 含义
--images-dir PATH 必需:存放本机 <key>.json manifest 的可信绝对路径目录
--cgroup-root PATH 必需:可写且已委派的 cgroup v2,启用 CPU/memory/PID 与 cgroup.kill
--listen ADDRESS 127.0.0.1:8080
--public-endpoint HOST:PORT 外部路由 authority,不带 scheme/path;反向代理、通配/零端口监听时必需
--state PATH .pvisor/daemon;解析为 canonical 运行时状态。使用短绝对路径的私有目录,如 /run/user/1000/pvd
--max-sandboxes N 32 个本机沙箱
--cpu-millis N 4000;准入硬 CPU 限制总和,以千分之一 CPU 为单位
--memory-bytes N 8589934592;准入硬内存限制总和,不是整机物理内存
--max-timeout-seconds N 86400;创建 TTL 上限,可配置范围 60 秒至一年
--memory-pool 默认关闭;启用 daemon 自有独立池;在 sandbox 准入之外预留宿主内存

旧 [controller]、[[workers]]、Worker profile 和 Cluster task JSON 不是 daemon 输入。pvisor-cache 保持独立;node 运行时协议没有 daemon acquire/release 适配器。NativeRuntime 仅支持 VM;checkpoint/fork、stage/apply、全局 DAG 与分布式 lease API 未实现。

serve 使用必需的 --images-dir 与 --cgroup-root 构造 NativeRuntime。Cargo 链接 pvisor/pvisor-core,同步内部 VM 派发先于参数解析或 Tokio。隐藏 supervisor 命令已实现。Images/cgroup 路径会 canonicalize;相对 state 按启动工作目录解析,运行时状态会 canonicalize。部署使用短绝对路径,重启时保持不变。

所有运行时路径使用绝对路径,daemon 重启时保持不变。逐 sandbox 的 control.sock 必须短于 104 字节,vsock Unix socket 也有路径长度限制。/run/user/1000/pvd 是短状态路径示例,不保证跨注销/重启持久化。VM 不能跨宿主重启存活。

字段导航(当前实现)

TOML 路径 类型与默认值 CLI / 用途
features.workload-aware-memory-offloading 布尔值,false --feature workload-aware-memory-offloading;原生 VM 观测
filesystem host(默认)/ sandbox --filesystem;它是顶层字符串,不是 [filesystem] 表
run.executor host(默认)/ container / vm --executor
run.command 字符串数组,默认空 -- 后的命令;实际运行必须提供
run.agent 字符串,agent --name
run.timeout_ms 可选整数,毫秒 --timeout;CLI 接受时长字符串
run.stdio inherit / capture --stdio
run.policy observe / enforce --strict 请求强制准入
run.inherit_env / run.pass_env 布尔值 / 字符串数组 CLI 会按命令适配与 safe 规则重新解析环境继承;不要仅凭 TOML 判断凭据是否传入
run.resource_limits 可选整数额度 memory_bytes、processes、cpu_time_ms、open_files、file_size_bytes;以有效额度证据为准
overlayfs.stage / max_size 可选路径 / 字节数 --stage / --overlayfs-max-size;存在 [overlayfs] 即请求暂存
overlayfs.mount / access 表数组 --mount / --access;规则语法见文件策略
overlaynet 网络模式、策略和规则 mode 默认 auto,listen 默认 127.0.0.1:19081,policy 默认 public
gateway 可选捕获与路由 mode 默认 off;capture 需要编译 Gateway feature
record.destination 可选路径 --record-destination;文件或目录
policies.session/workspace/user 策略层 不同层取最严格约束
container OCI 参数 runtime 默认 crun、network 默认 host;image/rootfs 二选一
vm VM 参数 memory_mib = 2048、cpus = 2;macOS 必须提供 Linux rootfs/image

类型与默认值来自 crates/pvisor/src/config.rs。标为内部解析或 serde(skip) 的字段不是配置接口。

覆盖规则与常见错误

  • 显式 CLI 标量覆盖配置值;命令替换 run.command。
  • 重复列表选项通常替换整份配置列表;--mount 替换整份挂载列表,--access 追加规则,--clear-access 才清空默认与配置规则。
  • --safe 位于配置与显式 CLI 之间,并清空配置的 run.pass_env;之后显式的 --pass-env 生效。
  • 未知字段被拒绝;filesystem = "sandbox" 不能写成 [filesystem] mode = "sandbox"。
  • 含路径的配置没有“以配置文件目录为根”的通用承诺;从预期工作区启动,跨环境使用绝对路径。

[vm].memory_pool 是实验性 macOS / Apple Silicon 共享冷页池的 socket 路径,默认未设置;CLI 对应 --vm-memory-pool SOCKET,Rust SDK 对应 VmSettings.memory_pool。Linux 有意拒绝外部池;有界实例本地存储使用 cold_ram_compression。见首版内存共享。

常用分组的具体字段

Run 与资源额度

[run] 的 command 是字符串数组,不经 shell 自动展开。需要管道或重定向时显式使用 /bin/sh -c。executor 默认 host,stdio 默认 inherit,policy 默认 observe,timeout_ms 默认未设置。

[run.resource_limits] 接受以下可选整数;未设置表示不在配置中请求该额度。

字段 单位 CLI
memory_bytes 字节 --memory
processes 进程/线程数量 --max-processes
cpu_time_ms 毫秒 CPU 时间 --max-cpu-time
open_files 文件描述符数量 --max-open-files
file_size_bytes 单文件字节数 --max-file-size

额度能否落实取决于执行器。运行后核对 resources 中的 requested、effective、mechanisms 与 limitations;CPU 时间与任务 wall-time 超时分别设置。

文件与网络

[overlayfs] 的 mount 与 access 使用表数组。mount 提供 source、可选 target 与必需的 access;access 规则提供 path 与 level。等级取 deny、ask、read、warn、stage、write,使用方法见文件策略。

[overlaynet] 的 mode 取 auto、off、proxy,policy 取 public、deny、allowlist。allow 是目标字符串数组,rules、deny、limits 是结构化表数组。默认列表为空;端口、协议与地址规则见策略字段。

Container 与 VM

表 字段及默认值
container runtime = "crun",image = "",network = "host",read_only_rootfs = false,mounts = []
container 可选字段 rootfs、pvisor_binary、platform、workdir、user
container.mounts 每项 source、target,read_only = false
vm memory_mib = 2048,cpus = 2,rootfs_immutable = false,ram_compression = false,cold_ram_compression = false,ram_dedup = false
vm 可选字段 rootfs、image、image_store、library_dir、control_socket、ram_backing、memory_pool、node_socket、snapshot_filesystem_pool

container.platform 取 linux-amd64 或 linux-arm64,是可选的原生宿主架构断言。匹配值会被接受;跨架构值会被拒绝,即使设置了预制 container.rootfs。host 和 VM 配置会拒绝已配置的平台。它不启用模拟执行,也不自动发现/下载程序。container.pvisor_binary 默认使用当前程序;显式 Linux 二进制和 rootfs 须兼容原生架构及 guest ABI。见容器准备。container.network 取 host、bridge 或 none,但 CNI 支持尚未实现,当前会拒绝 bridge。

VM 控制与内存覆盖

所有控制/内存字段都有 CLI 对应项,见选项表。 --vm-ram-compression、--vm-cold-ram-compression 和 --vm-ram-dedup 接受裸标志(true)或 =true / =false。省略时保留 TOML 值; 显式 =false 关闭配置的 true。只有 true 布尔选项推断 VM 执行, 显式 control/backing/pool/node 路径也在省略 --executor 时选择 VM。 依赖 TOML 内存设置时应设置 [run].executor = "vm";仅有 [vm] 表 不会选择 executor。配置 control_socket 也会通过 CLI 选择 VM,但 不会覆盖显式非 VM executor;此组合被拒绝。

启用去重并使用固定控制路径的 live VM:

[run]
executor = "vm"
command = ["/bin/sleep", "600"]

[vm]
control_socket = "/tmp/pvisor-host-1000/ctrl.sock"
ram_compression = false
cold_ram_compression = false
ram_dedup = true
install -d -m 0700 /tmp/pvisor-host-1000
pvisor run --config vm-control.toml
pvisor run --config vm-control.toml --vm-ram-dedup=false

将 TOML 保存为 vm-control.toml;前一个 Attempt 结束并释放 socket 后再 依次执行命令。该 Linux 示例假设有效 UID 为 1000;替换为自己的有效 UID 和规范化 /tmp(macOS 通常是 /private/tmp)。vm.control_socket 是可选的仅宿主创建路径,默认未设置。省略时,Host Job 服务直接在 /tmp/pvisor-host-<有效 UID> 下创建私有 vm-<UUID>.sock;自定义 CLI 路径也必须直接位于该规范根目录下。嵌入 API 接受的其他私有父目录不适用于 CLI worker。根目录必须不是符号链接、属于有效 UID,且权限恰为 0700; socket 权限为 0600,仅限同 UID,已有路径绝不覆盖。宿主权限被排除在 guest 访问范围之外,包括 host-rootfs VM。

CLI stderr 打印 --vm-socket、--vm-job-id 和 --vm-attempt-id,供 普通 live VM 命令 使用:status、 suspend JOB --vm-pause / --vm-offload(可选 --vm-ram-file PATH), 以及 resume JOB --vm-load。这些子命令局部寻址/动作选项必须放在支持的命令之后; 前置于命令或用于其他命令时被拒绝。它们不是 [vm] 配置字段, 不改变持久 Job 的默认行为。ctrl 不是 live VM 控制的兼容别名。 --vm-load 继续同一个 live Attempt,不是持久快照重启,也不主动预触 全部 RAM 页;非 VM 控制明确不受支持。

--vm-node-socket SOCKET 覆盖 vm.node_socket; --vm-snapshot-filesystem-pool DIR 覆盖 vm.snapshot_filesystem_pool。 省略路径标志保留配置。快照池必须由宿主管理,位于 VM 可写根及快照 store 之外,并与 Job 位于同一卷;其 Linux x86_64 无网络 profile 不代表通用 VM 快照支持。本地冷 pager 的单一选项同时启用回收与压缩,不是独立开关。 它与 backing/FUSE 压缩、去重、外部池、快照捕获/恢复、快照文件系统池及 整 VM offload 互斥。去重与两种压缩模式及外部池互斥。Linux 外部池仍不受 支持。冲突针对合并后的配置,不只是 CLI 标志。

VM 的内存以 MiB 为单位,CPU 是正整数。ram_backing 保存 RAM 文件;ram_compression 启用相应的压缩 backing。macOS 的压缩 backing 与共享池有额外 FUSE 条件,见内存共享概念验证。

[vm].cold_ram_compression = true(VmSettings.cold_ram_compression)在使用 VM executor 时启用实验性的 Linux x86_64 实例本地 live 压缩; --vm-cold-ram-compression 还会选择该 executor。默认值为 false,采用 私有匿名 RAM,没有 live backing 文件,不需要 FUSE 或外部服务,区别于 ram_compression。必须具备 userfaultfd syscall 或 /dev/userfaultfd 的 内核缺页权限;编译支持不代表权限,缺少权限时启动失败,不回退或修改 全局 sysctl。准入拒绝 ram_backing、ram_compression、ram_dedup、 snapshot_filesystem_pool、快照捕获/恢复及整 VM offload;Linux 还拒绝 memory_pool 及 PVISOR_EXPERIMENTAL_MEMORY_POOL。ACL 命令、映射/构建 限制、有界预算及经过校验的 refault 见 实例内压缩。这是持续 进行且无需 guest 参与的驱逐/refault 探测,不是普通 pause 或读访问热度 检测器,不承诺生产密度。

[vm].ram_dedup = true 在使用 VM executor 时请求尽力而为的宿主 RAM 去重建议;--vm-ram-dedup 还会选择该 executor。它与 memory_pool、ram_compression、cold_ram_compression 及 PVISOR_EXPERIMENTAL_MEMORY_POOL 互斥。Linux 建议面向普通私有匿名 RAM 与恢复的私有 COW 映射;live MAP_SHARED RAM 被跳过,不转换映射。macOS 对其他条件合格的映射报告不支持。runner 将安装报告写入 stderr,建议失败仍继续运行;accepted_bytes 不是已合并字节、节省,也不证明扫描已启用。不修改全局 KSM 参数或增设服务。启用前先核对去重边界与共享风险。

[vm].snapshot_filesystem_pool 为首次启动及从快照恢复的 VM capture 启用不可变 lower 引用,也覆盖不同 VM 的首次 capture。首次 seal 后,控制连接持有已验证的 owner;后续 capture 验证完整原 lower 并复用已封存的 pool 树,不扩大 runner 的访问范围。原生调用方应使用宿主管理的绝对路径,与 Job store 位于同一卷,并处于所有 VM 可写根和快照 store 之外。首次缓存未命中时,每个不可变摘要创建一棵 pool 树;并发未命中按摘要串行,命中不产生临时 lower 副本。此选项启用的原生 v5 快照以独立持有的 64 KiB 压缩块保留私有文件内容,复用未变化的内容;恢复时重建私有可写 inode,并保留完整元数据及硬链接关系。运行中的块 owner 在父快照退役和 GC 后仍然有效。封存先按解码后的内容标识查找 pool 块,命中时完整校验并直接复用,仅未命中才压缩;完整 RAM 压缩封存也使用这一路径。原生 capture 直接编码经过宿主认证的冻结私有目录,不产生中间私有数据树;导入、恢复和暂停任务的文件导出均不打开记录中的原始私有路径。完整数据校验仍保留;延迟和密度收益需要实测。此配置不支持网络、共享内存池、普通与 live 冷 RAM 压缩及显式 RAM backing。备份须保留 pool 与相关 Job store,或导出完整快照。

捕获与记录

[gateway] 默认 mode = "off",捕获模式为 capture。默认 admin_listen = "127.0.0.1:9876"、level = "dialogue"、session_header = "x-pvisor-session-id"、debug = false、routes = []。可选 profile 当前为 zcode-bigmodel;zcode_builtin_config 指向该适配配置文件。路由与捕获级别按 Gateway 指南配置。

[record].destination 是可选路径。Gateway 的模型通信记录与 Trace Event journal 有不同数据职责,按记录概念保留所需产物。

完整配置字段表

每行列出一个可序列化字段、Rust 类型、TOML/SDK 原始默认值与用途。Option<T> 表示可选,TOML 中省略键即可,不写 null;Vec<T> 表示数组,结构体使用表。required 指创建数组条目时必须提供。表中的默认值在 CLI 预设与解析之前生效。

下方的 network_rule、bandwidth_limit、policy_layer、network_layer 是复用的条目结构,不是顶层 TOML 表名。网络规则放在 overlaynet.rules、overlaynet.deny 或某个作用域的 network 层中;带宽限制放在对应的 limits 数组。policies.session、policies.workspace、policies.user 均使用 policy_layer。

文档构建会对照 Rust serde 结构检查字段名与类型。默认值和 CLI 行为单独核查,字段覆盖检查不能替代行为验证。

TOML 路径 / 条目字段 Rust 类型 默认值 用途
features crate::features::FeatureSettings {} 运行时实验性特性设置
features.workload-aware-memory-offloading bool false EXP-001 M0 原生 VM 观测;--feature workload-aware-memory-offloading 启用
run RunSettings {} 命令与进程设置
container ContainerSettings {} 选择 OCI 执行器时使用
vm VmSettings {} VM 执行器设置
filesystem FilesystemMode "host" host 或 sandbox;访问控制独立于暂存
overlayfs Option<OverlayFsSettings> 未设置 省略时直接写入;即使是空表也请求暂存
overlaynet OverlayNetSettings {} 网络驱动与基础策略
gateway GatewaySettings {} 模型流量捕获与路由
record RecordSettings {} Trace Event journal 目的地
policies pvisor_core::SessionPolicies {} 额外的 session、workspace、user 约束
run.agent String "agent" --name;保持默认时 CLI 取命令名
run.executor RunExecutorKind "host" --executor:host、container、vm
run.timeout_ms Option<u64> 未设置 实际经过时间,毫秒;--timeout 30s
run.stdio RunStdio "inherit" inherit 或 capture;--stdio
run.policy RunPolicy "observe" observe 或 enforce;--strict 选择 enforce
run.inherit_env bool true TOML/SDK 原始默认值;CLI 仅对命令名 codex 设为 true
run.pass_env Vec<String> [] 环境变量名;--pass-env KEY 替换列表
run.filesystem Vec<FilesystemCapability> [] 工作区以外的宿主权限;条目字段见下方
run.resource_limits ResourceLimits {} 请求额度;运行后对照 Bundle 的有效额度
run.command Vec<String> [] 参数数组;-- 后命令替换它;不自动经 shell 展开
container.runtime PathBuf "crun" OCI runtime 程序;--container-runtime
container.image String "" OCI 镜像引用;--container-image
container.rootfs Option<PathBuf> 未设置 已有 rootfs,替代镜像;--container-rootfs
container.pvisor_binary Option<PathBuf> 未设置 注入的 Linux 程序,默认当前程序;--container-pvisor-binary
container.platform Option<ContainerPlatform> 未设置 原生架构断言:linux-amd64 或 linux-arm64;仅 container;--container-platform
container.network ContainerNetwork "host" host、bridge、none;--container-network
container.workdir Option<PathBuf> 未设置 未挂载 Run cwd 时的容器目录;--container-workdir
container.user Option<String> 未设置 uid、uid:gid 或用户名;--container-user
container.read_only_rootfs bool false 镜像根目录只读;--container-read-only-rootfs
container.mounts Vec<ContainerMount> [] bind mounts;重复 --container-mount 替换列表
container.mounts[].source PathBuf 必需 宿主路径
container.mounts[].target PathBuf 必需 容器路径
container.mounts[].read_only bool false 只读 bind mount
vm.control_socket Option<PathBuf> 未设置 仅宿主可用的 live Attempt 端点;默认自动私有 socket;须已有同 UID 0700 父目录及新路径;--vm-control-socket
vm.ram_backing Option<PathBuf> 未设置 新建 RAM backing 路径;拒绝已有文件;--vm-ram-backing
vm.ram_compression bool false Seekable 压缩 backing;--vm-ram-compression
vm.cold_ram_compression bool false 实验性 Linux x86_64 本地 live pager;需内核缺页 userfaultfd 权限;无 FUSE/外部池;--vm-cold-ram-compression 选择 VM
vm.ram_dedup bool false 显式启用尽力而为的宿主 RAM 去重建议;--vm-ram-dedup 选择 VM;与内存池/压缩互斥;接受建议不等于节省
vm.memory_pool Option<PathBuf> 未设置 实验性 macOS pool socket;--vm-memory-pool
vm.snapshot_filesystem_pool Option<PathBuf> 未设置 宿主管理的不可变快照 lower 池;仅 Linux x86-64 无网络私有 RAM 配置;--vm-snapshot-filesystem-pool
vm.node_socket Option<PathBuf> 未设置 同宿主 node 资源服务 socket;恢复时保留共享只读 RAM backing 的引用,直到 native VM 退出;--vm-node-socket
vm.rootfs Option<PathBuf> 未设置 Linux 根目录;Linux CLI 默认宿主 /;--rootfs
vm.image Option<String> 未设置 OCI 镜像,替代 rootfs 目录;--rootfs IMAGE
vm.image_store Option<PathBuf> 未设置 OCI 缓存路径;--vm-image-store
vm.rootfs_immutable bool false 拒绝将变更 apply 到 rootfs lower
vm.library_dir Option<PathBuf> 未设置 固件目录;musl 内嵌固件并拒绝此参数;--vm-library-dir
vm.memory_mib u32 2048 guest RAM,MiB;CLI --memory 还设置进程额度
vm.cpus u16 2 vCPU 数量;--cpu
overlayfs.mount Vec<FilesystemMount> [] 统一挂载;重复 --mount 替换列表
overlayfs.access Vec<FilesystemAccessRule> [] 访问规则;重复 --access 追加;--clear-access 清空
overlayfs.stage Option<PathBuf> 未设置 项目外的新持久 Stage;--stage
overlayfs.durability pvisor_core::overlay::StageDurability "checkpoint" checkpoint 或 strict;--stage-durability;不改变隔离和内容冲突检测
overlayfs.max_size Option<u64> 未设置 暂存总字节额度;--overlayfs-max-size
overlayfs.mount[].source PathBuf 必需 宿主源路径
overlayfs.mount[].target Option<PathBuf> 未设置 Agent 可见的挂载路径;省略时由规范化过程补充
overlayfs.mount[].access FilesystemAccessLevel 必需 deny、ask、read、warn、stage、write
overlayfs.access[].path String 必需 Agent 可见路径/规则;语法见文件策略指南
overlayfs.access[].level FilesystemAccessLevel 必需 deny、ask、read、warn、stage、write
overlaynet.mode OverlayNetMode "auto" auto、off、proxy;--overlaynet;auto 在 VM 中使用 smoltcp
overlaynet.listen String "127.0.0.1:19081" 代理地址;CLI 将此默认值换成空闲端口;--overlaynet-listen
overlaynet.policy OverlayNetPolicy "public" public、deny、allowlist;--overlaynet-policy
overlaynet.allow Vec<String> [] 兼容的目标字符串授权;优先使用结构化 rules
overlaynet.rules Vec<NetworkAccessRule> [] 结构化授权;字段见 network_rule;--overlaynet-rule 替换
overlaynet.deny Vec<NetworkAccessRule> [] 结构化拒绝;--overlaynet-deny 替换
overlaynet.limits Vec<NetworkBandwidthLimit> [] 带宽条目;字段见 bandwidth_limit;--overlaynet-limit 替换
gateway.mode GatewayMode "off" off 或 capture;--gateway-mode
gateway.profile Option<GatewayProfile> 未设置 zcode-bigmodel;--gateway-profile 同时选择 capture
gateway.zcode_builtin_config Option<PathBuf> 未设置 Zcode 适配配置路径
gateway.admin_listen String "127.0.0.1:9876" 管理地址;CLI 将此默认值换成空闲端口;--gateway-admin-listen
gateway.level CaptureLevel "dialogue" summary、dialogue、full;--gateway-level
gateway.session_header String "x-pvisor-session-id" Session 关联头;--gateway-session-header
gateway.debug bool false Gateway 调试;--gateway-debug
gateway.routes Vec<ModelRoute> [] 模型路由条目;--gateway-route 替换列表
record.destination Option<PathBuf> 未设置 Trace Event 文件/目录;--record-destination
run.resource_limits.memory_bytes Option<u64> 未设置 字节;--memory
run.resource_limits.processes Option<u64> 未设置 进程/线程数量;--max-processes
run.resource_limits.cpu_time_ms Option<u64> 未设置 CPU 毫秒;--max-cpu-time;独立于任务超时
run.resource_limits.open_files Option<u64> 未设置 文件描述符数;--max-open-files
run.resource_limits.file_size_bytes Option<u64> 未设置 单文件字节;--max-file-size
run.filesystem[].path String 必需 暂存项目以外的宿主路径
run.filesystem[].access FilesystemAccess 必需 read 或 read_write
network_rule.host String 必需 主机名、通配后缀、IP 或 CIDR;不带 URL scheme
network_rule.ports Vec<u16> [] 1–65535 端口;空表示所有端口
network_rule.transports Vec<NetworkTransport> [] http、https、tcp_tunnel;空表示所有协议
network_rule.allow_private_ips bool false 允许主机名解析到私网/回环地址
bandwidth_limit.host Option<String> 未设置 省略匹配所有拦截目标
bandwidth_limit.port Option<u16> 未设置 省略匹配所有端口
bandwidth_limit.bytes_per_second u64 必需 正的字节速率;匹配的限制叠加
gateway.routes[].name String 必需 模型匹配:精确值、prefix、suffix、*
gateway.routes[].provider Option<String> 未设置 openai、anthropic、gemini、vertex、bedrock、azure、copilot、custom
gateway.routes[].upstream Option<String> 未设置 包含 /v1 等前缀的上游 API base
gateway.routes[].upstream_anthropic Option<String> 未设置 Anthropic API base;省略时用 upstream
gateway.routes[].api_key_env Option<String> 未设置 宿主密钥变量名;避免将密钥明文写入 TOML
gateway.routes[].api_key Option<String> 未设置 明文上游密钥;配置需私密保存
gateway.routes[].forward Option<String> 未设置 转发到精确路由名,并改写 model
policies.session PolicyLayer {} 当前 Session 的额外策略层
policies.workspace PolicyLayer {} 显式策略或 .pvisor/policy.toml 默认值
policies.user PolicyLayer {} 显式策略或用户配置默认值
policy_layer.network Option<NetworkPolicyLayer> 未设置 可选 network_layer 表;省略不增加该层约束
policy_layer.filesystem Option<FileAccessPolicy> 未设置 可选 deny/ask/warn/allow glob 数组;见策略参考
network_layer.default_action Option<NetworkDefaultAction> 未设置 allow 或 deny;存在此层时,省略会拒绝未匹配目标
network_layer.allow Vec<NetworkAccessRule> [] network_rule 授权条目
network_layer.deny Vec<NetworkAccessRule> [] network_rule 拒绝条目;拒绝优先
network_layer.limits Vec<NetworkBandwidthLimit> [] bandwidth_limit 条目