运行时依赖
安装命令
点击复制技能文档
Env Doctor — OpenClaw Skill 全链路环境诊断与安装 强制规范 [MANDATORY] 所有 CLI、工具、运行时、包管理器的安装操作必须遵循以下流程,不可跳过任何步骤:
步骤 1:检测平台与架构 # macOS / Linux OS="$(uname -s)" # Darwin / Linux ARCH="$(uname -m)" # arm64 / x86_64 echo "平台: $OS, 架构: $ARCH" # Windows (PowerShell) $OS = "Windows" $ARCH = if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" } $WinVer = [System.Environment]::OSVersion.Version Write-Host "平台: $OS, 架构: $ARCH, Windows 版本: $($WinVer.Major).$($WinVer.Minor).$($WinVer.Build)" 平台支持说明: macOS (Darwin) — 完整支持,参考 install-macos.md Windows — 完整支持,参考 install-windows.md Linux — 当前不提供安装手册。如检测到 Linux,告知用户此 skill 暂不支持 Linux,需自行按发行版的包管理器安装所需工具 macOS 架构标记:如果 ARCH=arm64(Apple Silicon),后续安装 Homebrew 时必须执行 eval "$(/opt/homebrew/bin/brew shellenv)",否则所有 brew 安装的工具都无法找到。
步骤 2:全量环境快照
在安装任何东西之前,先一次性探测系统已有的全部工具和版本,避免重复安装和误判。
# macOS — 全量环境快照
echo "=== 系统环境快照 ==="
echo "--- 平台 ---"
echo "OS: $(uname -s), ARCH: $(uname -m), macOS: $(sw_vers -productVersion 2>/dev/null || echo 'N/A')"
echo ""
echo "--- Xcode CLT ---"
xcode-select -p >/dev/null 2>&1 && echo "xcode-select: 已安装 ($(xcode-select -p))" || echo "xcode-select: 未安装"
echo ""
echo "--- sudo 免密可用性 ---"
sudo -n true 2>/dev/null && echo "SUDO_OK=true" || echo "SUDO_OK=false (需使用非 sudo 安装方式)"
echo ""
echo "--- 包管理器 ---"
command -v brew >/dev/null 2>&1 && echo "brew: $(brew --version 2>&1 | head -1)" || echo "brew: 未安装"
echo ""
echo "--- 基础运行时 ---"
for cmd in node npm python3 pip3 go uv; do
if command -v "$cmd" >/dev/null 2>&1; then
ver="$("$cmd" --version 2>&1 | head -1)"
echo "$cmd: $ver"
else
echo "$cmd: 未安装"
fi
done
echo ""
echo "--- python3 真实性检测 ---"
python3 -c "import sys; print('python3 可用:', sys.version)" 2>/dev/null || echo "python3: 不可用或为 Xcode CLT stub"
echo ""
echo "--- CLI 工具 ---"
for cmd in curl git gh jq rg ffmpeg tmux whisper memo remindctl clawhub claude codex himalaya uv; do
if command -v "$cmd" >/dev/null 2>&1; then
echo "$cmd: 已安装"
else
echo "$cmd: 未安装"
fi
done
# Windows — 全量环境快照(先切 UTF-8 防乱码)
chcp 65001 >nul
Write-Host "=== 系统环境快照 ==="
Write-Host "--- 平台 ---"
$ver = [System.Environment]::OSVersion.Version
Write-Host "OS: Windows, Build: $($ver.Major).$($ver.Minor).$($ver.Build), Arch: $(if ([Environment]::Is64BitOperatingSystem) {'x64'} else {'x86'})"
Write-Host ""
Write-Host "--- Shell 环境 ---"
Write-Host "当前 Shell: $($PSVersionTable.PSVersion) (PowerShell)"
$policy = Get-ExecutionPolicy -Scope CurrentUser
Write-Host "执行策略 (CurrentUser): $policy"
Write-Host ""
Write-Host "--- 包管理器 ---"
foreach ($pm in @("scoop", "winget", "choco")) {
$c = Get-Command $pm -ErrorAction SilentlyContinue
if ($c) {
Write-Host "$pm: 已安装"
} else {
Write-Host "$pm: 未安装"
}
}
Write-Host ""
Write-Host "--- 基础运行时 ---"
foreach ($cmd in @("node", "npm", "python", "pip", "go", "uv", "curl.exe", "git")) {
$c = Get-Command $cmd -ErrorAction SilentlyContinue
if ($c) {
try {
$v = & $cmd --version 2>&1 | Select-Object -First 1;
Write-Host "$cmd: $v"
} catch {
Write-Host "$cmd: 已安装 (版本获取失败)"
}
} else {
Write-Host "$cmd: 未安装"
}
}
Write-Host ""
Write-Host "--- CLI 工具 ---"
foreach ($cmd in @("gh", "jq", "rg", "ffmpeg", "whisper", "clawhub", "claude", "codex", "himalaya")) {
$c = Get-Command $cmd -ErrorAction SilentlyContinue
if ($c) {
Write-Host "$cmd: 已安装"
} else {
Write-Host "$cmd`: 未安装"
}
}
已安装的工具直接跳过,仅安装缺失的部分。
步骤 3:检测网络环境 安装工具前必须确认网络连通性。国内用户访问境外源(GitHub、npm、Homebrew、PyPI)经常超时,必须优先配置镜像。 # macOS — 网络检测(超时 3 秒判定可达性) echo "=== 网络连通性检测 ===" NEED_MIRROR=false for url in "https://github.com" "https://raw.githubusercontent.com" "https://registry.npmjs.org" "https://pypi.org"; do if curl -sI --connect-timeout 3 "$url" > /dev/null 2>&1; then echo "可达: $url" else echo "不可达: $url" NEED_MIRROR=true fi done if [ "$NEED_MIRROR" = true ]; then echo ">>> 检测到境外源不可达,必须先配置镜像再继续安装 <<<" fi # Windows — 网络检测(先切 UTF-8 防乱码) chcp 65001 >nul Write-Host "=== 网络连通性检测 ===" @("https://github.com", "https://raw.githubusercontent.com", "https://registry.npmjs.org", "https://pypi.org") | ForEach-Object { try { $sw = [System.Diagnostics.Stopwatch]::StartNew() Invoke-WebRequest -Uri $_ -TimeoutSec 3 -UseBasicParsing | Out-Null $sw.Stop() if ($sw.ElapsedMilliseconds -gt 2000) { "慢速 ($($sw.ElapsedMilliseconds)ms): $_ — 建议配置镜像" } else { "可达 ($($sw.ElapsedMilliseconds)ms): $_" } } catch { "不可达: $_ — 必须配置镜像" } } 判定规则: 任一源不可达 → 必须先配置镜像(见平台手册「第 0 层:网络环境配置」) 任一源响应超过 2 秒 → 强烈建议配置镜像 全部可达且速度正常 → 可直接安装
步骤 4:检测前置依赖链 安装任何工具前,沿依赖链自底向上检测,缺失的先补上: 第 0 层 网络环境 镜像源 / 代理(国内用户必须优先配置) ↓ 第 1 层 包管理器 brew(macOS) / scoop(Windows) ↓ 第 2 层 基础运行时 node+npm / python3+pip3 / go / uv ↓ 第 3 层 目标 CLI gh / ffmpeg / clawhub / whisper / ... ↓ 第 4 层 环境变量 OPENAI_API_KEY / GEMINI_API_KEY / ...
步骤 5:加载平台安装手册执行安装 根据当前平台读取对应手册: macOS → 阅读 {baseDir}/references/install-macos.md Windows → 阅读 {baseDir}/references/install-windows.md 在手册中查找目标工具的章节,按命令执行安装。