์ด ๊ธ์ ์๋ hook ์ด์ผ๊ธฐ๋ถํฐ ์์ํ๋ฉด ์ ๋๋ค. ์ค์ ๋ก ์ด๋ฒ ๊ตฌ์ฑ์ ํต์ฌ ํ๋ฆ์ ์๋๋ค.
OpenClaw โ ACPX โ Claude Agent Adapter โ CCR(Claude Code Router) โ GLM API
์ฆ ๊ฒ์ผ๋ก๋ claude ํ๋์ค๋ฅผ ์ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ๋, ์ค์ ๋ชจ๋ธ ์์ฒญ์ CCR์ด ๋ค์์ GLM endpoint๋ก ๋ค์ ๋ผ์ฐํ
ํ๋ ๊ตฌ์กฐ๋ค. ๊ทธ๋์ ๋จผ์ ํ์ํ ๊ฒ์ Node/npm ์ค๋น โ OpenClaw/CCR/Claude ์ค์น โ CCR์ GLM endpoint ์ค์ โ OpenClaw๊ฐ wrapper๋ฅผ ํตํด ACPX๋ฅผ CCR ํ๊ฒฝ์์ ์คํํ๊ฒ ์ฐ๊ฒฐํ๋ ์ผ์ด๊ณ , hook์ ๊ทธ๋ค์์ ๋ถ์ด๋ ์ ํํ ํ๋๋์ด๋ค.
๊ฐ์ฅ ๋ง์ด ํท๊ฐ๋ฆฌ๋ ์ง์ ๋ ๋ฑ ์ฌ๊ธฐ๋ค. api_base_url์ CCR์ด ๋ฐ๊นฅ ๋ชจ๋ธ ์ ๊ณต์์๊ฒ ์์ฒญ์ ๋ณด๋ด๋ upstream endpoint์ด๊ณ , ANTHROPIC_BASE_URL์ Claude Code๊ฐ ๋ก์ปฌ CCR๋ก ๋ถ๋ local endpoint๋ค. ์ด ๋์ ์์ด ์๊ฐํ๋ฉด โCCR์ ๊น์๋๋ฐ๋ ์ ๊ทธ๋ฅ ๊ธฐ๋ณธ Claude์ฒ๋ผ ๊ฐ์ง?โ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ๋ก ์๊ธด๋ค.
flowchart LR A[OpenClaw] --> B[ACPX] B --> C[Claude Agent Adapter] C --> D[CCR local endpoint<br/>127.0.0.1:3456] D --> E[GLM API<br/>api.z.ai] E --> F[์ ํ: Claude Hook]
๐ง ์น ํ ์นํธ์ํธ
- 1๋จ๊ณ๋ hook์ด ์๋๋ผ Claude CLI ์ค์น๋ค.
- 2๋จ๊ณ๋ CCR ์ค์น +
config.json์์ฑ์ด๋ค.- 3๋จ๊ณ๋
ccr activate๋ก local endpoint๋ฅผ Claude์ ์ฃผ์ ํ๋ ๊ฒ์ด๋ค.- OpenClaw๋ CCR์ ์ง์ ๋ถ๋ ๊ฒ ์๋๋ผ, CCR์ด ์ฃผ์ ๋ Claude Code ํ๋์ค๋ฅผ ํตํด ์ฐํํ๋ค.
- hook์ ์ฐ๊ฒฐ์ด ์์ ํ๋ ๋ค์๋ง ๋ถ์ฌ๋ ๋ฆ์ง ์๋ค.
๋จผ์ ๊ฒฐ๋ก ๋ถํฐ
OpenClaw + CCR ์ธํ ์ ์๋ ์์๋ก ๋ณด๋ฉด ๊ฐ์ฅ ๋ ๊ผฌ์ธ๋ค.
- Node/npm์ ํ์ธํ๊ณ
openclaw+ccr+claudeCLI๋ฅผ ๊ฐ์ด ์ค์นํ๋ค. ~/.claude-code-router/config.json์์ GLM endpoint๋ฅผ ์ค์ ํ๋ค.ccr start+ccr activate๋ก Claude๊ฐ ๋ก์ปฌ CCR endpoint๋ฅผ ๋ณด๊ฒ ๋ง๋ ๋ค.- OpenClaw๊ฐ wrapper๋ฅผ ํตํด
acpx๋ฅผ CCR ํ๊ฒฝ์์ ์คํํ๊ฒ ๋ง์ถ๋ค. - ๊ทธ ๋ค์๋ง hook์ผ๋ก ๊ฐ์/์ฐจ๋จ์ ์๊ฒ ์ถ๊ฐํ๋ค.
ํต์ฌ์ โOpenClaw๋ฅผ ๋ฏ์ด๊ณ ์น๋คโ๊ฐ ์๋๋ผ, Claude Code ๋ฐํ์์ด ์ด๋ค endpoint๋ฅผ ๋ฐ๋ผ๋ณด๋์ง ์ ํํ ๋ง์ถ๋ค๋ ๋ฐ ์๋ค.
Windows์์๋ ๊ฐ๋ฅํ๊ฐ?
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด: ๊ฐ๋ฅํ๋ค. ๋จ, ๊ตฌ๊ฐ๋ง๋ค ์ค์ ๋ฐฉ์์ด ๋ค๋ฅด๊ณ ๊ผฌ์ด๋ ํฌ์ธํธ๋ ๋ค๋ฅด๋ค.
๊ตฌ๊ฐ๋ณ Windows ๊ฐ๋ฅ ์ฌ๋ถ
- Claude Code ๋จ๋
+ GLM-5 ์ง๊ฒฐ: ๊ฐ๋ฅํ๋ค.
npm i -g @anthropic-ai/claude-codeํ PowerShell์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ ์ค์ ํ๋ฉด ๋๋ค. CCR ์์ด ์ด ์กฐํฉ๋ง ์ฐ๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋จ์ํ๋ค. - CCR ์ค์น/์คํ: ๊ฐ๋ฅํ๋ค. npm ์ ์ญ ์ค์น ํ
ccr start๊น์ง๋ ๊ฐ๋ค. ๋ค๋ง ์ ธ ํ์ฑํ ๋ช ๋ น ๋ฐฉ์์ด ๋ค๋ฅด๋ค(eval "$(ccr activate)"๋ bash ์ ์ฉ์ด๋ผ PowerShell/Cmd์์๋ ์ง์ ์ธ ์ ์๋ค). - OpenClaw + CCR + acpx ์ ์ฒด ์กฐํฉ: ๊ฐ๋ฅํ์ง๋ง wrapper๋ฅผ
.sh๋์.cmd๋๋.ps1๋ก ๋ง๋ค์ด์ผ ํ๊ณ , acpx ๊ฒฝ๋ก๋ Windows npm ์ ์ญ ๊ฒฝ๋ก ์คํ์ผ๋ก ๋ง์ถฐ์ผ ํ๋ค. - WSL2 ๊ฒฝ์ : ์ ์ฒด ์กฐํฉ์์ ๊ฐ์ฅ ๋ ๊ผฌ์ธ๋ค. Linux ๊ฒฝ๋ก ๊ทธ๋๋ก ์จ๋ ๋๊ณ ,
eval "$(ccr activate)"๊ฐ์ bash ๋ฌธ๋ฒ๋ ๊ทธ๋ฅ ์ด๋ค. Windows ๋ค์ดํฐ๋ธ ํ์ผ๊ณผ WSL2 ํ์ผ ๊ฒฝ๊ณ๋ง ์ฃผ์ํ๋ฉด ๋๋ค.
Windows์์ ccr activate๋ฅผ ์ฐ๋ ๋ฐฉ๋ฒ
bash์ eval "$(ccr activate)"์ ํด๋นํ๋ PowerShell ๋ฐฉ์์ ์๋์ฒ๋ผ ๋๋ค.
# PowerShell์์ CCR์ด ๋ด๋ณด๋ด๋ ํ๊ฒฝ๋ณ์๋ฅผ ์๋์ผ๋ก ์ง์ ์ค์ ํ๋ ๋ฐฉ๋ฒ
$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:3456"
$env:ANTHROPIC_AUTH_TOKEN = "ccr-local-token"
$env:NO_PROXY = "127.0.0.1"๋๋ ccr activate๊ฐ ์ถ๋ ฅํ๋ ๋ด์ฉ์ ํ์ธํด์ ๊ทธ์ ๋ง๋ PowerShell ํํ๋ก ๋ณํํด๋ ๋๋ค.
# ํ์ฌ PowerShell ์ธ์
์์ ํ๊ฒฝ๋ณ์ ํ์ธ
Get-ChildItem Env: | Where-Object { $_.Name -like "ANTHROPIC_*" }Cmd(๋ช ๋ น ํ๋กฌํํธ)์์ ์ค์ ํ๋ ค๋ฉด:
set ANTHROPIC_BASE_URL=http://127.0.0.1:3456
set ANTHROPIC_AUTH_TOKEN=ccr-local-token
set NO_PROXY=127.0.0.1๋จ, set์ผ๋ก ์ค์ ํ ๊ฐ์ ํด๋น Cmd ์ฐฝ์์๋ง ์ ํจํ๋ค. ์์คํ
์ ์ญ์ผ๋ก ๊ณ ์ ํ๋ ค๋ฉด setx๋ฅผ ์ฐ๊ฑฐ๋ ์์คํ
ํ๊ฒฝ๋ณ์ ์ค์ ์์ ์ง์ ์ถ๊ฐํด์ผ ํ๋ค.
setx ANTHROPIC_BASE_URL "http://127.0.0.1:3456"์ฃผ์:
setx๋ ํ์ฌ ์ฐฝ์๋ ์ฆ์ ๋ฐ์์ด ์ ๋๋ค. ์ ์ฐฝ์์ ํ์ธํด์ผ ํ๋ค.
Git Bash vs PowerShell vs WSL2 ๋น๊ต
- Git Bash: bash ๋ฌธ๋ฒ(
eval,export,chmod +x)์ด ๊ทธ๋๋ก ํตํ๋ค. ๋จ, npm ์ ์ญ ๊ฒฝ๋ก๊ฐ Windows ์คํ์ผ(C:/Users/...)์ด์ด์ acpx ๊ฒฝ๋ก๋ฅผ ๊ฑฐ๊ธฐ์ ๋ง๊ฒ ์จ์ผ ํ๋ค.which acpx๋where acpx๋ก ๋จผ์ ์์น๋ฅผ ์ก๋๋ค. - PowerShell: ํ๊ฒฝ๋ณ์ ์ค์ ์ด
$env:๋ฌธ๋ฒ์ด๊ณ ,eval์ด ์๋ค. wrapper๋.ps1๋ก ๋ง๋๋ ๊ฒ ์์ฐ์ค๋ฝ๋ค. ์คํ ์ ์ฑ (ExecutionPolicy) ๋ฌธ์ ๋ก.ps1์ด ๋งํ๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋, ํ์ํ๋ฉดSet-ExecutionPolicy RemoteSigned -Scope CurrentUser๋ก ๋ฏธ๋ฆฌ ํ์ด ๋๋ค. - Cmd:
set/setx๋ก ํ๊ฒฝ๋ณ์๋ฅผ ์ฐ๊ณ , wrapper๋.cmd๋.bat๋ก ๋ง๋ ๋ค. bash ๋ฌธ๋ฒ์ ์ ํ ํตํ์ง ์๋๋ค. - WSL2: Linux ํ๊ฒฝ ๊ทธ๋๋ก๋ผ bash ๋ฌธ๋ฒ,
.shwrapper,chmod +x๋ชจ๋ ๊ทธ๋ฅ ๋๋ค. Windows ๋ค์ดํฐ๋ธ ํ์ผ์ ์ ๊ทผํ ๋/mnt/c/...๊ฒฝ๋ก๋ฅผ ์จ์ผ ํ๋ ์ ๋ง ์ฃผ์ํ๋ค.
์ด ๊ตฌ์กฐ๋ฅผ ๋จผ์ ์ดํดํ๋ฉด ๋ ํท๊ฐ๋ฆฐ๋ค
CCR์ Claude Code ์์ ๋์ด๋ ์์ ๋ผ์ฐํฐ๋ค. Claude Code๋ ์๋ Anthropic ์ชฝ์ผ๋ก ๋ฐ๋ก ๊ฐ๋ ค๋ CLI์ธ๋ฐ, CCR์ ์ผ๊ณ local endpoint๋ฅผ ์ฃผ์
ํ๋ฉด ๋จผ์ ๋ก์ปฌ 127.0.0.1:3456์ผ๋ก ๋ค์ด๊ฐ๋ค. ๊ทธ๋ค์ CCR์ด ์ค์ provider(OpenRouter, DeepSeek, Gemini, Ollama, GLM ๋ฑ)๋ก ๋ค์ ๋ณด๋ด ์ค๋ค.
์ฆ ์ญํ ์ ์ด๋ ๊ฒ ๋๋๋ค.
- Claude Code: ์ค์ ์ฝ๋ฉ ์์ด์ ํธ CLI
- CCR: ์ด๋ค ๋ชจ๋ธ/์ ๊ณต์๋ก ๋ณด๋ผ์ง ๊ณ ๋ฅด๋ ๋ผ์ฐํฐ
- OpenClaw: ์ฑ๋, ์ธ์ , ACP ํ๋์ค ์คํ์ ๊ด๋ฆฌํ๋ ์์ ์ค์ผ์คํธ๋ ์ดํฐ
- Hook: Claude Code ํด ์คํ ์ ํ๋ฅผ ๊ฐ์ํ๊ฑฐ๋ ์ฐจ๋จํ๋ ์ ํํ ๋ณด์ ๋ ์ด์ด
์ด ์์๋ฅผ ๋์น๋ฉด hook์ ์ ๋ฌ์๋, ์ ์ ์์ฒญ์ CCR์ ์ ํ๊ณ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ก ๋น ์ง ์ ์๋ค.
1) ์ฌ์ ์ค๋น: Node / npm๋ถํฐ ํ์ธํ๋ค
์ด ๊ฒฝ๋ก๋ openclaw, ccr, claude, acpx๊ฐ ๋ค CLI ๊ธฐ๋ฐ์ผ๋ก ์ฐ๊ฒฐ๋๋ฏ๋ก ๋จผ์ ๋ฐํ์๋ถํฐ ๋ง์ถฐ์ผ ํ๋ค.
Linux/macOS/Git Bash/WSL2:
node -v
npm -vPowerShell/Cmd์์๋ ๋์ผํ๊ฒ ์ ๋ ฅํ๋ฉด ๋๋ค. ์ค๋ฌด ๊ธฐ์ค์ผ๋ก๋ Node 20+ ๋ฅผ ๋จผ์ ๋ง์ถฐ ๋๋ ํธ์ด ์์ ํ๋ค.
2) ํ์ ์ค์น
์ด๋ฒ ํ๋ฆ์์๋ ์๋ 3๊ฐ๊ฐ ํ ์ธํธ๋ค.
npm i -g openclaw @musistudio/claude-code-router @anthropic-ai/claude-codePowerShell/Cmd์์๋ ๋์ผํ๊ฒ ์ด๋ค. ๋จ, Windows์์ npm ์ ์ญ ์ค์น ์ ๊ถํ ์ค๋ฅ๊ฐ ๋๋ฉด ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ํฐ๋ฏธ๋์ ์ด์ด์ ์คํํ๊ฑฐ๋, npm config get prefix๋ก ์ค์น ๊ฒฝ๋ก๋ฅผ ํ์ธํ ๋ค ํด๋น ๊ฒฝ๋ก๊ฐ PATH์ ์กํ ์๋์ง ๋ณธ๋ค.
์ค์น ํ์ธ:
openclaw --version
ccr --help
claude --version์ฌ๊ธฐ์ ํ๋๋ผ๋ ์ ์กํ๋ฉด ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ์ง ์๋ ํธ์ด ๋ซ๋ค.
Windows์์ ๋ช ๋ น์ด ์ ์กํ ๊ฒฝ์ฐ ์ฒดํฌํฌ์ธํธ:
npm config get prefix๋ก ์ ์ญ ์ค์น ๊ฒฝ๋ก๋ฅผ ํ์ธํ๋ค. ๋ณดํตC:\Users\<user>\AppData\Roaming\npm์ด๋ค.- ์ด ๊ฒฝ๋ก๊ฐ ์์คํ
PATH์ ์๋์ง ํ์ธํ๋ค (PowerShell:$env:PATH -split ';'). - ์์ผ๋ฉด ์ง์ ์ถ๊ฐํ๊ฑฐ๋, ํด๋น ๊ฒฝ๋ก๋ฅผ ํํจ์ค๋ก ์จ์ ์คํํ๋ค.
์ฐธ๊ณ : Claude ๊ณต์ ๋ฌธ์๋ native install๋ ๊ถ์ฅํ์ง๋ง, ์ด๋ฒ OpenClaw + ACPX + CCR + GLM ๋ผ์ฐํ ํ๋ฆ์ npm ์ ์ญ ์ค์น ๊ธฐ์ค์ผ๋ก ๋ง์ถฐ ๋๋ฉด wrapper/acpx ๊ฒฝ๋ก๋ฅผ ์ค๋ช ํ๊ธฐ๊ฐ ๋ ๋จ์ํ๋ค. ์ค์ํ ๊ฑด ์ค์น ๋ฐฉ์ ํ๋๋ฅผ ์ ํ๋ฉด ๋๊น์ง ์ผ๊ด๋๊ฒ ๊ฐ๋ ๊ฒ์ด๋ค.
3) config.json์์ GLM provider endpoint๋ฅผ ์ค์ ํ๋ค
CCR์ ํต์ฌ ํ์ผ์ ๋ณดํต ์๋ ๊ฒฝ๋ก๋ค.
Linux/macOS/WSL2:
~/.claude-code-router/config.jsonWindows ๋ค์ดํฐ๋ธ:
C:\Users\<user>\.claude-code-router\config.json์ด๋ฒ ๊ธ์ ๊ธฐ์ค ์๋๋ฆฌ์ค๋ CCR์ด GLM API๋ก ๋ผ์ฐํ ํ๋ ๊ตฌ์กฐ๋ค. ์๋์ฒ๋ผ ํต์ฌ๋ง ๋๊ณ ์์ํ๋ ํธ์ด ์ข๋ค.
{
"Providers": [
{
"name": "zhipu",
"api_base_url": "https://api.z.ai/api/coding/paas/v4/chat/completions",
"api_key": "YOUR_ZHIPU_API_KEY",
"models": ["glm-4-plus", "glm-4-air", "glm-4-flash", "glm-5"]
}
],
"Router": {
"default": "zhipu,glm-5",
"background": "zhipu,glm-4-flash",
"think": "zhipu,glm-5"
}
}ํฌ์ธํธ๋ ๋ ๊ฐ์ง๋ค.
- ๊ธ๋ก๋ฒ ๊ธฐ์ค์ผ๋ก๋
api.z.aiendpoint๋ฅผ ์ด๋ค. - API ํค๋ ์ ๋ ๊ณต์ ํ๊ฑฐ๋ ์ปค๋ฐํ์ง ์๋๋ค.
GLM-5 ํ๋ ์ ์ฝ ์ฌํญ
GLM-5 ๋ชจ๋ธ์ **Z.AI์ ์ ๋ฃ ํ๋(Max ์ด์)**์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค. config.json์ "glm-5"๋ฅผ ๋ฃ์ด๋ ํ๋์ด ๋ง์ง ์์ผ๋ฉด API ์ค๋ฅ๊ฐ ๋ฐํ๋๋ค. ๋ฌด๋ฃ/๊ธฐ๋ณธ ํ๋์์๋ glm-4-flash ๋๋ glm-4-air๋ถํฐ ํ
์คํธํด์ ์ฐ๊ฒฐ๋ถํฐ ํ์ธํ๋ ๊ฒ ๋ซ๋ค. CCR settings.json์์ Router.default๋ฅผ ํ๋์ ๋ง๋ ๋ชจ๋ธ๋ก ๋จผ์ ์ค์ ํด ๋๊ณ , ํ๋์ ์ฌ๋ฆฐ ๋ค glm-5๋ก ๋ฐ๊พธ๋ ๋ฐฉ์์ ๊ถ์ฅํ๋ค.
์ฌ๊ธฐ์ ๊ผญ ๊ตฌ๋ถํด์ผ ํ ๊ฒ ์ธ ๊ฐ์ง๋ค.
api_base_url
์ด๊ฑด CCR์ด ๋ฐ๊นฅ์ผ๋ก ์์ฒญ์ ๋ณด๋ผ ์ค์ provider endpoint๋ค.
์ด๋ฒ GLM ๋ผ์ฐํ ์๋๋ฆฌ์ค์์๋ ๋ณดํต ์๋์ฒ๋ผ ์ดํดํ๋ฉด ๋๋ค.
- Z.ai / GLM โ
https://api.z.ai/api/coding/paas/v4/chat/completions - OpenRouter โ
https://openrouter.ai/api/v1/chat/completions - DeepSeek โ
https://api.deepseek.com/chat/completions - Ollama โ
http://localhost:11434/v1/chat/completions
์ฆ, ์ด ๊ฐ์ ๋ก์ปฌ CCR ์ฃผ์๊ฐ ์๋๋ค. provider ์ฃผ์๋ค.
transformer
provider๋ง๋ค ์์ฒญ/์๋ต ํํ๊ฐ ๋ฌ๋ผ์, CCR์ transformer๋ก ํฌ๋งท์ ๋ง์ถ๋ค. OpenRouter๋ฉด openrouter, DeepSeek๋ฉด deepseek, Gemini๋ฉด gemini ๊ฐ์ ์์ด๋ค.
Router
์ฌ๊ธฐ์ ๊ธฐ๋ณธ ๋ชจ๋ธ๊ณผ ์ํฉ๋ณ ๋ผ์ฐํ ๊ท์น์ ์ ํ๋ค.
default: ์ผ๋ฐ ์์think: ๋ ์๊ฐ ๋ง์ด ์ฐ๋ ์์longContext: ๊ธด ๋ฌธ๋งฅ ์์webSearch: ๊ฒ์ํ ์์
์ฒ์์๋ default ํ๋๋ง ์ ๋๋์ง ํ์ธํ๊ณ , ๊ทธ๋ค์์ think๋ longContext๋ฅผ ์น๋ ๊ฒ ์์ ํ๋ค.
4) local endpoint๋ฅผ Claude์ ์ฃผ์ ํด์ผ ๋น๋ก์ CCR์ ํ๋ค
์ฌ๊ธฐ๊ฐ ์ค์ ์์ ๊ฐ์ฅ ๋ง์ด ๋น ์ง๋ ๋ถ๋ถ์ด๋ค.
CCR ์ค์ ํ์ผ๋ง ๋ง๋ค์๋ค๊ณ Claude๊ฐ ์๋์ผ๋ก CCR์ ํ๋ ๊ฑด ์๋๋ค. Claude CLI๊ฐ Anthropic ๊ธฐ๋ณธ ๊ฒฝ๋ก ๋์ ๋ก์ปฌ CCR endpoint๋ฅผ ๋ณด๊ฒ ๋ง๋ค์ด์ผ ํ๋ค.
๋จผ์ ๋ผ์ฐํฐ๋ฅผ ์ผ ๋ค (๋ชจ๋ ํ๊ฒฝ ๊ณตํต).
ccr start
ccr status์ฌ๊ธฐ์ Status: Running์ด ๋ณด์ฌ์ผ ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ ๊ฒ ์์ ํ๋ค.
Linux/macOS/WSL2/Git Bash
eval "$(ccr activate)"
env | grep '^ANTHROPIC_'Windows PowerShell
eval ๋ฌธ๋ฒ์ด ์์ผ๋ฏ๋ก ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ ์ค์ ํ๋ค.
$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:3456"
$env:ANTHROPIC_AUTH_TOKEN = "ccr-local-token"
$env:NO_PROXY = "127.0.0.1"
# ํ์ธ
Get-ChildItem Env: | Where-Object { $_.Name -like "ANTHROPIC_*" }๋๋ ccr activate๊ฐ ์ด๋ค ์ถ๋ ฅ์ ๋ด๋์ง ๋จผ์ ํ์ธํด์ ๋ง๋ ํํ๋ก ๋ณํํ๋ค.
ccr activateWindows Cmd
set ANTHROPIC_BASE_URL=http://127.0.0.1:3456
set ANTHROPIC_AUTH_TOKEN=ccr-local-token
set NO_PROXY=127.0.0.1
rem ํ์ธ
set ANTHROPIC๊ณตํต
์ฃผ์ ์ด ์ ๋๋ค๋ฉด Claude Code๋ฅผ ๋ฐ๋ก ์คํํ๊ฑฐ๋:
claude๋๋ ์๋์ฒ๋ผ CCR์ ํตํ ์ง์ ์คํ๋ ๋๋ค.
ccr code์ด๊ฑด CCR์ ํตํ๋ Claude Code ์คํ ๊ฒฝ๋ก๋ผ, ํฐ๋ฏธ๋ ๋จ๋ ์ฌ์ฉ์ด๋ผ๋ฉด ๊ฐ์ฅ ๋ ํท๊ฐ๋ฆฐ๋ค.
5) OpenClaw์์๋ acpx๋ฅผ CCR wrapper๋ก ๊ฐ์ธ๋ ๊ฒ ํต์ฌ์ด๋ค
OpenClaw๋ ACP ์ธ์
์ผ๋ก Claude Code ๊ฐ์ ์ธ๋ถ ํ๋์ค๋ฅผ ์คํํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์ค์ํ ๊ฑด OpenClaw๊ฐ CCR์ ์ง์ ๋ถ๋ ๊ฒ ์๋๋ผ, OpenClaw๊ฐ ๋์ฐ๋ acpx ํ๋ก์ธ์ค๊ฐ CCR์ด ํ์ฑํ๋ ์
ธ ํ๊ฒฝ์์ ์คํ๋๋๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
์ฆ ์๋ ๋ ๊ฒฝ์ฐ๋ ์์ ํ ๋ค๋ฅด๋ค.
acpx๋ฅผ ๊ทธ๋ฅ ์คํ โ Claude๊ฐ CCR์ ์ฐํํ ์ ์์- CCR ํ๊ฒฝ๋ณ์๋ฅผ ๋จผ์ ์ฃผ์
ํ wrapper๋ฅผ ํตํด
acpx์คํ โ Claude๊ฐ CCR ๊ฒฝ์
OpenClaw ์ชฝ ์ค์ ์์
๋ณดํต ~/.openclaw/openclaw.json์์ ์๋ ๊ฐ๋
์ด ์ด์ ์์ด์ผ ํ๋ค.
"acp.enabled": true"acp.backend": "acpx""plugins.entries.acpx.enabled": true"plugins.entries.acpx.config.command": "wrapper ๊ฒฝ๋ก"
์์ ๊ตฌ์กฐ:
{
"acp": {
"enabled": true,
"backend": "acpx"
},
"plugins": {
"entries": {
"acpx": {
"enabled": true,
"config": {
"command": "./acpx-ccr.sh" // Linux/macOS/WSL2
// Windows: "C:\\Users\\<user>\\.openclaw\\workspace\\acpx-ccr.cmd"
}
}
}
}
}Linux/macOS/WSL2: acpx-ccr.sh
๊ฒฝ๋ก ์์:
~/.openclaw/workspace/acpx-ccr.sh์คํฌ๋ฆฝํธ:
#!/bin/sh
if command -v ccr >/dev/null 2>&1; then
eval "$(ccr activate)"
fi
exec /path/to/acpx "$@"acpx ๊ฒฝ๋ก ํ์ธ:
which acpx
# ๋๋ npm ์ ์ญ ๊ฒฝ๋ก๋ก: $(npm root -g)/.bin/acpx์คํ ๊ถํ:
chmod +x ~/.openclaw/workspace/acpx-ccr.shWindows: acpx-ccr.cmd
Windows Cmd ๊ธฐ๋ฐ wrapper:
@echo off
set ANTHROPIC_BASE_URL=http://127.0.0.1:3456
set ANTHROPIC_AUTH_TOKEN=ccr-local-token
set NO_PROXY=127.0.0.1
rem acpx ๊ฒฝ๋ก๋ npm global prefix ํ์ธ ํ ๋ง๊ฒ ์์
"%APPDATA%\npm\acpx.cmd" %*acpx ๊ฒฝ๋ก ํ์ธ (Cmd/PowerShell):
where acpx(npm root -g) + "\..\.bin\acpx"
# ๋๋
Get-Command acpx | Select-Object -ExpandProperty SourceWindows: acpx-ccr.ps1
PowerShell ๊ธฐ๋ฐ wrapper (๋ ์ ์ฐํ๊ฒ ์ค๋ฅ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค):
# acpx-ccr.ps1
$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:3456"
$env:ANTHROPIC_AUTH_TOKEN = "ccr-local-token"
$env:NO_PROXY = "127.0.0.1"
$acpxPath = (Get-Command acpx -ErrorAction SilentlyContinue).Source
if (-not $acpxPath) {
$acpxPath = "$env:APPDATA\npm\acpx.cmd"
}
& $acpxPath @argsopenclaw.json์์ .ps1์ ๊ฐ๋ฆฌํฌ ๋๋ PowerShell๋ก ๋ช
์์ ์ผ๋ก ์คํํ๊ฒ ์ค์ ํด์ผ ํ๋ค.
"command": "powershell -ExecutionPolicy Bypass -File C:\\Users\\<user>\\.openclaw\\workspace\\acpx-ccr.ps1"wrapper์ ์ญํ ์์ฝ
- CCR ํ๊ฒฝ๋ณ์(
ANTHROPIC_BASE_URL๋ฑ)๋ฅผ ํ์ฌ ํ๋ก์ธ์ค์ ์ฃผ์ ํ๋ค. - ๊ทธ ์ํ๋ก ์ค์
acpx๋ฅผ ์คํํ๋ค. - ๊ฒฐ๊ณผ์ ์ผ๋ก OpenClaw๊ฐ ๋์ด Claude ํ๋์ค๋ CCR์ ํ๊ฒ ๋๋ค.
OpenClaw ๋ด๋ถ๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ , acpx ์คํ ์ง์ ํ ๋ฒ๋ง CCR ํ๊ฒฝ์ ์ฃผ์
ํ๋ฉด ๋๋ค๋ ์ ์์ ์ค๋ฌด์์ ๊ฐ์ฅ ๋ ํท๊ฐ๋ฆฌ๋ ๋ฐฉ์์ด๋ค.
6) endpoint ์ค์ ๊ณผ OpenClaw ์ฐ๊ฒฐ์์ ๊ฐ์ฅ ์์ฃผ ๋๋ ์ค์
์ค์ 1) api_base_url๊ณผ ANTHROPIC_BASE_URL์ ๊ฐ์ ์๋ฏธ๋ก ๋ณธ๋ค
์ด ๋์ ์์ ํ ๋ค๋ฅด๋ค.
api_base_url: CCR โ provider ๋ก ๊ฐ๋ ์ฃผ์ANTHROPIC_BASE_URL: Claude โ CCR ๋ก ๊ฐ๋ ์ฃผ์
์ด๊ฑธ ๋ค์ง์ผ๋ฉด ๋ผ์ฐํฐ๋ ์ค์น๋ผ ์๋๋ฐ ์ค์ ๋ก ์ ํ๋ค.
์ค์ 2) config.json ์์ ํ ccr restart๋ฅผ ์ ํ๋ค
README๋ ์ด ์ ์ ๋ฐ๋ก ์ ๊ณ ์๋ค. ์ค์ ์ ๋ฐ๊ฟจ์ผ๋ฉด ์ฌ์์ํด์ผ ๋ฐ์๋๋ค.
ccr restart์ค์ 3) ccr activate๋ ํ๋๋ฐ OpenClaw๊ฐ ๋ค๋ฅธ ์
ธ/๋ค๋ฅธ ์๋น์ค ํ๊ฒฝ์์ Claude๋ฅผ ๋์ด๋ค
ํฐ๋ฏธ๋์์๋ ์ ๋๋๋ฐ OpenClaw ACP ์ธ์ ์์๋ ์ ๋๋ ๋ํ ์์ธ์ด๋ค. ์ด ๊ฒฝ์ฐ๋ ๊ฑฐ์ ํญ์ OpenClaw๊ฐ ์คํํ Claude ํ๋ก์ธ์ค๊ฐ ๊ทธ ํ๊ฒฝ๋ณ์๋ฅผ ๋ชป ๋ณด๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. Windows์์๋ ํนํ ๊ฐ ํฐ๋ฏธ๋ ์ฐฝ๋ง๋ค ํ๊ฒฝ๋ณ์๊ฐ ๋ณ๋๋ก ์ ์ง๋๋ฏ๋ก, wrapper์์ ๋ช ์์ ์ผ๋ก ๋ณ์๋ฅผ ์ค์ ํ๋ ๋ฐฉ์์ด ๋ ํ์คํ๋ค.
์ค์ 4) Windows์์ .ps1 wrapper๊ฐ ์คํ ์ ์ฑ
์ค๋ฅ๋ก ๋งํ๋ค
์คํ ์ ์ฑ
์ด ์ด ์์คํ
์์ ์คํฌ๋ฆฝํธ ์คํ์ ๋ฐฉ์งํ๊ณ ์์ต๋๋ค.์ด ๊ฒฝ์ฐ:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser๋๋ openclaw.json์์ -ExecutionPolicy Bypass ํ๋๊ทธ๋ฅผ ํฌํจํ ๋ช
๋ น์ผ๋ก ํธ์ถํ๋ค.
์ค์ 5) HOST=0.0.0.0๋ง ์ด๊ณ APIKEY๋ฅผ ์ ๊ฑด๋ค
CCR README๋ APIKEY๊ฐ ์์ผ๋ฉด ๋ณด์์ host๋ฅผ ๋ก์ปฌ๋ก ๊ฐ์ ํ๋ ์ชฝ์ ์ค๋ช
ํ๋ค. ๋ก์ปฌ ๋จ๋
์ฌ์ฉ์ด๋ฉด ๊ตณ์ด ์ธ๋ถ ๊ฐ๋ฐฉ์ ์ด ์ด์ ๊ฐ ๊ฑฐ์ ์๋ค.
์ค์ 6) Windows์์ acpx ๊ฒฝ๋ก์ ๊ณต๋ฐฑ์ด ์๋ค
C:\Users\Kim Min Joon\AppData\... ๊ฐ์ ๊ฒฝ๋ก๋ .cmd wrapper์์ ๋ฐ๋์ ๋ฐ์ดํ๋ก ๊ฐ์ธ์ผ ํ๋ค.
"%APPDATA%\npm\acpx.cmd" %*์ค์ 7) provider endpoint๋ฅผ ์๋ชป ๋ฃ์ด ์๋ํ์ง ์์ ๊ณต๊ธ์๋ก ๋น ์ง๋ค
GLM ๊ธ๋ก๋ฒ ๊ธฐ์ค์ด๋ผ๋ฉด api.z.ai๋ฅผ ์ฐ๊ณ ์๋์ง๋ถํฐ ๋จผ์ ํ์ธํ๋ ๊ฒ ๋น ๋ฅด๋ค.
7) OpenClaw ์ํ ํ์ธ + ์ค๋ชจํฌ ํ ์คํธ๊น์ง ํ ๋ฒ์ ๋ณธ๋ค
์ค์น๊ฐ ๋๋ฌ์ผ๋ฉด ์๋ ์์๋ก ์ ๊ฒํ๋ ํธ์ด ์ ์ผ ์์ ํ๋ค.
์ ๊ฒ 1) Claude ์ค์น ํ์ธ
Linux/macOS/WSL2/Git Bash:
claude --version
which claudeWindows PowerShell:
claude --version
Get-Command claude | Select-Object -ExpandProperty Source์ ๊ฒ 2) CCR ์ค์น์ ์ํ ํ์ธ
ccr --help
ccr statusํ์ํ๋ฉด ๋จผ์ :
ccr start์ ๊ฒ 3) OpenClaw ์ํ ํ์ธ
openclaw status์ฌ๊ธฐ์๋ ์ต์ํ OpenClaw๊ฐ ์ด์ ์๊ณ , ACP ๊ด๋ จ ํ๋ฌ๊ทธ์ธ/๋ฐํ์์ด ์ด์ ์์ด ๋จ๋์ง ๋ณธ๋ค.
์ ๊ฒ 4) local endpoint ์ฃผ์ ํ์ธ
Linux/macOS/WSL2/Git Bash:
eval "$(ccr activate)"
env | grep '^ANTHROPIC_'Windows PowerShell:
$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:3456"
Get-ChildItem Env: | Where-Object { $_.Name -like "ANTHROPIC_*" }์ ๊ฒ 5) wrapper ์คํฌ๋ฆฝํธ ๋จ๋ ์คํ ํ์ธ
OpenClaw๋ฅผ ํตํ๊ธฐ ์ ์ wrapper ์์ฒด๊ฐ ์ ๋๋ก ๋์ํ๋์ง ๋ณด๋ ์ค๋ชจํฌ ํ ์คํธ๋ค.
Linux/macOS/WSL2:
cd ~/.openclaw/workspace
./acpx-ccr.sh claude exec "Respond exactly with PONG"Windows PowerShell:
cd C:\Users\<user>\.openclaw\workspace
powershell -ExecutionPolicy Bypass -File acpx-ccr.ps1 claude exec "Respond exactly with PONG"Windows Cmd:
cd C:\Users\<user>\.openclaw\workspace
acpx-ccr.cmd claude exec "Respond exactly with PONG"์ ์์ด๋ผ๋ฉด ์๋ต์ด ์๋์ฒ๋ผ ๋จ์ด์ ธ์ผ ํ๋ค.
PONG์ด ํ ์คํธ๊ฐ ์ค์ํ ์ด์ ๋ ๋จ์ํ๋ค. OpenClaw ์ ์ฒด๋ฅผ ์์ฌํ๊ธฐ ์ ์, wrapper + CCR + acpx + Claude ์ฐ๊ฒฐ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋จผ์ ๋๋์ง ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๊ฒ 6) ๋ก๊ทธ ํ์ธ
Linux/macOS/WSL2:
tail -f ~/.claude-code-router/claude-code-router.logWindows PowerShell:
Get-Content "$env:USERPROFILE\.claude-code-router\claude-code-router.log" -Wait -Tail 508) ์์ฃผ ์๊ธฐ๋ ๋ฌธ์
๋ฌธ์ 1) CCR Not Running
- ์ฆ์: wrapper๋ ์คํ๋๋๋ฐ ์ค์ ๋ผ์ฐํ ์ด ์ ๋๋ค.
- ์กฐ์น:
ccr startํ ์ฌ์๋ํ๋ค.
๋ฌธ์ 2) ์ค๊ตญ endpoint๋ก ๊ฐ๋ค
- ์ฆ์: ๋ด๊ฐ ๊ธฐ๋ํ ๊ธ๋ก๋ฒ GLM ๊ฒฝ๋ก๊ฐ ์๋๋ผ ๋ค๋ฅธ endpoint๋ก ๋น ์ง๋ค.
- ์กฐ์น:
~/.claude-code-router/config.json์api_base_url์ ๋ค์ ํ์ธํ๋ค. ๊ธ๋ก๋ฒ ๊ธฐ์ค์ด๋ฉดapi.z.ai์ฌ์ผ ํ๋ค.
๋ฌธ์ 3) ๊ถํ/์ฐ๊ธฐ ๊ฑฐ๋ถ๊ฐ ๋๋ค
- ์ฆ์: Claude ๋๋
acpx์คํ์ ๋๋๋ฐ ์์ ์น์ธ์ด ๋งํ๋ค. - ์กฐ์น:
acpx์คํ ์ ์ฑ ์ด๋ ์น์ธ ์ต์ ์ ๋ค์ ํ์ธํ๋ค. ํ๊ฒฝ์ ๋ฐ๋ผ ์น์ธ ์ ์ฑ (--approve-all๋ฑ)์ ์ด๋ป๊ฒ ๋์ง ๊ฐ์ด ๋ด์ผ ํ๋ค.
๋ฌธ์ 4) ์ค์ ์ ๋ฐ๊ฟจ๋๋ฐ ๋ฐ์์ด ์ ๋๋ค
- ์ฆ์:
config.json์ ๋ฐ๊ฟจ๋๋ฐ ๊ณ์ ์ด์ ๋ชจ๋ธ/endpoint๋ฅผ ์ด๋ค. - ์กฐ์น: ์๋์ฒ๋ผ ์ฌ์์ํ๋ค.
ccr restartํ์ํ๋ฉด ๋ ํ์คํ๊ฒ:
ccr stop && ccr start๋ฌธ์ 5) Windows์์ npm ์ ์ญ ๋ช ๋ น์ด ์ ์กํ๋ค
- ์ฆ์:
ccr๋claude๋ฅผ ์ณ๋ โ๋ช ๋ น์ ์ฐพ์ ์ ์์โ ์ค๋ฅ๊ฐ ๋๋ค. - ์กฐ์น:
npm config get prefix๋ก ๊ฒฝ๋ก ํ์ธ ํ ํด๋น ๊ฒฝ๋ก๋ฅผPATH์ ์ถ๊ฐํ๋ค.
$npmPrefix = npm config get prefix
$env:PATH += ";$npmPrefix"ํ์ฅ ๋ฏธ๋ ์ฌ๋ก 2๊ฐ
์ฌ๋ก A) CCR์ ์ค์นํ๋๋ฐ ์์ฒญ์ด ๊ณ์ ๊ธฐ๋ณธ Claude์ฒ๋ผ ๋ณด์ด๋ ๊ฒฝ์ฐ
- ์ํฉ:
config.json์ ์ ์จ ๋จ๋๋ฐ ๋ชจ๋ธ ๋ผ์ฐํ ์ด ์ ๋ฐ๋์๋ค. - ์์ธ:
ccr activate๋ฅผ ํ์ง ์์๊ฑฐ๋, ํ ์ ธ์์๋ ํ๋๋ฐ ์ค์ ์คํ์ ๋ค๋ฅธ ์ ธ/์๋น์ค์์ ์ด๋ค์ก๋ค. - ํด๊ฒฐ:
env | grep '^ANTHROPIC_'(๋๋ PowerShell์์Get-ChildItem Env: | Where-Object { $_.Name -like "ANTHROPIC_*" })๋ก ํ์ฌ ์คํ ํ๊ฒฝ์ ๋จผ์ ํ์ธํ๊ณ , OpenClaw ์ชฝ์ wrapper ๊ฒฝ๋ก๋ก ํต์ผํ๋ค.
ํต์ฌ์ โCCR ์ค์น ์ฌ๋ถโ๋ณด๋ค Claude ํ๋ก์ธ์ค๊ฐ ์ด๋ค endpoint๋ฅผ ๋ณด๊ณ ์คํ๋๋๋์๋ค.
์ฌ๋ก B) hook์ ๋จผ์ ๋ฌ์๋ค๊ฐ ์์ธ ์ถ์ ์ด ๋ ์ด๋ ค์์ง ๊ฒฝ์ฐ
- ์ํฉ: ํด ์ฐจ๋จ์ ๋ณด์ด๋๋ฐ, ์ ์ด์ ์์ฒญ์ด CCR์ ํ๋์ง๋ถํฐ ๋ถ๋ช ํํ๋ค.
- ์์ธ: ๋ผ์ฐํ ๊ตฌ์กฐ๊ฐ ๋จผ์ ์์ ํ๋์ง ์์ ์ํ์์ hook๋ถํฐ ๋ถ์๋ค.
- ํด๊ฒฐ: hook์ ์ ์ ๋นผ๊ณ
claude โ CCR local endpoint โ provider endpointํ๋ฆ์ด ๋จผ์ ์ ์์ธ์ง ํ์ธํ๋ค.
๋ณด์/๊ฐ์๋ ๋ง์ง๋ง 10%๊ณ , ์ฐ๊ฒฐ ๊ตฌ์กฐ๋ ์ฒ์ 90%๋ค.
9) hook์ ๋ง์ง๋ง์ ๋ถ์ธ๋ค
์ฌ๊ธฐ๊น์ง๊ฐ ์์ ํ๋ ๋ค์๋ง Claude Hook์ ๋ถ์ด๋ ๊ฒ ์ข๋ค. ์ด์ ๋ ๋จ์ํ๋ค. hook์ ์คํ ๊ฐ์/์ฐจ๋จ ๋ ์ด์ด์ด์ง, ๋ผ์ฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋๊ตฌ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ฒ์ ๋ถ์ผ ์ด๋ฒคํธ๋ ์ด 4๊ฐ๋ฉด ์ถฉ๋ถํ๋ค.
PreToolUsePostToolUsePostToolUseFailureUserPromptSubmit
๊ถ์ฅ ์์๋ ์ด๋ ๋ค.
- Bash๋ง ๋์์ผ๋ก ๊ฐ์-only ์์
- JSONL ๋ก๊ทธ๊ฐ ์์ด๋์ง ํ์ธ
- ์ ์ ๋ช ๋ น ์คํ์ด ์๋์ง ํ์ธ
- ๊ทธ ๋ค์๋ง ์ํ ๋ช ๋ น ์ฐจ๋จ์ ์ถ๊ฐ
์ต์ ์ค์ ์ ๋๋์ ์๋ ์ ๋๋ก ์ดํดํ๋ฉด ๋๋ค.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python3 ~/.openclaw/workspace/claude-hooks/pre_tool_use.py"
}
]
}
],
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python3 ~/.openclaw/workspace/claude-hooks/post_tool_use.py"
}
]
}
]
}
}Windows์์ hook ๋ช ๋ น ๊ฒฝ๋ก๋ Windows ์คํ์ผ ์ ๋ ๊ฒฝ๋ก๋ก ์จ์ผ ํ๋ค.
"command": "python C:\\Users\\<user>\\.openclaw\\workspace\\claude-hooks\\pre_tool_use.py"๊ถ์ฅ ๊ฒฝ๋ก 2๊ฐ์ง
A. ์ ์ผ ์ฌ์: Windows์์ Claude Code + GLM-5 ์ง๊ฒฐ
CCR ์์ด Claude Code์์ ์ง์ GLM endpoint๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ๋ง๋๋ ๊ฒฝ์ฐ๋ค. OpenClaw ์ฐ๋์ด ์์ง ํ์ ์๊ณ , GLM-5๋ก ์ฝ๋ฉ๋ง ๋จผ์ ์จ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ด ๊ฒฝ๋ก๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๋ค.
Z.AI ๊ณต์ ๋ฌธ์ ๊ธฐ์ค์ผ๋ก๋ Claude Code ์ง๊ฒฐ ๊ฒฝ๋ก์์ ์๋ ๋ ๊ฐ์ ๋จผ์ ๋ง์ถ๋ค.
# ์ค์น
npm i -g @anthropic-ai/claude-code
# ํ๊ฒฝ๋ณ์ ์ค์ (PowerShell)
$env:ANTHROPIC_AUTH_TOKEN = "YOUR_ZHIPU_API_KEY"
$env:ANTHROPIC_BASE_URL = "https://api.z.ai/api/anthropic"
$env:API_TIMEOUT_MS = "3000000"
# ์คํ
claudeGLM-5๋ฅผ ์ฐ๋ ค๋ฉด ์ฌ๊ธฐ์ ๋ํด Claude Code ์ชฝ ๋ชจ๋ธ ๋งคํ์ ๋ช ์ํด ๋๋ ํธ์ด ์์ ํ๋ค.
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "YOUR_ZHIPU_API_KEY",
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
"API_TIMEOUT_MS": "3000000",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-5",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-5"
}
}GLM-5๋ฅผ ์ฐ๋ ค๋ฉด Z.AI Max ์ด์ ํ๋์ด ํ์ํ๋ค. ์์ผ๋ฉด glm-4.7์ด๋ glm-4.5-air๋ก ๋จผ์ ์ฐ๊ฒฐ๋ถํฐ ํ์ธํ๋ ํธ์ด ๋ซ๋ค.
B. OpenClaw๊น์ง ์ฎ์: WSL2 ๋๋ Windows wrapper ๊ธฐ๋ฐ CCR ๊ฒฝ์
์ ์ฒด ํ๋ฆ OpenClaw โ acpx โ CCR โ GLM์ ํ PC์์ ๋ถ์ด๋ ๊ฒฝ์ฐ๋ค.
- WSL2 ๊ถ์ฅ: bash ๋ฌธ๋ฒ๊ณผ
.shwrapper๋ฅผ ๊ทธ๋๋ก ์ธ ์ ์์ด ๊ฐ์ฅ ๋ ๊ผฌ์ธ๋ค. Windows ํ์ผ ์ ๊ทผ์ด ํ์ํ ๋๋ง/mnt/c/...๊ฒฝ๋ก๋ฅผ ์ด๋ค. - Windows ๋ค์ดํฐ๋ธ: CCR
ccr activate๋์ ํ๊ฒฝ๋ณ์ ์ง์ ์ค์ +.cmd/.ps1wrapper ๋ฐฉ์์ผ๋ก ๋์ผํ ํจ๊ณผ๋ฅผ ๋ธ๋ค. ๊ฒฝ๋ก์ ๊ณต๋ฐฑ์ด ์์ผ๋ฉด ๋ฐ์ดํ๋ฅผ ๊ผญ ์ฑ๊ธด๋ค. PowerShell ์คํ ์ ์ฑ ๋ ๋ฏธ๋ฆฌ ํ์ธํ๋ค.
ํ ์ค ๊ฒฐ๋ก
OpenClaw + CCR์์ ์ ์ผ ๋จผ์ ๋ณผ ๊ฒ์ hook์ด ์๋๋ผ Claude CLI ์ค์น, CCR ์ค์น, provider endpoint ์ค์ , ๊ทธ๋ฆฌ๊ณ CCR ํ๊ฒฝ๋ณ์๊ฐ ์ค์ Claude ํ๋์ค์ ๋ฐ์๋๋์ง๋ค. Windows์์๋ ์ด ํ๋ฆ์ ๊ทธ๋๋ก์ด๊ณ , ๋ฌ๋ผ์ง๋ ๊ฑด ์ ธ ํ์ฑํ ๋ฌธ๋ฒ๊ณผ wrapper ํ์ฅ์๋ฟ์ด๋ค.
๋ค์ ์ฝ๊ธฐ
- ๐ฆ 12. ๋ธ๋ผ์ฐ์ ๋ฆด๋ ์ด ์ฐ๋ ๊ตฌ์กฐ
- ๐ฆ 13. Subagents ์ค๊ณ์ ํ๋กฌํํธ
- ๐ฆ 28. ๋์ผ ๋ฆด๋ ์ด ์ด์ ๊ฐ์ด๋
- ๐ฆ 34. ์ธ์ ํด๋ก ๋ธ๋ก๊ทธ ๊ฒ์ ์๋ํ
- 49. Claude Code Best Practice ์ด์ ๊ฐ์ด๋
- 72. Claude Skills V2
โป ์ด ๋ฌธ์๋ ์์ฑํ AI๋ฅผ ํ์ฉํด ์์ฑ๋์์ต๋๋ค.