**The user's API key has `ʋ` (U 028B, Latin small letter v with hook) instead of a regular `v`.** This happens more often than you'd think — copy-pasting from certain web pages, PDF documents, or rich text editors can silently substitute characters that look identical in many fonts.
The error chain:
1. API key goes into `Authorization: Bearer sk-proj-...ʋ...` header
2. httpx encodes all header values as ASCII (per HTTP spec)
3. `ʋ` at position 146 in the key (position 153 in "Bearer " key) fails
4. UnicodeEncodeError propagates to the retry loop
5. The existing recovery sanitizes messages, tools, system prompt, headers — but NOT the API key
6. Retries fail with the same error because the key is unchanged
The existing `UnicodeEncodeError` recovery in `run_agent.py` (line 8876) covers messages, tools, system prompt, and `_client_kwargs["default_headers"]`, but it doesn't reach the API key because the `Authorization` header is built dynamically from `self.api_key` inside the OpenAI SDK's `auth_headers` property on every request. Sanitizing the `default_headers` dict doesn't touch it.
**For the user:** Tell them to re-enter their API key. They should copy it fresh from the OpenAI dashboard and paste it directly into `hermes setup`. The `ʋ` at position ~146 in their key needs to be a regular `v`.