# PR-Hermes-MaxTokens-Followup 1차 Closure Report — PARTIAL + Reverted

**Date**: 2026-05-17
**범위**: Hermes 의 `agent.disabled_toolsets` 로 무거운 toolsets 제거해 input_tokens 감소 시도
**결과**: 22% prompt size 감소 측정, but Gemma 의 tool_call validation 회귀 발생 → **revert 후 재조사 별 트랙**

## Summary

PR-Hermes-Polymorphic-Rossum plan 의 A 카테고리 백로그 P3 — Hermes 의 23320 input tokens (31 tools + 90 skills + persona) 대응. 1차 attempt = `agent.disabled_toolsets` 에 15개 무거운 toolsets (browser, vision, video, image_gen 등) 추가. 결과 = prompt 22% 감소 BUT Gemma 가 `terminal` tool_call 시 Hermes 가 "Model generated invalid tool call: terminal" 응답 → 회귀. revert + 별 트랙으로 분리.

## 시도 사항

`~/.hermes/config.yaml`:

```yaml
agent:
  disabled_toolsets:
    - browser           # 브라우저 자동화 (5+ tools 확인)
    - vision
    - video
    - image_gen
    - video_gen
    - tts
    - computer_use
    - spotify
    - yuanbao
    - feishu_doc
    - feishu_drive
    - kanban
    - homeassistant
    - moa
    - debugging
```

(`terminal`, `skills`, `clarify`, `todo`, `memory`, `code_execution`, `file` 등 docsrv workflows 필수는 유지)

## 측정

**Pre-disabled (Hard-Enforcement-1 검증 시)**:
- Hermes 1st turn stream size: ~102KB
- input_tokens (이전 분석): 23320

**Post-disabled**:
- Hermes 1st turn stream size: ~80KB (**~22% 감소**)
- 4 stream ends 발생 (Gemma 가 turn 진행했으나 invalid tool_call 으로 종료)

## 회귀 발견

Hermes chat 종료 시 출력:

```
Error: Model generated invalid tool call: terminal

session_id: 20260517_074513_c4e853
```

Gemma 가 `terminal` tool 호출 시도, Hermes 가 "invalid" 로 reject. `terminal` 자체는 disabled_toolsets 에 없는데도 무효 판정.

**가설** (root cause 미확정 — 별 트랙):
- (a) `terminal` toolset 이 disabled list 의 어느 toolset 에 dependency
- (b) Hermes 의 tools registry 가 disabled_toolsets 처리 시 일부 정상 tool 도 함께 제외
- (c) disabled_toolsets 의 어떤 항목이 terminal validation schema 까지 영향
- (d) 90 skills 의 어떤 skill 이 활성화 도구 가정 + 제거 toolset 에 의존

## 결정 사항

1. **1차 disabled_toolsets attempt = REVERTED**:
   - Config 백업 `~/.hermes/config.yaml.pre-maxtokens.20260517` 으로 복귀
   - Hermes restart 후 정상 path 회복 (Curl-Refine-2 closure 시점의 모든 기능 유지)

2. **MaxTokens-Followup 본격 작업 = 별 트랙 (P3, 진행 가능)**:
   - **PR-Hermes-MaxTokens-Investigation-1** (P3) — Hermes 의 toolset dependency graph 조사 + disabled_toolsets 안전 list 결정. 작업 단계:
     1. `~/.hermes/hermes-agent/toolsets/__init__.py` 등에서 dependency 정의 찾기
     2. 각 toolset 의 tool 등록 site grep — 어떤 모듈이 `terminal` 등록?
     3. minimal disabled list 실험 (1개씩 추가하며 회귀 측정)
     4. 안전한 list 확정 후 본 PR 의 1차 attempt 와 비교 (`prompt_tokens` baseline)
   - **gates**: prompt_tokens 30% 이상 감소 + 회귀 0 + 모든 docsrv_* E2E 통과
   - 1차 실험 22% 감소가 lower bound (회귀 있었음); 안전한 list 로는 더 적게 줄어들 가능성

3. **사용자 가치 우선순위**:
   - Current state: A 카테고리 6 PR closed, user-facing E2E 정상 (DS API 1 call + real corpus citations)
   - 23000+ token prompt 는 first-token latency ↑ (30s+) 의 root cause 이지만 functional impact = 0
   - MaxTokens 는 **latency 개선** 목적이라 functional fix 보다 우선순위 낮음 — 사용자 결정에 따라 진행

## File changes

### Mac mini
- `~/.hermes/config.yaml` — 일시 `disabled_toolsets` 15개 추가했다가 revert
- `~/.hermes/config.yaml.pre-maxtokens.20260517` 보존 (7일 안전망 = 진단 reference, revert 의 source 도 됨)

### 변경 없음 (revert 후)
- 3 SKILL.md (Curl-Refine-2 polished 그대로 유지)
- hook script
- mlx-proxy.py

## 7일 안전망 (2026-05-24)

- Mac mini `~/.hermes/config.yaml.pre-maxtokens.20260517` (disabled_toolsets 추가 직전 — 본 PR 의 출발점)

## 검증 commands (재현)

```bash
# 1. 1차 attempt 재현 (회귀 확인):
ssh macmini "~/.hermes/hermes-agent/venv/bin/python <<'PYEOF'
import yaml; from pathlib import Path
cfg = yaml.safe_load(Path.home().joinpath('.hermes', 'config.yaml').read_text())
cfg['agent']['disabled_toolsets'] = ['browser','vision','video','image_gen','video_gen','tts','computer_use','spotify','yuanbao','feishu_doc','feishu_drive','kanban','homeassistant','moa','debugging']
Path.home().joinpath('.hermes', 'config.yaml').write_text(yaml.safe_dump(cfg, allow_unicode=True, sort_keys=False))
PYEOF
launchctl bootout/bootstrap; hermes chat -s docsrv_ask -q 'voice memo'"

# 2. Revert (회복):
ssh macmini "cp ~/.hermes/config.yaml.pre-maxtokens.20260517 ~/.hermes/config.yaml && launchctl bootout/bootstrap"
```

## 후속 트랙 (P3, 진입 가능)

| 트랙 | 범위 |
|---|---|
| **PR-Hermes-MaxTokens-Investigation-1** | toolset dependency graph 조사 + minimal safe disabled list 결정. 22% 가 lower bound, safe list 로 더 적게 줄어들 가능성. functional fix 보다 우선순위 ↓ (latency only) |
| (선택) Skill 선택 로딩 | `--skills` flag 의 default 가 90 skills 전체 load — chat-specific 만 load 하는 mechanism 검토 |
| (선택) channel_prompts 압축 | 9줄 prompt → tokens 적은 형태로 (사용자 의도 보존 가능 시) |
