본문으로 건너뛰기

설정 레퍼런스

이 문서는 Elftia의 모든 설정 가능한 옵션을 기능 도메인별로 분류하여 나열합니다.


환경 변수

프론트엔드 (Vite / VITE_*)

프론트엔드 환경 변수는 VITE_ 접두사를 붙여 노출되며, React 코드에서 import.meta.env를 통해 접근할 수 있습니다.

변수타입기본값설명
VITE_APP_TITLEstring'Elftia'애플리케이션 제목
VITE_DEV_PORTnumber5375Vite Dev Server 포트

백엔드 (Main Process)

변수타입기본값설명
LOG_LEVELstring'info'로그 레벨 (debug / info / warn / error)
NODE_ENVstring'development'런타임 환경
ELECTRON_IS_DEVstring'1'개발 모드 여부

앱 환경설정 (AppPreferences)

window.api.appPreferences를 통해 읽고 씁니다. SQLite 데이터베이스에 저장됩니다.

필드타입기본값설명
sendByCtrlEnterbooleanfalseCtrl+Enter로 메시지 전송
autoScrollToBottombooleantrue새 메시지 수신 시 자동으로 최하단으로 스크롤
showThinkingbooleantrue모델의 사고 과정 표시
autoExpandToolsbooleanfalse도구 호출 세부 정보 자동 펼침
showRawParametersbooleanfalse도구 호출의 원시 파라미터 표시

테마 설정 (Theme)

window.api.theme을 통해 읽고 씁니다. 전체 상태 구조:

모드

필드타입기본값설명
mode'light' | 'dark' | 'system''system'테마 모드

사용자 커스텀 테마 (UserTheme)

필드타입설명
colorsRecord<string, string>커스텀 색상 토큰 재정의
fonts{ ui?: string; code?: string; display?: string }커스텀 폰트

커스텀 CSS

필드타입기본값설명
customCssstring''사용자가 직접 주입하는 커스텀 CSS

배경화면 (Wallpaper)

배경화면 관련 필드는 모두 ThemePreferencesSchema(packages/desktop/app/main/services/platform/config/store/configSchema.ts)에 위치하며, config.theme에 저장되고 IPC theme:setWallpaperPreferences를 통해 부분 업데이트됩니다. 소스 정의는 packages/desktop/app/shared/contracts/settings-types.ts → ThemePreferences를 참조하세요.

배경화면 소스 (이미지 / 그라디언트)

필드타입기본값설명
wallpaper{ light?: string; dark?: string }{}이미지 배경화면 소스; file://, wallpaper:// 프로토콜, data: URL, 또는 허용 목록의 https:// URL 지원
wallpaperGradient{ stops: string[1..4]; angle?: number 0..360 }null1–4색 선형 그라디언트; wallpaper보다 우선 적용; 활성화 시 이미지가 일시적으로 숨겨짐
disableWallpaperInCompactWindowsbooleanfalse컴팩트 창(Mini/Selection)에서 배경화면 비활성화
wallpaperOverlayEnabledbooleanfalse반투명 서피스 활성화 (배경화면 모드에 더 적합)

블러 효과 및 오버레이

필드타입범위기본값설명
wallpaperBlurIntensitynumber0–306블러 강도 (px)
wallpaperDimmingnumber0–10070오버레이 전체 불투명도 %
wallpaperDimmingHuenumber0–3600오버레이 HSL 색조 (hex 색상 선택기에서 디코딩)
wallpaperDimmingSaturationnumber0–1000오버레이 HSL 채도 %
wallpaperDimmingLightnessnumber-1–100-1오버레이 HSL 밝기 %; -1 = 자동 (라이트 모드에서 흰색, 다크 모드에서 검정); 0–100 = 수동
wallpaperDimmingGradientWallpaperGradient | nullnull그라디언트 오버레이; 활성화 시 위의 HSL을 재정의하지만, wallpaperDimming은 전체 불투명도를 계속 제어

요소 배경 색조 (사이드바 / 카드 / 탭 등 반투명 서피스)

필드타입기본값설명
wallpaperElementTintstring (#RRGGBB 또는 '')''요소 서피스 색조; 빈 문자열 = 테마 기본값 사용 (따뜻한 크림 / 따뜻한 차콜)
wallpaperElementGradientWallpaperGradient | nullnull요소 그라디언트; 단색 색조보다 우선 적용; 각 계층이 독립적인 알파 값을 유지

메시지 버블 (사용자 / 어시스턴트 독립 설정)

필드타입기본값설명
wallpaperBubbleOverridebooleanfalse마스터 스위치: true = 버블이 아래 독립 필드 사용; false = 버블이 요소 배경 설정을 따름 (색상 + 기본 불투명도)
wallpaperBubbleTintUserstring (#RRGGBB 또는 '')''사용자 버블 단색; override 활성화 시 적용
wallpaperBubbleTintAssistantstring (#RRGGBB 또는 '')''어시스턴트 버블 단색; override 활성화 시 적용
wallpaperBubbleGradientUserWallpaperGradient | nullnull사용자 버블 그라디언트; 해당 측의 단색을 재정의
wallpaperBubbleGradientAssistantWallpaperGradient | nullnull어시스턴트 버블 그라디언트; 해당 측의 단색을 재정의
wallpaperBubbleOpacitynumber 0–10035버블 채우기 알파; override 활성화 시에만 적용

전체 요소 불투명도

필드타입범위기본값설명
wallpaperElementOpacitynumber0–1000실험적: 반투명 UI 전체를 불투명 방향으로 조정
wallpaperTransparencynumber0–100100서피스 색조 강도 계수 (0 = 서피스 완전 투명; 100 = 기본 알파)

Hex / 그라디언트 유효성 검사

  • Hex 필드 (wallpaperElementTint / wallpaperBubbleTint*)의 Zod 정규식: /^(#[0-9a-fA-F]{6})?$/ (빈 문자열 또는 #RRGGBB).
  • WallpaperGradient.stops는 1–4개의 문자열이 필요합니다; 백엔드 ThemeService.setWallpaperPreferences는 빈 문자열 stop을 제거하고 배열을 4개 항목으로 자릅니다.
  • 그라디언트 필드의 IPC 페이로드에서 null = 초기화; 키 생략 = 현재 값 유지. 백엔드는 'wallpaperDimmingGradient' in patch로 이 둘을 구분합니다.

우선순위 (렌더링 재정의 순서)

wallpaperGradient > wallpaper.{light,dark} // main wallpaper source
wallpaperDimmingGradient > wallpaperDimming{Hue,Saturation,Lightness} // overlay color
wallpaperElementGradient > wallpaperElementTint // element tint
wallpaperBubbleGradient{User,Assistant} > wallpaperBubbleTint{User,Assistant} // bubble color (only when override is on)

wallpaperBubbleOverride=false인 경우, 하위 data-wp-bubble-override 속성이 body에 기록되지 않으며, CSS는 "버블이 요소 색조를 상속"하는 규칙으로 폴백됩니다.


LLM 설정

프로바이더 (ProviderConfig)

각 LLM 프로바이더의 설정 구조:

필드타입설명
idstring고유 식별자
namestring표시 이름
typestring프로바이더 타입 (openai / anthropic / google / deepseek 등)
apiKeystringAPI 키 (백엔드에 저장, IPC로 전송되지 않음)
baseUrlstring?커스텀 API 엔드포인트
modelsModel[]사용 가능한 모델 목록
enabledboolean활성화 여부

전역 모델 파라미터 (GlobalModelParameters)

필드타입범위기본값설명
temperaturenumber0 - 2프로바이더 기본값생성 온도
maxTokensnumber1 - 모델 한도프로바이더 기본값최대 출력 토큰 수
topPnumber0 - 1프로바이더 기본값Top-P 샘플링
topKnumber1 - 100프로바이더 기본값Top-K 샘플링 (일부 프로바이더)
frequencyPenaltynumber-2 - 20빈도 페널티
presencePenaltynumber-2 - 20존재 페널티

API 키 풀 (ApiKeyEntry)

각 키 항목의 설정:

필드타입기본값설명
idstring자동 생성고유 키 식별자
providerIdstring-소유 프로바이더 ID
labelstring?-키 레이블
apiKeystring-키 값 (암호화 저장)
weightnumber1가중치 (1–100); 라운드로빈 분배 확률에 영향
enabledbooleantrue활성화 여부

키 풀 동작 방식:

  • 가중 라운드로빈(Weighted Round-Robin)으로 키를 분배합니다
  • 세션 친화성: 동일 세션에서는 동일한 키를 우선 사용합니다
  • 429/529 응답 시 자동으로 다음 키로 전환합니다
  • 지수 백오프 쿨다운: 60초 → 2분 → 5분 → 15분

Agent 설정

TinyElf 엔진 기본값

필드타입기본값설명
maxIterationsnumber40최대 반복 횟수
temperaturenumber0.1생성 온도
maxTokensnumber8192최대 출력 토큰 수
toolResultMaxCharsnumber50000도구 결과의 최대 문자 수

Claude SDK 엔진

필드타입설명
permissionModestring권한 모드 (ask / auto-approve / deny)
maxTurnsnumber최대 대화 턴 수
systemPromptAppendstring?시스템 프롬프트에 추가할 내용

보안 설정

GuardianAgent

필드타입설명
mode'off' | 'monitor' | 'enforce'동작 모드
allowedCommandsstring[]실행 허용 명령어 허용 목록
blockedPathsstring[]접근이 차단된 경로 패턴

PromptGuardian

필드타입설명
mode'off' | 'warn' | 'block'동작 모드

RateLimiter

필드타입기본값설명
maxRequestsPerMinutenumber60분당 최대 요청 수
maxTokensPerMinutenumber100000분당 최대 토큰 수

MCP 설정 (McpServerConfig)

각 MCP 서버의 설정 구조:

필드타입설명
idstring고유 식별자
namestring표시 이름
transport'stdio' | 'sse' | 'streamable-http'전송 프로토콜
commandstring?시작 명령어 (stdio 모드)
argsstring[]?명령어 인수 (stdio 모드)
envRecord<string, string>?환경 변수 (stdio 모드)
urlstring?서버 URL (sse / streamable-http 모드)
enabledboolean활성화 여부
autoConnectboolean앱 시작 시 자동 연결

Cron 예약 작업

스케줄 설정

필드타입설명
schedulestringCron 표현식 (5/6 필드 형식)
timezonestring?타임존 식별자 (예: Asia/Tokyo)
enabledboolean활성화 여부

액션 타입

타입설명
agent-run지정된 Agent 실행
channel-checkChannel 메시지 확인
custom-script커스텀 스크립트 실행

Channel 설정

트리거 모드

모드설명
mention@멘션 시에만 응답
keyword키워드가 포함된 경우 응답
all모든 메시지에 응답

플랫폼별 메시지 길이 제한

플랫폼최대 문자 수
Discord2000
Telegram4096
Slack40000
커스텀 Webhook무제한

CSS 변수 (Tailwind 토큰)

packages/renderer/src/app/index.css에 정의되어 있으며, Tailwind 설정을 통해 유틸리티 클래스로 매핑됩니다.

색상 토큰

CSS 변수Tailwind 클래스설명
--backgroundbg-background페이지 메인 배경
--foregroundtext-foreground기본 텍스트 색상
--surface-0bg-surface-0L0 레이어 배경
--surface-1bg-surface-1L1 레이어 배경 (카드/사이드바)
--surface-2bg-surface-2L2 레이어 배경 (입력창/보조 컨테이너)
--surface-3bg-surface-3L3 레이어 배경 (팝오버)
--text-strongtext-foreground주요 제목, 본문 텍스트 (93% 밝기)
--text-mutedtext-muted-foreground보조 텍스트 (65% 밝기)
--text-subtletext-text-subtle부가 힌트 (50% 밝기)
--primarybg-primary / text-primary테마 색상
--secondarybg-secondary보조 색상
--destructivetext-destructive오류/삭제 색상
--successtext-success성공 색상
--warningtext-warning경고 색상
--borderborder-border테두리 색상
--ringring-ring포커스 링 색상
--mutedbg-muted음소거 배경
--accentbg-accent강조 배경
--popoverbg-popover팝오버 배경
--cardbg-card카드 배경

폰트

CSS 변수Tailwind 클래스폰트
--font-sansfont-sansInter, system-ui
--font-monofont-monoJetBrains Mono, monospace
--font-displayfont-displayNoto Serif, Georgia, serif
--font-uifont-ui사용자 커스텀 UI 폰트
--font-codefont-code사용자 커스텀 코드 폰트

테두리 반경

CSS 변수Tailwind 클래스
--radiusrounded-lg0.5rem (8px)
-rounded-md0.375rem (6px)
-rounded-sm0.25rem (4px)
-rounded-xl0.75rem (12px)

파일 설정 (ConfigStore)

window.api.config를 통해 읽고 씁니다. JSON 파일로 저장되며 핫 리로드를 지원합니다.

설정이 변경되면 메인 프로세스가 config:changed 채널을 통해 프론트엔드에 알립니다.

주요 설정 키

타입설명
magiMagiConfigMagi/Claw Agent 설정
magi.promptVersion'v1' | 'v2' | 'v3' | 'v4'프롬프트 빌드 버전
cronCronConfigCron 예약 작업 설정
channelChannelConfigChannel 메시징 설정
securitySecurityConfig보안 제어 설정

전체 설정 파일 경로는 window.api.config.getPath()로 가져올 수 있습니다.