Persetujuan

Menyetujui permintaan izin Claude Code (dan Codex) dari ponsel

Alasan paling umum sebuah agen berhenti bekerja adalah permintaan izin yang tidak dilihat siapa pun. Ada tiga cara menjawabnya dari saku: notifikasi push bawaan Claude Code, hook ntfy buatan sendiri, atau aplikasi dengan kotak masuk. Berikut cara kerja masing-masing untuk Claude Code, apa yang berubah untuk Codex dan agen lain, dan apa konsekuensi masing-masing bagi keamanan.

Menyetujui permintaan izin Claude Code (dan Codex) dari ponsel

Jawaban singkat

Dengan paket Pro, Max, Team, atau Enterprise, jalankan Remote Control lalu di /config aktifkan Push when actions required. Aplikasi Claude kemudian mengirim notifikasi, dan Anda menjawab permintaannya di aplikasi. Untuk alternatif gratis yang di-host sendiri, hook open-source seperti claude-remote-approver mengirim setiap PermissionRequest ke ntfy dengan tombol Approve/Deny. Codex punya hook PermissionRequest yang sama. Aplikasi seperti Maude menampilkan permintaan dari beberapa agen dalam satu kotak masuk, dengan notifikasi push yang membawa Izinkan/Tolak.

Saat Claude Code ingin menjalankan perintah atau mengedit file yang belum Anda setujui sebelumnya, ia berhenti dan bertanya. Kalau Anda di depan terminal, itu cuma sedetik. Kalau tidak, sesinya menunggu, dan itu bisa berarti satu jam menunggu satu tombol ditekan. Setiap setup persetujuan jarak jauh membawa permintaan ke ponsel Anda dan jawaban Anda kembali ke agen. Bedanya ada pada cara permintaan dicegat, ke mana ia lewat, dan siapa yang bisa menjawabnya.

Cara kerja persetujuan jarak jauh

Ada dua mekanisme, dan setiap tool memakai salah satunya.

  • Protokol jarak jauh milik agen itu sendiri. Remote Control Claude Code meneruskan dialog izin yang asli ke aplikasi Claude. Remote Control milik Antigravity dan app-server Codex bekerja dengan cara yang sama. Tidak ada pihak di tengah yang memutuskan apa pun: Anda menjawab prompt milik agen itu sendiri.
  • Hook. Claude Code menjalankan program yang Anda konfigurasi pada titik-titik tertentu. Hook PermissionRequest berjalan ketika dialog izin akan muncul, dan bisa menjawab atas nama Anda dengan mencetak keputusan seperti {"behavior": "allow"} atau "deny". Hook PreToolUse berjalan sebelum setiap tool call dan bisa mengembalikan allow, deny, ask, atau defer. Hook yang mengirim push lalu menunggu ketukan Anda — begitulah cara kerja setiap tool persetujuan ponsel buatan sendiri. Detailnya ada di referensi hook.

Push bawaan Claude Code

Jalur resmi Anthropic lewat Remote Control:

  1. Mulai sesi dengan claude remote-control (mode server) atau claude --remote-control, atau ketik /remote-control di sesi yang sedang berjalan.
  2. Masuk ke aplikasi Claude di ponsel dengan akun yang sama, dan izinkan notifikasi.
  3. Di terminal, jalankan /config dan aktifkan Push when actions required, yang mencakup permintaan izin dan pertanyaan. Push when Claude decides mencakup kabar proaktif seperti "tes selesai".

Dokumentasinya mencatat beberapa hal yang akan Anda temui:

  • Paket dan autentikasi. Remote Control tersedia di Pro, Max, Team, dan Enterprise, dan kunci API tidak didukung. Di Team dan Enterprise, seorang Owner harus mengaktifkannya.
  • Permintaan tidak kedaluwarsa. Permintaan izin dan pertanyaan tetap terbuka sampai Anda menjawabnya.
  • Push dijeda saat Anda di terminal. Claude Code tidak mengirim push saat Anda sedang mengetik di atau fokus pada terminal yang terhubung. CLAUDE_CLIENT_PRESENCE_FILE memperluasnya ke kapan pun Anda berada di depan mesin.
  • Prosesnya harus tetap hidup. Proses claude harus terus berjalan, jadi di server, jalankan di dalam tmux.
  • Beberapa mode tidak bisa dipilih dari aplikasi. Menurut dokumentasi mobile, Anda tidak bisa memilih Bypass permissions dari aplikasi, maupun Auto untuk sesi Remote Control.

Jika Anda memakai paket Claude dan hanya menggunakan Claude Code, mulailah dari sini. Gratis dengan paket Anda dan dikelola oleh Anthropic.

Buat sendiri dengan hook ntfy

ntfy adalah layanan push open-source. Anda memublikasikan ke sebuah topic dengan request HTTP biasa, dan aplikasi ntfy di ponsel Anda menampilkannya. Beberapa proyek open-source memasangkannya dengan hook PermissionRequest. Hook-nya mengirim tool call yang tertunda ke topic Anda dengan tombol aksi, menunggu ketukan Anda di topic kedua, lalu mencetak keputusannya kembali ke Claude Code. Kredit untuk yang berhak:

ProyekHookJika Anda tidak menjawabCatatan
claude-remote-approver (yuuichieguchi)PermissionRequestKembali ke prompt terminal setelah 120 s (300 s untuk review plan)npm install -g claude-remote-approver; membuat topic acak 128-bit; Approve / Always Approve / Deny
claude-push (coa00)PermissionRequestKembali ke terminal setelah 90 s (bisa diatur)Skrip instalasi shell; Allow / Deny
claude-code-phone-notifications (ssarnecki)PermissionRequest, PreToolUse, StopMenunggu sekitar 9 menit, lalu kembali ke terminalMenunggu 30 s sebelum mengirim push, siapa tahu Anda ada di meja; juga mengirim prompt AskUserQuestion (tanpa tombol)
hookline (tsyche)PreToolUse untuk Claude; PermissionRequest untuk CodexDefault 15 menit, dengan jendela lebih panjang untuk balasan yang terlambatJuga mendukung Codex, Grok, dan OpenCode; mendukung ntfy yang di-host sendiri dengan kredensial

Keempatnya berlisensi MIT. Timeout di atas adalah default yang terdokumentasi. Jika yang Anda butuhkan hanya pemberitahuan, tanpa menjawab dari jauh, hook Notification milik Claude Code sudah cukup. Matcher permission_prompt berjalan ketika dialog muncul:

{
  "hooks": {
    "Notification": [
      {
        "matcher": "permission_prompt",
        "hooks": [
          { "type": "command",
            "command": "curl -s -d 'Claude Code is waiting for approval' https://ntfy.sh/your-long-random-topic" }
        ]
      }
    ]
  }
}

Taruh itu di ~/.claude/settings.json pada mesin yang menjalankan Claude Code. Anda tetap harus ke terminal untuk menjawab. Proyek-proyek di atas menambahkan jalur untuk menjawab.

Kotak masuk Maude

Maude memakai pendekatan pertama. Daemon-nya di server Anda berbicara dengan protokol masing-masing agen, sehingga permintaan izin sampai ke aplikasi sebagai permintaan asli, bukan tebakan dari hook. Permintaan dari setiap sesi di setiap server masuk ke satu kotak masuk, di samping error dan pekerjaan yang sudah selesai. Anda bisa menjawab langsung di sana, atau langsung dari notifikasi push yang membawa Izinkan dan Tolak. Permintaan menunggu sampai Anda menjawab; sesinya tidak kedaluwarsa lalu jalan terus tanpa Anda. Ini berlaku untuk Claude Code, Codex, OpenCode, dan Grok Build. Antigravity pengecualiannya: agy headless tidak bisa berhenti sebelum sebuah tool berjalan, jadi Maude menampilkan aksi yang ditolak setelahnya dan mencobanya ulang jika Anda mengizinkan. Maude adalah aplikasi berbayar, dan setiap agen butuh akunnya sendiri. Maude bukan satu-satunya aplikasi dengan kotak masuk dan push: Happier, di antara yang lain, punya keduanya.

Codex dan agen lain

  • Codex juga punya hook, aktif secara default. Hook PermissionRequest bisa menjawab dengan "behavior": "allow" atau "deny", dan PreToolUse bisa menolak. Hook-nya ada di ~/.codex/hooks.json atau [hooks] di config.toml. Itulah yang dipakai hookline untuk Codex. Pengaturan notify Codex yang lebih lama menjalankan program saat sebuah giliran selesai. Tulisan pihak ketiga melaporkan bahwa pengaturan ini tidak berjalan untuk permintaan persetujuan, jadi pakai hook untuk persetujuan. Untuk jalur aplikasi ponsel resmi Codex dan batasannya di Linux, lihat Codex CLI di VPS.
  • Antigravity menjawab permintaan dari dashboard Remote Control-nya saat Anda menjalankannya secara interaktif atau sebagai daemon. agy headless menolak alih-alih bertanya. Lihat Antigravity CLI di server.
  • OpenCode dan Grok Build didukung lewat plugin dan hook hookline, atau lewat aplikasi multi-agen.

Keamanan persetujuan jarak jauh

Persetujuan dari ponsel hanya sekuat mata rantai terlemah antara permintaan dan ketukan Anda.

  • Di ntfy.sh, topic adalah kata sandinya. Dokumentasi ntfy menyatakannya terang-terangan: tanpa pendaftaran, siapa pun yang tahu nama topic bisa membacanya dan memublikasikan ke sana. Di server publik, topic yang tertebak berarti orang lain bisa menyetujui perintah agen Anda. Pakai topic acak yang panjang, atau host ntfy sendiri dengan autentikasi.
  • Baca perintahnya, bukan judulnya. Push di layar kunci menampilkan ringkasan. rm -rf di dalam baris Bash yang panjang gampang terlewat di layar 6 inci. Pakai "always allow" untuk tool yang hanya membaca, bukan untuk Bash(*).
  • Ketahui cadangannya. Hook buatan sendiri di atas kembali ke prompt terminal saat timeout, jadi permintaan yang tidak dijawab akan memblokir alih-alih otomatis disetujui. Kalau menulis hook sendiri, pakai aturan yang sama. Dokumentasi Claude Code memperingatkan bahwa hook PreToolUse yang timeout tidak memblokir tool call, yang lanjut lewat alur izin normal, jadi jangan andalkan hook yang macet sebagai penjaga.
  • Kunci salurannya. Lalu lintas persetujuan mengungkap apa yang sedang dikerjakan agen Anda. Remote Control Anthropic melewati server Anthropic, dan relay Maude hanya melihat lalu lintas yang terenkripsi end-to-end. Dengan hook, Anda yang memilih ke mana perginya. Pengaturan Require trusted devices dari Anthropic membatasi perangkat mana yang bisa memakai Remote Control.
  • Persetujuan adalah jaring pengaman, bukan sandbox. Menjalankan agen sebagai user non-root di mesin yang bisa Anda bangun ulang lebih penting daripada UI persetujuan apa pun. Lihat menjalankan agen dengan izin penuh secara aman.

Jawab dari Maude

Jika agen Anda berjalan di server dan Anda ingin satu tempat untuk menjawab semuanya, coba Maude dengan Claude Code atau Codex. Tambahkan server dari aplikasi, masuk dengan paket Anda sendiri, dan permintaan izin datang sebagai notifikasi push dengan Izinkan dan Tolak. Kotak masuk mengumpulkan semua yang sedang menunggu Anda.

Pertanyaan yang sering diajukan

Bisakah Claude Code mengirim notifikasi push?
Bisa, lewat Remote Control. Hubungkan sesi ke aplikasi Claude, lalu aktifkan Push when actions required (dan opsional Push when Claude decides) di /config. Butuh paket Pro, Max, Team, atau Enterprise; login dengan kunci API tidak didukung.
Bisakah saya Allow atau Deny dari layar kunci?
Dengan hook berbasis ntfy, bisa: hook itu menambahkan tombol aksi Approve/Deny ke notifikasi. Dokumentasi Anthropic menjelaskan push untuk permintaan izin, tetapi tidak menyebut tombol jawaban di notifikasinya, jadi bersiaplah menjawab di aplikasi Claude. Push izin dari Maude membawa aksi Izinkan dan Tolak.
Apa yang terjadi jika saya tidak menjawab?
Di Claude Code sendiri, permintaan izin tetap terbuka sampai dijawab, jadi sesinya hanya menunggu. Hook ntfy buatan sendiri timeout setelah jendela yang dikonfigurasi dan kembali ke prompt terminal biasa. Pastikan hook apa pun yang Anda tulis gagal dalam keadaan tertutup: hook PreToolUse yang timeout tidak memblokir tool call.
Apakah ini berfungsi untuk Codex?
Ya. Codex mendukung hook PermissionRequest yang bisa allow atau deny, dan proyek seperti hookline memakainya untuk meneruskan persetujuan Codex ke ntfy. Menurut laporan pihak ketiga, pengaturan notify Codex hanya mencakup giliran yang selesai, jadi pakai hook untuk persetujuan.
Apakah aman menyetujui perintah dari ponsel?
Seaman saluran dan perhatian Anda. Pakai topic ntfy yang tidak bisa ditebak atau yang diautentikasi, baca perintah lengkap sebelum menyetujui, hindari aturan "always allow" menyeluruh untuk perintah shell, dan jalankan agen sebagai user non-root di mesin yang bisa Anda bangun ulang.

Apa yang berubah

  • — Pertama kali diterbitkan. Perilaku Remote Control dan hook dicek terhadap dokumentasi Anthropic dan OpenAI; detail repo dan nilai default diambil dari README setiap proyek pada tanggal ini.

Jangan lewatkan permintaan izin lagi

Izinkan atau Tolak dari notifikasi, untuk setiap agen di setiap server. iOS dan Android.

Download Maude on the App Store Get Maude on Google Play