# 고쳤는데 또 나왔다 — 설정 파일이 두 곳일 때 생기는 일

> 어제 고쳤는데 오늘 또 청구됐다. 설정을 바꿨다고 해서 진짜 바뀐 게 아닐 수 있다.

## 이런 상황이었어요

어제 Gemini API 청구서를 보고 원인을 분석했다. 엘론이 **Pro 모델**로 설정돼 있었고, 앤드류가 그룹방 메시지에 자동 반응하면서 내부에서 엘론을 호출하는 구조가 문제였다.

그래서 `fix_all.py` 스크립트로 엘론 모델을 `gemini-3.1-pro-preview`에서 `gemini-3-flash-preview`로 바꿨다. Docker를 재시작했다. 게이트웨이 로그에 `agent model: google/gemini-3-flash-preview`가 찍혔다. **됐다고 생각했다.**

오늘 다시 청구 내역을 확인했더니 **어제와 비슷한 규모의 비용이 또 올라가 있었다.** 오늘은 대화를 하지 않았는데.

---

## 원인을 찾아보니

### 오늘 비용의 정체: 빌링 지연

먼저 오늘(4/19) Docker 로그를 확인했다. LLM 호출 기록이 없었다. 신규 API 사용이 아니었다.

오늘 보이는 비용은 **어제(4/18)의 실제 사용분**이었다. 어제 앤드류에게 리서치를 요청했고, 엘론과 1:1 대화를 1턴 했다. Google은 API 사용 비용을 하루 정도 지연해서 청구한다. 이게 오늘 나타난 것이었다. 청구서 타이밍과 실제 사용 시점이 달라서 "또 발생했다"고 착각한 거였다.

### 진짜 문제: 설정 파일이 두 곳

그런데 파고들다 더 심각한 걸 발견했다. `openclaw.json`을 직접 열어봤더니 이런 구조가 있었다.

```javascript
{ "id": "main", "model": "google/gemini-3.1-pro-preview" }
```

엘론(main)의 모델이 `agents.list` 안에 직접 박혀 있었고, 값은 아직 Pro였다. `fix_all.py`가 수정한 파일은 `~/.openclaw/agents/main/agent/models.json`이었다. 이 파일은 분명히 Flash로 바뀌어 있었다. 그런데 `**openclaw.json**`** 안의 **`**agents.list[].model**`** 필드가 이 파일보다 우선순위가 높았다.**

OpenClaw의 모델 적용 우선순위:

| 우선순위 | 위치 | 상태 |
| --- | --- | --- |
| 1 (높음) | `openclaw.json` > `agents.list[].model` | ❌ Pro 모델 그대로 |
| 2 | `agents/{id}/agent/models.json` | ✅ Flash로 수정됨 |
| 3 (낮음) | `openclaw.json` > `models.model` (전역 기본값) | 미설정 |

고쳤다고 생각했던 파일이 실제로는 덮어쓰여지고 있었다. 게이트웨이 로그에 `agent model: google/gemini-3-flash-preview`가 찍혔던 건 **전역 기본값**을 보여준 것이지, 엘론 개인의 모델 설정이 아니었다.

---

## 이렇게 해결했어요

VM에서 `openclaw.json`의 `agents.list` 부분을 직접 수정했다.

```javascript
for agent in d.get("agents", {}).get("list", []):

    if "pro" in agent.get("model", "").lower():
        agent["model"] = "google/gemini-3-flash-preview"
```

결과:

```javascript
Fixed: main: google/gemini-3.1-pro-preview -> google/gemini-3-flash-preview
```

그리고 `fix_all.py` 스크립트에도 이 로직을 추가했다. 다음에 스크립트를 실행하면 두 곳을 모두 수정하도록.

---

## 알게 된 것

### 설정 파일이 여러 곳이면, 고쳤어도 안 고친 것일 수 있다

`models.json`을 수정했더니 `agents.list`의 override가 그걸 무력화하고 있었다. 프레임워크의 설정 계층 구조를 파악하기 전엔, 스크립트가 성공했어도 의도대로 동작하지 않을 수 있다.

특히 **로그가 성공처럼 보여도 확인이 필요하다.** 게이트웨이 로그의 `agent model: flash` 메시지는 전역 설정을 출력한 것이었다. 에이전트별 실제 모델은 `agents.list`를 직접 열어봐야 했다.

### 빌링 지연을 모르면 없는 문제도 발생한 것처럼 보인다

오늘 비용은 어제 사용분의 지연 반영이었다. Google API는 하루 정도 지연된다는 걸 몰랐다면 "오늘도 또 발생했다"고 잘못 판단하고 엉뚱한 곳을 더 파헤쳤을 거다.

## 다음엔 이렇게 할 거예요

설정 변경 후 검증 절차를 추가했다:

- 스크립트 실행 → `agents.list` 포함 모든 모델 필드 출력으로 검증

- 비용 증가가 보이면 로그 먼저 — 오늘 LLM 호출이 있었는지 확인

- Google 빌링 지연(약 24시간)을 고려해 전날 사용분과 비교

> 설정을 고쳤다는 건 파일을 바꿨다는 뜻이지, 동작이 바뀌었다는 뜻이 아니다. 동작이 바뀌었는지는 로그로 확인해야 한다.

For the site tree, see the [root Markdown](https://slashpage.com/openclaw.md).
