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, repozytoria i konektory, uruchamiana jako pełna sesja w chmurze z harmonogramu, po uwierzytelnionym żądaniu HTTP POST albo po zdarzeniu z GitHuba. Routines działają bez pytań o zgodę, więc zabezpieczeniami są prompt, repozytoria, dostęp do sieci, konektory i reguła gałęzi claude/.

Podgląd badawczy Pro, Max, Team, Enterprise

Ta strona jest dla programistów i tech leadów, którzy chcą, żeby powtarzalna praca agenta trwała dalej po zamknięciu laptopa, na infrastrukturze chmurowej Anthropic albo we własnym środowisku self-hosted organizacji. Twój poranek na dyżurze wygląda zawsze tak samo: otwierasz tracker, przeglądasz, co przyszło w nocy, i zgadujesz, które alerty to ten sam alert. Sesja zostawiona na noc umarła razem z zamknięciem klapy, /loop wygasł po siedmiu dniach, a workflow łatający tę dziurę to 180 linii YAML-a, których nikt nie chce dotykać. Routine zastępuje to uporządkowaną kolejką zgłoszeń, zanim otworzysz laptopa, endpointem /fire, który zamienia alert z dyżuru w szkic pull requesta, i przeglądem pull requestów według twojej własnej checklisty, a wszystko ląduje na gałęziach claude/, które da się audytować.

Fakty na tej stronie sprawdziliśmy 2026-09-26 w dokumentacji routines i na Claude Code v2.1.283. Każdy wymóg wersji podany niżej to v2.1.227 lub starsza, więc obowiązuje zarówno na kanale latest (v2.1.283), jak i stable (v2.1.274).

Każdy wyzwalacz tworzy nową sesję w chmurze bez wyboru trybu uprawnień. Sesja uruchamia polecenia powłoki, korzysta ze skills zacommitowanych w repozytorium i wywołuje każdy włączony konektor, nie zatrzymując się po zgodę, poza niektórymi akcjami publikowania artefaktów. Trzy decyzje konfiguracyjne przejmują rolę, którą zwykle pełni warstwa zatwierdzania.

  1. Każde repozytorium jest klonowane od nowa z gałęzi domyślnej. Nic nie przechodzi z poprzedniego przebiegu ani z twojego laptopa, także serwery MCP dodane lokalnie przez claude mcp add. Dodaj taki serwer jako konektor na claude.ai albo, przy routine z jednym repozytorium, zadeklaruj go w zacommitowanym .mcp.json.

  2. Każdy podłączony konektor jest domyślnie włączony. Dokumentacja wprost ostrzega, że w trakcie przebiegu Claude może użyć każdego narzędzia z dołączonego konektora, także zapisu, bez pytania o zgodę. Usunięcie konektorów, których routine nie potrzebuje, to najskuteczniejsze zawężenie, jakie masz.

  3. Przebieg odbywa 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 mają twojego użytkownika GitHuba, a wiadomości na Slacku czy zgłoszenia w Linear idą z twoich podłączonych kont.

Sesja traktuje zapisany prompt jako przydzielone zadanie (przed v2.1.213 mogła go odrzucić). W trakcie przebiegu nikt niczego nie zatwierdzi, więc prompt musi mówić wszystko od razu.

Potrzebujesz planu Pro, Max, Team lub Enterprise z podłączonym GitHubem. Polecenie /schedule w CLI wymaga też logowania subskrypcją claude.ai, a nie kluczem API z Console; uwierzytelnianie w Claude Code pokazuje, jak sprawdzić aktywne poświadczenie przez /status. Przeglądarka, karta Code w aplikacji Desktop (wybierz Cloud) i /schedule w CLI (alias /routines) zapisują do tego samego konta.

  1. Otwórz claude.ai/code/routines i kliknij New routine. Nazwij ją od efektu, np. weeknight-issue-triage.
  2. Wklej samowystarczalny prompt, np. prompt triage’u poniżej, i wybierz model w selektorze pola promptu.
  3. Dodaj tylko repozytoria, które zadanie czyta. Każde jest klonowane od nowa przy każdym przebiegu.
  4. Zostaw środowisko Default, chyba że przebieg musi sięgnąć hosta spoza listy dozwolonych rejestrów pakietów.
  5. W sekcji Select a trigger wybierz preset weekdays z godziną kilka minut po pełnej.
  6. W sekcji Connectors usuń każdy konektor, którego prompt nie wymienia.
  7. Kliknij Create, potem Run now, i otwórz sesję przebiegu, żeby potwierdzić, że powstał artefakt, którego wymaga prompt.

Z CLI /schedule weekdays at 7:07, triage new issues otwiera ten sam formularz w rozmowie: Claude dopytuje o harmonogram, repozytoria i prompt, zanim zapisze routine. /schedule list, /schedule update i /schedule run zarządzają istniejącymi routines. CLI tworzy wyzwalacze harmonogramu i od v2.1.225 dodaje wyzwalacze GitHuba; wyzwalacz API dodasz tylko w przeglądarce.

Routine może mieć dowolną kombinację trzech typów wyzwalaczy. Dodajesz je i usuwasz w sekcji Select a trigger formularza edycji.

WyzwalaczUruchamia przebieg, gdyNajlepszy do
ScheduledNadchodzi termin cyklicznego harmonogramu albo mija jednorazowy znacznik czasuTriage, podsumowania, rozjazd dokumentacji, porządki
APIUwierzytelniony POST trafia na własny endpoint routineAlerty, weryfikacja wdrożeń, narzędzia wewnętrzne
GitHubZdarzenie pull requesta lub wydania pasuje do filtrówCode review, backporty, portowanie między repozytoriami, changelogi

Wyzwalacze z harmonogramu: presety, cron i przebiegi jednorazowe

Dział zatytułowany „Wyzwalacze z harmonogramu: presety, cron i przebiegi jednorazowe”

Presety to co godzinę, codziennie, w dni robocze i co tydzień, w twojej strefie czasowej. Przebieg ustawiony dokładnie na pełną godzinę może wystartować kilka minut później, więc gdy liczy się punktualność, wybierz 9:07 zamiast 9:00.

Dla innej częstotliwości ustaw wyrażenie cron przez /schedule update w CLI. Minimalny odstęp to godzina; do rytmu liczonego w minutach użyj /loop albo zadania harmonogramu Desktop.

Harmonogram jednorazowy uruchamia się raz, a potem sam się wyłącza. Nie liczy się do dziennego limitu przebiegów routines, więc to właściwe narzędzie do „przypomnij mi po wdrożeniu”:

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

Wyzwalacze API: token, endpoint /fire i niezaufany ładunek

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

Wyzwalacz API daje routine własny endpoint HTTP; POST z tokenem routine uruchamia nową sesję. Wyzwalacz dodajesz w przeglądarce, bo według dokumentacji CLI nie umie obecnie tworzyć ani unieważniać tokenów (sprawdzone 2026-09-26). Token pokazuje się raz, dotyczy tylko tej jednej routine i można go wygenerować ponownie albo unieważnić w tym samym oknie. Trzymaj go w magazynie sekretów narzędzia alertującego, nigdy w skrypcie.

Żeby uruchomić routine z powłoki albo kroku CI, zbuduj ciało żądania przez jq, żeby cudzysłowy i znaki nowej linii w treści alertu nie zepsuły JSON-a:

Okno terminala
# ROUTINE_FIRE_URL i ROUTINE_TOKEN pochodzą z magazynu sekretów
jq -n --arg text "$ALERT_BODY" '{text: $text}' |
curl -sS -X POST "$ROUTINE_FIRE_URL" \
-H "Authorization: Bearer $ROUTINE_TOKEN" \
-H "anthropic-beta: experimental-cc-routine-2026-04-01" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
--data-binary @-

ROUTINE_FIRE_URL to adres https://api.anthropic.com/v1/claude_code/routines/<trigger-id>/fire pokazany w oknie wyzwalacza po zapisaniu routine; ALERT_BODY to treść, którą wysyła narzędzie alertujące. Błędny URL albo token zwraca 401. Udane wywołanie zwraca JSON z claude_code_session_id i claude_code_session_url: niech wywołujący zapisze URL obok alertu, żeby osoba sprawdzająca wynik otworzyła dokładnie ten przebieg. Nagłówek beta ma datę; zmiany łamiące zgodność trafiają pod nowe wersje nagłówka.

Na polu text wykłada się większość routines. Jest dowolnym tekstem i nie jest parsowane, więc JSON dociera jako zwykły napis. Do tego trafia do Claude’a opakowane w blok <routine-fire-payload>, który oznacza je jako niezaufane dane i każe nie wykonywać zawartych w nim instrukcji, chyba że pozwala na to prompt samej routine. Tekst wpisany przy Run now jest opakowywany tak samo.

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ą aplikacji Claude GitHub App zainstalowanej w repozytorium, niezależnie od tego, gdzie je konfigurujesz; /web-setup daje dostęp do klonowania, ale nie instaluje ani aplikacji, ani dostarczania webhooków. Z CLI (v2.1.225 lub nowsza) najpierw zainstaluj aplikację z jej strony na GitHubie, a potem dodaj wyzwalacz w rozmowie:

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

Są dwie kategorie zdarzeń: Pull request (otwarcie, zamknięcie, przypisanie, etykieta, synchronizacja lub inna aktualizacja) i Release (utworzenie, publikacja, edycja lub usunięcie). Wybierasz jedną akcję, na przykład pull_request.opened, albo wszystkie akcje w kategorii. Każde zdarzenie dostaje własną sesję, więc wyzwalacz bez filtrów szybko robi się drogi. Filtry go zawężają, a wszystkie warunki muszą być spełnione. Pola to Author, Title, Body, Base branch, Head branch, Labels, Is draft i Is merged, a każde łączy się z operatorem: equals, contains, starts with, is one of, is not one of albo matches regex.

Claude wypycha zmiany na gałęzie z prefiksem claude/, które są zawsze akceptowane. Gdy prompt kieruje Claude’a 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 otwarty pull request z tej gałęzi.
  • Gałąź zawiera commity innego autora niż ty.

Routine nie dopisze więc niczego do gałęzi kolegi w toku. Traktuj prefiks jak kontrakt: wszystko, co routine wytworzy, to gałąź, którą możesz porównać, usunąć albo otworzyć jako pull request, a chroniona gałąź domyślna jest ostatnią linią obrony.

Decydują o tym dwa niezależne ustawienia.

Środowisko chmurowe określa dostęp do sieci, zmienne środowiskowe i cache’owany skrypt przygotowania. Środowisko Default ma dostęp do sieci Trusted: tylko domyślną listę dozwolonych rejestrów pakietów, API dostawców chmury, rejestrów kontenerów i popularnych domen deweloperskich. Żądania gdzie indziej kończą się 403 z x-deny-reason: host_not_allowed i widać je w transkrypcie przebiegu, a nie jako błąd routine. Przełącz Network access na Custom, żeby dopisać własne domeny, albo na Full. Zmienne środowiska widzi każdy, kto z niego korzysta, więc na planach Pro i Max klucze API zapisuj jako jego poświadczenia API.

Konektory decydują, których usług zewnętrznych przebieg może dotknąć. Ruch konektorów idzie przez serwery Anthropic, a nie ścieżką sieciową sesji, więc zawężenie listy dozwolonych domen nie ogranicza konektora. Ogranicza go tylko jego usunięcie.

Jak sprawdzić, co zrobiła routine, bez czytania każdego przebiegu?

Dział zatytułowany „Jak sprawdzić, co zrobiła routine, bez czytania każdego przebiegu?”

Zielony status na liście przebiegów oznacza, że sesja wystartowała i zakończyła się bez błędu infrastruktury. Nie oznacza, że zadanie z promptu się udało. Porażki widać tylko w transkrypcie, więc weryfikację wbuduj w samą routine.

  1. Kończ każdy przebieg artefaktem do przeglądu, a nie nieodwracalną akcją. Szkic pull requesta, zgłoszenie z etykietą, podsumowanie na kanale. Linear formułuje argument o odpowiedzialności (Leela Senthil Nathan, „Our approach to building the Agent Interaction SDK”, 2025-08-01): agenta nie da się pociągnąć do odpowiedzialności (ang. „an agent cannot be held accountable”), więc zgłoszenia można przypisać tylko ludziom, a agentom wyłącznie delegować.

  2. Niech artefakt niesie własne dowody. Każdy prompt na tej stronie wymaga wyniku testów, listy przejrzanych commitów albo jawnej listy tego, czego nie udało się zrobić. Recenzent sprawdza te dowody względem kryteriów akceptacji, a nie diff linijka po linijce.

  3. Kod niech ocenią istniejące bramki. Gałąź claude/ otwarta jako pull request przechodzi te same CI, sprawdzanie typów, lintery i automatyczny review co zmiany człowieka. Zatwierdza człowiek.

  4. Wskaż właściciela i miejsce. Każda routine publikuje na kanale albo w kolejce, którą konkretna osoba już obserwuje; inaczej jest niemonitorowana, niezależnie od tego, co mówi jej log.

  5. Raz w tygodniu audytuj samą routine i wycofuj zmiany tanio. Źle działającą routine wstrzymasz przełącznikiem na jej stronie szczegółów; konfiguracja zostaje. Jej pracę cofniesz, usuwając gałęzie claude/.

Od v2.1.227 CLI czyta log przebiegów routine i go objaśnia, więc cotygodniowy audyt to jeden prompt.

Sześć mechanizmów sprawia, że Claude Code pracuje, gdy nic nie wpisujesz. Trzy mechanizmy harmonogramu wypadają tak:

Routines (chmura)Zadania harmonogramu Desktop/loop
Gdzie działaChmura, domyślnie zarządzana przez AnthropicTwoja maszynaTwoja maszyna
Maszyna musi być włączonaNieTakTak
Wymaga otwartej sesjiNieNieTak
Pliki lokalneNie (świeży klon)TakTak
Pytania o uprawnieniaNieKonfigurowalne per zadanieDziedziczone z sesji
Minimalny odstęp1 godzina1 minuta1 minuta

/loop żyje w sesji, a jego cykliczne zadania wygasają po siedmiu dniach, więc nie nadaje się do niczego, co ma działać za miesiąc; zobacz polecenie /loop. Pozostałe trzy różnią się kształtem, a nie harmonogramem:

  • /goal to warunek zakończenia, a nie rytm. Po każdej turze mały, szybki model sprawdza, czy warunek jest spełniony, jeden cel na sesję. Sięgnij po niego, gdy zadanie brzmi „pracuj, aż X będzie prawdą”, a nie „uruchamiaj w każdy dzień roboczy”. Zobacz workflowy z /goal.
  • Subagenci to rozgałęzienie w obrębie jednego przebiegu. Routine audytująca 400 plików deleguje w ramach przebiegu, zamiast stawać się 400 routines. Zobacz własnych subagentów.
  • Agent SDK obsługuje wyzwalacze, których routines nie mają. Gdy zdarzeniem nie jest zegar, wywołanie HTTP ani pull request lub wydanie na GitHubie, albo gdy zadanie musi działać na twojej infrastrukturze z twoimi poświadczeniami, zbuduj je na Claude Agent SDK albo uruchom claude -p w CI.

Reguła: zegar, wywołanie HTTP albo zdarzenie z GitHuba bez potrzeby dostępu do plików lokalnych oznaczają routine.

Routines zużywają limit subskrypcji tak samo jak sesje interaktywne, a do tego obowiązuje dzienny limit liczby przebiegów na konto. Po przekroczeniu któregoś z nich przebiegi idą dalej w rozliczeniu nadwyżkowym, jeśli organizacja ma usage credits, a bez nich są odrzucane do resetu okna. W czasie podglądu badawczego zdarzenia webhooków GitHuba mają też godzinne limity na routine i na konto, a zdarzenia ponad limit przepadają, więc seria pull requestów może zostać bez przeglądu. Zużycie sprawdzisz na claude.ai/settings/usage.

Cztery dźwignie, w kolejności, w jakiej zwykle się opłacają:

  1. Mocniej filtruj wyzwalacz. Wyzwalacz pull requestów na wszystkie akcje i bez filtrów uruchamia się przy każdym pushu, także do szkiców; Is draft false i filtr gałęzi bazowej ograniczają takie przebiegi.
  2. Wybieraj model per routine. Pole promptu ma selektor modelu używany przy każdym przebiegu. Routine nadająca etykiety nie potrzebuje modelu, którego wymaga migracja; zanim zmienisz domyślny, zajrzyj do przeglądu modeli.
  3. Usuń konektory i cache’uj przygotowanie środowiska. Mniej konektorów zawęża to, czego przebieg może dotknąć, i narzędzia, które może wyszukać; cache’owany skrypt przygotowania oszczędza ponownych instalacji.
  4. Do jednorazowej pracy używaj harmonogramów jednorazowych. Nie liczą się do dziennego limitu.

O budżetach dla całego zespołu przeczytasz w kontroli kosztów Claude Code.

/schedule zwraca „Unknown command” albo w ogóle się nie pokazuje. CLI pokazuje polecenie tylko przy logowaniu subskrypcją claude.ai, a nie przy kluczu API z Console, poświadczeniu federacyjnym czy dostawcy chmury, np. Amazon Bedrock. ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN i apiKeyHelper mają pierwszeństwo przed tym logowaniem, a w sesji chmurowej polecenie jest niedostępne z założenia. Wyjście: usuń te poświadczenia i uruchom /login albo użyj claude.ai/code/routines.

„Routines are disabled by your organization’s policy”. Owner w organizacji Team lub Enterprise wyłączył przełącznik Routines w ustawieniach administracyjnych. To ustawienie po stronie serwera i zatrzymuje też istniejące routines. Jeśli zamiast tego widzisz „Cloud sessions are disabled by your organization’s policy”, wyłączone są sesje chmurowe, których routines potrzebują. Wyjście: poproś Ownera.

Wyzwalacz GitHuba nigdy się nie uruchamia. W repozytorium nie ma aplikacji Claude GitHub App; /web-setup jej nie instaluje. Wyjście: zainstaluj aplikację i zapisz wyzwalacz ponownie.

Routine sama przestała działać. Brakujące lub wygasłe połączenie z GitHubem sprawia, że routine pomija przebiegi do 72 godzin, a potem się wyłącza; jeśli połączysz GitHuba w tym oknie, wznowi się sama. Wstrzymana subskrypcja też zawiesza routines. Wyjście: połącz ponownie GitHuba albo wznów subskrypcję, a jeśli routine się wyłączyła, włącz ją z powrotem.

Routine się uruchomiła i zignorowała alert. Zapisany prompt nie odwoływał się do ładunku. Wyjście: nazwij w prompcie blok routine-fire-payload.

Pull request albo zgłoszenie przejęło przebieg. Routine czytająca publiczne dane wykonała instrukcje ukryte w opisie PR, diffie albo zgłoszeniu i użyła konektora z prawem zapisu jako ty. Wyjście: wstrzymaj ją, ogranicz Author do zespołu, usuń konektory z prawem zapisu, których zadanie nie potrzebuje, i dodaj do promptu linijkę o traktowaniu tej treści jako danych.

Wywołanie sieciowe się nie powiodło. W transkrypcie widać 403 z x-deny-reason: host_not_allowed: lista Trusted obejmuje rejestry pakietów, a nie twoje API na stagingu. Wyjście: dodaj domenę w dostępie Custom albo sięgnij do usługi przez konektor.

Przebieg niczego nie wypchnął, choć twierdził, że to zrobi. Prompt wskazał gałąź spoza claude/ i trafił na jeden z trzech warunków odrzucenia. Wyjście: pozwól routine pushować na claude/ i otworzyć pull request.

Przez tydzień nikt nic nie zauważył. Routine nie publikuje tam, gdzie ktoś patrzy. Wyjście: wyznacz właściciela i kanał i uruchamiaj prompt cotygodniowego audytu.

Cursor Automations uruchamiają Cloud Agents z szerszego zestawu wyzwalaczy niż routines, m.in. ze Slacka, Lineara, Sentry i PagerDuty (dokumentacja Cursora, sprawdzone 2026-08-28), a Codex uruchamia zaplanowane Automations w aplikacji Codex. Zobacz agentów w chmurze i automatyzacje w Cursorze, automatyzacje w Codeksie i porównanie agentów w tle i w chmurze.