GEODE . 문서
GitHub
설정
How-to

설정 기초

config 통합 이후의 파일 역할입니다. .env는 시크릿, config.toml은 동작 설정, 해석 사다리는 하나, 디버깅은 geode config explain으로 합니다.

GEODE 설정의 규칙은 한 줄입니다. 시크릿은 .env에, 동작은 config.toml에 둡니다. 같은 키가 여러 층에 있으면 더 가까운 층이 이기고, 어느 층이 이겼는지는geode config explain이 보여줍니다.

파일과 역할

파일역할
~/.geode/.env전역 시크릿 층이자 권위를 갖는 시크릿 저장소. API 키와 자격 증명이 들어가고, 온보딩과 /login의 키 기록이 여기로 갑니다.
프로젝트 .env (cwd)프로젝트 시크릿 층. 전역에 없는 키만 채우며 전역 키를 덮지 못합니다 (Hermes, 2026-06-15). 시크릿은 전역에 두는 것이 기본입니다.
~/.geode/config.toml전역 동작 설정. [self_improving_loop.*] 섹션도 이 파일에 삽니다.
.geode/config.toml프로젝트 동작 설정. 전역 toml을 덮습니다. /model의 기본 저장 위치입니다.
core/config/routing.toml출하되는 라우팅 매니페스트. 모델 기본값, provider prefix, 자격 패턴. ~/.geode/routing.toml이 섹션 단위로 덮습니다.

시크릿 전용 .env는 도구가 지키는 계약입니다./model은 더 이상 GEODE_MODEL.env에 쓰지 않고 config.toml에만 기록합니다. 과거 릴리스가 남긴 .env의 모델 줄은 피커가 toml을 쓴 직후 자동으로 지우고 알림을 출력합니다 (core/config/env_io.pyremove_env). toml 매핑이 없는 env 전용 키 (GEODE_GATEWAY_ENABLED 등)를 손으로.env에 적는 것은 여전히 유효한 운영 방법입니다.

해석 사다리

모든 Settings 필드는 같은 사다리를 탑니다. 위가 이깁니다 (core/config/explain.pyLAYERS).

1. os.environ            셸 export. 세션 한정 수동 override
2. 전역 .env             ~/.geode/.env (시크릿 권위)
3. 프로젝트 .env          cwd의 .env (전역에 없는 키만 채움)
4. 프로젝트 config.toml   .geode/config.toml
5. 전역 config.toml      ~/.geode/config.toml
6. 코드 기본값

시크릿(.env)과 동작(config.toml)은 전역과 프로젝트의 우선 방향이 반대입니다. .env는 전역이 위(권위), config.toml은 프로젝트가 위(프로젝트 튜닝). 같은 키가 양쪽에 동시에 들어가지 않으므로(시크릿 전용, 동작 전용 분리, C-2) 사다리는 하나로 충분합니다. v0.99.216 이전에는.env도 프로젝트가 위였는데, 빈 프로젝트.env가 전역 실키를 가리는 함정이 있어 전역 권위로 뒤집었습니다 (Hermes 정렬).

모델 해석으로 좁히면 같은 사다리가 이렇게 읽힙니다. CLI 인자 > env 층(os.environ + .env 파일들) > 프로젝트 toml > 전역 toml > routing 기본값. env 층이 toml 전부를 이기므로, 잊힌.env 줄 하나가 이후의 모든 toml 편집을 가립니다. 이 구조의 대표 함정입니다.

GEODE_CONFIG_TOML env 변수는 전역config.toml의 경로를 바꿉니다. C-4부터 메인 설정 로더(core/config/__init__.py)와 self-improving 로더(core/config/self_improving.py)가 같은 경로를 읽습니다. 프로젝트 toml은 그 위에 그대로 얹힙니다.

geode config explain

"설정을 바꿨는데 실효값이 안 움직인다"의 표준 진단 플로우입니다. 키마다 층별 후보 표를 출력하고, 정확히 하나의 층을 WINNER로, 그 아래 설정된 층을masked로 표시합니다. 파일 경로까지 같이 나오므로 어느 줄을 고치거나 지워야 하는지 바로 보입니다.

geode config explain model     # 키 생략 시 model
geode about                    # 실효 모델 + 마스크 경고 한 줄

검증은 항상 실효값으로 합니다. geode about이 보여주는 모델이 실제로 호출되는 모델이고, env 층이 toml 선택을 가리고 있으면 같은 화면에 경고가 뜹니다. config.toml 내용을 읽는 것으로 검증을 끝내면 안 됩니다.

리로드 시맨틱

세션 경계에서 reload_settings_from_disk().env, GEODE_* env, config.toml을 살아 있는 싱글톤에 다시 읽어 들입니다. 필드 복사가 실패하면 해당 필드명을 적은 경고를 남기므로 반쯤 적용된 리로드가 조용히 지나가지 않습니다. 리로드는reload_routing_constants()도 호출해 routing 매니페스트 캐시를 비우고 core.config의 라우팅 상수를 다시 묶습니다. 한계도 명시합니다. 모듈 로드 시점에 값을 복사해 간 importer는 부트 시점 복사본을 계속 들고 있으므로, 그 경로까지 갱신하려면 프로세스를 재시작해야 합니다.

데몬과 모델 env 키

serve 데몬은 시작할 때 상속받은 환경에서 동작(모델 선택) 계열 env 키를 떨어뜨리고, .env 승격에서도 건너뜁니다 (core/cli/bootstrap.pyload_daemon_env). 데몬 환경에 승격된 모델 키가 모든 /model 전환보다 오래 살아남던 문제의 수정입니다. 대상 키 목록은 core/config/env_io.pyBEHAVIOR_ENV_KEYS입니다.

GEODE_MODEL  GEODE_ACT_MODEL  GEODE_JUDGE_MODEL
GEODE_COGNITIVE_REFLECTION_MODEL  GEODE_LEARNING_EXTRACT_MODEL
GEODE_AGENTIC_EFFORT
GEODE_ANTHROPIC_CREDENTIAL_SOURCE  GEODE_OPENAI_CREDENTIAL_SOURCE

데몬의 모델을 env로 일부러 고정하고 싶다면GEODE_SERVE_KEEP_MODEL_ENV=1을 켭니다. C-4부터 이 플래그는 프로세스 env뿐 아니라 양쪽 .env파일에서도 읽힙니다. 승격 우선순위는 수동 export > 전역 .env> 프로젝트 .env이고 (전역이 권위, 프로젝트는 전역에 없는 키만 채움), 파일은 이미 존재하는 프로세스 env를 덮지 않으며 빈 값도 덮지 않습니다.

실패 모드

증상원인해법
/model로 바꿨는데 그대로env 층의 모델 줄이 toml을 마스크geode config explain model로 WINNER 층과 파일을 찾고 그 줄을 지웁니다. 최신 버전 피커는 다음 toml 기록 때 자동 정리합니다.
thin CLI는 새 모델, 데몬만 옛 모델GEODE_SERVE_KEEP_MODEL_ENV=1이 켜져 있거나 C-3 이전 데몬플래그를 끄거나 데몬을 재시작합니다. pkill -f "geode serve" 후 재진입.
~/.geode/routing.toml을 고쳤는데 반영 안 됨부트 시점 복사본을 든 모듈 경로세션 리로드로 매니페스트 독자는 갱신됩니다. 그래도 남으면 프로세스를 재시작합니다.
프로젝트 .env에 둔 시크릿이 안 먹고 전역 값이 이김전역 ~/.geode/.env가 같은 키를 가짐. 전역이 권위입니다 (Hermes, 2026-06-15)의도된 동작입니다. 시크릿은 전역에 두고, 프로젝트는 전역에 없는 키만 채웁니다. geode config explain <KEY>로 WINNER 층을 확인하세요.
GEODE_CONFIG_TOML이 일부 로더에만 적용C-4 이전에는 self-improving 로더만 인식업그레이드합니다. geode config explain이 실제로 읽은 경로를 보고합니다.

다음