Gdy Claude Code potrzebuje, żebyś wybrał jedną z opcji, wywołuje narzędzie AskUserQuestion i czeka na twój wybór. Hook PreToolUse dopasowany do AskUserQuestion może odpowiedzieć za ciebie, zwracając pytanie z wypełnionym polem answers. Tak właśnie odpowiadasz na pytania Claude Code z telefonu: hook wysyła pytanie i opcje na telefon, czeka na twój wybór i go przekazuje. Claude Code Notifier robi to na Macu, Windows i Linux za pomocą narzędzia ccn i aplikacji na telefon.
01Czym jest AskUserQuestion
Czasem Claude dochodzi do rozwidlenia, o którym nie powinien decydować sam. Który framework? Zostawić stare API czy je usunąć? Poprawić test czy kod? Zamiast zgadywać, zadaje krótkie pytanie wielokrotnego wyboru. W terminalu widzisz pytanie i kilka opisanych opcji, a wybierasz jedną klawiaturą.
Jak każde wywołanie narzędzia, AskUserQuestion najpierw przechodzi przez hooki Claude Code. To właśnie furtka, której potrzebuje zdalna odpowiedź.
Pytania to coś innego niż prompty o uprawnienia. Prompt o uprawnienia pyta „tak czy nie” o jedną akcję, a odpowiada na niego hook PermissionRequest (zobacz Zatwierdzaj prośby o uprawnienia Claude Code z telefonu). Pytanie wymaga wyboru, a odpowiedzią jest etykieta, nie „tak”.
02Jak hook dostarcza odpowiedź
Hook PreToolUse dostaje input narzędzia jako JSON na standardowym wejściu. W przypadku AskUserQuestion input zawiera tablicę questions. Każde pytanie ma question (treść), header (krótką etykietę), options (każda z label i description) oraz multiSelect.
Samo zwrócenie "allow" tu nie wystarczy, bo odpowiedź musi się skądś wziąć. Według dokumentacji hooków Anthropic hook musi odesłać questions w updatedInput i dodać obiekt answers, który mapuje treść każdego pytania na wybraną etykietę:
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"updatedInput": {
"questions": [
{
"question": "Which framework?",
"header": "Framework",
"options": [
{ "label": "React", "description": "Component library" },
{ "label": "Vue", "description": "Progressive framework" }
],
"multiSelect": false
}
],
"answers": { "Which framework?": "React" }
}
}
}
Przy pytaniu wielokrotnego wyboru połącz wybrane etykiety przecinkami. Jeśli hook nic nie wypisze, pytanie pojawi się w terminalu jak zwykle.
Rejestracja hooka
{
"hooks": {
"PreToolUse": [
{
"matcher": "AskUserQuestion",
"hooks": [
{ "type": "command", "command": "/path/to/your-answer-script" }
]
}
]
}
}
Wstaw to do ~/.claude/settings.json, żeby objąć wszystkie projekty. Wszystkie zdarzenia hooków i ich zastosowania opisuje Hooki Claude Code w praktyce.
Uwaga o uruchomieniach nieinteraktywnych
Według dokumentacji Anthropic w uruchomieniach claude -p narzędzie AskUserQuestion jest dostępne tylko wtedy, gdy istnieje host uprawnień odbierający prompt, np. callback canUseTool w Agent SDK. W zwykłym skrypcie Claude może po prostu nie zapytać. Ten poradnik dotyczy sesji interaktywnych.
03Co sprawia, że odpowiedź z telefonu działa dobrze
JSON to łatwiejsza część. Kwestie projektowe są takie same jak przy promptach o uprawnienia:
- Pokazuj całe pytanie. Liczy się nagłówek, pytanie i opis każdej opcji. Sama etykieta („Opcja B”) na ekranie blokady nic nie mówi.
- Nie blokuj terminala. Jeśli siedzisz przy komputerze, powinieneś móc odpowiedzieć tam, a nie czekać na hook, który czeka na twój telefon.
- Odpuszczaj czysto. Jeśli odpowiedź nie przyjdzie, hook powinien przed swoim timeoutem nic nie zwrócić, żeby pojawił się prompt w terminalu.
- Dopasuj tekst dokładnie. Klucze w
answersmuszą być treścią pytania dokładnie tak, jak napisał ją Claude, a wartości — etykietami opcji.
04Korzystanie z Claude Code Notifier
Claude Code Notifier to niezależne narzędzie firmy TouchTap Ltd, niestworzone przez Anthropic. Jego narzędzie wiersza poleceń, ccn, instaluje hook PreToolUse na AskUserQuestion razem z pozostałymi hookami. Gdy Claude zada pytanie, a ciebie nie ma, telefon pokaże pytanie i opcje. Stuknij jedną, hook przekaże odpowiedź, a Claude pracuje dalej.
Instalacja na Macu lub Linux:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
albo na Windows w PowerShell (beta):
irm https://claudecodenotifier.com/install.ps1 | iex
Potem sparuj telefon, skanując kod QR lub wpisując 6-cyfrowy kod z aplikacji. Połącz telefon z Claude Code pokazuje to krok po kroku dla każdego systemu.
Obecność decyduje, gdzie odpowiadasz
ccn stosuje do pytań tę samą regułę obecności co do uprawnień. Jeśli pisałeś w ciągu ostatnich 30 sekund, terminal pyta jak zwykle, a telefon dostaje co najwyżej powiadomienie. Jeśli cię nie ma, terminal czeka na telefon do wybranego przez ciebie limitu (hold_ceiling_seconds, od 30 do 3600, domyślnie 600) i przestaje czekać, gdy tylko dotkniesz klawiatury.
Wybierz, co trafia na telefon
Pytania mają osobne ustawienie, notify_on_question, niezależne od notify_on_permission i notify_on_done, więc możesz zostawić jeden rodzaj powiadomień, a inny wyłączyć. ccn config show pokazuje aktualne ustawienia, a większość z nich zmienisz też osobno dla każdego komputera w aplikacji na telefonie.
Godziny ciszy też działają, np. ccn config set quiet_hours 22:00-08:00. Zobacz Godziny ciszy i tryb Nie przeszkadzać.
Bez sparowanego telefonu ccn i tak pokazuje darmowe powiadomienie na komputerze, gdy Claude zada pytanie, więc wiesz, że trzeba wrócić. Odpowiadanie z telefonu wymaga aplikacji, którą pobierzesz za darmo, ale do korzystania potrzebujesz subskrypcji lub zakupu dożywotniego. Zobacz cennik.
05Pytania, kolejne polecenia i zakończenie pracy
Pytania to jeden z trzech momentów, w których Claude na ciebie czeka. Pozostałe dwa to prośby o uprawnienia i koniec tury. Zaraz po tym, jak Claude skończy, Claude Code Notifier pozwala też wysłać z telefonu kolejne polecenie, które hook Stop przekazuje Claude jako następną instrukcję. Razem obejmują większość sytuacji, w których długie zadanie stoi i czeka. Zostaw Claude Code przy pracy i odejdź od komputera łączy je w jedną rutynę.
06FAQ
Czy mogę wpisać własną odpowiedź zamiast wybierać opcję?
Udokumentowana ścieżka przez hook odpowiada etykietami opcji w polu answers. W Claude Code Notifier wybierasz jedną z opcji na telefonie. Jeśli żadna nie pasuje, odpowiedz w terminalu albo pokieruj Claude kolejnym poleceniem, gdy skończy.
Dlaczego „allow” z mojego hooka PreToolUse nie odpowiada na pytanie?
Bo AskUserQuestion potrzebuje odpowiedzi, a nie tylko zgody. Zwróć updatedInput z oryginalnym questions i obiektem answers, jak pokazano wyżej.
Co jeśli Claude zada kilka pytań naraz?
Tablica questions może zawierać więcej niż jedno pytanie. Obiekt answers musi mieć wpis dla każdego z nich, z kluczem równym dokładnej treści pytania.
Czy to działa w VS Code, Cursor lub JetBrains?
Hook należy do Claude Code, a nie do terminala, więc odpala się też we wbudowanym terminalu IDE. Zobacz Powiadomienia Claude Code w terminalach VS Code, Cursor i JetBrains.