Install
openclaw skills install claude-code-allinoneArkClaw / OpenClaw 沙箱里一键安装并配置 Anthropic Claude Code CLI 的 all-in-one skill。当用户提到 claude code、claude-code、想在 ArkClaw 里用 Anthropic 官方 Coding CLI、提到 ark-code-latest / 火山方舟 AgentPlan 接 claude code、想切换 claude code 的模型供应商、需要做代码 review / 代码改写、或者说"我没有 Anthropic 官方 API Key 但想用 claude code"时,使用本 skill。
openclaw skills install claude-code-allinone让 ArkClaw / OpenClaw 用户在对话框里完成 Claude Code CLI 的全部配置 — 不用打开终端、不用手写 ~/.claude/settings.json、不用记 base_url。本 skill 还内置 review / build 双模式智能路由:
--permission-mode plan):只读分析,不改文件,适合代码审查 / 评估改造方案--allowedTools 白名单):允许 Read / Edit / Write / Bash 等动手工具,适合实现代码用户触发本 skill(说"用 claude code 帮我..." / "/claude-code-allinone ..." / 报错 等)
│
▼
┌───────────────────────────┐
│ 运行 scripts/doctor.sh │ ← 每次触发都会运行,检测当前环境状态
└─────────────┬─────────────┘
│
当前配置状态 = ?
│
┌─────────────┼──────────────────────────────────┐
│ │ │
"全新环境" "本 skill 配过" "用户手动配过"
(从未配置) (之前用本 skill 配置的) (有 settings.json/config 但不是本 skill 写的)
│ │ │
▼ ▼ ▼
路径 ① 路径 ② 路径 ③
首次配置 正常使用(绝大多数情况) 兼容性检查
│ │ │
│ │ ├─ 检查通过 → 保留不动,转到路径 ②
│ │ └─ 检查不通过 → 告知用户具体问题,
│ │ 询问是否用本 skill 重新配置
│ │
问用户选择 智能判定 review/build 模式
A/B 菜单 然后执行: claude -p "用户的需求" --permission-mode plan
│ 或: claude -p "用户的需求" --allowedTools <白名单>
▼
完成配置后
转到路径 ②
| 路径 | 什么时候走 | 用户需要做什么 |
|---|---|---|
| ① 首次配置 | 环境里从未配过 claude code,或用户主动要求重新配置 | 默认直接走 AgentPlan,只问一次 Key 粘贴。用户主动说"我有自己的 Anthropic 兼容网关 / 别的 base_url / 自定义模型"时才走 custom 分支 |
| ② 正常使用 | 已经配好了(本 skill 配的,或用户自配且体检通过) | 什么都不用做,直接说编程需求即可 |
| ③ 兼容性检查 | 用户手动写过 settings.json,本 skill 首次遇到 | 如果检查通过:无需操作;如果不通过:选择重配或自己修 |
当配置已经就绪(路径 ②)时,不允许:
只做:
bash scripts/ensure-onboarding.sh(确保 ~/.claude.json 标记 onboarding 完成)bash scripts/run.sh "用户的完整需求原文"(自动判定 review / build 模式)用户体验应该等同于"直接跟 claude code 对话",完全感觉不到 skill 的存在。
只有这三种情况允许打扰用户:
/claude-code-allinone <你的编程需求>(强制走本 skill)command not found: claude / Onboarding has not been completed / ANTHROPIC_AUTH_TOKEN is not set 等每次触发都先运行 bash scripts/doctor.sh,它会输出一个 JSON,包含:
{
"claude_installed": true,
"claude_version": "2.1.143",
"claude_outdated": false,
"config_state": "clean | managed-by-skill | user-managed",
"active_profile": "agentplan | custom | null",
"user_settings_summary": {"base_url": "...", "model": "..."} | null,
"user_health": {"is_healthy": true/false, "checks": [...], "issues": [...]} | null,
"onboarding_complete": true,
"ark_api_key_set": true,
"custom_api_key_set": false,
"issues": []
}
根据 config_state 决定走哪条路径。
scripts/install.sh 的行为:
| 当前状态 | 行为 |
|---|---|
| 未安装 claude | 通过 npm 安装 @anthropic-ai/claude-code@latest |
| 版本低于 2.1.0 | 升级到最新 |
| 已是最新版 | 跳过,不做任何事 |
默认行为:不问选项,直接走 AgentPlan
减少用户感知是核心原则。除非用户主动说"我有自己的 Anthropic 兼容网关 / 自定义 base_url / 别的模型 Key",否则直接进入 AgentPlan 配置流程,只让用户粘贴一次 Key:
准备给你配置 Claude Code,使用火山方舟 AgentPlan(套餐内额度,ark-code-latest 智能路由)。
请粘贴 AgentPlan 控制台分配的专属 Key:
拿到 Key 后立即跑:
bash scripts/setup-agentplan.sh "$KEY"
只有以下情况才询问/触发 custom 流程,不要主动给用户列菜单:
触发后引导用户依次给出 3 个信息,然后跑:
bash scripts/setup-custom.sh "$BASE_URL" "$KEY" "$MODEL"
⛔ 不允许在用户没提"自定义/别的网关/我的 Key"等关键词时,主动展示 A/B 菜单。这会增加感知,违背"默认 AgentPlan"原则。
配置脚本会自动完成:写 Key → 写 settings.json → 写 ~/.claude.json 的 hasCompletedOnboarding: true → .token 文件落盘。如果用户已有 settings.json,会先备份再覆盖。
当 doctor.sh 返回 config_state == "user-managed" 时,说明用户之前手动写过 settings.json。此时读取 user_health 字段:
检查通过(is_healthy == true):
检查不通过(is_healthy == false):
向用户展示具体问题,并询问:
检测到你已有的 claude code 配置存在以下问题:
1. <具体问题描述>
2. <具体问题描述>
你希望:
A. 让本 skill 帮你重新配置(推荐,会先备份你现有的文件)
B. 我自己去修改
请回复 A 或 B。
bash scripts/run.sh "用户的完整需求原文"
run.sh 内部会:
--permission-mode plan)--allowedTools "Read,Glob,Grep,LS,Bash,Edit,Write")nohup setsid + </dev/null + log file + 110s PID polling 跑 claude(避免 PTY 挂起)也可以由 Agent 显式指定:
bash scripts/run.sh --mode review "用户需求"
bash scripts/run.sh --mode build "用户需求"
仅当用户明确说"切换 / 换一家 / 切到 X / 换成自定义 / 用回 AgentPlan"等关键词时触发,不要主动建议切换。
bash scripts/switch-profile.sh # 列出已配置的服务
bash scripts/switch-profile.sh agentplan # 切换到 AgentPlan
bash scripts/switch-profile.sh custom # 切换到自定义网关
切换实际上是把 ~/.claude/settings.json 替换为目标 profile 的内容(同时同步 .token 文件),并把 ~/.claude/active-profile 写成目标名。
这是 v3.1 现网走通后总结出的必须遵守的规则,违反就报错。
| 规则 | 说明 |
|---|---|
用 ANTHROPIC_AUTH_TOKEN,不要 ANTHROPIC_API_KEY | 后者会被 CLI 强制走 anthropic.com 鉴权链路,在境内 IDC 必然失败 |
~/.claude.json 必须有 hasCompletedOnboarding: true | 否则 CLI 拒绝在非交互模式启动,报 Onboarding has not been completed |
~/.claude/settings.json 的 env 块 + ~/.claude/.token 文件 二者并存 | env 块负责 base_url / model / 各类开关,.token 文件负责 Key(更安全) |
build 模式必须显式 --allowedTools 白名单 | 否则默认 ask 模式会等用户交互,在沙箱里直接挂死 |
review 模式必须用 --permission-mode plan | 这样不会出现写文件的副作用,review 才是真正只读 |
⛔ Skill 调用方禁止叠加 pty: true | run.sh 的 </dev/null 会被 PTY 重新打开 stdin,导致 claude 等待输入 |
| 110s 超时是硬约束 | 走 nohup setsid + log file + while-poll PID 路径;一旦 PID 还活着且超过 110s,主动 kill -9,从日志里取已生成的内容 |
| 检查项 | 不通过时的具体表现 |
|---|---|
~/.claude/settings.json 是否存在且 JSON 合法 | claude 启动会直接 abort |
env.ANTHROPIC_BASE_URL 是否设置 | claude 不知道请求发往哪里 |
用了 ANTHROPIC_AUTH_TOKEN 而非 ANTHROPIC_API_KEY | 后者必然走 anthropic.com,境内 IDC 连不上 |
~/.claude.json 是否存在且 hasCompletedOnboarding == true | 否则 CLI 在非交互模式下 abort |
~/.claude/.token 是否存在且非空 | 否则连接时被拒 401 |
env.ANTHROPIC_MODEL 是否设置 | 否则 CLI 会回退默认 sonnet,在自定义网关上找不到模型 |
每个模型服务在 ~/.claude/profiles/ 下有一个 settings.json 模板:
~/.claude/profiles/
├── agentplan.json — 火山方舟 AgentPlan(ark-code-latest)
└── custom.json — 自定义 Anthropic 兼容网关(占位符 __BASE_URL__ / __MODEL__)
~/.claude/settings.json 是当前激活配置的实际内容(由 setup / switch 脚本写入),~/.claude/active-profile 文件记录当前是哪一个。
| 场景 | 需要读的文件 |
|---|---|
| 引导用户选择模型供应商 | references/providers.md |
| 用户报错 / 检查不通过 | references/troubleshooting.md |
| 不确定整体流程 / review vs build | references/routing-flow.md |
~/.bashrc、~/.claude/.token 和 ~/.claude/profiles/*.json 中(用户家目录内)~/.claude/settings.json.bak.<时间戳>bypassPermissions、dontAsk),那是用户自己的事| 用户说 | Skill 做什么 |
|---|---|
| "帮我装 claude code" / "在 ArkClaw 里用 claude code" | 安装 + 引导配置 |
| "/claude-code-allinone 帮我写个 Python 脚本" | 直接执行(已配好则走 build 模式) |
| "claude code review 一下 utils.py" | 直接执行(走 review 模式,只读) |
| "切换到自定义网关" / "换一家" | 运行 switch-profile.sh |
| "claude 报 Onboarding has not been completed" | 跑 ensure-onboarding.sh |
| "claude 报 401" | 检查对应 profile 的 Key 是否正确 |
| "我现在用的哪家?" | 读取 ~/.claude/active-profile |