---
title: "AI CLI 3종 설정 동기화 (opencode+ClaudeCode+Codex)"
from: codex
to: ["jadong", "codex", "claude-code"]
project: "device-ai-cli-sync"
date: 2026-07-06T22:28:28.089416+09:00
status: sent
type: report
---

# AI CLI 3종 설정 동기화 검증 리포트

## BLUF
- Codex는 `approval_policy=never`, `sandbox_mode=danger-full-access`, `model_reasoning_effort=xhigh`, MCP 21개로 정상 확인했다.
- opencode는 설치와 설정 파일은 확인됐지만 smoke가 실패했다. 인증은 환경변수는 감지되나 저장 credential 0개라 수동 auth 또는 API 키 교체가 필요하다.
- Claude Code에는 Codex에만 있던 핵심 `maester` remote MCP를 가산 추가했고, JSON 문법 검증을 통과했다.

## 대기 상태
- `state/opencode.done`: 존재.
- CODEX-A 결과 요약: `STATUS=PARTIAL`, opencode `1.17.13`, model `anthropic/claude-opus-4-8`, MCP 21개, smoke 실패, auth 수동 조치 필요.

## 4축 대조표

| 도구 | 자율성 | 추론 | 지시문 | MCP |
|---|---|---|---|---|
| Claude Code | `permissions.defaultMode=bypassPermissions`, `skipDangerousModePermissionPrompt=true` | `effortLevel=high`, `CLAUDE_CODE_EFFORT_LEVEL=xhigh` | `~/.claude/CLAUDE.md` symlink -> `/home/tlswk/projects/context-bootstrap/.rendered/CLAUDE.md` | 전역 11개: `chrome-devtools`, `codebase-memory-mcp`, `excalidraw`, `fetch`, `filesystem`, `github`, `maester`, `meta-ads`, `supabase`, `tavily`, `vercel` |
| Codex | `approval_policy=never`, `sandbox_mode=danger-full-access` | `model=gpt-5.5`, `model_reasoning_effort=xhigh` | `~/.codex/AGENTS.md` 존재, symlink 아님 | 21개: `brave-search`, `chrome-devtools`, `codebase-memory-mcp`, `context7`, `everything`, `exa`, `fetch`, `filesystem`, `git`, `github`, `maester`, `memory`, `naver-search`, `openclaw-local`, `perplexity`, `playwright`, `puppeteer`, `sequential-thinking`, `supabase`, `time`, `vercel` |
| opencode | `permission=allow` | `model=anthropic/claude-opus-4-8` | `instructions=["/home/tlswk/.codex/AGENTS.md"]` | 21개: Codex MCP와 같은 이름 세트, local 19개 + remote 2개 |

## 실행 가능성 검증
- `claude --version`: `2.1.201 (Claude Code)`.
- `codex doctor`: `16 ok`, `1 idle`, `2 notes`, `1 warn`, `0 fail`, degraded. 경고는 rollout state DB의 missing/stale row 2개 이슈이며 설정 파싱, auth, MCP, websocket, reachability는 통과.
- `opencode --version`: `1.17.13`.

## opencode smoke/auth
- 실행: `cd /home/tlswk && timeout 90s opencode run 'Respond with exactly: OPENCODE_SMOKE_OK'`.
- 결과: FAIL. B 재시도 출력은 `Error: Failed to process error response`.
- CODEX-A 센티넬의 앞선 smoke 결과: Anthropic API `401 authentication_error invalid x-api-key`, 작은 Anthropic 모델도 실패.
- `opencode auth list`: 저장 credential 0개, 환경변수 provider 7개 감지. `ANTHROPIC_API_KEY`는 이름만 확인했고 값은 출력하지 않았다.
- 판정: opencode 설정은 생성됐지만 auth는 수동 조치 필요. API 키 교체 또는 `opencode auth login` 후 smoke 재실행 필요.

## 적용한 변경
- 생성: `/home/tlswk/.codex/prompts/goal.md`.
- 추가: `/home/tlswk/.claude.json` 최상위 `mcpServers.maester`.
- 백업: `/home/tlswk/.claude.json.bak.20260706_222717`.

## 변경 검증
- `ls -la /home/tlswk/.codex/prompts/goal.md`: 파일 생성 확인.
- `python3 -m json.tool < /home/tlswk/.claude.json`: 통과.
- Claude Code 전역 MCP 개수: 10개 -> 11개.
- 추가된 `maester`: `type=http`, `url=http://127.0.0.1:8766/sk-maester-2026/mcp`.

## 남은 수동 단계
- opencode auth 복구: 유효한 Anthropic API 키를 환경에 설정하거나 `opencode auth login`으로 credential을 등록한다.
- 복구 후 확인: `cd /home/tlswk && opencode run 'Respond with exactly: OPENCODE_SMOKE_OK'`.
- Codex `/goal`은 다음 대화형 `codex` 세션부터 `/goal <목표>` 형태로 사용 가능하다.

## 롤백 방법
- Claude MCP 추가 롤백: `/home/tlswk/.claude.json.bak.20260706_222717`을 `/home/tlswk/.claude.json`으로 복원한 뒤 `python3 -m json.tool < /home/tlswk/.claude.json` 실행.
- Codex prompt 롤백: `/home/tlswk/.codex/prompts/goal.md` 삭제.

## 가드레일 준수
- 스케줄러, cron, systemd timer, claude.ai routine, RemoteTrigger, CronCreate 생성 없음.
- opencode 설정 파일은 읽기 검증만 수행했고 B가 수정하지 않았다.
- 토큰, API 키, credential 값은 출력하거나 리포트에 기록하지 않았다.
