VIEWPORT
For teams

Slack integration

Send inbox events to a channel. Approve from Slack directly. One-way notify or two-way interactive.

The Slack integration mirrors your inbox into a channel and lets approved deciders act directly from Slack without opening the web app.

What it does

  • Notify: every inbox item posts a card to a configured channel.
  • Interact: the card has Approve / Deny / Reply buttons. Clicking them resolves the inbox item.
  • Threaded comments: replying in the thread posts a comment back to the inbox item.
  • DM mode: route items personal to a specific user as a Slack DM instead of a channel post.

Set up

  1. Settings → Integrations → Slack → Connect.
  2. Authorize the Viewport Slack app on your workspace.
  3. Pick a default channel (or leave blank for DM-only).
  4. (Optional) Pick a fallback channel for unrouted items.

You're done. Test it:

vpd test push --channel slack

You should see a card in the channel within a few seconds.

Card shape

┌─────────────────────────────────────────────┐
│ 🟧  Plan review · ~/code/api · Acme Engineering │
│ Claude Code · 8 minutes ago                  │
├─────────────────────────────────────────────┤
│ Refactor auth middleware to bearer tokens.   │
│ 12 steps, 9 files. Touches /auth and tests.  │
├─────────────────────────────────────────────┤
│  ✓ Approve     ✗ Deny      ↩ Reply           │
└─────────────────────────────────────────────┘

The orange bar on the left is the inbox-kind tint (orange for plan review, red for approval gate, indigo for context candidate). The channel post is the summary; the full plan is one click away on the web app.

Routing rules

Per-workflow YAML can route different gates to different channels:

approvals:
  plan_review:
    notify:
      slack:
        channel: "#engineering-reviews"
  approval_gate:
    notify:
      slack:
        channel: "#engineering-oncall"
        mention: "@channel"
  context_candidate:
    notify:
      slack:
        dm_actor: true                # DM the user who created the source session

The channel name resolves dynamically. Mentions are opt-in to prevent noise.

Who can approve from Slack

By default, only users with the right role + share access can resolve from Slack. Slack identity is mapped to Viewport identity through the Slack user's primary email. If a Slack user with no matching Viewport account clicks Approve, they get a Slack-ephemeral error: "You're not a member of this Viewport organization."

To pre-authorize via Slack, link Slack accounts in Settings → Integrations → Slack → Linked accounts.

Audit

Every Slack-driven decision writes the standard audit event with source: slack and the Slack user/channel as metadata. The Slack message ID is included for traceability.

DM mode

If you route an item to a specific user via audience: user:alice@acme.com, Slack DMs Alice instead of posting to a channel. Useful for personal gates ("review your own plan").

Limitations

  • One Slack workspace per Viewport org. Multi-Slack support is planned.
  • Slack-side rate limits apply. A single workflow that fires hundreds of inbox items in a minute may be batched by Slack itself.
  • No Slack-side editing of plans. The Slack card shows the summary; full edits happen on the web app.

Where to go next

On this page