Files
EJClaw/docs/configuration.md
Eyejoker fd3145e2a7 feat: refresh dashboard settings UX and Codex feature toggles (#153)
* feat: refresh dashboard settings UX and Codex feature toggles

Improve settings/tasks mobile layout, model effort validation by agent type, and preset models for GPT 5.5 and Opus 4.7. Store Codex fast mode and goals in config.toml with Claude fastMode session sync and updated docs for Codex 0.133.

Co-authored-by: Cursor <cursoragent@cursor.com>

* style: apply pre-commit formatting after dashboard settings commit

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-23 12:18:42 +09:00

4.9 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=claude-code

# provider 기본 모델
CLAUDE_MODEL=claude-opus-4-7
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-7
REVIEWER_EFFORT=high
REVIEWER_FALLBACK_ENABLED=true

ARBITER_MODEL=claude-sonnet-4-6
ARBITER_EFFORT=high
ARBITER_FALLBACK_ENABLED=true

설명:

  • reviewer / arbiter provider 선택은 전역 설정
  • 특정 방에서만 reviewer를 Codex로 고르는 기능은 없음
  • room-level agentConfigclaudeModel, 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

문서와 실제 코드의 우선순위

문서보다 실제 동작이 우선입니다. 동작 기준을 확인할 때는 아래를 먼저 봅니다.

  1. .env.example
  2. src/config/load-config.ts
  3. src/agent-runner-environment.ts
  4. src/paired-execution-context.ts