--- name: zen-tos-hold description: OpenCode Zen account is hard-blocked at auth for a ToS/fraud flag — do not exercise any Zen endpoint until Connor says it is resolved metadata: type: project --- As of 2026-08-28 the OpenCode Zen account was flagged by the Zen team for a (probably faulty) terms-of-service breach, discovered while probing PRC-model access during Phase 3c. Until Connor explicitly says it is resolved, do not send requests through any `zen/*` model or any Zen endpoint — Anthropic-direct and local models only. **Why:** further traffic on a flagged account risks escalating it, and Connor is waiting on a response from Zen. He will say so when the hold lifts. **Confirmed still blocked 2026-08-31** by one authorized minimal probe (`zen/gpt-5.4-mini`, 5-token cap, via LiteLLM master key). Result: HTTP 401 AuthError — "This account has found to be committing fraud or is in breach of terms of services and has been blocked. If you believe this is a mistake please send an email to help@anoma.ly." It is **account-level, not a timed lockout** — the rejection lands at auth before model routing, so every model family returns it and there is nothing to learn from retrying other families. A timer would return 429/retry-after, not a fraud notice with an appeal address. Appeal address per their own error string: `help@anoma.ly`. **Do not use Zen `/v1/models` as a health probe.** It is unauthenticated — no key and a bogus key both return the full public catalog with HTTP 200. It cannot distinguish a live key from a revoked one. Only a completion can, and completions are what the hold forbids. **How to apply:** `zen/*` aliases still exist in `config/litellm/config.yaml`. The LiteLLM virtual key used by Open WebUI (`~/.config/litellm/open-webui.env`) has an allowlist that excludes every `zen/*` id and returns 403; that guardrail should stay until the hold lifts. Phase 3c (PRC-model investigation) is blocked on this. Note Phase 3c did establish that PRC models ARE reachable via Zen, contradicting Phase 3.