Przejdź do głównej zawartości

Routines: przebiegi Claude Code z harmonogramu, z API i z GitHuba

Routine w Claude Code to zapisana konfiguracja: prompt, jedno lub więcej repozytoriów i zestaw konektorów, która uruchamia się jako pełna sesja w chmurze z harmonogramu, po uwierzytelnionym POST-cie HTTP albo po zdarzeniu z GitHuba. Routines działają na infrastrukturze Anthropic, bez wyboru trybu uprawnień i bez pytań o zgodę w trakcie przebiegu (podgląd badawczy, sprawdzone 2026-08-28 względem code.claude.com/docs/en/routines).

Podgląd badawczy Pro, Max, Team, Enterprise — z włączonym Claude Code on the web

Twój poranek na dyżurze wygląda za każdym razem tak samo: otwierasz tracker, przeglądasz, co przyszło w nocy, zgadujesz, które alerty są tym samym alertem, i dopiero potem zaczynasz czytać kod. Sesja, którą zostawiłeś uruchomioną, umarła przy zamknięciu klapy, /loop wygasł po siedmiu dniach, a workflow napisany na zapchanie dziury to 180 linii YAML-a, których nikt nie chce dotykać.

  • Nocny przebieg triage’u, który czyta wczorajsze zgłoszenia przez konektor i wystawia uporządkowaną kolejkę, zanim otworzysz laptopa
  • Endpoint HTTP /fire, na który Twoje narzędzie alertujące wyśle POST, więc wezwanie otwiera szkic PR zamiast pustego terminala
  • Wyzwalacz pull_request.opened stosujący Twoją własną checklistę przeglądu, odfiltrowany tak, by nigdy nie budził się na szkicach
  • Audytowalny model wypychania pracy: praca ląduje na gałęziach z prefiksem claude/, a pushe gdzie indziej są odrzucane pod trzema nazwanymi warunkami
  • Regułę, kiedy sięgnąć po routine zamiast po /loop, /goal, subagenta albo Agent SDK

Każdy wyzwalacz produkuje to samo: nową sesję w chmurze, od zera. „Routines działają autonomicznie jako pełne sesje Claude Code w chmurze: nie ma wyboru trybu uprawnień ani pytań o zgodę w trakcie przebiegu”. Nikogo nie ma przy klawiaturze, żeby zatwierdzić wywołanie Bash, więc trzy decyzje konfiguracyjne biorą na siebie ciężar, który wcześniej dźwigała warstwa zatwierdzania.

  1. Każde repozytorium jest klonowane od nowa, z gałęzi domyślnej. Nic nie przenosi się z poprzedniego przebiegu ani z Twojego laptopa. Umiejętności zacommitowane do repozytorium są dostępne; serwery MCP dodane lokalnie przez claude mcp add już nie, bo mieszkają na Twojej maszynie, a nie na koncie claude.ai. Dodaj taki serwer jako konektor na claude.ai albo zadeklaruj go w zacommitowanym .mcp.json.

  2. Każdy podłączony konektor jest domyślnie włączony, a dokumentacja mówi wprost, co to znaczy: „Claude może użyć każdego narzędzia z włączonego konektora, łącznie z zapisami, bez pytania o zgodę w trakcie przebiegu”. Usunięcie tych, których routine nie potrzebuje, to najskuteczniejsze dostępne zawężenie.

  3. Przebieg dzieje się jako Ty. Routines należą do Twojego indywidualnego konta claude.ai, nie są współdzielone z zespołem i liczą się do Twojego dziennego limitu przebiegów. Commity i pull requesty noszą Twojego użytkownika GitHuba; wiadomości na Slacku i zgłoszenia w Linear korzystają z Twoich podłączonych kont.

Niedawno zmieniło się jedno. Sesja dostaje teraz zapisany prompt „jako przydzielone zadanie i wykonuje je, zamiast traktować go jak niezaufaną treść, która przyszła w środku rozmowy”. Przed Claude Code v2.1.213 przychodził w ramce niezaufanego powiadomienia w tle i mógł zostać odrzucony, dlatego na starszych buildach routines po cichu nic nie robią.

Routine może nieść dowolną kombinację tych trzech typów, dodawanych i usuwanych z tej samej sekcji Select a trigger w formularzu edycji.

WyzwalaczUruchamia przebieg, gdyNajlepszy do
ScheduledNadchodzi kolejny termin cyklu albo mija jednorazowy znacznik czasuTriage, podsumowania, kontrole rozjazdu, porządki, o których chcesz zapomnieć
APIUwierzytelniony POST trafia we własny endpoint routineAlerty, weryfikacja wdrożeń, wszystko, o czym Twoje systemy już wiedzą
GitHubZdarzenie pull requesta albo release’u pasuje do Twoich filtrówPrzeglądy, backporty, porty między repozytoriami, generowanie changeloga

Utworzysz ją na claude.ai/code/routines, w zakładce Code aplikacji Desktop pod Routines albo z CLI przez /schedule (alias /routines); wszystkie trzy drogi zapisują do tego samego konta w chmurze. W Desktopie wybór Local zamiast Cloud daje zaplanowane zadanie Desktop, które działa na Twojej maszynie.

Wyzwalacze z harmonogramu, próg jednej godziny i przebiegi jednorazowe

Dział zatytułowany „Wyzwalacze z harmonogramu, próg jednej godziny i przebiegi jednorazowe”

Gotowe ustawienia to: co godzinę, codziennie, w dni robocze i co tydzień. Godziny podajesz w swojej strefie i są przeliczane, więc routine uruchamia się o tej godzinie zegarowej niezależnie od tego, gdzie stoi infrastruktura. Przebiegi mogą ruszyć kilka minut później z powodu rozłożenia w czasie, a „przesunięcie jest stałe dla każdego routine” — nie licz na to, że jest losowe.

Dla wszystkiego, czego gotowe ustawienia nie obejmują, wybierz najbliższe, a potem uruchom /schedule update w CLI, żeby ustawić wyrażenie cron. Minimalny interwał to jedna godzina; wyrażenia uruchamiające się częściej są odrzucane (sprawdzone 2026-08-28). Do rytmu minutowego potrzebujesz /loop albo zaplanowanego zadania Desktop.

Harmonogramy jednorazowe to niedoceniana połowa tego wyzwalacza. Odpalają się raz o wyznaczonej godzinie, same się wyłączają, dostają oznaczenie Ran i nie liczą się do dziennego limitu przebiegów.

/schedule in 2 weeks, open a cleanup PR that removes the feature flag

Wyzwalacz API: token bearer, endpoint /fire i niezaufany ładunek

Dział zatytułowany „Wyzwalacz API: token bearer, endpoint /fire i niezaufany ładunek”

Wyzwalacz API daje routine dedykowany endpoint HTTP; POST na niego z tokenem bearer tego routine startuje nową sesję i zwraca URL sesji. Dodasz go z weba: „Wyzwalacze API dodaje się do istniejącego routine z poziomu weba. CLI na razie nie potrafi tworzyć ani unieważniać tokenów” (sprawdzone 2026-08-28). Token pokazuje się raz, więc od razu trafia do magazynu sekretów Twojego narzędzia alertującego.

Okno terminala
curl -X POST https://api.anthropic.com/v1/claude_code/routines/trig_01ABCDEFGHJKLMNOPQRSTUVW/fire \
-H "Authorization: Bearer sk-ant-oat01-xxxxx" \
-H "anthropic-beta: experimental-cc-routine-2026-04-01" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"text": "Sentry alert SEN-4521 fired in prod. Stack trace attached."}'

Pole text to miejsce, w którym ludzie się mylą. Jest dowolne i nieparsowane: wyślij JSON, a routine dostanie dosłowny string. Nie dociera też do Claude jako goła wiadomość. „Przychodzi opakowane w blok <routine-fire-payload>, który oznacza je jako niezaufane dane i mówi Claude, żeby nie wykonywał instrukcji ze środka, chyba że własny prompt routine tak każe”. To samo opakowanie dotyczy tekstu podanego przy Run now.

Wyzwalacze GitHuba: dwie kategorie zdarzeń i osiem pól filtra

Dział zatytułowany „Wyzwalacze GitHuba: dwie kategorie zdarzeń i osiem pól filtra”

Wyzwalacze GitHuba wymagają zainstalowanej na repozytorium aplikacji Claude GitHub App, niezależnie od tego, skąd je konfigurujesz. /web-setup nadaje dostęp do repozytorium na potrzeby klonowania, ale nie instaluje aplikacji i nie włącza dostarczania webhooków. Przeczytaj to dwa razy, bo routine wygląda na poprawnie skonfigurowany i nigdy się nie odpala. Z CLI zainstaluj najpierw aplikację, a potem podepnij wyzwalacz w rozmowie (v2.1.225 lub nowszy).

/schedule add a GitHub trigger to my nightly review for pull requests opened in acme/webapp

Obsługiwane są dwie kategorie zdarzeń: Pull request (otwarty, zamknięty, przypisany, oznaczony etykietą, zsynchronizowany lub w inny sposób zaktualizowany) i Release (utworzony, opublikowany, edytowany lub usunięty). W każdej wybierasz konkretną akcję, na przykład pull_request.opened, albo reagujesz na wszystkie. Sesje nigdy nie są używane ponownie: dwie aktualizacje PR dają dwie niezależne sesje.

Filtry pilnują, żeby to nie zamieniło się w problem kosztowy. Wszystkie warunki muszą pasować, a pola to Author, Title, Body, Base branch, Head branch, Labels, Is draft i Is merged, każde z operatorem: equals, contains, starts with, is one of, is not one of albo matches regex.

Praca trafia na gałęzie z prefiksem claude/, które „są zawsze akceptowane”. Gdy Twój prompt kieruje Claude na inną gałąź, Claude Code najpierw sprawdza push i odrzuca go, jeśli zachodzi którykolwiek z warunków:

  • Gałąź jest chroniona na GitHubie
  • Ktoś inny ma otwartego pull requesta z tej gałęzi
  • Gałąź niesie commity autorstwa kogoś innego niż Ty

Najciekawszy jest trzeci warunek: routine nie dopisze po cichu do gałęzi kolegi, nad którą ktoś właśnie pracuje, nawet jeśli tak każe mu Twój prompt. Traktuj prefiks jak kontrakt: wszystko, co routine wyprodukuje, to gałąź, którą możesz zdiffować, skasować albo zamienić w PR, i nic nie ląduje tam, gdzie już stoi człowiek.

Dwa pokrętła, i są niezależne.

Środowisko steruje dostępem do sieci, zmiennymi środowiskowymi i skryptem instalacyjnym. Środowisko Default używa dostępu sieciowego Trusted, czyli dopuszcza tylko domyślną listę: rejestry pakietów, API dostawców chmury, rejestry kontenerów i typowe domeny deweloperskie; żądania poza nią kończą się 403 i x-deny-reason: host_not_allowed, co widać w transkrypcie przebiegu, a nie jako błąd na poziomie routine. Przełącz Network access na Custom i wypisz swoje domeny albo na Full. Zmienne środowiskowe są „widoczne dla każdego, kto używa tego środowiska”, więc współdzielone środowisko to złe miejsce na poświadczenie.

Konektory sterują tym, do jakich zewnętrznych usług przebieg może sięgnąć. Ruch konektora idzie przez serwery Anthropic, a nie przez ścieżkę sieciową sesji, więc konektory działają bez ruszania Allowed domains. I odwrotnie: zaciśnięcie listy dozwolonych domen nie ogranicza konektora ani trochę. Ogranicza go dopiero usunięcie.

Najbardziej niezawodne routines mają jeden kształt: kończą się wytworzeniem artefaktu, który zatwierdza człowiek, a nie wykonaniem nieodwracalnej akcji. Szkic PR. Założone i oznaczone zgłoszenie. Podsumowanie na kanale. Przykład triage’u alertów od samego Anthropic celowo ma ten kształt: routine „otwiera szkic pull requesta z proponowaną poprawką i linkiem z powrotem do alertu. Dyżurny przegląda PR, zamiast zaczynać od pustego terminala”.

Pod ergonomią siedzi argument o odpowiedzialności. Linear, opisując swój Agent Interaction SDK (Leela Senthil Nathan, 2025-08-01), stawia sprawę wprost: „agenta nie da się pociągnąć do odpowiedzialności”, więc „zgłoszenia można przypisywać tylko ludziom, a agentom tylko delegować”. Routine, który otwiera PR, zostawia człowieka jako osobę odpowiedzialną za wynik; taki, który robi force push na main, już nie.

Od v2.1.227 CLI potrafi przeczytać log przebiegu i go wyjaśnić:

/schedule why did my nightly review do nothing this morning?

Pięć rzeczy w Claude Code pcha pracę do przodu bez Twojego pisania i nie są wymienne. Harmonogramowa połowa tego porównania jest udokumentowana wprost:

Routines (chmura)Zaplanowane zadania Desktop/loop
Działa naChmura, domyślnie zarządzana przez AnthropicTwoja maszynaTwoja maszyna
Wymaga otwartej sesjiNieNieTak
Dostęp do plików lokalnychNie (świeży klon)TakTak
Pytania o uprawnieniaNie (działa autonomicznie)Konfigurowalne per zadanieDziedziczone z sesji
Minimalny interwał1 godzina1 minuta1 minuta

/loop żyje w obrębie sesji: zadania mieszkają w bieżącej rozmowie, sesja mieści ich najwyżej 50, a zadania cykliczne wygasają siedem dni po utworzeniu. Dlatego właśnie nie nadaje się do niczego, co ma działać jeszcze za miesiąc. Pozostałe trzy różnią się kształtem, a nie harmonogramem:

  • /goal to warunek stopu, nie rytm. Claude pracuje, dopóki mały szybki model nie uzna warunku za spełniony albo niemożliwy; do 4000 znaków, jeden cel na sesję. Używaj go wewnątrz promptu routine, gdy zadanie brzmi „rób dalej, aż zajdzie X”. Działa nieinteraktywnie: claude -p "/goal CHANGELOG.md has an entry for every PR merged this week".
  • Subagenci to rozgałęzienie wewnątrz przebiegu. Domyślnie „uruchomienie więcej niż 20 współbieżnych subagentów kończy się błędem Concurrent subagent limit reached”, a limit podnosisz przez CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS. Routine audytujący 400 plików powinien delegować wewnątrz przebiegu, a nie stawać się 400 routines.
  • Agent SDK to wyjście awaryjne, gdy wyzwalacz nie jest żadnym z tych trzech. „Daje te same narzędzia, pętlę agenta i zarządzanie kontekstem, które napędzają Claude Code, programowalne w Pythonie i TypeScripcie” — tylko te dwa języki; z czegokolwiek innego uruchom CLI jako podproces z -p i --output-format json.

Heurystyka: zegar, wywołanie HTTP albo zdarzenie z GitHuba, plus brak potrzeby sięgania po pliki lokalne, znaczy routine. W przeciwnym razie lepiej pasuje jedno z pozostałych czterech.

Routines „zjadają limity subskrypcji tak samo jak sesje interaktywne”, a do tego mają dzienny limit liczby przebiegów na konto. Po przekroczeniu któregoś organizacje z kredytami na zużycie jadą dalej na płatnym nadmiarze; bez kredytów kolejne przebiegi są odrzucane, aż okno się zresetuje. W podglądzie badawczym zdarzenia webhooków GitHuba mają też godzinowe limity na routine i na konto, a zdarzenia ponad limit są porzucane — po cichu, z punktu widzenia routine.

Cztery dźwignie, w kolejności, w jakiej zwykle się zwracają:

  1. Filtruj wyzwalacz ostrzej. Wyzwalacz pull_request bez filtrów budzi się przy każdym pushu do szkicu; samo Is draft false potrafi zmniejszyć liczbę przebiegów o połowę.
  2. Wybierz model per routine. Pole promptu ma selektor modelu, używany przy każdym przebiegu; routine nadający etykiety nie potrzebuje tego, czego potrzebuje routine migracyjny.
  3. Usuwaj konektory i pozwól pracować pamięci podręcznej środowiska. Mniej konektorów to mniej definicji narzędzi w kontekście przy każdym przebiegu, a zbuforowany skrypt instalacyjny oznacza, że nie instalujesz co noc wszystkiego od nowa.
  4. Do pracy jednorazowej wybieraj harmonogramy jednorazowe. Nie liczą się do dziennego limitu.

/schedule zwraca „Unknown command” albo w ogóle się nie pojawia. CLI ukrywa je, gdy któryś warunek nie jest spełniony: logujesz się kluczem API z Console, profilem Anthropic albo poświadczeniem federacyjnym, bądź przez dostawcę chmury, takiego jak Amazon Bedrock, Google Cloud Agent Platform czy Microsoft Foundry. /schedule wymaga logowania subskrypcją claude.ai, a ANTHROPIC_API_KEY lub ANTHROPIC_AUTH_TOKEN w powłoce ma nad nim pierwszeństwo. Albo ustawione jest DISABLE_TELEMETRY, DO_NOT_TRACK, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC czy DISABLE_GROWTHBOOK, co wyłącza pobieranie flag funkcji, od którego /schedule zależy. Albo jesteś w sesji Claude Code on the web. claude.ai/code/routines działa tak czy inaczej.

„Routines are disabled by your organization’s policy.” Owner wyłączył przełącznik Routines w ustawieniach administracyjnych Team albo Enterprise. Działa po stronie serwera; żadna lokalna konfiguracja tego nie nadpisze. Na v2.1.227 i nowszych ukrywa też /schedule.

Wyzwalacz GitHuba nigdy się nie odpala. Prawie zawsze Claude GitHub App nie jest zainstalowany na tym repozytorium, a /web-setup go nie instaluje.

Routine się wykonał i zignorował Twój alert. Zapisany prompt nigdy nie odwołał się do ładunku fire, więc opakowany tekst został bezwładny. Nazwij blok routine-fire-payload wprost.

Wywołanie sieciowe nieoczekiwanie się nie powiodło. Szukaj 403 z x-deny-reason: host_not_allowed: lista Trusted obejmuje rejestry pakietów, a nie Twoje API stagingowe.

Przebieg nic nie wypchnął, choć zapowiadał, że wypchnie. Prompt celujący w gałąź inną niż claude/ trafia w jeden z trzech warunków odrzucenia.

Nikt nie zauważył przez tydzień. Routine, który nic nie wysyła w miejsce, gdzie człowiek i tak zagląda, jest nienadzorowany, cokolwiek mówi log przebiegu.

Odpowiednikiem w Cursorze są Automations, które „uruchamiają w tle cloud agents, z harmonogramu albo w odpowiedzi na zdarzenia z GitHuba, GitLaba, Slacka, webhooków, Lineara i innych źródeł” — szersza powierzchnia wyzwalaczy niż trzy w routines, z Sentry i PagerDuty włącznie, z wychodzącymi webhookami statusChange i REST API. Odpowiednikiem w Codeksie są zaplanowane zadania, które „planują cykliczne zadania działające w tle” i odpalają się na aktywności w Gmailu, Slacku i przy pull requestach na GitHubie — z udokumentowanym ograniczeniem, że „jedno zadanie może korzystać z wielu wyzwalaczy zdarzeniowych, ale nie może łączyć wyzwalaczy zdarzeniowych z harmonogramem czasowym”, czyli dokładnie z tej kombinacji, na którą routine pozwala. Wszystko sprawdzone 2026-08-28. Nasze przewodniki: Cloud agents i Automations w Cursorze oraz automatyzacje w Codeksie.