Runtime control plane
for teams running agents.
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.
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.
- 01
Pair a machine
vpd install + vpd pair. Daemon goes online in your org.
- 02
Run an agent
Claude Code or Codex. Viewport attaches your team's context and watches live.
- 03
Get a plan
Steps, files, scope, the context that shaped it.
- 04
Decide in Inbox
Approve, request changes, or steer. From anywhere.
- 05
Run proof
Every action logged. Auditable. Reversible. Provable.
Four surfaces. The four moments that matter when an agent ships code.
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.
{
"name": "viewport-daemon",
"resources": {
"contexts": [
"ctx_viewport_architecture",
"ctx_daemon_runtime_contracts"
],
"workflows": ["wf_daemon_pr_review"]
},
"defaults": {
"inboxRoute": "team_engineering",
"destructiveActionPolicy": "approval_required"
}
}Session rotation policy
ADR-009
Sanctum middleware notes
vault/sanctum
Cookie path conventions
vault/cookies-q4
Auth flow walkthrough
vault/auth-2025
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
Implementing /design/plans mockup with Tremor primitives.
claude-code · acme-mbp · 3s
Reading directory tree to figure out where to start.
claude-code · acme-mbp · 25s
Reading binding-detector.ts to confirm signature.
claude-code · acme-mbp · 24m
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.
Allow rm -rf node_modules in ~/code/api
Workflow paused. claude-code · acme-mbp · 28s ago
ADR-014 · Session rotation on auth-touching PRs
6-step plan · +318 −44 · 5 files · 2h ago
Remember: prefer Zustand over Redux in apps/web
Distilled from 4 conversations this week · 6h ago
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
Session rotation on auth-touching PRs
from auth-readiness #182 · claude-code · acme-mbp
- apps/api/Auth/SessionRotation.php124 lines
- apps/api/Auth/Middleware.php76 lines
- apps/api/tests/SessionTest.php58 lines
- database/migrations/...rotate.php42 lines
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.
# 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.comYour 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.