주거 수영장
Credential Pools는 동일한 제공자를 위한 다수 API 열쇠 또는 OAuth 토큰을 등록하게 합니다. 1개의 열쇠가 비율 한계 또는 청구 할당량 때, Hermes는 다음 건강한 열쇠에 자동적으로 자전합니다 - 엇바꾸기 제공자 없이 당신의 세션를 살아 유지하세요.
이것은 fallback 제공 업체와 다릅니다. different 제공 업체로 전환합니다. Credential 풀은 동일한 프로비저스 교체입니다. fallback 제공자는 크로스 프로비저스 장애입니다. 풀은 첫 번째 시도 - 모든 풀 키가 배출되는 경우, then fallback 제공자는 활성화합니다.
어떻게 작동하나요?
Your request
→ Pick key from pool (round_robin / least_used / fill_first / random)
→ Send to provider
→ 429 rate limit?
→ Retry same key once (transient blip)
→ Second 429 → rotate to next pool key
→ All keys exhausted → fallback_model (different provider)
→ 402 billing error?
→ Immediately rotate to next pool key (24h cooldown)
→ 401 auth expired?
→ Try refreshing the token (OAuth)
→ Refresh failed → rotate to next pool key
→ Success → continue normally
빠른 시작
이미 .env에서 API 키 세트를 가지고 있다면, Hermes는 1 키 풀로 자동 발견됩니다. 풀에서 혜택을 얻으려면, 더 많은 키를 추가:
# Add a second OpenRouter key
hermes auth add openrouter --api-key sk-or-v1-your-second-key
# Add a second Anthropic key
hermes auth add anthropic --type api-key --api-key sk-ant-api03-your-second-key
# Add an Anthropic OAuth credential (requires Claude Max plan + extra usage credits)
hermes auth add anthropic --type oauth
# Opens browser for OAuth login
수영장 확인:
hermes auth list
산출:
openrouter (2 credentials):
#1 OPENROUTER_API_KEY api_key env:OPENROUTER_API_KEY ←
#2 backup-key api_key manual
anthropic (3 credentials):
#1 hermes_pkce oauth hermes_pkce ←
#2 claude_code oauth claude_code
#3 ANTHROPIC_API_KEY api_key env:ANTHROPIC_API_KEY
``←`는 현재 선택된 자격 증명을 나타냅니다.
## Interactive 관리 \{#interactive-management}
`hermes auth`를 인터렉티브 마법사에 대 한 subcommand 없이 실행:
```bash
hermes auth
이 풀 풀 상태를 보여주고 메뉴를 제공합니다:
What would you like to do?
1. Add a credential
2. Remove a credential
3. Reset cooldowns for a provider
4. Set rotation strategy for a provider
5. Exit
API 키와 OAuth (Anthropic, Nous, Codex)를 지원하는 공급자를 위해, 유형이 있는 교류 요청을 추가하십시오:
anthropic supports both API keys and OAuth login.
1. API key (paste a key from the provider dashboard)
2. OAuth login (authenticate via browser)
Type [1/2]:
CLI 명령
| 명령 | 설명 |
|---|---|
hermes auth | 대화형 credential pool 관리 마법사 |
hermes auth list | 모든 pool과 credential 보기 |
hermes auth list <provider> | 특정 제공자의 pool 보기 |
hermes auth add <provider> | credential 추가. 유형과 키는 프롬프트로 입력 |
hermes auth add <provider> --type api-key --api-key <key> | API 키를 비대화형으로 추가 |
hermes auth add <provider> --type oauth | 브라우저 로그인으로 OAuth credential 추가 |
hermes auth remove <provider> <index> | 1-based index로 credential 제거 |
hermes auth reset <provider> | cooldown/exhaustion 상태 초기화 |
회전 전략
자주 묻는 질문 hermes auth → "설정 회전 전략" 또는 config.yaml:
credential_pool_strategies:
openrouter: round_robin
anthropic: least_used
| 회사연혁 | 채용 정보 |
|---|---|
fill_first (기본값) | 그것은 소진 될 때까지 첫 번째 건강한 열쇠를 사용, 다음 다음 이동 |
round_robin | 열쇠를 통해서 주기 균등하게, 각 선택 후에 자전 |
least_used | 항상 가장 낮은 요청 수로 키 선택 |
random | 건강한 열쇠 중 무작위 선택 |
오류 복구
풀은 다른 오류를 처리:
| 계정 정보 | 채용 정보 | 연락처 |
|---|---|---|
| ** 429 비율 제한** | 동일한 열쇠를 한 번 구부리십시오 (Transient). 두 번째 연속 429 다음 키로 회전 | 1시간 |
| **402 빌링/쿼타 ** | 즉시 다음 키로 회전 | 24시간 |
| ** 401 Auth 만료** | OAuth 토큰을 먼저 상쾌하게 시도하십시오. 새로 고침하면 회전 | — |
| ** 모든 키 배기 * * 이름 | fallback_model 으로 구성 | — |
has_retried_429 플래그는 모든 성공적인 API 호출에 재설정하므로 단일 일시적인 429는 회전을 트리거하지 않습니다.
사용자 정의 Endpoint 풀
Custom OpenAI-compatible endpoints (Together.ai, RunPod, 로컬 서버)는 config.yaml의 custom_providers의 엔드포인트 이름으로 키 입력된 풀을 얻습니다.
hermes model를 통해 사용자 정의 엔드포인트를 설정하면 "Together.ai"또는 "Local (localhost:8080)"과 같은 이름을 자동 생성합니다. 이 이름은 풀 키가됩니다.
# After setting up a custom endpoint via hermes model:
hermes auth list
# Shows:
# Together.ai (1 credential):
# #1 config key api_key config:Together.ai ←
# Add a second key for the same endpoint:
hermes auth add Together.ai --api-key sk-together-second-key
주문 엔드 포인트 풀은 auth.json 아래 credential_pool에 custom: 접두사로 저장됩니다
{
"credential_pool": {
"openrouter": [...],
"custom:together.ai": [...]
}
}
자동Discovery
Hermes는 여러 소스에서 자격 증명을 자동으로 발견하고 시작에 풀을 종자:
| 이름 * | 이름 * | 자동 입력? |
|---|---|---|
| 환경 변수 | OPENROUTER_API_KEY, ANTHROPIC_API_KEY | 이름 * |
| OAuth 토큰 (auth.json) | Codex 장치 코드, Nous 장치 코드 | 이름 * |
| Claude 코드 자격 | ~/.claude/.credentials.json | 예 (Anthropic) |
| 헤르메스 PKCE 오아우트 | ~/.hermes/auth.json | 예 (Anthropic) |
| 사용자 정의 endpoint 설정 | config.yaml의 model.api_key | 예 (주문 마감) |
| 수동 항목 | 자주 묻는 질문 hermes auth add | auth.json에서 주장 |
Auto-seeded Entry는 각 풀로드에서 업데이트됩니다. env var를 제거하면 풀 엔트리가 자동으로 실행됩니다. 수동 항목 (hermes auth add를 통해 추가) 자동 실행되지 않습니다.
대표 및 시약 공유하기
delegate_task를 통해 에이전트 스파셋 시약이 자동적으로 어린이와 공유될 때:
- **Same 공급자 ** - 아이는 부모의 풀 풀 풀을받습니다, 비율 한계에 열쇠 교체를 가능하게 합니다
- **Different 공급자 ** - 공급자의 자신의 풀 (구성하는 경우)
- **구성 없음 ** — 아이는 상속한 단일 API 키로 돌아갑니다
이것은 하위 시약은 부모와 동일한 비율 제한 탄력에서 혜택을 의미합니다. 추가 구성이 필요하지 않습니다. Per-task credential 상승은 아이들이 동시 자전 열쇠 때 서로 충돌하지 않습니다.
실 안전
credential 풀은 모든 국가 mutations (select(), mark_exhausted_and_rotate(), try_refresh_current(), mark_used())의 스레드 잠금을 사용합니다. 게이트웨이가 여러 채팅 세션을 동시에 처리할 때 안전한 동시 접근을 보장합니다.
회사연혁
전체 데이터 흐름 다이어그램의 경우, 저장소에 docs/credential-pool-flow.excalidraw를 참조하십시오.
credential 풀은 공급자 해결책 층에 통합합니다:
agent/credential_pool.py- 풀 매니저: 저장, 선택, 회전, 냉각hermes_cli/auth_commands.py— CLI 명령 및 상호 작용 마법사hermes_cli/runtime_provider.py- 풀웨어 자격 증명run_agent.py— 오류 복구: 429/402/401 → 풀 회전 → fallback
제품 정보
풀 상태는 ~/.hermes/auth.json에서 저장됩니다
{
"version": 1,
"credential_pool": {
"openrouter": [
{
"id": "abc123",
"label": "OPENROUTER_API_KEY",
"auth_type": "api_key",
"priority": 0,
"source": "env:OPENROUTER_API_KEY",
"access_token": "sk-or-v1-...",
"last_status": "ok",
"request_count": 142
}
]
},
}
전략은 config.yaml (auth.json)에 저장됩니다
credential_pool_strategies:
openrouter: round_robin
anthropic: least_used