Who can manage policies
- Owners and super-admins can create, edit, and delete policies, and change team access.
- Admins can view policies and team access, but can’t change them.
- Desktop policy management is part of the Enterprise plan.
What policies control
Each switch in the policy editor is designed to control one part of the desktop app. Apart from Custom providers, they don’t take effect yet.- Custom providers: adding and using models your organization didn’t set up in OpenWork Cloud.
- Enable OpenCode Zen Models: using the built-in models from OpenCode.
- Multiple workspaces: creating more than one workspace on a computer.
- Control Settings: opening and changing the desktop app’s settings.
- Manage Extensions: installing local extensions, skills, and MCP servers.
- Built-in Extensions: using OpenWork’s built-in extensions, such as the browser, image, and local-provider extensions.
- Alpha updates: choosing to get experimental Alpha updates.
- Welcome Page: showing the Getting Started page to new users.
- Run OS commands and Blocked command patterns: whether the agent can run commands on the computer, or which commands it can’t run.
- Restrict browsing to approved sites and Approved websites: which websites the built-in browser can open.
- Block browser uploads and form submissions: stopping the built-in browser from sending files or form data.
Configure a policy
- Open app.openworklabs.com and choose your organization.
- Go to Manage › Desktop policies.
- Click New policy, or click Edit on an existing policy. The policy marked Default applies to everyone.
- Enter a Policy name and a Priority. When more than one policy matches a member, the higher priority decides which prompt suggestions they see.
- Under Policy mode, choose Custom or Restricted.
- Turn switches on or off, and fill in Commands & browser if you need it.
- To show your own suggested prompts, turn on Organization prompt suggestions. See Team prompt cards.
- Under Members and Teams, choose who the policy applies to.
- Click Create policy, or Save changes for an existing policy.
- You can’t rename the default policy or give it a priority. It always applies to everyone.
- To pause a policy without deleting it, open it and click Disable. Click Enable to turn it back on.
- To remove a policy, click Delete next to it in the list. You can’t delete the default policy.
- Policies created from a team’s Access tab show Team access in the list. Click View team access to change them on the team’s page.
Restricted mode
Restricted turns off every switch except Welcome Page and locks them until you switch back to Custom. It is designed to give members a simple OpenWork: they can chat and use organization-approved skills, but can’t change settings, add providers, add workspaces, or install extensions. Because switches combine across policies, Restricted only locks members down when you apply it to the default policy. A targeted policy in Restricted mode doesn’t take anything away from other policies. Today, the only part of Restricted that takes effect is that it turns off Custom providers.Approved websites
Approved websites are designed to limit the built-in browser to sites you choose. This control is paused and doesn’t block anything yet. To set approved websites for a team:- Go to Members › Teams, open the team, and choose the Access tab.
- Expand Browse websites.
- Set Website access to Approved sites only.
- Enter a full website address, such as
https://portal.example.com, and click Add site. Repeat for each site. - Click Review changes, then Save permissions.
- Enter whole websites only, with no page paths.
- Add subdomains and sign-in sites separately.
https://portal.example.comdoesn’t includehttps://docs.portal.example.com. - You can add up to 100 sites.
- Blocked, or an empty list, blocks all browsing.
Approved web origins in Settings › General is a different feature. It lets websites you approve use a member’s OpenWork sign-in. It doesn’t limit which sites members can browse.
Team access
Each team has an Access tab where you choose what its members can do. To open it, go to Members › Teams, open the team, and choose Access. Under What this team can do, set each option to Allowed or Blocked:- Browse websites: Website access (All websites, Approved sites only, or Blocked) and Upload files & submit forms.
- Run computer commands: Computer commands. To block only some commands, open Advanced: block specific commands.
- Tools & connections: Add local tools, skills & MCP servers and Use built-in extensions.
- AI setup: Add AI providers and Use OpenCode models.
- Settings, workspaces & updates: Create more workspaces, Change app settings, and Try experimental updates.
Technical details
Technical details
Enforcement switch. Enforcement is controlled by
DESKTOP_POLICY_ENFORCEMENT_ENABLED in packages/types/src/den/desktop-policies.ts, currently false. Den still stores and resolves every policy. Before the desktop app uses the config, desktopCapabilityConfig() removes execution and every policy key except allowCustomProviders and showWelcomePage. Prompt suggestions and allowedDesktopVersions pass through. The desktop app does not currently read showWelcomePage. Model access never blocks startup, sign-in, or chat: the app uses the last known setting, and allows providers when no setting is known.Model access storage. Only models you provide is stored as allowCustomProviders: false in the default desktop policy. Admins may still add their own keys on their device is stored as a policy for the admin role.How switches combine. If an organization has no policies, every switch is on. Otherwise every switch starts off, and any true in the default policy or a matching member, team, or role policy turns it on. Explicit false values from a team’s access settings (access.capabilities) are applied afterward and win.Commands and browsing. Stored under execution in the policy document:commandsisallowordeny. Any matching policy withdenyblocks commands.blockedCommandsare patterns that use*for any text. Patterns from all matching policies are added together, up to 100 per policy.browserOrigins: if the field is left out, there is no website restriction. An empty list ([]) blocks every website. Lists intersect across the default policy and all matching member, team, and role policies, so a site must appear in every list that exists.blockBrowserUploads: any matching policy withtrueturns it on.
https://portal.example.com:443 equals https://portal.example.com. http://portal.example.com and https://portal.example.com:8443 are different origins. Paths, credentials, queries, and fragments are rejected. Wildcards are not supported.Designed behavior when enforcement resumes. Website rules cover every built-in browser request, including navigation, redirects, frames, scripts, and images. A resource from an unapproved origin is blocked even on an approved page. While approved sites are set, the engine’s built-in websearch and webfetch tools are denied; third-party MCP search or fetch tools are not filtered. Block browser uploads and form submissions blocks WebSocket (ws:/wss:) connections, requests with upload data, and methods other than GET, HEAD, and OPTIONS. GET-based forms can still send data to approved sites. None of these controls are device-wide data-loss prevention: allowed computer commands and third-party connections can use other network routes.Refresh. The desktop app caches the last config it received and applies it on launch. It fetches a fresh config when the member signs in, when the Cloud account or active organization changes, and every hour.