Daemon and relay are open source

Runtime control plane
for teams running agents.

Viewport routes context to your agents, runs them across your machines, queues every human decision in one inbox, and proves what each run did. Built for engineering teams that ship agent-driven changes daily.

Self-host the whole stack. No transcripts on our servers.

Self-host or run with us. Ships with npm i -g @viewportai/daemon

Sessions

Agent work across every paired machine in your organization.

~/codeAmbiguous · 2 candidates

Reading directory tree to figure out where to start.

claude-code·acme-mbp·last activity 25 sec ago
~/.../platform/apps/webacme/acme@feat/uxAcme

Implementing /design/plans mockup with Tremor primitives.

claude-code·acme-mbp·last activity 3 sec ago
~/.../marketing-sitedesign/marketing-site@v3Design Studio

Refactoring hero section with new copy.

aider·studio-mac·last activity 12 sec ago
~/.../packages/daemonpersonal/dotfiles@mainPersonal

Reading binding-detector.ts to confirm signature.

claude-code·acme-mbp·last activity 24 min ago
Connected · acme-mbp·wss://relay.getviewport.com

Agent-native

Pair Claude Code or Codex on any machine your team already uses.

Open source

Daemon and relay are public on GitHub. Read every line that runs on your machine.

Self-hostable

Same software, your infrastructure. Your keys for context. Your audit trail.

The loop

From prompt to proof, on one rail.

Agents do real work in five visible steps. Viewport routes the right context in, surfaces every decision the agent should hand back to you, and proves what shipped.

  1. 01

    Pair a machine

    vpd install + vpd pair. Daemon goes online in your org.

  2. 02

    Run an agent

    Claude Code or Codex. Viewport attaches your team's context and watches live.

  3. 03

    Get a plan

    Steps, files, scope, the context that shaped it.

  4. 04

    Decide in Inbox

    Approve, request changes, or steer. From anywhere.

  5. 05

    Run proof

    Every action logged. Auditable. Reversible. Provable.

What’s inside

Four surfaces. The four moments that matter when an agent ships code.

Context Vault

Shared memory for your team's agents.

Context is a first-class resource. Shared with teams, used by workflows, proposed back to by agents. A repo-local .viewport/config.json declares which bundles to attach. Your servers never see the bytes.

  • Bundle digest on every run. Proof the agent saw what you said.
  • Agent proposals route back to the context they used
  • Encrypted at the edge. Control-plane-blind by design.
.viewport/config.json
sha256:bf21e9…
{
  "name": "viewport-daemon",
  "resources": {
    "contexts": [
      "ctx_viewport_architecture",
      "ctx_daemon_runtime_contracts"
    ],
    "workflows": ["wf_daemon_pr_review"]
  },
  "defaults": {
    "inboxRoute": "team_engineering",
    "destructiveActionPolicy": "approval_required"
  }
}
Resolved 2 contexts on this run·3 items

Session rotation policy

ADR-009

Sanctum middleware notes

vault/sanctum

Cookie path conventions

vault/cookies-q4

Auth flow walkthrough

vault/auth-2025

Sessions

Every agent run, live, on every paired machine.

Sessions announce themselves the moment they start. Working directory, repo, machine, agent, model. Never the prompt or the transcript. Detail stays on your machine and is fetched on demand when you open a session.

  • Awaiting, Active, and Idle in one list
  • Repo-config resolution shows exactly what shaped the run
  • Approve from anywhere when an agent hits a gate
Sessions
3 live
~/.../platform/apps/webacme/acme@feat/uxAcme

Implementing /design/plans mockup with Tremor primitives.

claude-code · acme-mbp · 3s

~/codeAmbiguous · 2

Reading directory tree to figure out where to start.

claude-code · acme-mbp · 25s

~/.../scriptspersonal/dotfiles@mainPersonal

Reading binding-detector.ts to confirm signature.

claude-code · acme-mbp · 24m

Inbox

One queue for every human decision your agents will hit.

Plan reviews, approval gates, and context candidates land in one inbox across every project. The agent pauses, the team decides, the run continues. No more agents stalled in a dozen dashboards.

  • Three decision kinds: plan, gate, candidate
  • Routes by team membership and resource access, not by project
  • Decide from anywhere. Every decision is one tap.
Inbox
3 awaiting your call
gate
Acme

Allow rm -rf node_modules in ~/code/api

Workflow paused. claude-code · acme-mbp · 28s ago

plan
Acme

ADR-014 · Session rotation on auth-touching PRs

6-step plan · +318 −44 · 5 files · 2h ago

context
Acme

Remember: prefer Zustand over Redux in apps/web

Distilled from 4 conversations this week · 6h ago

Plans

Approve with proof, not vibes.

Every plan shows up as an artifact you can actually review. Steps, files, diff estimate, and the context that shaped it. Approve, request changes, or reject in seconds.

  • Step-by-step preview with dry-run state
  • Files affected with line-count distribution
  • Provenance: which workflow run, which agent, which context
Plan · ADR-014
Ready for review

Session rotation on auth-touching PRs

from auth-readiness #182 · claude-code · acme-mbp

01Read existing auth flow
02Add session rotation column + migration
03Cover with feature tests; verify cookie path
·04Document new behavior
Files · 4 changed+318 −44
  • apps/api/Auth/SessionRotation.php124 lines
  • apps/api/Auth/Middleware.php76 lines
  • apps/api/tests/SessionTest.php58 lines
  • database/migrations/...rotate.php42 lines
Get running

From zero to a paired agent in three commands.

Install the daemon, pair the machine, drop a .viewport/config.json in your repo. Sessions appear live. Decisions land in your inbox.

shell
# install the daemon
$ npm i -g @viewportai/daemon

# verify
$ vpd --version
0.2.0
$ vpd doctor
  ✓ binary on PATH
  ✓ pty subsystem ready
  ✓ git available
  ✓ relay reachable: wss://relay.getviewport.com
Architecture

Your code never leaves your machines.

Viewport is split across three pieces by design. The daemon runs on your machine and is the only component that touches your code. The relay is a stateless WebSocket router that sees ciphertext frames, never decrypted bytes. The control plane is a calm UI you can self-host or let us run.

  • No transcripts on our servers

    Sessions announce metadata only. Detail flows from daemon to browser, on demand.

  • Context bodies are encrypted at the edge

    Control-plane-blind by design. Servers handle ciphertext only.

  • Self-host the whole stack

    The daemon is open source. The relay ships as a Docker image. The control plane runs on your infrastructure.

Daemon

On your machine

  • session detailyes
  • tool calls + outputyes
  • context decryptionyes
  • file system writesyes

Relay

Stateless WebSocket router

  • session metadatatransit
  • transcript bytesno
  • context bodiesno
  • secretsno

Control plane

Self-host or hosted

  • session list + IDsmetadata
  • inbox decisionsmetadata
  • context body bytesciphertext
  • audit ledgeryes

The daemon is open source. github.com/ViewportAI/viewport

Your agents are shipping code.
Are you watching?

Pair a machine, drop a config, watch agents work. Self-hostable for teams. Ready for compliance the day you need it.

Self-host or run with us.