跳转至

环境变量与 .env 加载

环境变量与 .env 加载

OpenClaw 如何加载环境变量?

OpenClaw 会从父进程(shell、launchd/systemd、CI 等)读取环境变量,并额外加载:

  • 当前工作目录中的 .env。
  • 来自 ~/.openclaw/.env($OPENCLAW_STATE_DIR/.env)的全局回退 .env。

通常,这两个 .env 文件都不会覆盖已有的环境变量。对于由 OpenClaw 安装的 systemd 服务,全局 .env 仅可能替换 OpenClaw 记录为受管的服务值;操作者拥有的服务值仍然优先。对于工作区 .env,提供商凭据和端点路由键则是一个例外:诸如 GEMINI_API_KEY、XAI_API_KEY、MISTRAL_API_KEY 或以 _ENDPOINT 结尾的任何键(以及其他捆绑提供商的身份验证或端点环境变量)都会从工作区 .env 中被忽略,而应放在进程环境、~/.openclaw/.env 或配置 env.vars 中。

配置中的内联环境变量仅当进程环境中缺失时才生效:

{
  env: {
    vars: {
      OPENROUTER_API_KEY: "sk-or-...",
      GROQ_API_KEY: "gsk-...",
    },
  },
}

完整的优先级和来源请参阅 /environment。

我通过服务启动了 Gateway,但我的环境变量消失了。怎么办?

两种解决方法:

  1. 将缺失的键放入 ~/.openclaw/.env,这样即使服务未继承你的 shell 环境,也能加载它们。
  2. 启用 shell 导入(可选便利功能):
    {
      env: {
        shellEnv: {
          enabled: true,
          timeoutMs: 15000,
        },
      },
    }
    
    这会运行你的登录 shell,并且只导入缺失的预期键(绝不覆盖)。等效的环境变量:OPENCLAW_LOAD_SHELL_ENV=1、OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000。
我设置了 COPILOT_GITHUB_TOKEN,但 models status 显示 “Shell env: off.”,为什么?

openclaw models status 报告的是 shell env import(shell 环境导入)是否已启用。“Shell env: off” 并不表示你的环境变量缺失——它只是表示 OpenClaw 不会自动加载你的登录 shell。

如果 Gateway 作为服务(launchd/systemd)运行,它将不会继承你的 shell 环境。解决方法:将令牌放入 ~/.openclaw/.env,启用 env.shellEnv.enabled: true,或将其添加到配置 env(仅在缺失时生效),然后重启 Gateway 并重新检查:

openclaw models status

Copilot 仅会在存在显式的 models.providers.github-copilot 条目、已保存的 Copilot 身份验证配置文件或 COPILOT_GITHUB_TOKEN 时激活。通用的 GH_TOKEN 和 GITHUB_TOKEN 变量不会启用或验证 Copilot。请运行 openclaw models auth login --provider github-copilot 以登录。

参见 /concepts/model-providers 和 /environment。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw