VIEWPORT
For developers

Mobile experience

The killer feature: an agent pauses on your laptop, you approve from your phone, the agent continues.

The point of Viewport is the moment your phone buzzes, you look down, you read what the agent wants to do, and you say yes or no. All while the laptop is sitting somewhere else.

This page is what that flow actually looks like.

What ships today

SurfaceStatus
Mobile-responsive web appStable
Web push notifications (Chrome, Safari, Firefox on iOS 16.4+)Stable
Slack DM / channel push as fallbackStable
Native iOS appRoadmap
Native Android appRoadmap

Set up web push (3 minutes)

  1. Open app.getviewport.com in Safari on iOS 16.4+ or Chrome on Android.
  2. Add Viewport to your home screen (Safari: Share → Add to Home Screen).
  3. Open the home-screen icon (not the Safari tab. Push only works for installed PWAs on iOS).
  4. The first time an inbox item lands, you'll be prompted to enable notifications. Accept.
  5. On iOS, also enable notifications in Settings → Notifications → Viewport. Allow on Lock Screen, banner style "Persistent."

To test:

vpd test push

This kicks off a no-op session with a synthetic plan review. Your phone should buzz within a few seconds. The notification has the agent name and a one-line preview of the decision.

What a push looks like

When an inbox item lands, the platform sends:

Claude Code paused
~/code/api · plan review
Migrate auth middleware to bearer tokens
       Tap to review

Tap and you go directly to the inbox item detail page. No list step. The detail surface has:

  • The full question or plan.
  • Big primary buttons: Approve, Deny, Reply (leave a comment first).
  • A collapsible "related context" section with the session and any prior decisions in this run.

The daily flow

A real day:

08:00  cd ~/code/api && claude
08:00  → laptop sits, you walk to kitchen
08:04  *phone buzz*  "Claude Code paused in ~/code/api"
08:04  open notification, see plan, tap Approve
08:04  laptop: agent continues
08:11  *phone buzz*  "Permission needed: rm -rf node_modules"
08:11  read it, tap Allow once
08:11  laptop: agent continues
08:18  *phone buzz*  "Session complete · PR opened"
08:18  walk back to laptop, gh pr view

If you're in a meeting, the phone batches multiple inbox items into one expandable notification.

What if you can't decide right now

Each inbox item has a TTL (default 1 hour). If you don't decide:

  • Default: auto-deny. Safe choice. The agent stops or branches to a deny path.
  • Configurable per workflow. See Approval policies.

You can also defer manually: tap Snooze 15m and the platform re-notifies you later. The agent stays paused.

Multi-org users

If you belong to multiple orgs, your phone shows pushes from all of them. The notification body includes the org name so you know which hat to wear. Inside the app, you can switch active org via the switcher in the top-left.

What's not on your phone

  • The agent's transcript itself. Frames are on the daemon. The phone gets the decision question, not the underlying file diffs (unless the plan includes them).
  • The actual code under review. Plans contain change summaries and references, not raw bytes.

This is deliberate. The privacy claim ("we don't store transcripts") would be broken if the phone fetched the full session from somewhere.

Setup tips

  • Allow lock-screen. Otherwise you have to unlock to see the question, which kills the speed of the loop.
  • Allow critical alerts (iOS) if you want pushes to break through Do Not Disturb. Reserved for opt-in workflows; configure per workflow.
  • Pin Viewport to your home screen on Android too. Web push works in regular Chrome tabs on Android, but the PWA experience is better.

Troubleshooting

  • Notification didn't show: check iOS Settings → Notifications → Viewport. PWA installation is required on iOS.
  • Got the push, but the link goes to a "Forbidden" page: probably a stale org switch. Tap the org switcher to confirm you're in the right org. See Troubleshooting: tenant context errors.
  • Phone is slow to wake: web push latency is ~2-5 seconds typically. If you're regularly seeing 30s+, tell us and we'll dig in.

Where to go next

On this page