6.3 KiB
6.3 KiB
phase, name, wave, depends_on, files_modified, autonomous, requirements
| phase | name | wave | depends_on | files_modified | autonomous | requirements | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 03 | CLI Build & Provider Connection | 1 |
|
true |
|
Phase 03: CLI Build & Provider Connection — PLAN
OpenClaude CLI를 Machine B에서 빌드하고, Variet Engine(Machine A:8000)에 OpenAI-compatible 프로바이더로 연결하여, 기본적인 프롬프트-응답 루프가 동작하는 것을 확인한다.<read_first>
- openclaude/package.json
- openclaude/README.md (Source Build section) </read_first>
-
의존성 설치:
cd openclaude bun install -
CLI 빌드:
bun run build -
빌드 결과물 확인:
node dist/cli.mjs --version버전(0.1.8)이 출력되어야 한다.
-
smoke 테스트:
bun run smoke
<acceptance_criteria>
- openclaude/node_modules/ 디렉토리가 존재한다
- openclaude/dist/cli.mjs 파일이 존재한다
node openclaude/dist/cli.mjs --version실행 시 버전 번호가 출력된다 (exit code 0)bun run smokeexit code 0 </acceptance_criteria>
<read_first>
- openclaude/.env.example (Option 5: Ollama/LM Studio pattern — same as llama-server)
- config/engine_models.json (현재 모델 목록)
- openclaude/README.md (Fastest OpenAI setup section) </read_first>
-
openclaude/.env 파일 생성 (Option 2: OpenAI 패턴 사용):
CLAUDE_CODE_USE_OPENAI=1 OPENAI_BASE_URL=http://<MACHINE_A_IP>:8000/v1 OPENAI_API_KEY=variet-local OPENAI_MODEL=gemma-4-26b주의:
- OPENAI_API_KEY는 llama-server가 키 검증을 안 하므로 아무 값이나 가능
- OPENAI_MODEL은 llama-server가 자동으로 로드된 모델 이름을 사용
-
openclaude/.env가 .gitignore에 포함되어 있는지 확인:
grep "\.env" openclaude/.gitignore
<acceptance_criteria>
- openclaude/.env 파일이 존재한다
- openclaude/.env에
CLAUDE_CODE_USE_OPENAI=1이 포함되어 있다 - openclaude/.env에
OPENAI_BASE_URL=http://로 시작하는 URL이 포함되어 있다 - openclaude/.env에
OPENAI_API_KEY=가 포함되어 있다 - .env 파일이 .gitignore에 의해 추적되지 않는다 </acceptance_criteria>
<read_first>
- start_variet_engine.bat (Machine A용 런처 패턴 참고)
- openclaude/.env </read_first>
REM Set provider for Variet Engine set CLAUDE_CODE_USE_OPENAI=1 set OPENAI_BASE_URL=http://<MACHINE_A_IP>:8000/v1 set OPENAI_API_KEY=variet-local set OPENAI_MODEL=gemma-4-26b
REM Launch OpenClaude cd /d "%~dp0..\openclaude" node dist/cli.mjs %*
2. scripts/start_openclaude.ps1 생성 (PowerShell 버전):
```powershell
$env:CLAUDE_CODE_USE_OPENAI = "1"
$env:OPENAI_BASE_URL = "http://<MACHINE_A_IP>:8000/v1"
$env:OPENAI_API_KEY = "variet-local"
$env:OPENAI_MODEL = "gemma-4-26b"
Push-Location "$PSScriptRoot\..\openclaude"
node dist/cli.mjs @args
Pop-Location
<acceptance_criteria>
- scripts/start_openclaude.bat 파일이 존재한다
- scripts/start_openclaude.ps1 파일이 존재한다
- .bat 파일에
OPENAI_BASE_URL설정이 포함되어 있다 - .ps1 파일에
OPENAI_BASE_URL설정이 포함되어 있다 </acceptance_criteria>
<read_first>
- openclaude/.env
- engine/variet_engine.py (health endpoint) </read_first>
-
Machine B에서 OpenClaude 실행:
cd openclaude node dist/cli.mjs -
프롬프트가 표시되면 간단한 테스트:
> What is 2+2? Answer in one word.LLM 응답이 스트리밍으로 표시되어야 한다.
-
연결 실패 시 디버깅:
- Variet Engine 상태 확인:
curl http://<MACHINE_A_IP>:8000/engine/status - 방화벽 확인: Machine A에서 8000 포트 오픈 여부
- OPENAI_BASE_URL 경로 확인 (/v1 포함)
- Variet Engine 상태 확인:
<acceptance_criteria>
curl http://<MACHINE_A_IP>:8000/engine/health가"state": "ready"응답을 반환한다- OpenClaude CLI가 실행되고 프롬프트가 표시된다
- 프롬프트에 텍스트를 입력하면 LLM 응답이 스트리밍으로 출력된다
- 응답 완료 후 다음 프롬프트가 다시 표시된다 (루프 동작) </acceptance_criteria>
Phase 03의 목표는 "OpenClaude CLI가 Variet Engine에 연결되어 기본 대화가 가능한 상태"이다.
- 빌드 성공:
openclaude/dist/cli.mjs가 존재하고 실행 가능 - 프로바이더 연결:
.env에 Variet Engine URL이 설정되고 연결 성공 - 프로필 저장: 런처 스크립트로 재현 가능한 설정 보관
- 기본 대화: 프롬프트 → 응답 → 다음 프롬프트 루프 동작
Final Verification Commands
# 1. Build exists
test -f openclaude/dist/cli.mjs && echo "PASS: build exists"
# 2. Env configured
grep "OPENAI_BASE_URL" openclaude/.env && echo "PASS: provider configured"
# 3. Launcher scripts exist
test -f scripts/start_openclaude.bat && echo "PASS: bat launcher"
test -f scripts/start_openclaude.ps1 && echo "PASS: ps1 launcher"
# 4. Engine reachable (requires Machine A running)
curl -s http://<MACHINE_A_IP>:8000/engine/health | grep "ready" && echo "PASS: engine reachable"