Blog

Ujex Mobile — FCM push approvals for agents

Akshay Sarode

Ujex Mobile is the human-approval subsystem. Agent calls mobile.ask(prompt, detail, ttlSec); FCM push fires; human approves; agent resumes.

Detailed: Phone approvals for an AI agent: how mobile.ask works.

Flow

  1. Agent calls mobile.ask(...) — writes owners/{uid}/approvals/{id}
  2. Cloud Function fires FCM push to registered channels
  3. Human gets push; long-press → Approve / Deny
  4. Agent's listener fires; agent resumes

Total latency

1.5–6 seconds when the phone is in hand. TTL handles the case when it isn't.

Auth on approve

Face ID / Touch ID / device passcode required for the approve action.

Multi-channel

Owner can register multiple channels (phone, watch, SMS fallback). First responder wins.

SDK

from ujex_mobile import Mobile
m = Mobile(api_key=..., agent_id='abc')

approval = m.ask(prompt='Push to main?', detail='Will deploy 4f3a91',
                 ttl_sec=300)
result = approval.wait()  # {'status': 'approved'|'denied'|'timeout'}

Get started

FAQ

What if no channel is registered?

mobile.ask returns status: no_channel immediately.