Spis treści
- Jak częste są naprawdę incydenty z agentami?
- Co się właściwie dzieje, gdy agent potrzebuje człowieka?
- Które zdarzenia agenta zasługują na telefon?
- Jak podłączyć bramkę akceptacji agenta do połączenia telefonicznego
- Krok 1 — utwórz kanał Calling dla zablokowanych agentów
- Krok 2 — wywołaj webhook w gałęzi akceptacji
- Krok 3 — użyj hooków, gdy agent to CLI, a nie biblioteka
- Krok 4 — obejmij agenty, które wysyłają tylko e-maile
- Krok 5 — dodaj warunki, aby dzwoniły tylko realne blokady
- Krok 6 — przetestuj przy włączonym trybie Nie przeszkadzać
- Czy to nie odtworzy zmęczenia alertami, tylko głośniejszym dzwonkiem?
- Czego Echobell nie robi
- FAQ
- Czy mogę zaakceptować działanie agenta wprost w trakcie połączenia?
- Które zdarzenia frameworka powinny wywoływać webhook?
- Czy to działa z agentami bez nadzoru w CI?
- A co konkretnie z MCP elicitation?
- Czy bezpiecznie jest umieszczać wyjście agenta w powiadomieniu?
- Czy cały mój zespół może dostać ten sam alert o agencie?
- Czy to działa tylko na iOS?
- Czym to się różni od konfiguracji WebhookMCP?
- Powiązane
Każdy framework autonomicznych agentów wydany w 2026 roku ma tę samą dziurę. Agent pracuje godzinami bez Ciebie, dochodzi do działania, którego nie wolno mu wykonać samodzielnie, zatrzymuje się — i wtedy nic się nie dzieje. Przebieg nie kończy się błędem. Nie ponawia próby. Siedzi w pamięci z zserializowanym obiektem stanu i czeka na człowieka, który nie ma pojęcia, że jest oczekiwany. Ten przewodnik pokazuje, jak zasypać tę lukę, zamieniając moment „potrzebuję człowieka" w dzwoniący telefon dzięki Echobell.
Ta luka jest strukturalna, a nie błędem w jakimś jednym produkcie. Dokumentacja agentów OpenAI opisuje przepływ akceptacji wprost: gdy narzędzie wymaga zgody, „przebieg zatrzymuje się do czasu jej udzielenia lub odmowy", wynik zwraca interruptions oraz wznawialny state, a jeśli weryfikacja może potrwać, masz zserializować ten stan, zapisać go i wznowić później (OpenAI, przewodnik Agents SDK). W żadnym miejscu tego przepływu nic nie dociera do człowieka. Powiadomienie osoby akceptującej zostaje w całości po Twojej stronie.
Tymczasem przebiegi robią się coraz dłuższe. AWS opisuje swoje najnowsze agenty jako zdolne do „pracy przez godziny lub dni bez potrzeby interwencji" (About Amazon). Kiro Crew, uruchomione 4 sierpnia 2026 roku, ujmuje to prosto: „Odpal migrację, a będzie szła przez kolejne punkty kontrolne i ponowienia, gdy Ty jesteś na spotkaniu albo śpisz" — zaznaczając przy tym, że „żądania narzędzi mogą wymagać zatwierdzenia" (Kiro). Obie połowy są prawdziwe naraz. Agent pracuje, gdy śpisz, i agent staje, gdy śpisz.
Jak częste są naprawdę incydenty z agentami?
Na tyle częste, że większość firm już je miała, i większość nie uruchamia agentów bez nadzoru. W badaniu 418 specjalistów IT i bezpieczeństwa przeprowadzonym w styczniu 2026 roku przez Cloud Security Alliance na zlecenie Token Security 65% organizacji zgłosiło w ciągu ostatniego roku co najmniej jeden incydent związany z agentem AI — 61% dotyczyło ujawnienia danych, 43% zakłóceń operacyjnych, a 35% strat finansowych (komunikat CSA, raport).
Dla alertowania najważniejsze są liczby dotyczące nadzoru z tego samego badania. Tylko 13% uruchamia w pełni autonomiczne agenty. 53% pozwala agentom działać samodzielnie przy zadaniach niskiego ryzyka, z weryfikacją człowieka przy działaniach bardziej ryzykownych, a 24% utrzymuje człowieka w pętli przy większości zadań. 82% wykryło w ciągu roku w swoim środowisku agenty AI działające poza kontrolą.
Czytaj to jako fakt operacyjny, a nie straszak: mniej więcej trzy czwarte organizacji celowo wbudowało w swoje agenty pauzę. Każda taka pauza to moment, w którym maszyna jest zablokowana na człowieku. Jeśli człowiek dowiaduje się o tym o 9:00 następnego ranka, zdolność agenta do pracy w nocy była nic niewarta.
Co się właściwie dzieje, gdy agent potrzebuje człowieka?
Czeka w ciszy, a każdy framework zostawia powiadamianie Tobie. Mechanizm bywa różny; skutek nie.
| Stos | Mechanizm | Co dociera do człowieka |
|---|---|---|
| OpenAI Agents SDK | needsApproval na narzędziu wstrzymuje przebieg i zwraca interruptions + wznawialny state | Nic — to Twoja aplikacja decyduje, co zrobić z przerwaniem |
| Serwery MCP | elicitation/create prosi użytkownika o dane w trakcie wywołania narzędzia, zwracając accept, decline albo cancel | Cokolwiek wyrenderuje klient MCP — przy przebiegu bez nadzoru nikt na to nie patrzy |
| Claude Code | Hook Notification uruchamia się z wartościami matchera takimi jak agent_needs_input i agent_completed | Cokolwiek podepniesz pod ten hook |
| Kiro Crew | Żądania narzędzi mogą wymagać zatwierdzenia; aktywność jest rejestrowana do wglądu | Widok aktywności, jeśli go otworzysz |
Model Context Protocol mówi o tym wprost na poziomie specyfikacji. Elicitation istnieje właśnie po to, aby serwer mógł o coś zapytać człowieka w trakcie przebiegu, a bieżąca wersja (2026-07-28) ostrzega, że serwery „NIE POWINNY zakładać, że żądania elicitation zawsze się powiodą", i muszą obsłużyć odmowę, anulowanie oraz awarię klienta (specyfikacja MCP). Protokół standaryzuje pytanie. Nie standaryzuje — i nie może — zdobycia uwagi człowieka.
I to jest cała szansa. Każda warstwa stosu agentowego ma dobrze zaprojektowaną pauzę. Żadna nie ma numeru telefonu.
Które zdarzenia agenta zasługują na telefon?
Dwa — a wobec reszty warto być bezwzględnym. Połączenie telefoniczne to zasób deficytowy; wydawaj je tylko tam, gdzie śpiący człowiek naprawdę jest wąskim gardłem.
- Zablokowana akceptacja w przebiegu, który bez niej nie ruszy. Agent stoi bezczynnie, zegar tyka, a czekanie niczego nie rozwiąże. To przypadek podręcznikowy.
- Nieodwracalna awaria długiego przebiegu bez nadzoru. Sześć godzin migracji, która padła w drugiej godzinie, to sześć godzin nie do odzyskania — lepiej dowiedzieć się w tej drugiej godzinie.
Wszystko inne należy do spokojniejszego kanału. „Zadanie zakończone powodzeniem" to zwykły push. „Agent zużył 80% budżetu" to co najwyżej alert czasowo krytyczny. „Agent wystartował" to w ogóle nie jest powiadomienie. Trzy typy powiadomień w Echobell — Normal, Time Sensitive i Calling — istnieją dokładnie po to, aby taką segregację przeprowadzić, a przypisanie zdarzeń agenta do nich jest tu najważniejszą decyzją projektową. Jeśli już teraz walczysz z liczbą powiadomień, przeczytaj o walce ze zmęczeniem alertami, zanim dodasz kanał, który dzwoni.
Jak podłączyć bramkę akceptacji agenta do połączenia telefonicznego
Echobell zamienia webhook lub e-mail w połączenie telefoniczne — prawdziwe, dzwoniące i wibrujące połączenie, które przebija się przez tryb Skupienia w iOS i tryb Nie przeszkadzać tak jak telefon od kogoś z rodziny (zobacz omijanie trybu Skupienia w iOS). Staje między agentem, który się zatrzymuje, a człowiekiem, który może go odblokować.
Krok 1 — utwórz kanał Calling dla zablokowanych agentów
Utwórz kanał w aplikacji i ustaw jego typ powiadomienia na Calling. Nadaj mu jednoznaczną nazwę, na przykład „Agent zablokowany — wymaga akceptacji", i nie używaj go do niczego innego. Skopiuj adres URL webhooka ze szczegółów kanału; wygląda on tak: https://hook.echobell.one/t/<channel-token>. Traktuj go jak sekret — każdy, kto go ma, może zadzwonić na Twój telefon (przewodnik po webhookach).
Ustaw szablony tytułu i treści tak, aby dało się działać już z ekranu blokady:
Title: Agent blocked: {{agent}}
Body: Waiting on {{action}} in {{project}} — since {{time}} UTC
{{time}} i pozostałe systemowe zmienne czasu są zawsze dostępne w UTC, bez konieczności ich przesyłania.
Krok 2 — wywołaj webhook w gałęzi akceptacji
W każdym SDK zwracającym przerwania pauza jest zwykłą gałęzią w Twoim kodzie. Wyślij żądanie na adres URL kanału, zanim odłożysz przebieg:
let result = await run(agent, input, { stream: false });
if (result.interruptions?.length) {
await fetch(process.env.ECHOBELL_BLOCKED_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
agent: agent.name,
action: result.interruptions[0].rawItem.name,
project: process.env.PROJECT_NAME,
externalLink: `https://ops.example.com/runs/${runId}`,
}),
});
await saveState(runId, result.state); // zserializuj i wznów po akceptacji
}
Specjalna zmienna externalLink staje się klikalnym odnośnikiem we wpisie powiadomienia, więc osoba, która odbierze połączenie, trafia prosto do przebiegu, zamiast go szukać.
Krok 3 — użyj hooków, gdy agent to CLI, a nie biblioteka
Claude Code udostępnia hook Notification, którego matcher filtruje po typie powiadomienia, w tym agent_needs_input i agent_completed, a obsługą hooka mogą być polecenia powłoki albo bezpośrednie żądania HTTP (dokumentacja hooków). Obsługa typu command daje kontrolę nad kształtem payloadu, co ma znaczenie, bo Echobell renderuje te klucze JSON, które mu wyślesz:
{
"hooks": {
"Notification": [
{
"matcher": "agent_needs_input",
"hooks": [
{
"type": "command",
"command": "jq -c '{agent: \"claude-code\", action: .message, project: .cwd}' | curl -sS -X POST -H 'Content-Type: application/json' -d @- \"$ECHOBELL_BLOCKED_URL\""
}
]
}
]
}
}
Przy obsłudze typu command dane wejściowe hooka przychodzą jako JSON na standardowe wejście i niosą pola takie jak session_id, cwd, hook_event_name czy permission_mode. Typ http wysyła ten sam JSON prosto pod wskazany adres, całkiem bez skryptu, co bywa kuszące — ale oczekuje też, że odpowiedź będzie dokumentem wyjściowym hooka, a odpowiedź Echobell nim nie jest. Używaj command, chyba że sprawdzisz, że http zachowuje się u Ciebie tak, jak chcesz.
Krok 4 — obejmij agenty, które wysyłają tylko e-maile
Wiele platform agentowych, usług uruchamiających zadania z harmonogramu i narzędzi wewnętrznych raportuje wyłącznie pocztą. Każdy kanał Echobell może mieć własny adres, więc jedna reguła przekazywania zamieni takie wiadomości w połączenia (wyzwalacze e-mail, konfiguracja e-mail na połączenie). Wyzwalacze e-mail udostępniają zmienne szablonu from, to, subject, text i html, więc warunek na temacie wiadomości zbudujesz bez własnego parsowania.
Krok 5 — dodaj warunki, aby dzwoniły tylko realne blokady
Kanał dzwoniący przy każdym zdarzeniu agenta przestaje być połączeniem, a staje się szumem tła. Warunki w Echobell filtrują po wartościach zmiennych, korzystając z tej samej składni wyrażeń co szablony, więc możesz wymagać na przykład:
blocking == true && risk == "high"
Wszystko poniżej tej poprzeczki kieruj do osobnego kanału Time Sensitive. Sensowny cel: kanał Calling powinien dzwonić najwyżej kilka razy w tygodniu. Jeśli dzwoni częściej, granica autonomii Twojego agenta jest wyznaczona w złym miejscu i żadne ustawienie powiadomień tego nie naprawi.
Krok 6 — przetestuj przy włączonym trybie Nie przeszkadzać
Wywołaj kanał poleceniem curl, gdy na telefonie, który ma naprawdę odbierać alerty, aktywny jest tryb Nie przeszkadzać:
curl -X POST https://hook.echobell.one/t/<channel-token> \
-H "Content-Type: application/json" \
-d '{"agent":"test","action":"deploy to prod","project":"demo","blocking":true,"risk":"high"}'
Włącz w aplikacji ponawianie nieudanych połączeń, aby połączenie zablokowane przez tryb Skupienia zostało powtórzone. Nieprzetestowana ścieżka eskalacji to tylko założenie.
Czy to nie odtworzy zmęczenia alertami, tylko głośniejszym dzwonkiem?
Odtworzy, jeśli pominiesz krok 5. To realne zagrożenie i warto je nazwać. Agenty generują znacznie więcej zdarzeń niż serwery — każde wywołanie narzędzia, każdy punkt kontrolny, każde ponowienie — a pokusa, aby wszystko to gdzieś wyeksponować, jest silna.
Sprawdza się taka dyscyplina: połączenie telefoniczne zarezerwuj dla zdarzeń, w których jedyną przeszkodą między agentem a postępem jest śpiący człowiek. To znacznie węższy zbiór niż „ważne rzeczy, które zrobił agent". Jeśli nie potrafisz w jednym zdaniu opisać, co dana osoba zrobi w ciągu dziewięćdziesięciu sekund po odebraniu, sprawa nie zasługuje na telefon.
Jest też argument bezpieczeństwa za wysoko postawioną poprzeczką. To samo badanie CSA pokazało, że organizacje wskazują ryzyko działania (63%) i autoryzację człowieka (53%) jako główne sygnały nadzoru. Te sygnały mają znaczenie tylko wtedy, gdy autoryzacja człowieka faktycznie następuje szybko. Bramka akceptacji, na którą rutynowo odpowiada się osiem godzin za późno, uczy wszystkich, żeby ją poszerzyć — i tak właśnie 13% w pełni autonomicznych agentów po cichu staje się normą z niewłaściwych powodów.
Czego Echobell nie robi
Precyzja ma tu znaczenie, bo infrastruktura agentowa przyciąga przesadne obietnice.
Echobell: zamienia webhook lub e-mail w dzwoniące połączenie, alert czasowo krytyczny albo zwykłe powiadomienie push; filtruje warunkami; buduje kontekst szablonami; dostarcza to samo wyzwolenie do współdzielonego kanału zespołu, w którym każda osoba subskrybująca wybiera własny poziom pilności.
Echobell nie:
- Niczego nie akceptuje. To nie jest interfejs akceptacji i nie ma połączenia ze stanem Twojego agenta. Dzwoni na Twój telefon; laptopa, panel albo terminal do zatwierdzenia lub odrzucenia i tak otwierasz samodzielnie. Nie ma tu żadnego „wciśnij 1, aby zaakceptować".
- Nie wznawia przebiegu. Serializacja i odtworzenie stanu agenta to zadanie Twojego frameworka. Echobell nigdy go nie dotyka.
- Nie zapewnia zasad eskalacji, potwierdzeń ani grafików dyżurów. Nie ma reguły „jeśli nikt nie odbierze w pięć minut, zadzwoń do kolejnej osoby". Dzwoni do subskrybentów kanału. Jeśli potrzebujesz rotacji i śledzenia potwierdzeń, potrzebujesz platformy incydentowej — o tej klasie narzędzi mówi porównanie alternatyw dla Opsgenie.
- Nie zabezpiecza Twoich agentów. Nic z powyższego nie rozwiązuje problemu agentów działających poza kontrolą, zbyt szerokich uprawnień narzędzi ani luki w wycofywaniu agentów, którą opisuje raport CSA. Szybsza uwaga człowieka łagodzi wolną reakcję, a nie złą architekturę.
- Nie gwarantuje dostarczenia. Połączenie zależy od infrastruktury push, sieci i naładowanego telefonu. Traktuj je jako warstwę skracającą czekanie, a nie jako mechanizm, na którym można polegać bezwarunkowo.
Uczciwe postawienie sprawy: granica autonomii Twojego agenta nie zmienia się od tego, która aplikacja dzwoni na Twój telefon. Połączenie zmienia liczbę godzin między zatrzymaniem agenta a zauważeniem tego przez człowieka — a przy przebiegu nocnym te godziny to cała wartość uruchamiania go na noc.
FAQ
Czy mogę zaakceptować działanie agenta wprost w trakcie połączenia?
Nie. Echobell dostarcza połączenie z treścią powiadomienia i klikalnym odnośnikiem; nie ma interaktywnej ścieżki odpowiedzi z powrotem do agenta. Realny schemat wygląda tak: połączenie Cię budzi, externalLink przenosi Cię do panelu przebiegu albo punktu końcowego akceptacji, i tam podejmujesz decyzję. Jeśli potrzebujesz akceptacji odpowiedzią, taki punkt końcowy musisz zbudować samodzielnie — Echobell obsługuje tylko połowę z budzeniem.
Które zdarzenia frameworka powinny wywoływać webhook?
Te, przy których przebieg nie może iść dalej. W OpenAI Agents SDK to niepusta tablica interruptions. W MCP — żądanie elicitation/create, na które Twój klient nie odpowie bez człowieka. W Claude Code — hook Notification z matcherem agent_needs_input. Zdarzenia o zakończeniu należą do kanału Normal lub Time Sensitive, a nie Calling.
Czy to działa z agentami bez nadzoru w CI?
Tak i właśnie tam ma to największe znaczenie, bo nikt nie patrzy w terminal. Każdy krok CI, który potrafi uruchomić curl, wywoła kanał. Wysyłaj powiadomienie w gałęzi błędu długiego zadania, a nie przy każdym zadaniu, bo inaczej Twój pipeline stanie się najgłośniejszą rzeczą, jaką masz.
A co konkretnie z MCP elicitation?
Elicitation zaprojektowano dla klienta, przy którym siedzi człowiek zdolny zobaczyć pytanie. W przebiegu bez nadzoru nie ma komu go pokazać, a specyfikacja wprost nakazuje serwerom obsłużyć odmowę i anulowanie zamiast zakładać odpowiedź. Rozsądny schemat: nakładka na klienta MCP wywołuje webhook Echobell, gdy dostanie żądanie elicitation, na które nie potrafi odpowiedzieć samodzielnie, a następnie wstrzymuje je lub anuluje zgodnie z Twoją polityką.
Czy bezpiecznie jest umieszczać wyjście agenta w powiadomieniu?
Wysyłaj jak najmniej. Zamiast faktycznego wyjścia agenta wybieraj identyfikator i odnośnik — użyj externalLink, aby wskazać wpis przebiegu w systemie zbudowanym do przechowywania takich danych. Echobell przechowuje treść i historię powiadomień wyłącznie na Twoim urządzeniu, a na serwerze trzyma tylko konta, kanały i subskrypcje (model prywatności), co dobrze służy minimalizacji danych, ale nie jest powodem, by wysyłać więcej, niż trzeba.
Czy cały mój zespół może dostać ten sam alert o agencie?
Tak. Udostępnij kanał, a każdy subskrybent otrzyma to samo wyzwolenie i wybierze własny typ powiadomienia. Typowy układ: osoba odpowiedzialna za agenta subskrybuje jako Calling, reszta zespołu jako Time Sensitive.
Czy to działa tylko na iOS?
Nie. Echobell działa na iOS oraz na Androidzie w Google Play (zobacz premierę na Androida). Zachowanie alertów w formie połączenia różni się między platformami, więc testuj na urządzeniach, które osoby dyżurujące faktycznie noszą przy sobie.
Czym to się różni od konfiguracji WebhookMCP?
WebhookMCP daje modelowi narzędzie, które ten może wywołać po zakończeniu zadania — przydatne, ale zależne od tego, czy agent zdecyduje się Cię powiadomić. Opisane tu podejście uruchamia się z Twojego własnego kodu albo z hooka frameworka, więc działa nawet wtedy, gdy agent utknął, zgubił się albo padł. Używaj obu: jednego na „gotowe", drugiego na „zablokowany".