Enterprise deployment
What DefenseClaw enterprise hardening is, which profile to choose, what runs on each endpoint, and what a standard user can and cannot change on Windows, Linux, and macOS.
Is this for you?
- One person, one computer: use the open-source install. You install DefenseClaw for yourself, and you own it: you can change its policy or turn it off. Start with the Quickstart.
- A fleet your IT team manages: use enterprise deployment. An administrator or an MDM installs DefenseClaw as operating-system services, and the people who run AI agents, and the agents themselves, cannot turn it off.
- What you need: an MDM, configuration-management tool or administrator shell that runs commands as SYSTEM on Windows and as root on Linux and macOS, and agents that run as standard users.
Which features each edition offers is in the feature table, and which agents are protected on which OS in the enterprise route table.
Ready to deploy?
Deploy to a fleet walks through the six steps, from choosing a profile to a ringed rollout, and links to each detail page.
How enterprise deployment differs
A normal DefenseClaw install belongs to the person who runs the AI agent. That person can stop it, edit its policy, or remove its hooks. Enterprise deployment moves DefenseClaw out of their reach. An administrator or an MDM installs it as operating-system services. The services, the policy, and the program files belong to the administrator. The AI agent still runs in the user's session and its hooks still call DefenseClaw. But the user, and any agent that user runs, can no longer turn the protection off.
In the config this is deployment_mode: managed_enterprise
(managed_enterprise).
Two profiles
A managed deployment runs in one of two profiles. Pick the one that matches how you deploy software.
| Detail | Standalone | Secure Client |
|---|---|---|
| Choose it when | You deploy with Intune or any other MDM, a .deb, .rpm or .pkg package, configuration management, or an administrator shell | You run Cisco Secure Client and want DefenseClaw as one of its modules |
| Platforms | Windows, Linux, macOS | Windows, macOS |
| Who decides on each tool call | The local policy engine (rule packs, policy, CodeGuard). Cisco AI Defense is added when you turn it on and store an API key | Cisco AI Defense only. The local detectors are off |
| If Cisco AI Defense is unreachable | The local verdict stands | The Secure Client posture applies |
| Documented in | This section | Secure Client managed deployment |
Rules that apply to both:
- One profile per computer. The two profiles use the same gateway port, and on Windows the same service names. Uninstall one before you install the other. The standalone lifecycle refuses to install over a Secure Client deployment.
- The profile is fixed at install. The config sets
enterprise.profile, and every service is started withDEFENSECLAW_ENTERPRISE_PROFILEset to the same value. If they disagree, the service refuses to start. To change profile, uninstall one and install the other. - The default depends on the OS. When neither is set, Windows and macOS
resolve to
secure_clientand Linux resolves tostandalone. Linux rejectssecure_client. For a standalone deployment on Windows or macOS, always setenterprise.profile: standalonein the config.
The rest of this section covers the standalone profile.
What runs where
Every endpoint runs the same four services. The
gateway decides on each tool call and
runs as a restricted service account. The
guardian installs and repairs each
user's hooks. The enumerator finds the
users to protect. The sensor helper
answers a fixed set of privileged discovery questions for the gateway. The
hook (defenseclaw-hook) is not a service:
it is an administrator-owned program that the agent runs as the user.
The diagram shows how a tool call gets checked and who puts each piece in place. The enumerator and the sensor helper are in the table below it.
List view for small screens. Use the expand button to open the drawing.
TrustedZ0 · Admin (root · SYSTEM)
- MDM or adminruns the lifecycle
- installsGuardianZ1
- writesConfig and policyZ3
- writesAgent machine policyZ3
PrivilegedZ1 · Services
- Guardiankeeps hooks in place
- adds hooks, as the userAI agentZ4
ProtectedZ3 · Admin-owned files
- Config and policysecrets
- read byGatewayZ2
- Agent machine policyCodex · Claude Code
- registers hooksAI agentZ4
UntrustedZ4 · User session (the user)
- AI agentruns as the user
- runsdefenseclaw-hook
- defenseclaw-hookruns on each tool call
- asks · caller checkedGatewayZ2
RestrictedZ2 · Gateway (service account)
- Gatewayallows or blocks
The services and their identities on each OS:
| Part | Windows | Linux (systemd) | macOS (launchd) |
|---|---|---|---|
| Gateway | DefenseClawGateway, as NT SERVICE\DefenseClawGateway | defenseclaw-gateway.service, as the defenseclaw user with no capabilities. systemd holds its sockets (defenseclaw-gateway-api.socket, defenseclaw-gateway-hook.socket) | com.cisco.defenseclaw.gateway, as the hidden _defenseclaw user |
| Guardian | DefenseClawHookGuardian, LocalSystem | defenseclaw-hook-guardian.service, root with a bounded capability set | com.cisco.defenseclaw.hook-guardian, root |
| Enumerator | DefenseClawHookEnumerator, LocalSystem | defenseclaw-hook-enumerator.service, root with a bounded capability set | com.cisco.defenseclaw.hook-enumerator, root |
| Sensor helper | DefenseClawSensorHelper, LocalSystem | defenseclaw-sensor-helper.service, root | com.cisco.defenseclaw.sensor-helper, root |
| Applies a config change | Your MDM runs ensure again with the new config | defenseclaw-enterprise-apply.path runs ensure when the config, secrets or policies change | com.cisco.defenseclaw.apply does the same |
| Daily check | Your MDM runs detection or verify | defenseclaw-enterprise-verify.timer runs verify once a day | com.cisco.defenseclaw.verify runs verify once a day |
The guardian reconciles every minute and the enumerator runs every five
minutes on every OS. The gateway listens only on 127.0.0.1:18970. On Linux
and macOS, hooks and DefenseClaw's in-agent plugins reach the gateway only
through its local hook socket (/run/defenseclaw-hook/hook.sock on Linux,
/opt/cisco/defenseclaw/run/hook.sock on macOS), which tells the gateway each
caller's uid; there is no TCP fallback. On Windows they use the loopback
address with credentials bound to the user's SID.
The same parts mapped to the trust zones:
| Zone | Windows |
|---|---|
| Z1 Privileged services | Guardian, enumerator, sensor helper as LocalSystem |
| Z2 Restricted gateway | NT SERVICE\DefenseClawGateway |
| Z3 Administrator-owned state | C:\Program Files\Cisco\DefenseClaw, C:\ProgramData\Cisco\DefenseClaw, C:\ProgramData\Cisco\DefenseClaw-HookRuntime. Vendor policy: %ProgramData%\OpenAI\Codex, %ProgramFiles%\ClaudeCode\managed-settings.d, %ProgramData%\Cursor, %ProgramData%\GitHub\Copilot\policy.d, %ProgramData%\opencode |
| Z4 User session | The agent and defenseclaw-hook.exe |
| Zone | Linux |
|---|---|
| Z1 Privileged services | Guardian, enumerator, sensor helper as root |
| Z2 Restricted gateway | defenseclaw |
| Z3 Administrator-owned state | /opt/defenseclaw, /etc/defenseclaw, /var/lib/defenseclaw-hook-guardian, /var/lib/defenseclaw-enterprise. Vendor policy: /etc/codex, /etc/claude-code, /etc/cursor, /etc/github-copilot, /etc/opencode |
| Z4 User session | The agent and /opt/defenseclaw/bin/defenseclaw-hook |
| Zone | macOS |
|---|---|
| Z1 Privileged services | Guardian, enumerator, sensor helper as root |
| Z2 Restricted gateway | _defenseclaw |
| Z3 Administrator-owned state | /opt/cisco/defenseclaw, /Library/Logs/Cisco/DefenseClaw. Vendor policy: /etc/codex, /Library/Application Support/ClaudeCode, /Library/Application Support/Cursor, /etc/github-copilot, /Library/Application Support/opencode |
| Z4 User session | The agent and /opt/cisco/defenseclaw/bin/defenseclaw-hook |
Inside the Z3 folders, the gateway account writes only its own data, log and
socket folders (for example runtime). Everything else there is written by
administrators and DefenseClaw's privileged services.
The full layout of each OS is on its install page: Windows, Linux, macOS.
Who can change what
| What | Administrator or MDM | DefenseClaw services | Standard user, and any agent they run |
|---|---|---|---|
| Config and policies | Writes | The gateway reads them | No write |
| Secrets | Writes | The gateway reads the one it needs | No access |
| Binaries and services | Installs, upgrades, removes | Run them | Runs the hook; cannot stop, change or replace a service |
| Per-user hook config | Not needed: the guardian manages DefenseClaw's entries | The guardian writes DefenseClaw's entries, as the user | Owns the files; the guardian repairs its entries, and the foreign-hook guard handles hooks the user adds |
| Vendor machine policy | Writes. DefenseClaw changes only its own entries | The lifecycle or the guardian writes DefenseClaw's own entries; see Who writes machine policy | The agent reads it; no write |
| Audit logs | Reads | The gateway writes them | No access |
An AI agent that a prompt can steer has exactly the rights of the user it runs as.
DefenseClaw does not defend a computer from its own administrators. An agent
that runs with unrestricted sudo or administrator rights is an
administrator.
What a standard user cannot do
- Stop, disable, or reconfigure a DefenseClaw service, or replace one of its programs.
- Edit the config, policies, secrets, target manifest or authorization ledger, or read the Cisco AI Defense key.
- Remove DefenseClaw's hooks from vendor machine policy, or tell the agent to skip them where DefenseClaw sets the vendor's managed-hooks-only lock. Which agents get the lock on which OS is on Machine policy.
- Keep a user or project hook that could rewrite a tool call after DefenseClaw checked it, for the agents the foreign-hook guard covers.
- Pose as the gateway. The hook sends nothing until the operating system shows that the listener is the DefenseClaw service (peer verification).
- Run a second, per-user DefenseClaw. On a managed computer the per-user
installer,
defenseclaw upgrade, and the per-user gateway refuse to run.
A user can still edit or delete files they own, such as a per-user hook registration. The guardian repairs DefenseClaw's entries on its next pass. Vendor machine policy has no such window. The threat model has the full list and the risks that remain.
Supported platforms and agents
| OS | Requirements |
|---|---|
| Windows | 64-bit Windows on x64 (releases ship no ARM64 build). A stable, machine-wide PowerShell 7 from Microsoft's installer, which the standalone lifecycle uses. An elevated administrator or SYSTEM context |
| Linux | systemd 239 or later. The defenseclaw-enterprise package is built as .deb and .rpm for x86-64 and arm64; a tarball is also published. Run as root |
| macOS | macOS 13.0 or later on Apple silicon, for the defenseclaw-enterprise-<version>-darwin-arm64.pkg package. Run as root |
Details are under Requirements on each install page: Windows, Linux, macOS.
DefenseClaw protects each agent through vendor machine policy, a per-user hook the guardian maintains, or the ACP guard. The routes for each agent are in step 2 of Deploy to a fleet, and the agent and OS combinations verified in this release are in the enterprise route table.
OpenClaw and ZeptoClaw are not supported in enterprise deployments. OpenHands and OmniGent are refused on Windows. The per-OS details, including which vendor locks DefenseClaw sets, are on Machine policy. Agent versions and setup are on each connector page.
A minimal config
The administrator config is one YAML file. The example below protects Codex
and Claude Code in observe mode, so policy verdicts do not block yet, and
installs as written with ensure --config. rule_pack_dir: "" selects the
rule packs built into the gateway; to use your own, see
Custom rule packs.
config_version: 8
deployment_mode: managed_enterprise
data_dir: /var/lib/defenseclaw # must be exactly this path
policy_dir: /etc/defenseclaw/policies
enterprise:
profile: standalone
gateway:
api_bind: 127.0.0.1
api_port: 18970
guardrail:
enabled: true
rule_pack_dir: "" # use the built-in rule packs
mode: observe # observe | action
connectors:
codex: {}
claudecode: {}config_version: 8
deployment_mode: managed_enterprise
data_dir: /opt/cisco/defenseclaw/runtime # must be exactly this path
policy_dir: /opt/cisco/defenseclaw/etc/policies
enterprise:
profile: standalone
gateway:
api_bind: 127.0.0.1
api_port: 18970
guardrail:
enabled: true
rule_pack_dir: "" # use the built-in rule packs
mode: observe # observe | action
connectors:
codex: {}
claudecode: {}config_version: 8
deployment_mode: managed_enterprise
# Leave data_dir unset: the services use C:\ProgramData\Cisco\DefenseClaw\runtime.
enterprise:
profile: standalone
gateway:
api_bind: 127.0.0.1
api_port: 18970
guardrail:
enabled: true
rule_pack_dir: "" # use the built-in rule packs
mode: observe # observe | action
connectors:
codex: {}
claudecode: {}Four things to know before you deploy it:
- Nothing is protected until you list agents. Each key under
guardrail.connectorsturns on one agent. On Linux and macOS, the config the lifecycle writes when you supply none lists no agents, so it protects nothing. On Windows, install andensurerequire a config. On Linux and macOS, naming Codex, Claude Code, Cursor, GitHub Copilot or OpenCode anywhere underguardrail.connectors(even withenabled: false) or underenterprise.machine_policy.connectorsmakes the lifecycle publish DefenseClaw's hook in that agent's machine policy; on Windows that rule applies to Copilot and OpenCode. To leave an agent unprotected, leave it out of both maps or set itsownership: "off". See Choose the agents to protect. - Observe mode does not block on policy verdicts. In
observemode DefenseClaw records each decision, including what it would have blocked. Switchguardrail.modetoactionto enforce. The deployment's own checks apply in both modes: a tool call is still refused while an unapproved foreign hook is present (withforeign_hooks: remove), or when the user is not enrolled where enrollment is enforced. - The data directory is fixed. On Linux and macOS the lifecycle rejects
any other
data_dir. On Windows, adata_dirother than the runtime directory is rejected too. - Tell enrollment about unusual layouts (Linux and macOS). Users are
enrolled from homes under
/homeand/var/home(Linux) or/Users(macOS), and agent CLIs are found in the usual install locations. If homes live elsewhere, such as/srv/home, list the parent folders underenterprise.enrollment.home_roots; if agents are installed under an administrator prefix, such as an npm--prefixof/opt/tools, list it underenterprise.enrollment.agent_prefixes. See Enrollment.
Where the file goes on each OS, every enterprise.* setting, and the proxy
settings are on Configuration.
The optional Cisco AI Defense key never goes in the config: store it after the install, as Cisco AI Defense key shows.
Next steps
Deploy to a fleet
The six steps from profile and agents to your MDM recipe, ensure and a ringed rollout.
Plan a rollout
Choose agents and users, pilot in observe mode, handle existing per-user installs, and expand in rings.
Threat model
Trust zones, how each boundary is protected, and the risks that remain.
Windows
Install the four standalone services with the Setup program or PowerShell 7.
Linux
Install the systemd units with the deb or rpm package, or from a payload directory.
macOS
Install the LaunchDaemons and the hidden service user from the pkg.
Install with an MDM
The MDM contract and recipes for Intune, Jamf, Iru (formerly Kandji), Workspace ONE, Configuration Manager, and Linux configuration management.
Configure
Where the config lives, how to choose agents, and every enterprise setting.
Operate
Check status and health, read logs and events, and verify machine policy.
Add a connector without losing audit history
Use defenseclaw setup <connector> to add or reconfigure agent wiring while preserving audit history for every connector.
Deploy to a fleet
The six steps to deploy DefenseClaw enterprise to managed Windows, Linux and macOS endpoints, from choosing a profile and agents to your MDM recipe, config, ensure and a ringed rollout.