VIEWPORT
For developers

Decide from anywhere

The inbox is where every agent decision lives. Here's how to work it from desktop, mobile web, or a webhook.

The point of Viewport is that you don't have to be at the laptop the agent is running on. The inbox is where every decision the agent is waiting for shows up. You make the call, the daemon receives it, the agent continues.

What lands in the inbox

Three kinds of decisions, distinguished by what the agent is asking:

KindWhat it meansTypical action
Plan review"Here's my proposed plan. Should I execute it?"Approve plan / Request revisions / Deny
Approval gate"Can I do this specific thing?" (e.g., rm a path)Allow once / Allow always / Deny
Context candidate"I learned something. Add it to memory?"Approve / Discard / Edit then approve

You see one queue with everything. Filter by kind, by repo, by who routed it, or by urgency.

The daily rhythm

A common loop:

  1. You kick off an agent on a task and walk away.
  2. Push notification (web push today, native iOS/Android on the roadmap) wakes your phone: "Claude Code paused in ~/code/api."
  3. You open the link from your lock screen. Land directly on the inbox item.
  4. You read the plan or the question. Two paragraphs, usually.
  5. You tap Approve. Or Deny. Or you leave a comment for the agent.
  6. The daemon receives the resolution. The agent continues. Or stops cleanly.
  7. You go back to dinner.

Some items take more thought (a 14-step plan that touches auth), some are 2 seconds (allow once for a node_modules cleanup). Either way, you didn't open the laptop.

On desktop

The web app at app.getviewport.com/inbox has the full surface:

  • List rail on the left, grouped by urgency or kind.
  • Detail surface on the right with the decision context, the related session, and the action dock.
  • Comments thread for back-and-forth with the agent or with teammates.
  • Keyboard shortcuts: J / K to navigate, A to approve, D to deny, R to leave a comment.

On phone

Same data, mobile-responsive. The detail surface stacks above the action dock so the buttons are always thumb-reach. There's no native app yet. The mobile web is the canonical mobile experience until React Native ships.

In Slack

Connect Slack at app.getviewport.com/settings/integrations and route inbox events to a channel. Slack posts with an interactive message. You can approve or deny directly from Slack without opening the web app.

See Slack integration for the setup.

Via webhook

If you'd rather wire it to your own consumer (PagerDuty, Linear, custom dashboard), configure a webhook endpoint and the platform POSTs a JSON payload on each event:

{
  "type": "inbox_item.created",
  "workspace_id": "01J…",
  "inbox_item_id": "ibx_…",
  "kind": "plan_review",
  "agent": "claude-code",
  "session_id": "ses_…",
  "preview": "Migrate auth middleware from cookie to bearer tokens.",
  "decision_url": "https://app.getviewport.com/inbox/ibx_…",
  "expires_at": "2026-05-11T15:42:00Z"
}

See Webhook delivery for the full schema, signing model, and retry behavior.

What "auto-decide" means

Sometimes you don't actually need to decide. If the policy says "auto-approve plans under 5 file changes when the only test that changed is *.test.ts," the platform decides for you and writes the auto-approval to the audit log. The agent continues without ever paging you.

Auto-approval policies are configured per workflow. See Approval policies.

When you don't decide

Every inbox item has a TTL (default: 1 hour). If no one decides in time, the policy says either:

  • Auto-deny · safest default. Agent gets the deny signal and stops or branches.
  • Escalate · reroute to a wider audience (e.g., entire team after 15 min).
  • Hold indefinitely · the agent stays paused, you decide when you decide. Useful for explicit long-running gates.

Each workflow node can override the default per-gate.

Where to go next

On this page