Omijanie blokady serwerowej Anthropic w aplikacjach zewnętrznych: analiza techniczna
Anthropic wprowadziła serwerową weryfikację źródeł zapytań do API. Zapytania z oficjalnych klientów, takich jak Claude Code i Cowork, są objęte subskrypcją Pro. Zewnętrzne narzędzia, jak OpenClaw, są przekierowywane do trybu Extra Usage z opłatą za tokeny API, co wielokrotnie zwiększa koszty. Proste zapytanie HTTP z fałszywymi nagłówkami nie działa — serwer analizuje zawartość ciała zapytania.
Cel: sprawić, aby zapytanie było nie do odróżnienia od oficjalnego klienta, zachowując funkcjonalność OpenClaw z 17 narzędziami.
Analiza struktury zapytania
Zapytanie do API Anthropic — JSON z promptem systemowym, historią wiadomości, metadanymi i listą narzędzi. Testy wykazały:
- Prompt systemowy i historia przechodzą weryfikację.
- Dodanie narzędzi prowadzi do detekcji.
Analiza narzędzi w grupach ujawniła problematyczne:
- read, edit, write — przechodzą.
- exec, process — przechodzą.
- sessions_list, sessions_history, sessions_send — przechodzą.
- web_search, web_fetch — przechodzą.
- image, memory_search, memory_get — przechodzą.
- subagents — jest blokowane.
- session_status — jest blokowane.
Serwer Anthropic szuka specyficznych nazw narzędzi, których nie ma w Claude Code. Dwa narzędzia z 17 są wystarczające do przekierowania do Extra Usage.
Architektura proxy-chain
Rozwiązanie: dwupoziomowy proxy między OpenClaw a api.anthropic.com.
- CLIProxyAPI (Go, 23k gwiazd na GitHub): imituje nagłówki Claude Code (user-agent, billing header, client_id). Autoryzacja przez OAuth — proxy generuje URL, użytkownik loguje się w przeglądarce, refresh_token jest zapisywany lokalnie.
- Replace-proxy (Node.js, 133 linie kodu, bez zależności): przechwytuje JSON w obie strony.
- W zapytaniu: subagents → sub_dispatch, session_status → check_status, OpenClaw → Assistant.
- W odpowiedzi: odwrotna zamiana linia po linii dla streaming.
Łańcuch: OpenClaw (port 8318) → replace-proxy → CLIProxyAPI (8317) → api.anthropic.com.
Replace-proxy uruchamia się jako usługa systemd z automatycznym restartem.
Konfiguracja replace-proxy
Kod proxy jest minimalny: serwer HTTP analizuje ciało, stosuje zamiany przez regex, buforuje streaming-zdarzenia.
// Przykład fragmentu: przetwarzanie przychodzącego zapytania
const replaceMap = {
'subagents': 'sub_dispatch',
'session_status': 'check_status',
'OpenClaw': 'Assistant'
};
// JSON.parse(body).tools.forEach(tool => {
// if (replaceMap[tool.name]) tool.name = replaceMap[tool.name];
// });
// Analogicznie dla odpowiedzi
Serwer nasłuchuje na localhost:8318, przekierowuje na CLIProxyAPI:8317.
Konfiguracja OpenClaw
W openclaw.json dodaj providera:
{
"models": {
"providers": {
"custom-proxy": {
"baseUrl": "http://localhost:8318",
"apiKey": "<api-key-z-CLIProxyAPI>",
"api": "anthropic-messages",
"models": [
{"id": "claude-opus-4-6", "contextWindow": 1000000, "maxTokens": 16384},
{"id": "claude-sonnet-4-6", "contextWindow": 200000, "maxTokens": 16384}
]
}
}
}
}
Ustaw domyślne:
openclaw config set "agents.defaults.model.primary" "custom-proxy/claude-opus-4-6"
Zrestartuj OpenClaw. Przełączanie modeli działa przez chat.
Co jest ważne
- Detekcja przez narzędzia: Anthropic sprawdza nazwy narzędzi w JSON-ciele. Unikalne dla OpenClaw (subagents, session_status) wywołują Extra Usage.
- Dwupoziomowy proxy: CLIProxyAPI maskuje nagłówki, replace-proxy — zawartość.
- Autoryzacja OAuth: CLIProxyAPI automatycznie odświeża tokeny, reautoryzacja przy wygaśnięciu refresh_token.
- Wsparcie streaming: Replace-proxy buforuje zdarzenia do zamiany w czasie rzeczywistym.
- Ryzyka: Obejście ToS Anthropic. Możliwe zablokowanie konta; detekcja może się zmienić (wzorce prompta, struktura).
Ograniczenia i monitoring
- Nie dla produkcji: użycie osobiste na własne ryzyko.
- Monitoring: logi proxy pod kątem błędów zamiany lub nowych detekcji.
- Skalowanie: systemd zapewnia stabilność, ale przy aktualizacjach Anthropic wymagane są modyfikacje replace-map.
Testy potwierdziły działanie na Opus 4.6 i Sonnet 4.6 bez Extra Usage.
— Editorial Team
Brak komentarzy.