23 Agustus 2026
Mengakses Agent AI dari Ponsel dengan Paseo
Paseo mengubah sesi AI coding agent di mesin headless menjadi bisa dipantau dan dikontrol dari ponsel, lewat relay terenkripsi end-to-end atau koneksi langsung dengan alur pairing QR.
AI coding agent seperti OpenCode, Claude Code, atau Codex biasanya hidup di terminal mesin kerja. Masalah muncul saat sesi berjalan lama — misalnya agent sedang refactor di server headless — sementara saya tidak di depan mesin itu. SSH dari ponsel bisa, tapi terminal di layar kecil tidak nyaman untuk memantau output agent. Paseo menjawabnya: daemon yang mengelola agent di mesin, plus aplikasi mobile, desktop, web, dan CLI untuk melihat serta menjalankan sesi dari mana saja. Catatan: Paseo mengelola agent, tidak membundelnya; minimal satu CLI agent (misalnya OpenCode) harus terpasang di mesin yang sama.
Mengapa Paseo Dipertimbangkan
Agent di mesin headless tidak punya antarmuka; hasil sesi hanya terlihat kalau menempel di terminal. Alternatif yang pernah dicoba tidak memuaskan:
- SSH dari ponsel bekerja, tapi tidak ada tampilan chat/stream yang nyaman untuk agent berjalan lama.
- VNC atau remote desktop berat untuk membaca log dan boros data seluler.
- Port forwarding manual membuka permukaan serangan tanpa penjagaan.
Yang dicari: latensi rendah, tanpa port sembarangan, aman di jaringan tak dipercaya — Paseo menyediakan dua jalur: relay dan koneksi langsung.
Arsitektur dan Cara Kerja
Paseo memakai arsitektur client-server mirip Docker. Daemon berjalan di mesin tempat agent dieksekusi, default mendengarkan di 127.0.0.1:6767 dengan endpoint HTTP/WebSocket, dan mengelola lifecycle agent: memulai, menghentikan, meneruskan output. Klien (ponsel, CLI, web) terhubung melalui WebSocket untuk menampilkan chat dan terminal agent secara real-time.
Dua cara koneksi klien:
- Relay (direkomendasikan): daemon membuka koneksi keluar ke relay; klien bertemu di sana. Tanpa port forwarding atau firewall. Traffic dienkripsi end-to-end: keypair ECDH persistent di daemon, kunci publik diterima ponsel lewat QR, lalu kedua sisi membuka kanal NaCl
box(Curve25519 + XSalsa20-Poly1305). Relay dirancang tak bisa dipercaya: hanya melihat IP, ukuran pesan, dan ID sesi. - Koneksi langsung: daemon mendengarkan di alamat jaringan (LAN, Tailscale, VPN) dan klien menghubungi
host:6767. Di jaringan tak dipercaya butuh TLS atau VPN sendiri.
Konfigurasi dan state di PASEO_HOME (default ~/.paseo): config.json dan keypair daemon.
Deployment dan Setup
CLI dipasang lewat npm:
npm install --global @getpaseo/cli
paseo
Run pertama memulai daemon, menawarkan relay, dan mencetak QR pairing. Pairing ulang:
paseo daemon pair
Di Docker Compose, image resmi menjalankan daemon sekaligus web UI bawaan:
services:
paseo:
image: ghcr.io/getpaseo/paseo:latest
container_name: paseo
restart: unless-stopped
ports:
- "6767:6767"
environment:
PASEO_PASSWORD: "change-me"
# PASEO_HOSTNAMES: "paseo.example.com,.lan"
volumes:
- ./paseo-home:/home/paseo
- ./workspace:/workspace
UI diakses di http://localhost:6767. Image tidak membundel CLI agent; buat child image dari ghcr.io/getpaseo/paseo:latest dan pasang agent yang dibutuhkan, atau login provider langsung di kontainer. Credential agent tersimpan di /home/paseo, jadi scope mount harus ketat.
Akses dari luar tanpa relay lewat Cloudflare Tunnel:
cloudflared tunnel --url http://localhost:6767
Daemon dimulai dengan hostname yang diizinkan:
paseo daemon start --web-ui --hostnames "paseo.example.com"
Yang sering salah saat troubleshooting:
- Timeout koneksi langsung: di klien isi port
443(HTTPS tunnel/proxy), bukan6767, dan aktifkan SSL. - 403 Host not allowed: domain belum di allowlist; tambahkan via
--hostnamesatauPASEO_HOSTNAMES. - UI load tapi tidak connect: proxy harus meneruskan upgrade WebSocket dan
X-Forwarded-Proto; tanpa itu aplikasi tidak tahu memakaiwss://.
Keamanan dan Operasional
- Wajib password.
paseo daemon set-passwordatauPASEO_PASSWORD; hash bcrypt diconfig.json. Password melindungi akses, bukan traffic — jaringan tak dipercaya tetap butuh relay atau TLS. - Host allowlist. Daemon memvalidasi header
Hostsebagai proteksi DNS rebinding; default hanyalocalhostdan IP. Domain kustom lewatdaemon.hostnames. - Jangan bind
0.0.0.0tanpa password. Siapa pun di jaringan sama bisa memakai agent. - QR/pairing link = trust anchor. Berisi kunci publik daemon; perlakukan seperti password.
- State perlu dijaga.
PASEO_HOMEberisiconfig.jsondan keypair daemon; salin untuk recovery bersama volume workspace. Log di$PASEO_HOME/daemon.log. Ubah konfigurasi:paseo reloaduntuk sebagian besar pengaturan; yang bersifat startup butuhpaseo daemon restart.
Keterbatasan yang Jujur
- Tidak membundel agent. Setiap CLI agent harus dipasang dan login-nya dirawat sendiri di mesin.
- Relay default mati. Akses remote tidak aktif sebelum pairing; relay juga dependensi eksternal, meski E2E membuatnya tak bisa membaca traffic.
- Password bukan TLS. Di jaringan publik tanpa relay/HTTPS, traffic bisa dibaca; keamanan URL publik bergantung pada proxy/tunnel.
- Permukaan serangan nyata. Agent bisa menyentuh workspace dan credential yang di-mount; membuka daemon ke internet menambah risiko.
- Orchestration butuh pendamping. Beberapa fitur memakai
gh(GitHub CLI) yang terautentikasi terpisah. - Bukan high availability. Sesi hidup di satu mesin; mesin mati, sesi ikut mati.
Kesimpulan
Paseo paling cocok untuk pola sederhana: satu pengguna, satu mesin kerja, dan kebutuhan mengikuti sesi agent dari ponsel. Setup awal menuntut disiplin — password, allowlist hostname, scope mount — tapi setelah itu ia bekerja baik sebagai jembatan antara agent headless dan layar kecil. Untuk multi-user atau multi-mesin ia bukan pilihan utama; batasan konteks yang wajar.
