BlogNarzędzia

Claude Code, GitHub Copilot i Cursor za własną bramą LLM

Agentów kodujących da się już dziś puścić przez bramę LLM (LLM gateway), ale według stanu na 7 listopada 2026 trzy popularne narzędzia obsługują to w bardzo różnym stopniu. Claude Code jest do tego przygotowany: ustawiasz ANTHROPIC_BASE_URL na adres bramy, każdy programista dostaje własne poświadczenie, a ustawienie zarządzane może odrzucić każdy inny cel. Enterprise BYOK w GitHub Copilot, wciąż w public preview, dodaje do Chatu, CLI i IDE modele twojego dostawcy albo endpointu zgodnego z OpenAI. Cursor przyjmuje twoje klucze dostawców, ale każde zapytanie nadal idzie przez jego serwery, a Tab dalej działa na modelach Cursora.

Autor: Zaktualizowano

Po co w ogóle kierować agentów kodujących przez bramę

Brama daje jeden punkt kontroli nad ruchem, który inaczej idzie prosto z laptopa każdego programisty do dostawcy modelu. Dokumentacja Claude Code od Anthropic wymienia te same korzyści, o które chodzi większości zespołów platformowych:

  • Wydatki na zespół: każdy programista ma własne poświadczenie do bramy, więc użycie jest przypisane do osoby i zespołu bez względu na to, który dostawca obsłużył zapytanie
  • Lista dozwolonych modeli: brama udostępnia tylko modele, które zatwierdziłeś i wyceniłeś
  • Unieważnianie w jednym miejscu: klucz dostawcy zostaje na serwerze, a odejście pracownika oznacza unieważnienie jednego poświadczenia do bramy
  • Wybór dostawcy i regionu: brama może przekazywać ruch do Claude na Amazon Bedrock, Google Cloud lub Microsoft Foundry na twoim własnym koncie chmurowym, a zmiana nie wymaga rekonfiguracji komputerów programistów
  • Dziennik audytowy zapytań do modeli, jeśli wymagają go twoje zasady

Zmiana dostawcy bez ruszania laptopów działa tylko wtedy, gdy brama wystawia jeden endpoint w formacie Anthropic, niezależnie od tego, co stoi za nią. Ceną jest to, że brama staje się infrastrukturą, którą sam utrzymujesz. Anthropic ostrzega, że Claude Code z każdym wydaniem dostaje nowe możliwości, a brama, która ich nie przekazuje, psuje te funkcje, więc ktoś musi ją aktualizować. Naszym zdaniem jeden zespół z jednym dostawcą i bez wymogu audytu często poradzi sobie z osobnymi workspace'ami lub kluczami u dostawcy. Brama zaczyna się opłacać, gdy w grę wchodzi kilka zespołów, kilka narzędzi albo wymóg co do miejsca przetwarzania danych.

Którzy agenci kodujący obsługują bramę, stan na 7 listopada 2026

Tylko Claude Code pozwala wysłać cały ruch do modeli przez twoją bramę i wymusić to centralnie. GitHub Copilot i Cursor pozwalają podpiąć klucze dostawców lub endpointy dla części produktu, a w pozostałej części nadal działają ich własne modele.

Obsługa bram i własnych kluczy według dokumentacji dostawców, sprawdzona 7 listopada 2026. Funkcje w wersji preview mogą się zmienić bez zapowiedzi
NarzędzieJak się łączyCzy da się to wymusićCo zostaje poza twoją bramą
Claude CodeANTHROPIC_BASE_URL plus poświadczenie do bramy albo zmienne w formacie dostawcy dla Bedrock, Google Cloud i FoundryTak, przez allowedProviders ustawione na customEndpoint w ustawieniach zarządzanych, od Claude Code v2.1.285Telemetria i kilka sprawdzeń wysyłanych bezpośrednio do Anthropic; Claude Code w Slacku i sesje w chmurze
GitHub Copilot, enterprise BYOK (public preview)Właściciele dodają klucze do Anthropic, AWS Bedrock, Google AI Studio, Microsoft Foundry, OpenAI, dostawców zgodnych z OpenAI lub xAICzęściowo: własne modele trafiają do wyboru modeli obok modeli GitHubaWbudowane modele GitHuba; dokumentacja wymienia jako miejsca użycia tylko Chat, Copilot CLI i IDE
GitHub Copilot, lokalny BYOKKażdy użytkownik dodaje klucz dostawcy w VS Code, IDE JetBrains, Xcode, Copilot CLI i innych klientachNie, ale właściciele planów Business i Enterprise mogą go wyłączyć politykąUzupełnianie kodu w VS Code, według ogłoszenia GitHuba z kwietnia 2026
CursorWłasne klucze do OpenAI, Anthropic, Google, Azure OpenAI i AWS BedrockBrak udokumentowanego centralnego wymuszeniaUzupełnianie Tab; każde zapytanie przechodzi przez serwery Cursora, gdzie budowany jest prompt

GitHub Copilot z własnym kluczem

GitHub ma dwa mechanizmy. Enterprise BYOK dla Copilot Business i Copilot Enterprise, wciąż w public preview, pozwala właścicielom enterprise lub organizacji dodać klucze. Modele z tych kluczy każdy użytkownik widzi potem na dole listy wyboru modeli. W styczniu 2026 GitHub dodał AWS Bedrock, Google AI Studio i dowolnego dostawcę zgodnego z OpenAI, a także modele z Responses API, maksymalne okno kontekstu i streaming. Przez opcję zgodną z OpenAI podłączysz endpoint LiteLLM. Klucze lokalnego BYOK zostają na komputerze użytkownika. Według ogłoszenia GitHuba dla VS Code z kwietnia 2026 użycie rozlicza twój dostawca, nie wlicza się ono do limitów zapytań Copilota i nie obejmuje uzupełniania kodu.

GitHub opisuje enterprise BYOK jako obsługiwany po stronie serwera, przez Copilot API, i nie dokumentuje ścieżki danych. Rozumiemy to tak, że zapytania do twojego endpointu wychodzą wtedy od GitHuba, a nie z laptopa programisty. Zanim zaplanujesz bramę dostępną tylko wewnętrznie, potwierdź więc wymagania sieciowe z GitHubem.

Cursor z własnymi kluczami API

Strona pomocy Cursora o kluczach API wymienia OpenAI, Anthropic, Google, Azure OpenAI i AWS Bedrock, przy czym Bedrock podłączasz kluczami w IDE albo rolami IAM ustawionymi w panelu Cursora. Własne klucze działają tylko z modelami czatu, a uzupełnianie Tab nadal korzysta z wbudowanych modeli Cursora. Zapytania przechodzą przez serwery Cursora, gdzie powstaje ostateczny prompt. Klucz jest wysyłany z każdym zapytaniem i nie jest przechowywany. Polityka Zero Data Retention Cursora nie obowiązuje przy własnych kluczach, a w planach Teams i Enterprise Cursor pobiera za zapytania z własnym kluczem dodatkową opłatę oprócz opłat dostawcy. Strona nie dokumentuje własnego bazowego adresu URL. W praktyce własne klucze pozwalają rozliczać użycie przez twoje konto Azure lub Bedrock, ale ruch i tak wychodzi poza twoją sieć.

Konfiguracja Claude Code z LiteLLM lub inną bramą

Claude Code potrzebuje bazowego adresu URL i poświadczenia. ANTHROPIC_BASE_URL wskazuje bramę, która obsługuje format Anthropic Messages pod /v1/messages. LiteLLM to potrafi. Poświadczenie trafia do ANTHROPIC_AUTH_TOKEN, jeśli brama czyta token bearer z nagłówka Authorization, a tak właśnie przekazuje się wirtualne klucze LiteLLM, albo do ANTHROPIC_API_KEY, jeśli czyta x-api-key. Dla kluczy, które rotują albo pochodzą z sejfu, polecenie apiKeyHelper wypisuje poświadczenie, a Claude Code wysyła je w obu nagłówkach. Wynik jest domyślnie trzymany w pamięci przez pięć minut, co zmienisz przez CLAUDE_CODE_API_KEY_HELPER_TTL_MS.

Rozprowadzaj jedno i drugie przez ustawienia zarządzane i narzędzia do sekretów, nigdy przez repozytorium. Anthropic ostrzega przed wpisywaniem poświadczenia do .claude/settings.json projektu, bo ten plik trafia do commita. Żeby zarządzany komputer mógł łączyć się tylko z bramą, plik ustawień zarządzanych ustawia razem allowedProviders i bazowy adres URL:

Ustawienia zarządzane, które przypinają Claude Code do jednej bramy (od Claude Code v2.1.285)
{
  "allowedProviders": ["customEndpoint"],
  "env": {
    "ANTHROPIC_BASE_URL": "https://llm-gateway.example.com"
  }
}

Claude Code odrzuca wtedy każdą sesję skierowaną gdzie indziej, także bezpośrednio do Anthropic albo do prywatnego proxy programisty. Jeśli brama mówi natywnymi formatami Amazon Bedrock albo Agent Platform w Google Cloud, wcześniej Vertex AI, użyj ANTHROPIC_BEDROCK_BASE_URL z CLAUDE_CODE_USE_BEDROCK=1 i CLAUDE_CODE_SKIP_BEDROCK_AUTH=1 albo odpowiedników z VERTEX. Claude Code wysyła wtedy tylko funkcje, które ci dostawcy akceptują. Microsoft Foundry używa ANTHROPIC_FOUNDRY_BASE_URL z CLAUDE_CODE_USE_FOUNDRY=1.

Trzy szczegóły regularnie zaskakują zespoły. Poświadczenie do bramy zastępuje w tych zapytaniach subskrypcję claude.ai programisty, więc za ruch płaci za tokeny właściciel klucza u dostawcy. Samo ustawienie bazowego adresu URL zostawia w użyciu logowanie do subskrypcji. Rozszerzenie VS Code czyta zmienne bramy z claudeCode.environmentVariables, a aplikacja desktopowa z własnej konfiguracji inferencji zewnętrznej, nie z ANTHROPIC_BASE_URL. Do tego Anthropic nie wspiera kierowania Claude Code do modeli innych niż Claude przez jakąkolwiek bramę, nawet jeśli brama technicznie to umożliwia.

Co widzi brama, co logować, a czego nie przechowywać

Brama widzi wszystko, co agent wysyła do modelu: prompt systemowy, rozmowę, kod źródłowy i zawartość plików, które agent przeczytał, wyniki poleceń i narzędzi. Sekret w pliku, który agent otworzy, może więc przez nią przejść. Claude Code wysyła też nagłówki pomocne w przypisywaniu: x-claude-code-session-id grupuje zapytania jednej sesji, a x-claude-code-agent-id oznacza zapytania od subagentów. Anthropic zaznacza, że identyfikator agenta wskazuje tylko agenta, nie osobę ani urządzenie.

Do rozliczania kosztów i utrzymania wystarczą metadane. Przydatny rekord dla każdego zapytania zawiera:

  • Klucz do bramy oraz zespół i programistę, do których należy
  • Model, o który poproszono, i model, który odpowiedział, łącznie z fallbackami
  • Tokeny wejściowe, wyjściowe, odczytu i zapisu cache oraz wyliczony koszt
  • Kod statusu, opóźnienie i czas do pierwszego tokenu
  • Identyfikatory sesji i agenta z nagłówków zapytania

Nie przechowuj treści zapytań i odpowiedzi, chyba że wymaga tego spisany cel. Według dokumentacji LiteLLM domyślnie nie zapisuje treści zapytań i odpowiedzi. store_prompts_in_spend_logs to włącza, a administrator może też zmienić to w interfejsie, gdzie ustawienie ma pierwszeństwo przed plikiem konfiguracyjnym. maximum_spend_logs_retention_period usuwa stare logi wydatków, a turn_off_message_logging trzyma wiadomości z dala od zewnętrznych callbacków logowania, przy czym wydatki nadal są liczone. Dane o użyciu dla każdego programisty to dane osobowe, więc przed startem uzgodnij ich cel i okres przechowywania z osobą odpowiedzialną za ochronę danych, a jeśli w firmie działa rada zakładowa, także z nią.

Nie każde zapytanie przechodzi przez bramę. Nawet gdy ANTHROPIC_BASE_URL na nią wskazuje, Claude Code wysyła telemetrię do Anthropic, bez twojego poświadczenia do bramy, a sprawdzenie bezpieczeństwa domen w WebFetch wywołuje api.anthropic.com bezpośrednio. CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 wyłącza ruch, który nie jest niezbędny, ale wyłącza też automatyczne aktualizacje, więc zaplanuj inną ścieżkę aktualizacji.

Budżety i limity zapytań dla zespołów bez spowalniania programistów

Twardy limit ustaw na zespół, a limity dla pojedynczych programistów trzymaj na hojnym poziomie. Sesje agentów generują skoki ruchu: jedno zadanie może uruchomić równolegle kilku subagentów, z których każdy wysyła duży prompt. Ciasny limit zapytań na minutę na kluczu zablokuje więc normalną pracę na długo przed tym, zanim ochroni budżet. To nasza własna ocena, wynikająca z kształtu tego ruchu. W LiteLLM masz do dyspozycji:

  • Na zespół: max_budget z budget_duration do regularnego resetu oraz team_member_budget jako domyślny budżet każdego członka
  • Na klucz: max_budget, budget_duration, rpm_limit, tpm_limit i max_parallel_requests, a do tego budget_limits dla kilku okien na jednym kluczu, na przykład limitu dziennego i miesięcznego
  • Na model: model_max_budget, które dokumentacja oznacza jako funkcję wersji Enterprise

O tym, czy limity działają, decydują dwa szczegóły operacyjne. Budżety są w ogóle egzekwowane tylko z bazą Postgres. Przy więcej niż jednym workerze lub replice LiteLLM zdecydowanie zaleca Redis. Bez niego limity zapytań są liczone osobno na każdym workerze, budżety mogą zostać przekroczone, a unieważniony klucz działa dalej na workerach, które nie przetworzyły unieważnienia, dopóki nie wygaśnie ich wpis w cache. Potem ustal, co programista zobaczy po dojściu do limitu. Niewyjaśniony błąd w środku zadania kosztuje więcej czasu pracy, niż oszczędza tokenów, więc ostrzegaj zespół poniżej twardego limitu i opublikuj, kto może podnieść budżet.

Typowe awarie i jak je rozpoznać

Większość problemów bierze się z bramy, która po drodze zmienia zapytanie lub odpowiedź. Dokumentacja protokołu bram i tabela rozwiązywania problemów od Anthropic opisują między innymi takie przypadki:

Awarie bram z Claude Code według dokumentacji Anthropic i LiteLLM, stan na 7 listopada 2026
ObjawPrzyczynaRozwiązanie
Błąd nieprawidłowej nazwy modelu po wyborze modelu w /modelIdentyfikator modelu wysyłany przez Claude Code nie jest model_name w konfiguracji LiteLLMDodaj dokładne identyfikatory do model_list, przypnij ANTHROPIC_MODEL albo włącz CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
Sesje się zawieszają albo przerywają przy długich przerwach na myślenieBrama buforuje strumień albo usuwa zdarzenia SSE ping; Claude Code domyślnie przerywa strumień po 300 sekundach ciszyPrzekazuj strumień na bieżąco i przepuszczaj zdarzenia ping
Błędy 400 wskazujące pola schematów narzędzi lub context_management, często z Extra inputs are not permittedNagłówek beta został usunięty, a pole w treści przeszło, albo treść w formacie Anthropic trafiła do BedrockPrzekazuj anthropic-beta i pola treści bez zmian albo ustaw CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
Brak błędu, ale dużo tokenów wejściowych i niewielka aktywność cacheZnaczniki cache_control zostały usunięte albo treść systemowa spłaszczona do zwykłego tekstuPrzekazuj cache_control wszędzie tam, gdzie występuje, i zachowaj treść w formie bloków
403 z treścią HTML i brak zapytania w logach bramyReguły WAF przeciw cross-site scripting w treści zapytań reagują na kod źródłowy w promptachWyłącz ścieżkę /v1/messages z inspekcji treści zapytań
Claude Code przestaje sam obchodzić odrzucone funkcjeBrama opakowuje błędy dostawcy we własny format i logika ponowień przestaje je rozpoznawaćPrzekazuj treść błędów od dostawcy bez zmian

Prompt caching sprawdź osobno, bo zepsuty cache kosztuje pieniądze, nie zgłaszając błędu. Porównaj tokeny odczytu cache na sesję przed wprowadzeniem bramy i po nim. W wersjach Claude Code sprzed v2.1.181 blok atrybucji zmieniający się przy każdym zapytaniu dodatkowo psuł cache oparte na treści zapytania. Dokumentacja protokołu od Anthropic opisuje na ten przypadek CLAUDE_CODE_ATTRIBUTION_HEADER=0.

Krótka lista kontrolna wdrożenia

Wdrażaj w tej kolejności i sprawdzaj każdy krok prawdziwą sesją agenta, a nie pojedynczym zapytaniem curl:

  1. 1

    Ustal zakres

    Wypisz, które narzędzia i miejsca użycia muszą korzystać z bramy. CLI Claude Code, rozszerzenie VS Code i aplikacja desktopowa to potrafią. Claude Code w Slacku i sesje w chmurze nie, a Copilot i Cursor tylko częściowo. Nie włączaj niczego, co nie może omijać bramy.

  2. 2

    Uruchom i zabezpiecz bramę

    Przypnij wersję bramy, uruchom Postgres dla budżetów i Redis dla więcej niż jednego workera, a okres przechowywania logów ustaw przed pierwszym zapytaniem.

  3. 3

    Zdefiniuj modele i nazwy

    Opublikuj listę dozwolonych modeli z dokładnymi identyfikatorami, które wysyła każde narzędzie, i zmapuj je w bramie.

  4. 4

    Wydaj jedno poświadczenie na programistę

    Przypisz każdy klucz do zespołu, ustaw budżety zespołów i hojne limity na klucz, a unieważnienie przetestuj na każdej replice.

  5. 5

    Rozprowadź konfigurację centralnie

    Rozprowadź bazowy adres URL, mechanizm poświadczeń i allowedProviders przez ustawienia zarządzane Claude Code, a polityki BYOK dla Copilota ustaw w ustawieniach enterprise lub organizacji na GitHubie.

  6. 6

    Przeprowadź sesję odbiorczą

    Zanim zaprosisz wszystkich, sprawdź z zespołem testowym streaming, wywołania narzędzi, subagentów, odczyty cache i przekroczenie budżetu, a każdy programista niech potwierdzi adres bramy w /status.

  7. 7

    Testuj ponownie przy każdej aktualizacji

    Claude Code z każdym wydaniem zmienia to, co wysyła, więc powtarzaj sesję odbiorczą przed aktualizacją bramy i przed dopuszczeniem nowej wersji klienta.

Cloudsail konfiguruje i utrzymuje bramy LiteLLM dla zespołów inżynierskich oraz wdraża na nich Claude Code, łącznie z ustawieniami zarządzanymi, budżetami zespołów i opisaną wyżej sesją odbiorczą.

Pytania

Czy Claude Code może używać modeli GPT lub open-weight przez LiteLLM?

Brama potrafi tłumaczyć zapytania, a LiteLLM dokumentuje, jak to zrobić. Anthropic stwierdza jednak, że nie wspiera kierowania Claude Code do modeli innych niż Claude przez jakąkolwiek bramę, więc funkcje mogą się psuć między wydaniami, a to ryzyko bierzesz na siebie.

Czy klucz do bramy nadal korzysta z naszej subskrypcji Claude?

Nie. Dopóki aktywne jest poświadczenie do bramy albo apiKeyHelper, zapytania niosą to poświadczenie zamiast logowania claude.ai, limity subskrypcji nie obowiązują, a ruch jest rozliczany za tokeny na rzecz właściciela klucza u dostawcy. Samo ustawienie ANTHROPIC_BASE_URL zostawia w użyciu logowanie do subskrypcji.

Czy brama może zostać w naszej sieci wewnętrznej?

W przypadku Claude Code tak: zapytania idą z komputera programisty do bramy, więc wystarczy VPN albo wewnętrzna nazwa DNS. Cursor kieruje zapytania przez własne serwery, a GitHub obsługuje enterprise BYOK po stronie serwera, więc endpoint dla któregokolwiek z nich musiałby być osiągalny od strony dostawcy. Zanim zaplanujesz prywatny endpoint, potwierdź wymagania sieciowe z dostawcą.

Czy LiteLLM przechowuje nasze prompty i kod źródłowy?

W logach wydatków domyślnie nie: według dokumentacji treść zapytań i odpowiedzi jest zapisywana tylko po włączeniu store_prompts_in_spend_logs. Zewnętrzne callbacki logowania to osobna ścieżka, którą obejmuje turn_off_message_logging. Sprawdź oba ustawienia w każdym środowisku, bo administrator może zmienić ustawienie logów wydatków w interfejsie.

Porozmawiaj z inżynierem

Przyjdź z jednym zadaniem, które chcesz usprawnić. Rozmowa trwa 30 minut i nie wymaga dostępu do twoich systemów ani danych.

Rezerwacja odbywa się w Kalendarzu Google.

Wolisz najpierw napisać? Zostaw adres e-mail i kilka zdań, a odpowiemy, proponując terminy.

Przycisk przygotowuje e-mail w twoim własnym programie pocztowym, a wysyłasz go samodzielnie. Polityka prywatności (wersja robocza)