# 2026-03-27

## OpenClaw 프로젝트 아키텍처 분석 (tmp/openclaw-src)

### TL;DR

이 repo는 OpenClaw 자체 (`github.com/openclaw/openclaw`)이며, "OpenCode"라는 별도 프로젝트는 없음.
ACPX는 ACP(Agent Client Protocol) 브릿지 플러그인.

---

## 1. 프로젝트란?

**OpenClaw** — 개인 AI 어시스턴트 플랫폼. 멀티채널(WhatsApp/Telegram/Discord 등) + 임베디드 AI 에이전트 런타임 + ACP 프로토콜 브릿지를 하나의 게이트웨이(WS 포트 18789)에 통합.

핵심 구성:
- **Gateway** (`src/infra/`): WS 控制-plane. 세션 관리, 라우팅, 도구 실행, 채널 연결
- **Pi Agent** (`src/agents/pi-embedded-runner/`): 내장 에이전트 런타임. OpenAI 호환 API로 모델 호출. 실제 Labor 수행.
- **ACP Bridge** (`openclaw acp`): IDE 연동을 위한 ACP 프로토콜 CLI 브릿지 (stdio/NDJSON)
- **ACPX Plugin** (`extensions/acpx/`): 외부 ACP 에이전트(Codex, Claude Code, Gemini 등)를 `sessions_spawn(runtime="acp")`로 스폰하기 위한 플러그인. 별도 npm 패키지 `acpx`를 서브프로세스로 실행.
- **Channels** (`src/telegram/`, `src/discord/` 등): 각 메신저 플랫폼별 통합

---

## 2. 스폰(Subagent) 메커니즘 비교

### `sessions_spawn(runtime="subagent")` (내장)
- Pi Agent 자식 세션을 Gateway 프로세스 내에서 실행
- 부모와 동일한 도구/워크스페이스 상속
- 가볍고 빠름, 부모와 직접 WS 통신
- **OpenClaw의 기본 워커 스폰 방식**

### `sessions_spawn(runtime="acp")` (ACPX)
- ACPX Plugin → `acpx` 서브프로세스 실행 (npm 패키지 `acpx`)
- ACPX → 외부 ACP 에이전트(Codex/Claude Code 등)와 NDJSON 통신
- 부모와 IPC 구조: Gateway ↔ ACPX Plugin ↔ `acpx` 바이너리 ↔ 외부 ACP 에이전트
- 주 용도: IDE (Zed 등) 연동 + 외부 ACP 에이전트 스폰
- **오버헤드가 크고, 주 용도가 IDE 연동**

---

## 3. Strengths / Weaknesses

### Strengths (OpenClaw 전체)
- 멀티채널 통합이 매우 강력 (20+ 플랫폼)
- ACP 프로토콜로 IDE 연동 표준화
- 내장 Pi Agent로 로컬 모델 직접 호출 가능
- `sessions_spawn`으로 멀티에이전트 오케스트라 지원
- sandbox 모드 (Docker) 지원

### Weaknesses
- ACPX는 IDE 연동용. 백그라운드 워커로는 오버엔지니어링
- `runtime="acp"` 스폰은 부모 ↔ 자식 통신 경로가 깊음 (Gateway → ACPX plugin → acpx binary → 외부 ACP 에이전트)
- 내장 Pi Agent가 ACP 프로토콜을 직접 이해하지 않음 (ACP 브릿지가 별도)
- 노드 22+ 필요

---

## 4. 현재 워크스페이스와의 관계

현재 지웅의 운영 모델:
- **Codex** (gpt-5.4) = 오케스트라/검증
- **로컬 LLM** (qwen3-8b, qwen2.5-coder-32b, deepseek-r1) = 실제 노동
- **ACPX** = 현재 acpx.json에 등록된 MCP 서버 관리 (KIS MCP, Playwright, SSH Terminal)

현재 `sessions_spawn` 사용 패턴: 없음 (MEMORY.md에 없음)

---

## 5. 결론: ACPX를 서브에이전트 워커로 쓸 것인가?

### ❌ ACPX(`runtime="acp"`)를 워커로 쓸 이유 없음
- 주 용도가 IDE 연동 → 백그라운드 워커로 부적합
- 오버헤드 큼 (최소 2개 프로세스 추가)
- 현재 워크스페이스는 IDE 연동이 아닌 CLI/Telegram 워크플로우
- 로컬 LLM으로 충분히 노동 가능

### ✅ `runtime="subagent"` (내장 Pi Agent) 활용 고려
- 현재架构에 자연스럽게 통합
- Gateway WS로 부모-자식 통신 (프로세스 내)
- 로컬 모델(qwen2.5-coder 등)과 직접 연결 가능
- 이미 Pi Agent가 워크스페이스 파일 시스템/도구 접근 가능

### ACP/OpenRouter 경유 여부
- **불필요**: 로컬 LLM (llamacpp-8080~8083)이 동일 머신에서 직접 호출 가능
- Gateway → ACP 브릿지 경유는 IDE 연동에서만 의미 있음
- Codex가 오케스트라 역할이면, ACPX 브릿지 없이 `sessions_spawn(runtime="subagent")`로 충분

---

## 6. 설정 참고

ACPX Plugin 활성화 (이미 설정됨):
- `~/.openclaw/openclaw.json`에 `plugins.entries.acpx.enabled = true`
- `extensions/acpx`가 설치됨
- `acpx` npm 패키지 (`npm install --omit=dev acpx@0.1.16`)
- ACPX의 `sessions_spawn(runtime="acp")`는 `agentId` 필요 (MEMORY.md의 `acp.defaultAgent` 설정)

내장 Subagent 스폰 (설정 불필요, 이미 내장):
- `sessions_spawn(runtime="subagent")`는 Gateway 내장 기능
- `agents.defaults.subagent.*`에서 maxDepth, maxChildren 등 설정 가능
- `agents.defaults.model`으로 자식 세션 기본 모델 오버라이드 가능
