Daftar Isi
- Satu barisnya
- Kirim juga kode keluarnya
- Jadikan fungsi shell
- Bunyikan hanya kalau gagal
- Bertahan dari laptop yang ditutup dan sesi SSH yang putus
- Agen koding AI
- Yang tidak boleh masuk notifikasi
- Pertanyaan umum
- Kenapa tidak pakai terminal-notifier atau notify-send saja?
- Apakah jalan di Windows?
- Bisakah notifikasinya masuk ke jam tangan?
- Bagaimana kalau perintahnya makan 12 jam?
- Bisakah rekan tim mendapat notifikasi yang sama?
- Penutup
- Konten terkait
Anda menjalankan pelatihan, satu rangkaian tes penuh, docker build, atau agen koding AI yang mengerjakan tugas panjang. Setelah itu tersisa dua pilihan buruk: duduk memandangi bilah kemajuan, atau pergi lalu kembali dua puluh menit kemudian dan menemukan bahwa semuanya gagal di detik kesembilan puluh.
Ada pilihan ketiga, dan panjangnya satu baris.
Satu barisnya
Buat kanal di Echobell, salin URL webhook-nya, lalu tempelkan ini setelah apa pun yang Anda jalankan:
pnpm build; curl -sS -X POST https://hook.echobell.one/t/TOKEN_ANDA \
-H 'content-type: application/json' \
-d '{"title":"build selesai","body":"echobell-web"}'
Perhatikan ; dan bukan &&. Dengan &&, notifikasi hanya menyala kalau perintahnya berhasil — itu justru terbalik, karena kegagalanlah yang paling ingin Anda dengar.
Kirim juga kode keluarnya
Notifikasi yang cuma bilang "selesai" baru separuh cerita. Tangkap statusnya:
pnpm build; s=$?; curl -sS -X POST https://hook.echobell.one/t/TOKEN_ANDA \
-H 'content-type: application/json' \
-d "{\"title\":\"build $([ $s -eq 0 ] && echo ok || echo GAGAL)\",\"status\":\"$s\"}"
s=$? harus persis setelah perintahnya — apa pun yang menyelip di antaranya, termasuk uji [ itu sendiri, akan menimpa $?.
Jadikan fungsi shell
Mengetik itu tiap kali menggagalkan tujuannya. Taruh ini di ~/.zshrc atau ~/.bashrc:
notify() {
"$@"
local status=$?
curl -sS -X POST "$ECHOBELL_HOOK" \
-H 'content-type: application/json' \
-d "{\"command\":\"$*\",\"status\":\"$status\",\"host\":\"$(hostname -s)\"}" \
>/dev/null
return $status
}
Setel ECHOBELL_HOOK di profil shell Anda — atau lebih baik, jauhkan sama sekali dari repositori dotfiles dan ekspor dari berkas yang tidak Anda komit. Lalu:
notify pnpm test
notify cargo build --release
notify python train.py
return $status di akhir itu penting: ia menjaga notify tetap transparan, sehingga notify make && ./deploy.sh tetap berperilaku seperti yang Anda harapkan.
Dengan payload itu, templat kanal bisa berupa:
Judul
{{command}} · {{status}}
Isi
di {{host}}
Bunyikan hanya kalau gagal
Sebagian besar eksekusi berhasil dan Anda tidak perlu mendengarnya. Dua kanal menyelesaikan ini dengan rapi: satu biasa untuk semuanya, dan satu mode panggilan dengan kondisi:
status != "0"
Arahkan notify ke kanal kedua untuk hal-hal yang membuat Anda rela bangun dari tempat tidur, dan eksekusi yang sukses tetap senyap.
Bertahan dari laptop yang ditutup dan sesi SSH yang putus
Kalau perintahnya jalan lewat SSH, menutup laptop mematikan shell dan notifikasinya tak pernah terkirim. Dua solusinya:
tmux — jalankan perintah di dalam sesi lalu lepas:
tmux new -d -s build 'notify pnpm build'
nohup — untuk sekali pakai:
nohup bash -c 'notify pnpm build' >/dev/null 2>&1 &
Keduanya membuat proses hidup lebih lama daripada koneksi Anda, dan notifikasi tetap datang entah Anda masih tersambung atau tidak.
Agen koding AI
Pola yang sama mencakup agen CLI yang sedang menggarap tugas panjang:
notify codex exec "refaktor modul pembayaran lalu jalankan tesnya"
Untuk agen yang berhenti di tengah jalan menunggu manusia — persetujuan, permintaan izin — notifikasi penyelesaian adalah alat yang salah, karena eksekusinya belum selesai. Kasus itu butuh hook atau callback milik agen itu sendiri, dan lebih pantas sebuah panggilan ketimbang push. Mengubah gerbang persetujuan agen menjadi panggilan telepon membahas itu, termasuk hook Notification milik Claude Code dan matcher agent_needs_input-nya.
Pakai keduanya: hook untuk "saya tersangkut", fungsi shell untuk "saya selesai".
Yang tidak boleh masuk notifikasi
Bukan keluaran perintahnya. Menggoda memang menyelipkan beberapa baris terakhir build yang gagal ke dalam isi. Tahan: log build memuat token, string koneksi, dan data pelanggan lebih sering daripada dugaan orang, dan isi notifikasi berakhir di layar terkunci. Kirim kode keluarnya saja lalu lihat sendiri terminalnya.
Bukan URL kanal, ke repositori dotfiles publik. Siapa pun yang punya URL-nya bisa mengirim ke kanal Anda. Simpan di berkas yang tidak diversikan dan nyalakan Hanya POST supaya pratinjau tautan yang nyasar tidak memicunya.
Pertanyaan umum
Kenapa tidak pakai terminal-notifier atau notify-send saja?
Keduanya menampilkan notifikasi di mesin yang menjalankan perintah. Itu berguna selama Anda duduk di depannya. Inti susunan ini justru kasus ketika Anda tidak di sana: mesin jarak jauh, laptop tertutup, ruangan lain.
Apakah jalan di Windows?
Polanya iya, sintaksisnya beda. Di PowerShell padanannya Invoke-RestMethod -Method Post -Uri $env:ECHOBELL_HOOK -ContentType application/json -Body $json, dengan $LASTEXITCODE menggantikan $?.
Bisakah notifikasinya masuk ke jam tangan?
Bisa. Langganan dikirim ke Apple Watch yang dipasangkan, dan jujur saja itu bentuk yang paling pas untuk "build-nya sudah selesai".
Bagaimana kalau perintahnya makan 12 jam?
Tidak ada yang kedaluwarsa di susunan ini — curl berjalan kapan pun perintah itu kembali. Jalankan di bawah tmux supaya koneksi yang putus tidak ikut membawa prosesnya.
Bisakah rekan tim mendapat notifikasi yang sama?
Bisa. Bagikan kanalnya dan tiap pelanggan memilih jenis notifikasinya sendiri. Berguna di mesin pelatihan bersama, ketika lebih dari satu orang peduli bahwa GPU-nya sudah bebas lagi.
Penutup
Satu fungsi shell, satu kanal, dan satu kondisi kalau Anda hanya mau yang gagal. Menyiapkannya sekitar dua menit, dan ia mengembalikan dua puluh menit yang biasanya habis memandangi bilah kemajuan.
Unduh Echobell untuk iPhone atau ambil di Google Play, lalu cobalah pada sesuatu yang cukup lama untuk membuat Anda beranjak.