* 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>
159 lines
4.9 KiB
Markdown
159 lines
4.9 KiB
Markdown
# 설정
|
|
|
|
EJClaw의 설정 기준은 `.env` 하나입니다.
|
|
프로젝트 루트의 [`../.env.example`](../.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 봇
|
|
|
|
```bash
|
|
DISCORD_OWNER_BOT_TOKEN=
|
|
DISCORD_REVIEWER_BOT_TOKEN=
|
|
DISCORD_ARBITER_BOT_TOKEN=
|
|
```
|
|
|
|
예전 service-based alias는 더 이상 허용되지 않습니다.
|
|
|
|
## 역할 / 모델 설정
|
|
|
|
```bash
|
|
# 역할별 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 `agentConfig`의 `claudeModel`, `codexModel`은 역할별이 아니라 provider별 override
|
|
- `ARBITER_AGENT_TYPE`은 옵션이며, 설정하지 않으면 arbiter는 비활성 상태입니다
|
|
|
|
## 인증
|
|
|
|
```bash
|
|
# 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에 넘겨서 빌링하는 구조는 사용하지 않습니다.
|
|
|
|
## 음성 전사
|
|
|
|
```bash
|
|
GROQ_API_KEY=
|
|
```
|
|
|
|
- 기본은 Groq Whisper
|
|
- 필요 시 OpenAI Whisper fallback을 별도 확장할 수 있지만, 현재 README / 문서 기준 최소 키는 `GROQ_API_KEY`입니다
|
|
|
|
## MoA
|
|
|
|
```bash
|
|
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 교체와 연결 테스트를 관리할 수 있습니다. 저장 후에는
|
|
스택 재시작이 필요합니다.
|
|
|
|
## 운영 / 배포 관련 설정
|
|
|
|
```bash
|
|
ASSISTANT_NAME=claude
|
|
STATUS_CHANNEL_ID=
|
|
SESSION_COMMAND_ALLOWED_SENDERS=
|
|
MAX_CONCURRENT_AGENTS=5
|
|
```
|
|
|
|
## Discord 이미지 첨부 allowlist
|
|
|
|
```bash
|
|
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`
|