﻿---
title: "不要用 experimental_use_profile 当 nvm 开关"
summary: "默认 false。打开后生成子进程会跑用户 shell profile。这不是 shell_snapshot，也不是 allow_login_shell。实验键，优先用 set 钉 PATH。"
category: config
level: advanced
surfaces: [cli]
tags: ["experimental_use_profile", "shell_environment_policy", "PATH"]
canonical: /tips/experimental-use-profile/
---

# 不要用 experimental_use_profile 当 nvm 开关

默认 false。打开后生成子进程会跑用户 shell profile。这不是 shell_snapshot，也不是 allow_login_shell。实验键，优先用 set 钉 PATH。

远端或本机命令找不到 nvm / Homebrew 时，有人会抄这一行：

```toml
[shell_environment_policy]
experimental_use_profile = true
```

它的含义是：生成子进程时使用用户 shell profile。官方默认 `false`。这会把 rc 里的 `export`、别名和密钥一并拉进 agent 命令，`filters` 先收窄的变量也可能被 profile 再写回来。

对照另外两个键，不要抄混：

- `features.shell_snapshot`：默认开，复用启动时拍下的环境。环境陈旧就关快照。
- `allow_login_shell`：管 shell 工具能不能要 login shell（读 `~/.profile` / `~/.zprofile`）。默认 true。
- `experimental_use_profile`：实验键，source 用户 profile。不是稳定的 PATH 修复。

要给子进程固定工具路径：

```toml
[shell_environment_policy]
set = { PATH = "/usr/bin:/usr/local/bin:/home/you/.nvm/versions/node/current/bin" }
```

桌面 Remote / SSH 仍优先把 PATH 写进远端 `~/.profile`，并保持 `allow_login_shell = true`。不要在仓库 `.codex/config.toml` 里给全组打开 `experimental_use_profile`。改完新开会话，再用 `codex features list` 和一条 `echo $PATH` 核对。

## 来源

- [OpenAI · Configuration reference](https://learn.chatgpt.com/docs/config-file/config-reference)
- [OpenAI · Config advanced](https://learn.chatgpt.com/docs/config-file/config-advanced)
