5.2 KiB
설정
EJClaw의 설정 기준은 .env 하나입니다.
프로젝트 루트의 ../.env.example를 기본 예시로 보고, 이 문서는 현재 런타임에서 의미가 있는 키만 추려 설명합니다.
기본 원칙
- Discord 토큰은 role-fixed canonical 키만 사용합니다
- reviewer 기본 provider는
claude-code - owner 기본 provider는
codex - room-level override는 provider 단위(
claudeModel,codexModel)만 지원합니다 CLAUDE_CODE_OAUTH_TOKENS가 canonical이고,CLAUDE_CODE_OAUTH_TOKEN은 legacy fallback입니다
Discord 봇
DISCORD_OWNER_BOT_TOKEN=
DISCORD_REVIEWER_BOT_TOKEN=
DISCORD_ARBITER_BOT_TOKEN=
예전 service-based alias는 더 이상 허용되지 않습니다.
역할 / 모델 설정
# 역할별 provider
OWNER_AGENT_TYPE=codex
REVIEWER_AGENT_TYPE=claude-code
ARBITER_AGENT_TYPE=codex
# provider 기본 모델
# 공식 Claude API 모델 ID입니다.
CLAUDE_MODEL=claude-opus-4-8
CLAUDE_EFFORT=high
CLAUDE_THINKING=adaptive
CODEX_MODEL=gpt-5.5
CODEX_EFFORT=xhigh
# 역할별 override
OWNER_MODEL=gpt-5.5
OWNER_EFFORT=xhigh
OWNER_FALLBACK_ENABLED=true
REVIEWER_MODEL=claude-opus-4-8
REVIEWER_EFFORT=high
REVIEWER_FALLBACK_ENABLED=true
ARBITER_MODEL=gpt-5.5
ARBITER_EFFORT=xhigh
ARBITER_FALLBACK_ENABLED=true
설명:
- reviewer / arbiter provider 선택은 전역 설정
- 역할별
*_MODEL은 해당 역할의 provider에 맞춰 주입됩니다.codex역할에는 Codex 모델을,claude-code역할에는 Claude 모델을 넣어야 합니다. - 예를 들어
ARBITER_AGENT_TYPE=claude-code로 바꾸면 그때ARBITER_MODEL=claude-opus-4-8을 사용할 수 있습니다. - 특정 방에서만 reviewer를 Codex로 고르는 기능은 없음
- room-level
agentConfig의claudeModel,codexModel은 역할별이 아니라 provider별 override ARBITER_AGENT_TYPE은 옵션이며, 설정하지 않으면 arbiter는 비활성 상태입니다
인증
# Claude Code OAuth
CLAUDE_CODE_OAUTH_TOKENS=
CLAUDE_CODE_OAUTH_TOKEN=
# Claude host env (선택)
ANTHROPIC_API_KEY=
ANTHROPIC_AUTH_TOKEN=
ANTHROPIC_BASE_URL=
설명:
CLAUDE_CODE_OAUTH_TOKENS: canonical, 쉼표 구분CLAUDE_CODE_OAUTH_TOKEN: 단일 토큰 legacy fallback- 실제 runner에는 현재 선택된 Claude 토큰 하나만 주입됩니다
Codex 쪽은 현재 OAuth 세션 파일 기준으로 동작합니다. OPENAI_API_KEY를 Codex child process에 넘겨서 빌링하는 구조는 사용하지 않습니다.
음성 전사
GROQ_API_KEY=
- 기본은 Groq Whisper
- 필요 시 OpenAI Whisper fallback을 별도 확장할 수 있지만, 현재 README / 문서 기준 최소 키는
GROQ_API_KEY입니다
MoA
MOA_ENABLED=true
MOA_REF_MODELS=kimi,glm
MOA_KIMI_MODEL=kimi-k2.6
MOA_KIMI_BASE_URL=https://api.kimi.com/coding
MOA_KIMI_API_KEY=sk-kimi-xxx
MOA_KIMI_API_FORMAT=anthropic
MOA_GLM_MODEL=glm-5.1
MOA_GLM_BASE_URL=https://open.bigmodel.cn/api/anthropic
MOA_GLM_API_KEY=xxx
MOA_GLM_API_FORMAT=anthropic
MoA는 arbiter 판정 전에 외부 모델 의견을 수집해 prompt에 주입합니다.
대시보드 설정 화면에서 MOA_ENABLED, MOA_REF_MODELS, 모델명, base URL,
API format, API key 교체와 연결 테스트를 관리할 수 있습니다. 저장 후에는
스택 재시작이 필요합니다.
운영 / 배포 관련 설정
ASSISTANT_NAME=claude
STATUS_CHANNEL_ID=
SESSION_COMMAND_ALLOWED_SENDERS=
MAX_CONCURRENT_AGENTS=5
Discord 이미지 첨부 allowlist
EJCLAW_ATTACHMENT_ALLOWED_DIRS=~/Pictures/Screenshots,~/Downloads/ejclaw-images
-
콤마 또는 플랫폼 path delimiter(Linux는
:)로 여러 폴더를 지정합니다. -
지정한 폴더 하위의 PNG/JPEG/GIF/WebP/BMP만 Discord 첨부 후보가 됩니다.
-
realpath, 이미지 signature, size cap 검증은 그대로 적용됩니다. -
/home/**전체보다 자주 쓰는 스크린샷/이미지 출력 폴더만 추가하는 것을 권장합니다. -
ASSISTANT_NAME은 owner trigger 기본 이름을 만듭니다 -
paired room에서도 사용자 진입점은 owner가 기준입니다
-
status dashboard와 session command는 선택 설정입니다
디버깅 경로
| 항목 | 경로 / 명령 |
|---|---|
| DB | store/messages.db |
| 서비스 로그 | journalctl --user -u ejclaw -f |
| room 로그 | groups/{folder}/logs/ |
| owner/reviewer 세션 | data/sessions/{folder}* |
| owner worktree | data/workspaces/{folder}/owner |
| Claude 플랫폼 프롬프트 | prompts/claude-platform.md |
| reviewer 프롬프트 | prompts/claude-paired-room.md |
| arbiter 프롬프트 | prompts/arbiter-paired-room.md |
| Codex 플랫폼 프롬프트 | prompts/codex-platform.md |
| 글로벌 메모리 | groups/global/CLAUDE.md |
문서와 실제 코드의 우선순위
문서보다 실제 동작이 우선입니다. 동작 기준을 확인할 때는 아래를 먼저 봅니다.
.env.examplesrc/config/load-config.tssrc/agent-runner-environment.tssrc/paired-execution-context.ts