Enterprise Controls & Managed Settings

Manage Droid defaults and hard policy controls for models, tools, safety, network access, retention, and telemetry.

Factory's enterprise story is built on a single, predictable settings hierarchy. Orgs express hard policy controls and shared defaults in managed settings, then let projects and users customize only where the policy allows it.

Enterprise Controls govern models, tools, safety policies, network restrictions, retention, plugin marketplaces, service accounts, and feature defaults across laptops, CI, VMs, and airgapped environments.

This page is the org-admin reference for the settings hierarchy, the precedence rules that decide who wins, the merge semantics for each data type, and the authoritative org-managed settings schema. For personal preferences a user manages in the Factory App, see App settings. For the CLI settings.json reference, see Settings. For per-feature how-tos, see Custom Models (BYOK), MCP, Sandbox, Hooks, Plugins, and Autonomy Levels.

The settings levels

Settings are authored in .factory/ folders, using the same schema at every level. What changes between levels is precedence.

LevelWhere it livesWho owns it
OrgManaged-settings endpoint, an org .factory/ bundle, or a system-managed settings.jsonOrg administrators
Folder<git-root>/.../<subfolder>/.factory/Repo maintainers (monorepo subtrees)
Project<git-root>/.factory/Repo maintainers
User~/.factory/Individual developers

Each .factory/ folder can contain:

  • settings.json: general settings (models, safety, preferences, telemetry).
  • hooks.json: hook definitions.
  • mcp.json: MCP server configurations.
  • droids/, commands/, skills/: droid, command, and skill definitions.

At resolution time the four authored levels are placed into a longer build order that also includes a command-line overlay, remote dynamic config, and hardcoded defaults. The full order, highest priority first, is:

PriorityLevelSource
1Org (and org plugins)Remote managed settings or system-managed settings.json
2RuntimeThe --settings overlay passed on the command line
3FolderNested .factory/ directories in a monorepo subtree
4Project<git-root>/.factory/
5User~/.factory/
6DynamicRemote dynamic config
7BuiltInHardcoded Droid defaults

For hard controls, the highest level present wins, so Org is authoritative: lower levels can extend a policy where the schema allows accumulation, but they can never weaken or remove it. For session defaults, the order inverts and the most-local level wins. The next section explains why.

How precedence works: hard controls vs session defaults

This is the single most important distinction on this page. Managed settings resolve through two precedence systems at once, and they run in opposite directions. For the user-facing perspective on how personal preferences interact with these controls, see App settings.

Hard controls vs session defaults
Hard controlsSession defaults
Who winsHighest level present. Org (priority 1) is authoritative.Most-local level. Runtime > Folder > Project > User > Org > Dynamic > BuiltIn.
What lower levels can doExtend where the schema allows accumulation (union arrays, add new locked keys); never weaken, remove, or re-enable.Override the value chosen by a less-local level, but only within the ceilings set by hard controls.
FieldsmodelPolicy, mcpPolicy, commandBlocklist (and allow/deny lists), sandbox, managed hooks, strictKnownMarketplaces, subagentModelSettings, plus scalars like maxAutonomyLevel, subagentAutonomyLevel, cloudSessionSync, wikiCloudSync, voiceDictationEnabled, sessionRetentionDays.The keys inside sessionDefaultSettings: model, reasoningEffort, interactionMode, autonomyLevel, autonomyMode, specModeModel, specModeReasoningEffort, runInWorktree.

Session defaults rank levels so that lower (more-local) wins: Runtime is most authoritative, then Folder, Project, and User, with Org, Dynamic, and BuiltIn acting as fallbacks. So a user who sets a preferred model overrides the org's default model, and a --settings runtime overlay overrides even the user. These choices are still capped by hard controls: the org modelPolicy allowlist decides which models exist at all, and maxAutonomyLevel caps the effective autonomyLevel no matter who set it.

In short: orgs decide the boundaries (hard controls, top-down), and users pick their preferred defaults inside those boundaries (session defaults, bottom-up).

Merge semantics

Within each precedence system, the actual merge depends on the data type. Factory uses three merge modes so hard policy controls stay intact while defaults can still adapt to local context.

Merge modeHow it worksExamplesBest for
Simple values, first winsFor scalar hard-control values (strings, numbers, booleans), the first level that sets the value wins. Lower levels cannot change or remove it.maxAutonomyLevel, cloudSessionSync, wikiCloudSync, voiceDictationEnabled, sessionRetentionDaysOrganization-wide ceilings, feature gates, and retention decisions.
Arrays, unionArray fields accumulate across levels. Org entries are always present; project, folder, and user levels can add more without removing or weakening higher-level entries.Command allow lists and deny lists, enabled hooksPolicies like always-denied commands or always-enabled hooks that teams may still extend.
Objects, locked keysKeys defined at a higher level are locked. Lower levels can add new keys but cannot modify or delete existing ones.Org-defined customModels, MCP server definitionsCentralized control over critical configuration, with room for project or user additions.

For example, if the org defines claude-enterprise in customModels, projects can add payments-gpt and users can add personal-experimental, but neither can change or remove claude-enterprise.

The scalar keys inside sessionDefaultSettings are the exception to "first wins": the most-local level wins, not the first. See How precedence works.

System-managed settings file

For deployments where org policy must be applied before any user signs in, including managed laptops, CI runners that aren't authenticated to Factory, airgapped installs, or restricted-network installs, IT/MDM administrators can drop a settings.json at a hardcoded, well-known path on each machine:

OSPath
macOS/Library/Application Support/Factory/settings.json
Linux & WSL/etc/factory/settings.json
WindowsC:\Program Files\Factory\settings.json

The file uses the same org-managed settings schema as the rest of this page.

When this file is present it is the authoritative source for org-level settings on that machine. It short-circuits any API fetch or developer-mode environment overrides for org settings. The factoryTier signal is still queried from the Factory API on a best-effort basis (failures are non-fatal) so enterprise-gated behaviors keep working for managed deployments.

If the file is absent or unreadable, Droid falls back to the existing org-settings flow (Factory App / managed-settings endpoint). If the file is present but malformed or fails schema validation, org settings resolve to an empty policy and the failure is logged. A broken admin deployment is not silently bypassed.

This is the recommended way to ship base policy with an MDM image or installer; users cannot override or weaken it.

Org-managed settings schema

Below is the full schema for org-managed settings. These are configured by org admins through the Enterprise Controls in the Factory App. Every property is optional; omit any field you do not need to set.

Session defaults

sessionDefaultSettingsobject

Default session preferences the org ships to all members. Every key here is a session default: the most-local level wins, capped by hard controls. Users can override these with their own preferences (see App settings); the values here act as the org-wide fallback.

Properties

modelstring

Default model identifier. See Models for the available IDs.

reasoningEffortstring

How much thinking the model does before responding. One of none, dynamic, off, minimal, low, medium, high, xhigh, max.

interactionModestring

Droid interaction mode. One of auto, spec, agi.

autonomyLevelstring

Default autonomy level for the session. One of off, low, medium, high. Capped by maxAutonomyLevel.

runInWorktreeboolean

When true, new sessions started against a git repo run in an isolated worktree.

specModeModelstring

Model to use when spec mode is active. See Models.

specModeReasoningEffortstring

Reasoning effort override for spec mode. Same values as reasoningEffort.

autonomyModestring

Deprecated. Use interactionMode and autonomyLevel instead.

Autonomy, safety, and commands

maxAutonomyLevelstring

Maximum autonomy level any user or project can set. One of off, low, medium, high. A hard ceiling that caps the autonomyLevel session default.

builtInToolAutonomyOverridesobject

Per-tool autonomy level required to run a built-in network tool without a confirmation prompt. Map of built-in tool name to low, medium, or high. A tool auto-runs only when the session's Autonomy Level is at or above its configured requirement; otherwise Droid asks for approval. Tools without an entry default to low. Enforced from org-managed settings only, so user and project settings cannot weaken it. Configured under Built-in Tool Autonomy in Enterprise Controls.

WebSearchstring

Autonomy level required to run the built-in Web Search tool. One of low, medium, high. Defaults to low.

FetchUrlstring

Autonomy level required to run the built-in Fetch URL tool. One of low, medium, high. Defaults to low.

subagentAutonomyLevelstring

Autonomy level applied to subagents spawned by the Task tool. One of inherit, off, low, medium, high; defaults to inherit, which falls back to the parent session's autonomy level. An explicit level is clamped to maxAutonomyLevel so it can never exceed the enterprise cap.

subagentModelSettingsobject

Complexity-to-model routing for subagents. Applies when a subagent's droid uses model: inherit and the parent passes a complexity tier.

lightModelstring

Model used for light complexity tasks. A model identifier, or omit to inherit the spawning session's model.

lightReasoningEffortstring

Reasoning effort for the light tier. Same values as reasoningEffort.

mediumModelstring

Model used for medium complexity tasks. A model identifier, or omit to inherit the spawning session's model.

mediumReasoningEffortstring

Reasoning effort for the medium tier. Same values as reasoningEffort.

heavyModelstring

Model used for heavy complexity tasks. A model identifier, or omit to inherit the spawning session's model.

heavyReasoningEffortstring

Reasoning effort for the heavy tier. Same values as reasoningEffort.

enableDroidShieldboolean

Enable Droid Shield safety checks.

commandAllowliststring[]

Shell command patterns that are always allowed (accumulated across levels).

commandDenyliststring[]

Shell command patterns that always require confirmation (accumulated across levels). A denylisted command can still run if the user explicitly approves it; use commandBlocklist for a hard block.

commandBlockliststring[]

Shell command patterns that can never run (accumulated across levels). Unlike the denylist, blocked commands have no approval path and cannot be bypassed with a wrapper shell, absolute path, or quoting tricks. For the full matching and bypass-resistance behavior, see Agent Safety & Controls.

allowManagedHooksOnlyboolean

When true, only org-managed hooks and hooks from org-enabled plugins are loaded; hooks defined at the user and project levels are dropped. Defaults to false, where hooks from every level participate. See Org-managed hooks.

hooksobject

Org-managed hook definitions, keyed by hook event. Org-defined hooks are always loaded and cannot be removed by lower levels. For event semantics and authoring, see Hooks.

Properties

EventNameobject[]

One key per hook event: PreToolUse, PostToolUse, Notification, UserPromptSubmit, Stop, SubagentStop, PreCompact, SessionStart, SessionEnd. Each value is an array of matcher groups. Unknown event keys are tolerated but warned about at load time.

Matcher group properties

matcherstring

Tool name pattern to match (only applies to PreToolUse and PostToolUse).

commandRegexstring

Optional regular expression matched against the command.

hooksobject[]required

Commands to run when the matcher matches.

Hook command properties

typestringrequired

Must be "command".

commandstringrequired

Shell command to execute.

timeoutnumber

Per-command timeout in seconds.

hooksDisabledboolean

Disable all hooks for the session.

showHookOutputboolean

Show hook output in the session view.

sandboxobject

Built-in sandboxing for command execution and file access. For sandbox behavior and modes, see Sandbox.

Properties

enabledboolean

Whether sandboxing is enabled.

modestring

Sandbox scope. One of per-command or whole-process.

filesystemobject

Filesystem access lists: allowRead, allowWrite, denyRead, denyWrite (each a string array of paths).

networkobject

Network access: allowedDomains, allowUnixSockets, allowAllUnixSockets, allowLocalBinding, and httpProxyPort / socksProxyPort for proxying egress.

Models and BYOK

For BYOK and gateway setup, see Custom Models (BYOK).

customModelsobject[]

Org-provisioned custom model definitions.

Properties

modelstringrequired

Model name sent to the provider API.

idstringrequired

Unique identifier for this custom model entry. Must start with custom: (e.g. custom:my-internal-model-v1).

indexintegerrequired

Display order index.

baseUrlstringrequired

Base URL of the model API endpoint.

apiKeystringrequired

API key for authenticating with the provider.

providerstringrequired

Provider type. One of anthropic, openai, generic-chat-completion-api, factory, google, xai, voyage.

displayNamestringrequired

Human-readable name shown in the model picker.

maxContextLimitinteger

Maximum context window size in tokens.

enableThinkingboolean

Enable extended thinking / chain-of-thought.

thinkingMaxTokensinteger

Maximum tokens for the thinking phase.

maxOutputTokensinteger

Maximum output tokens.

extraHeadersobject

Additional HTTP headers to send with each request. Map of header name to value.

extraArgsobject

Additional provider-specific arguments passed to the API.

noImageSupportbooleanrequired

Set to true if the model does not support image inputs.

modelPolicyobject

Org-level model access control. Allowlists use higher-wins (a higher level's allowlist is the ceiling); blockedModelIds is a union across levels.

Properties

allowedModelIdsstring[]

Model IDs that are explicitly allowed. See Models for the available IDs.

blockedModelIdsstring[]

Model IDs that are explicitly blocked. Combined across levels: once blocked at any level, always blocked.

allowCustomModelsboolean

Whether users may add their own custom models (user BYOK). Set to false to disable user-supplied keys entirely.

allowedBaseUrlsstring[]

Base URLs that custom models are allowed to connect to. Use this to force all custom-model traffic through an approved LLM gateway.

allowAllFactoryModelsboolean

Allow all Factory-hosted models regardless of the allow/block lists.

isFastModelsAllowedboolean

Whether fast model variants may be used.

requireExplicitOptInModelIdsstring[]

Model IDs that require an explicit org opt-in before they can be used.

allowFactoryRouterByokboolean

Whether the Factory Router may be used with bring-your-own-key credentials.

userModelPoliciesobject

Per-user model overrides. Map of user ID to policy object.

Properties

allowedModelIdsstring[]

Model IDs this user is allowed to use.

blockedModelIdsstring[]

Model IDs this user is blocked from using.

MCP

MCP access is allowlist-only. For server configuration, see MCP.

mcpPolicyobject

Org-level MCP server access control.

Properties

enabledboolean

Whether the MCP allowlist is enforced. Defaults to false.

allowliststring[]

MCP servers that are permitted. When enforcement is enabled, any server not on the allowlist is ignored, even if a project or user configures it. There is no MCP blocklist; access is allowlist-only.

mcpAutonomyOverridesobject

Per-server autonomy overrides. Map of MCP server name to an object with an optional defaultLevel (low, medium, high) and an optional tools map of tool name to level.

mcpAutonomyUrlOverridesobject[]

Autonomy overrides matched by URL. Each entry has a urlPattern and a defaultLevel (low, medium, high).

Plugins and marketplaces

For setup and rollout, see Internal Plugin Marketplaces and Plugins.

enabledPluginsobject

Map of plugin name in plugin@marketplace format to true (enabled) or false (disabled). Plugins set to true are automatically installed on CLI startup once their marketplace is available.

extraKnownMarketplacesobject

Additional plugin marketplaces. Map of marketplace name to a source object. Marketplaces listed here are automatically cloned and registered on CLI startup.

Properties

sourceobjectrequired

Marketplace source, one of the following shapes, discriminated by the source field:

GitHub source

sourcestringrequired

Must be "github".

repostringrequired

GitHub repository in owner/repo format.

refstring

Optional Git branch or tag to track (e.g. "main", "v1.2.0").

shastring

Optional full 40-character commit SHA. When set, the marketplace is pinned to this exact commit.

URL source

sourcestringrequired

Must be "url".

urlstringrequired

Git repository URL of the marketplace (e.g. https://gitlab.com/company/plugins.git).

refstring

Optional Git branch or tag to track.

shastring

Optional full 40-character commit SHA to pin to.

Local source

sourcestringrequired

Must be "local".

pathstringrequired

Local filesystem path to the marketplace.

Git subdirectory source

sourcestringrequired

Must be "git-subdir".

urlstringrequired

Git repository URL hosting the marketplace.

pathstringrequired

Subdirectory within the repository that contains the marketplace manifest.

refstring

Optional Git branch or tag to track.

shastring

Optional full 40-character commit SHA to pin to.

strictKnownMarketplacesobject[]

Marketplace sources that are strictly enforced. A higher-level list is the ceiling and is not broadened by lower levels. Each entry is a source object directly (e.g. { "source": "github", "repo": "owner/repo" }), not wrapped in a source key like extraKnownMarketplaces values.

Network, sync, and retention

networkPolicyobject

IP restrictions for authenticated Factory web, CLI, and API requests.

Properties

allowedIpsstring[]required

IPv4 addresses or CIDR ranges that may access Factory web, CLI, and API key surfaces. Must contain at least one entry when set.

cloudSessionSyncboolean

Whether sessions are synced to the cloud.

wikiCloudSyncboolean

Whether AutoWiki content can be stored in the Factory App and synced to GitHub wikis. Enabled by default; when disabled, all AutoWiki API endpoints are blocked and the CLI skips Cloud Sync and GitHub wiki sync. See AutoWiki.

sessionRetentionDaysinteger

Number of days cloud sessions are retained. Between 14 and 365.

Feature controls

voiceDictationEnabledboolean

Whether voice dictation is available as an input method to members of the organization.

Droid Computers

managedComputersEnabledboolean

Whether Factory-managed Droid Computers are enabled for the organization.

managedComputersAllowedEmailsstring[]

Emails permitted to use managed Droid Computers.

byomComputersEnabledboolean

Whether bring-your-own-machine Droid Computers are enabled.

byomComputersAllowedEmailsstring[]

Emails permitted to use bring-your-own-machine computers.

Missions

missionPolicyobject

Org-level access control for missions.

Properties

restrictedAccessboolean

Whether mission access is restricted. Defaults to false.

allowedUserIdsstring[]

User IDs allowed to use missions when access is restricted.

Org administration

includeCoAuthoredByDroidboolean

Include a Co-authored-by: Droid trailer in git commits.

ideAutoConnectboolean

Automatically connect to the IDE on session start.

disableAutoUpdateboolean

Disable automatic CLI updates (useful for managed or pinned deployments).

restrictMemberVisibilityboolean

Restrict whether members can see other members of the organization.

restrictApiKeyCreationToManagersboolean

When true, only Owners and Managers can create API keys.

advancedAnalyticsEnabledboolean

Whether advanced analytics are enabled for the organization.

disableWeeklyUsageSummaryboolean

Controls the weekly email to organization Managers and Owners that lists users and active service accounts at or above 80% of their monthly credit cap. The summary is sent when this setting is omitted or false; set it to true to stop the summary.

factoryRouterGuidancestring

Free-text guidance for the Factory Router.

factoryRouterRulesobject[]

Routing rules for the Factory Router. Each rule has an optional when condition and a guidance string.

Supported model IDs

The identifiers used in allowedModelIds, blockedModelIds, and requireExplicitOptInModelIds are the model IDs listed on Models, which is the single source of truth for available models across providers. Unrecognized IDs are silently dropped rather than failing validation, so policies stay valid across model updates.

Level responsibilities

The same schema applies at every level; the typical division of labor is:

  • Org publishes the authoritative policy: allowed models and gateways, BYOK rules, global command allow/deny/block lists, org-standard droids, commands, hooks, and plugin marketplaces, plus retention, cloud sync, network policy, and feature gates. This bundle is distributed to every environment Droid runs in.
  • Project and folder .factory/ directories (checked into version control) specialize org policy for a codebase: project-specific droids and gateways within the allowed set, hooks that know the repo's tests and deploys, and tighter controls for high-risk repositories. Folder-level directories handle monorepos where subsystems differ.
  • User ~/.factory/ holds personal session defaults where the active policy allows it: a preferred model from the allowed set, preferred reasoning effort, interaction mode, and autonomy level. See App settings for the personal preferences surface.

Because hard controls remain authoritative, users cannot re-enable disallowed models or tools, loosen command lists, or raise autonomy above an enforced ceiling.

Example: enforcing a model policy

Suppose your org wants to allow only approved enterprise models, disallow user-supplied API keys, and force all prompts through a particular LLM gateway. You would:

  1. 1
    Define the allowed models and gateway endpoints in modelPolicy and customModels.
  2. 2
    Set modelPolicy.allowCustomModels to false to disable user BYOK entirely.
  3. 3
    Use modelPolicy.allowedBaseUrls to require approved gateway endpoints for custom models.

Projects and users can still choose which of the approved models to use, but cannot break these guarantees.

Example: environment-specific autonomy

Consider an org that wants high autonomy in CI and sandboxed containers but limited autonomy on developer laptops. You could:

  1. 1
    At org level, set maxAutonomyLevel to high.
  2. 2
    In project settings, define environment-aware hooks that inspect environment tags (for example environment.type=local|ci|sandbox) and downgrade or block autonomy above medium on laptops.
  3. 3
    Optionally, define stricter folder-level policies for particularly sensitive repos.

Users can only choose safer personal defaults within the allowed space.

Example: full org-managed settings

JSON
{
  "sessionDefaultSettings": {
    "model": "<model-id-from-/models>",
    "reasoningEffort": "high",
    "interactionMode": "auto",
    "autonomyLevel": "medium",
    "specModeModel": "<model-id-from-/models>",
    "specModeReasoningEffort": "medium",
    "runInWorktree": false
  },
  "maxAutonomyLevel": "high",
  "builtInToolAutonomyOverrides": {
    "WebSearch": "high",
    "FetchUrl": "medium"
  },
  "subagentAutonomyLevel": "medium",
  "cloudSessionSync": true,
  "voiceDictationEnabled": true,
  "includeCoAuthoredByDroid": true,
  "enableDroidShield": true,
  "ideAutoConnect": true,
  "commandAllowlist": ["npm *", "yarn *", "pnpm *", "make *"],
  "commandDenylist": ["rm -rf /", "sudo *"],
  "commandBlocklist": ["shutdown", "mkfs", "curl"],
  "allowManagedHooksOnly": true,
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Execute",
        "hooks": [
          {
            "type": "command",
            "command": "\"$FACTORY_PROJECT_DIR\"/.factory/hooks/audit-command.sh",
            "timeout": 30
          }
        ]
      }
    ]
  },
  "customModels": [
    {
      "model": "my-internal-model",
      "id": "custom:my-internal-model-v1",
      "index": 0,
      "baseUrl": "https://llm-gateway.internal.example.com/v1",
      "apiKey": "${INTERNAL_MODEL_API_KEY}",
      "provider": "generic-chat-completion-api",
      "displayName": "Internal Model v1",
      "maxContextLimit": 128000,
      "enableThinking": true,
      "thinkingMaxTokens": 8192,
      "maxOutputTokens": 16384,
      "extraHeaders": {
        "X-Team": "platform"
      },
      "extraArgs": {},
      "noImageSupport": false
    }
  ],
  "modelPolicy": {
    "allowedModelIds": ["<model-id-from-/models>"],
    "blockedModelIds": [],
    "allowCustomModels": false,
    "allowedBaseUrls": ["https://llm-gateway.internal.example.com/v1"],
    "allowAllFactoryModels": false
  },
  "mcpPolicy": {
    "enabled": true,
    "allowlist": ["internal-docs", "ticketing"]
  },
  "networkPolicy": {
    "allowedIps": ["10.0.0.0/8", "192.0.2.0/24"]
  },
  "sandbox": {
    "enabled": true,
    "mode": "per-command",
    "filesystem": {
      "denyRead": ["~/.ssh", "~/.aws"],
      "denyWrite": ["/etc"]
    },
    "network": {
      "allowedDomains": ["api.github.com", "registry.npmjs.org"]
    }
  },
  "restrictApiKeyCreationToManagers": true,
  "sessionRetentionDays": 90,
  "advancedAnalyticsEnabled": true,
  "disableWeeklyUsageSummary": false,
  "userModelPolicies": {
    "user-abc-123": {
      "allowedModelIds": ["<model-id-from-/models>"],
      "blockedModelIds": []
    }
  },
  "enabledPlugins": {
    "my-org-plugin@internal-marketplace": true,
    "experimental-plugin@internal-marketplace": false
  },
  "extraKnownMarketplaces": {
    "internal-marketplace": {
      "source": {
        "source": "github",
        "repo": "my-org/factory-plugins"
      }
    }
  },
  "strictKnownMarketplaces": [
    {
      "source": "github",
      "repo": "my-org/factory-plugins"
    }
  ]
}

Models, gateways, MCP, and tooling

The hierarchy governs which models and external systems Droid can reach. The org-level controls are the schema fields above; each area also has a dedicated page:

  • Models and BYOK: modelPolicy (allowedModelIds, blockedModelIds, allowCustomModels, allowedBaseUrls) and customModels. See Models for IDs and Custom Models (BYOK) for gateway and provider setup, including cloud platforms (Bedrock, Vertex, Azure OpenAI) and self-hosted endpoints.
  • MCP servers: mcpPolicy (allowlist-only), plus mcpAutonomyOverrides and mcpAutonomyUrlOverrides for per-server or per-URL autonomy. See MCP.
  • Droids, commands, and hooks: published in the org .factory bundle; set allowManagedHooksOnly to true to ignore project- and user-defined hooks. See Hooks and Agent Safety & Controls.

Putting it all together

Enterprise Controls underpin everything described in the other enterprise pages:

By expressing policy once at the right level, you can run Droid across cloud, hybrid, and airgapped environments without per-machine drift or one-off configuration.