Expose an owner-controlled project setting for outbound internet access so users can enable direct networking for shells and persistent services without manually changing Sprite policies.
Depends on BinaryBourbon/fountain#1638 for the persisted policy, provider application, and lifecycle behavior. The backend policy must remain the source of truth.
Problem
The Expo project's environment already reports unrestricted networking, but its machine is restricted to the broker host. Ordinary shell commands and the shared browser do not inherit conversation proxy credentials. Package downloads and DNS for sites such as jakegaylor.com fail.
A manual machine-wide policy reset restored direct access in production. It is temporary because Fountain can reapply its broker-only floor when a conversation attaches. The project settings currently cannot express the owner's direct-access choice.
Required behavior
- Add clear project network controls for broker-enforced access and explicitly enabled direct internet access. Explain that the setting applies to the shared machine, including all tracks, shell commands, and browser services.
- Preserve current behavior for existing projects. Project owners may change the setting; track/project guests cannot widen machine network access.
- Read and update the existing Fountain environment/machine policy through the API from #1638. Extend the narrow Fountain client types and project settings contract as needed.
- Update in place without replacing the agent, environment, vault, sandbox, worktrees, or browser profile.
- Show the effective state and any pending/failed application. Do not show direct access as active when only the desired setting has been saved.
- Explain that direct traffic bypasses broker enforcement/logging. Keep secrets and proxy tokens out of API responses, browser state, and UI.
- If the deployed Fountain API lacks this capability, show an actionable unavailable state rather than silently saving a local-only setting.
Acceptance
- The Expo project owner can enable direct internet access in production and ordinary shell DNS/HTTPS works.
- Reloading settings and opening a new track retain the chosen/effective setting.
- Disabling direct access restores enforcement without losing files or the shared browser profile.
- Tests cover owner/guest authorization, API failures, capability mismatch, and existing settings remaining intact.
- Live verification includes
jakegaylor.com, npm access, and persistence after a new conversation attaches.
Relevant code: apps/switchyard/server/projects.ts, server/fountain.ts, shared/fountain-types.ts, shared project settings types, and the project settings UI.
Related browser integration issue: BinaryBourbon/fountain#1633.
Switchyard browser provisioning and live verification: #45.
Expose an owner-controlled project setting for outbound internet access so users can enable direct networking for shells and persistent services without manually changing Sprite policies.
Depends on BinaryBourbon/fountain#1638 for the persisted policy, provider application, and lifecycle behavior. The backend policy must remain the source of truth.
Problem
The Expo project's environment already reports unrestricted networking, but its machine is restricted to the broker host. Ordinary shell commands and the shared browser do not inherit conversation proxy credentials. Package downloads and DNS for sites such as
jakegaylor.comfail.A manual machine-wide policy reset restored direct access in production. It is temporary because Fountain can reapply its broker-only floor when a conversation attaches. The project settings currently cannot express the owner's direct-access choice.
Required behavior
Acceptance
jakegaylor.com, npm access, and persistence after a new conversation attaches.Relevant code:
apps/switchyard/server/projects.ts,server/fountain.ts,shared/fountain-types.ts, shared project settings types, and the project settings UI.Related browser integration issue: BinaryBourbon/fountain#1633.
Switchyard browser provisioning and live verification: #45.