What we shipped, and when.
Each release is a real change to the daemon, relay, or control plane. We try to ship something every week and tell you what changed.
Resource pivot · .viewport/config.json
We deleted the project-binding model. Sessions no longer "belong to a project." They record which repo configs and resources actually shaped the run.
What changed
- Repo configs are first-class. Drop a
.viewport/config.jsonin your repo, commit it, your team is on the same defaults forever. No more invisible project-binding state. - Multi-repo merges work. Launch above two repos and Viewport resolves both configs into a single resource manifest. Conflicts surface as conflicts; nothing gets silently chosen.
- Sessions show provenance. Each session detail now displays the configs it loaded, the resources it resolved, and any access denied.
Why
Project-as-runtime-boundary was doing seven jobs at once and confusing
everyone. Repo-local config matches how engineers already think
(.github/, .cursor/, CLAUDE.md). Same destination, much simpler model.
Mobile inbox + push notifications
The reason Viewport exists: be away from your laptop, get a push when your agent needs you, tap Allow from your phone, agent unblocks.
New & improved
- iOS inbox. Native push for plan reviews, approval gates, and context candidates. Tap-to-decide.
- Android inbox. Same surface, native to Android.
- Approval gate timeout policy. Per-team rule for what happens when a gate sits unanswered: deny by default, escalate, or remain pending.
Self-host the relay
The relay (the WebSocket router between daemon and control plane) now ships as a Docker image. Same software we run; your infrastructure.
What you get
- One-command deploy.
docker run viewportai/relay:0.1.6. - Customer-controlled TLS. Bring your own cert or use the built-in ACME flow.
- Air-gap mode. Run the relay on internal infra and route daemon traffic without ever leaving your VPC.