nox-openclaw-hunter 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +140 -0
  3. package/bin/nox.js +2 -0
  4. package/dist/branding.d.ts +39 -0
  5. package/dist/branding.d.ts.map +1 -0
  6. package/dist/branding.js +66 -0
  7. package/dist/branding.js.map +1 -0
  8. package/dist/cli.d.ts +15 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +94 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/export.d.ts +21 -0
  13. package/dist/commands/export.d.ts.map +1 -0
  14. package/dist/commands/export.js +616 -0
  15. package/dist/commands/export.js.map +1 -0
  16. package/dist/commands/index.d.ts +8 -0
  17. package/dist/commands/index.d.ts.map +1 -0
  18. package/dist/commands/index.js +8 -0
  19. package/dist/commands/index.js.map +1 -0
  20. package/dist/commands/isolate.d.ts +30 -0
  21. package/dist/commands/isolate.d.ts.map +1 -0
  22. package/dist/commands/isolate.js +547 -0
  23. package/dist/commands/isolate.js.map +1 -0
  24. package/dist/commands/purge.d.ts +22 -0
  25. package/dist/commands/purge.d.ts.map +1 -0
  26. package/dist/commands/purge.js +295 -0
  27. package/dist/commands/purge.js.map +1 -0
  28. package/dist/commands/scan.d.ts +23 -0
  29. package/dist/commands/scan.d.ts.map +1 -0
  30. package/dist/commands/scan.js +155 -0
  31. package/dist/commands/scan.js.map +1 -0
  32. package/dist/detector/app-bundle.d.ts +13 -0
  33. package/dist/detector/app-bundle.d.ts.map +1 -0
  34. package/dist/detector/app-bundle.js +27 -0
  35. package/dist/detector/app-bundle.js.map +1 -0
  36. package/dist/detector/cli-binary.d.ts +12 -0
  37. package/dist/detector/cli-binary.d.ts.map +1 -0
  38. package/dist/detector/cli-binary.js +66 -0
  39. package/dist/detector/cli-binary.js.map +1 -0
  40. package/dist/detector/config.d.ts +21 -0
  41. package/dist/detector/config.d.ts.map +1 -0
  42. package/dist/detector/config.js +337 -0
  43. package/dist/detector/config.js.map +1 -0
  44. package/dist/detector/detection-config.d.ts +24 -0
  45. package/dist/detector/detection-config.d.ts.map +1 -0
  46. package/dist/detector/detection-config.js +242 -0
  47. package/dist/detector/detection-config.js.map +1 -0
  48. package/dist/detector/docker.d.ts +10 -0
  49. package/dist/detector/docker.d.ts.map +1 -0
  50. package/dist/detector/docker.js +94 -0
  51. package/dist/detector/docker.js.map +1 -0
  52. package/dist/detector/index.d.ts +50 -0
  53. package/dist/detector/index.d.ts.map +1 -0
  54. package/dist/detector/index.js +155 -0
  55. package/dist/detector/index.js.map +1 -0
  56. package/dist/detector/network.d.ts +34 -0
  57. package/dist/detector/network.d.ts.map +1 -0
  58. package/dist/detector/network.js +205 -0
  59. package/dist/detector/network.js.map +1 -0
  60. package/dist/detector/process.d.ts +16 -0
  61. package/dist/detector/process.d.ts.map +1 -0
  62. package/dist/detector/process.js +47 -0
  63. package/dist/detector/process.js.map +1 -0
  64. package/dist/detector/service.d.ts +17 -0
  65. package/dist/detector/service.d.ts.map +1 -0
  66. package/dist/detector/service.js +51 -0
  67. package/dist/detector/service.js.map +1 -0
  68. package/dist/enforcer/docker-cleaner.d.ts +30 -0
  69. package/dist/enforcer/docker-cleaner.d.ts.map +1 -0
  70. package/dist/enforcer/docker-cleaner.js +163 -0
  71. package/dist/enforcer/docker-cleaner.js.map +1 -0
  72. package/dist/enforcer/file-remover.d.ts +34 -0
  73. package/dist/enforcer/file-remover.d.ts.map +1 -0
  74. package/dist/enforcer/file-remover.js +137 -0
  75. package/dist/enforcer/file-remover.js.map +1 -0
  76. package/dist/enforcer/index.d.ts +33 -0
  77. package/dist/enforcer/index.d.ts.map +1 -0
  78. package/dist/enforcer/index.js +142 -0
  79. package/dist/enforcer/index.js.map +1 -0
  80. package/dist/enforcer/process-killer.d.ts +18 -0
  81. package/dist/enforcer/process-killer.d.ts.map +1 -0
  82. package/dist/enforcer/process-killer.js +80 -0
  83. package/dist/enforcer/process-killer.js.map +1 -0
  84. package/dist/enforcer/service-stopper.d.ts +23 -0
  85. package/dist/enforcer/service-stopper.d.ts.map +1 -0
  86. package/dist/enforcer/service-stopper.js +95 -0
  87. package/dist/enforcer/service-stopper.js.map +1 -0
  88. package/dist/index.d.ts +6 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +10 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/isolator/firewall.d.ts +25 -0
  93. package/dist/isolator/firewall.d.ts.map +1 -0
  94. package/dist/isolator/firewall.js +114 -0
  95. package/dist/isolator/firewall.js.map +1 -0
  96. package/dist/isolator/index.d.ts +63 -0
  97. package/dist/isolator/index.d.ts.map +1 -0
  98. package/dist/isolator/index.js +201 -0
  99. package/dist/isolator/index.js.map +1 -0
  100. package/dist/isolator/lockdown.d.ts +22 -0
  101. package/dist/isolator/lockdown.d.ts.map +1 -0
  102. package/dist/isolator/lockdown.js +401 -0
  103. package/dist/isolator/lockdown.js.map +1 -0
  104. package/dist/isolator/quarantine.d.ts +39 -0
  105. package/dist/isolator/quarantine.d.ts.map +1 -0
  106. package/dist/isolator/quarantine.js +364 -0
  107. package/dist/isolator/quarantine.js.map +1 -0
  108. package/dist/mdm/index.d.ts +93 -0
  109. package/dist/mdm/index.d.ts.map +1 -0
  110. package/dist/mdm/index.js +414 -0
  111. package/dist/mdm/index.js.map +1 -0
  112. package/dist/mdm/intune.d.ts +69 -0
  113. package/dist/mdm/intune.d.ts.map +1 -0
  114. package/dist/mdm/intune.js +409 -0
  115. package/dist/mdm/intune.js.map +1 -0
  116. package/dist/mdm/jamf.d.ts +58 -0
  117. package/dist/mdm/jamf.d.ts.map +1 -0
  118. package/dist/mdm/jamf.js +441 -0
  119. package/dist/mdm/jamf.js.map +1 -0
  120. package/dist/mdm/jumpcloud.d.ts +73 -0
  121. package/dist/mdm/jumpcloud.d.ts.map +1 -0
  122. package/dist/mdm/jumpcloud.js +470 -0
  123. package/dist/mdm/jumpcloud.js.map +1 -0
  124. package/dist/mdm/templates/detect.ps1.d.ts +30 -0
  125. package/dist/mdm/templates/detect.ps1.d.ts.map +1 -0
  126. package/dist/mdm/templates/detect.ps1.js +463 -0
  127. package/dist/mdm/templates/detect.ps1.js.map +1 -0
  128. package/dist/mdm/templates/detect.sh.d.ts +30 -0
  129. package/dist/mdm/templates/detect.sh.d.ts.map +1 -0
  130. package/dist/mdm/templates/detect.sh.js +474 -0
  131. package/dist/mdm/templates/detect.sh.js.map +1 -0
  132. package/dist/mdm/templates/enforce.ps1.d.ts +33 -0
  133. package/dist/mdm/templates/enforce.ps1.d.ts.map +1 -0
  134. package/dist/mdm/templates/enforce.ps1.js +681 -0
  135. package/dist/mdm/templates/enforce.ps1.js.map +1 -0
  136. package/dist/mdm/templates/enforce.sh.d.ts +33 -0
  137. package/dist/mdm/templates/enforce.sh.d.ts.map +1 -0
  138. package/dist/mdm/templates/enforce.sh.js +591 -0
  139. package/dist/mdm/templates/enforce.sh.js.map +1 -0
  140. package/dist/platform/darwin.d.ts +6 -0
  141. package/dist/platform/darwin.d.ts.map +1 -0
  142. package/dist/platform/darwin.js +192 -0
  143. package/dist/platform/darwin.js.map +1 -0
  144. package/dist/platform/index.d.ts +43 -0
  145. package/dist/platform/index.d.ts.map +1 -0
  146. package/dist/platform/index.js +27 -0
  147. package/dist/platform/index.js.map +1 -0
  148. package/dist/platform/linux.d.ts +6 -0
  149. package/dist/platform/linux.d.ts.map +1 -0
  150. package/dist/platform/linux.js +134 -0
  151. package/dist/platform/linux.js.map +1 -0
  152. package/dist/platform/windows.d.ts +6 -0
  153. package/dist/platform/windows.d.ts.map +1 -0
  154. package/dist/platform/windows.js +134 -0
  155. package/dist/platform/windows.js.map +1 -0
  156. package/dist/reporter/console.d.ts +27 -0
  157. package/dist/reporter/console.d.ts.map +1 -0
  158. package/dist/reporter/console.js +431 -0
  159. package/dist/reporter/console.js.map +1 -0
  160. package/dist/reporter/index.d.ts +11 -0
  161. package/dist/reporter/index.d.ts.map +1 -0
  162. package/dist/reporter/index.js +13 -0
  163. package/dist/reporter/index.js.map +1 -0
  164. package/dist/reporter/json.d.ts +61 -0
  165. package/dist/reporter/json.d.ts.map +1 -0
  166. package/dist/reporter/json.js +75 -0
  167. package/dist/reporter/json.js.map +1 -0
  168. package/dist/reporter/webhook.d.ts +57 -0
  169. package/dist/reporter/webhook.d.ts.map +1 -0
  170. package/dist/reporter/webhook.js +230 -0
  171. package/dist/reporter/webhook.js.map +1 -0
  172. package/dist/types/config.d.ts +116 -0
  173. package/dist/types/config.d.ts.map +1 -0
  174. package/dist/types/config.js +6 -0
  175. package/dist/types/config.js.map +1 -0
  176. package/dist/types/detection.d.ts +85 -0
  177. package/dist/types/detection.d.ts.map +1 -0
  178. package/dist/types/detection.js +5 -0
  179. package/dist/types/detection.js.map +1 -0
  180. package/dist/types/enforcement.d.ts +33 -0
  181. package/dist/types/enforcement.d.ts.map +1 -0
  182. package/dist/types/enforcement.js +5 -0
  183. package/dist/types/enforcement.js.map +1 -0
  184. package/dist/types/index.d.ts +8 -0
  185. package/dist/types/index.d.ts.map +1 -0
  186. package/dist/types/index.js +8 -0
  187. package/dist/types/index.js.map +1 -0
  188. package/dist/types/isolation.d.ts +55 -0
  189. package/dist/types/isolation.d.ts.map +1 -0
  190. package/dist/types/isolation.js +5 -0
  191. package/dist/types/isolation.js.map +1 -0
  192. package/dist/utils/exec.d.ts +48 -0
  193. package/dist/utils/exec.d.ts.map +1 -0
  194. package/dist/utils/exec.js +103 -0
  195. package/dist/utils/exec.js.map +1 -0
  196. package/dist/utils/fs.d.ts +34 -0
  197. package/dist/utils/fs.d.ts.map +1 -0
  198. package/dist/utils/fs.js +111 -0
  199. package/dist/utils/fs.js.map +1 -0
  200. package/dist/utils/index.d.ts +7 -0
  201. package/dist/utils/index.d.ts.map +1 -0
  202. package/dist/utils/index.js +7 -0
  203. package/dist/utils/index.js.map +1 -0
  204. package/dist/utils/logger.d.ts +14 -0
  205. package/dist/utils/logger.d.ts.map +1 -0
  206. package/dist/utils/logger.js +48 -0
  207. package/dist/utils/logger.js.map +1 -0
  208. package/docs/intune.md +390 -0
  209. package/docs/jamf.md +400 -0
  210. package/docs/jumpcloud.md +510 -0
  211. package/package.json +65 -0
package/docs/jamf.md ADDED
@@ -0,0 +1,400 @@
1
+ # Jamf Pro Integration Guide
2
+
3
+ Deploy Nox OpenClaw detection and enforcement scripts across your macOS fleet using Jamf Pro.
4
+
5
+ ## Overview
6
+
7
+ This guide explains how to:
8
+
9
+ 1. Add detection and enforcement scripts to Jamf Pro
10
+ 2. Create policies for automated scanning
11
+ 3. Set up extension attributes for inventory
12
+ 4. Create Smart Groups for targeting
13
+ 5. Configure webhook integration for SIEM alerting
14
+
15
+ ## Prerequisites
16
+
17
+ - Jamf Pro 10.x or later
18
+ - macOS 10.15+ managed devices
19
+ - Admin access to Jamf Pro console
20
+ - (Optional) Webhook endpoint for SIEM integration
21
+
22
+ ## Quick Start
23
+
24
+ 1. Generate scripts:
25
+ ```bash
26
+ nox export --platform jamf --mode detect --output ./jamf-scripts
27
+ nox export --platform jamf --mode enforce --output ./jamf-scripts
28
+ ```
29
+
30
+ 2. Upload scripts to Jamf Pro
31
+ 3. Create detection policy with recurring trigger
32
+ 4. (Optional) Create enforcement policy scoped to detected devices
33
+
34
+ ## Script Setup
35
+
36
+ ### Step 1: Generate Scripts
37
+
38
+ Generate Jamf-optimized scripts using the CLI:
39
+
40
+ ```bash
41
+ # Detection script
42
+ nox export --platform jamf --mode detect --output ./jamf-scripts
43
+
44
+ # Enforcement script
45
+ nox export --platform jamf --mode enforce --output ./jamf-scripts
46
+
47
+ # With webhook integration
48
+ nox export --platform jamf --mode detect \
49
+ --webhook https://siem.example.com/webhook \
50
+ --webhook-token YOUR_TOKEN \
51
+ --output ./jamf-scripts
52
+ ```
53
+
54
+ ### Step 2: Add Detection Script
55
+
56
+ 1. Navigate to **Settings > Computer Management > Scripts**
57
+ 2. Click **+ New**
58
+ 3. Configure the **General** tab:
59
+ - **Display Name:** Nox OpenClaw Detection
60
+ - **Category:** Security
61
+ - **Info:** Detects OpenClaw AI agent installations
62
+ - **Notes:** Generated by nox-openclaw-detector v1.0.0
63
+ 4. Configure the **Script** tab:
64
+ - Paste contents of `detect-openclaw.sh`
65
+ 5. Configure the **Options** tab:
66
+ - **Priority:** Before
67
+ - **Parameter 4 Label:** Webhook URL
68
+ - **Parameter 5 Label:** Webhook Token
69
+ - **Parameter 6 Label:** Verbose Mode (true/false)
70
+ 6. Click **Save**
71
+
72
+ ### Step 3: Add Enforcement Script
73
+
74
+ 1. Navigate to **Settings > Computer Management > Scripts**
75
+ 2. Click **+ New**
76
+ 3. Configure the **General** tab:
77
+ - **Display Name:** Nox OpenClaw Enforcement
78
+ - **Category:** Security
79
+ - **Info:** Removes OpenClaw AI agent installations
80
+ 4. Configure the **Script** tab:
81
+ - Paste contents of `enforce-openclaw.sh`
82
+ 5. Configure the **Options** tab:
83
+ - **Priority:** Before
84
+ - **Parameter 4 Label:** Webhook URL
85
+ - **Parameter 5 Label:** Webhook Token
86
+ - **Parameter 6 Label:** Quarantine Mode (true/false)
87
+ - **Parameter 7 Label:** Verbose Mode (true/false)
88
+ 6. Click **Save**
89
+
90
+ ## Extension Attribute
91
+
92
+ Create an extension attribute to report OpenClaw status in Jamf inventory.
93
+
94
+ ### Add Extension Attribute
95
+
96
+ 1. Navigate to **Settings > Computer Management > Extension Attributes**
97
+ 2. Click **+ New**
98
+ 3. Configure:
99
+ - **Display Name:** OpenClaw Status
100
+ - **Description:** Reports OpenClaw installation status
101
+ - **Data Type:** String
102
+ - **Inventory Display:** General
103
+ - **Input Type:** Script
104
+ 4. Paste the extension attribute script:
105
+
106
+ ```bash
107
+ #!/bin/bash
108
+ # Nox OpenClaw Detection - Jamf Extension Attribute
109
+
110
+ OPENCLAW_STATUS="Not Installed"
111
+
112
+ # Check CLI binary
113
+ if command -v openclaw &>/dev/null; then
114
+ OPENCLAW_STATUS="Installed"
115
+ fi
116
+
117
+ # Check common paths
118
+ for path in /usr/local/bin/openclaw /opt/homebrew/bin/openclaw; do
119
+ if [[ -f "$path" ]]; then
120
+ OPENCLAW_STATUS="Installed"
121
+ break
122
+ fi
123
+ done
124
+
125
+ # Check app bundle
126
+ if [[ -d "/Applications/OpenClaw.app" ]]; then
127
+ OPENCLAW_STATUS="Installed"
128
+ fi
129
+
130
+ # Check config directory
131
+ if [[ -d "$HOME/.openclaw" ]] || ls -d /Users/*/.openclaw &>/dev/null 2>&1; then
132
+ OPENCLAW_STATUS="Installed"
133
+ fi
134
+
135
+ # Check if running
136
+ if pgrep -f "openclaw" > /dev/null 2>&1; then
137
+ OPENCLAW_STATUS="Running"
138
+ fi
139
+
140
+ # Check gateway port
141
+ if nc -z localhost 18789 2>/dev/null; then
142
+ OPENCLAW_STATUS="Running"
143
+ fi
144
+
145
+ echo "<result>$OPENCLAW_STATUS</result>"
146
+ ```
147
+
148
+ 5. Click **Save**
149
+
150
+ ### Extension Attribute Values
151
+
152
+ | Value | Meaning |
153
+ |-------|---------|
154
+ | `Not Installed` | No OpenClaw components found |
155
+ | `Installed` | OpenClaw detected but not actively running |
156
+ | `Running` | OpenClaw is actively running |
157
+
158
+ ## Policy Configuration
159
+
160
+ ### Detection Policy
161
+
162
+ Create a policy to run detection on a schedule.
163
+
164
+ 1. Navigate to **Computers > Policies**
165
+ 2. Click **+ New**
166
+ 3. Configure **General**:
167
+ - **Display Name:** Nox OpenClaw Detection
168
+ - **Enabled:** Yes
169
+ - **Trigger:** Recurring Check-in
170
+ - **Execution Frequency:** Once per day
171
+ 4. Configure **Scripts**:
172
+ - Click **Configure**
173
+ - Add "Nox OpenClaw Detection" script
174
+ - Set parameter values:
175
+ - **Parameter 4 (Webhook URL):** Your SIEM webhook URL
176
+ - **Parameter 5 (Webhook Token):** Your authentication token
177
+ - **Parameter 6 (Verbose):** false
178
+ 5. Configure **Scope**:
179
+ - **Targets:** All Managed Clients (or specific groups)
180
+ 6. Click **Save**
181
+
182
+ ### Enforcement Policy
183
+
184
+ Create a policy to remediate detected installations.
185
+
186
+ 1. Navigate to **Computers > Policies**
187
+ 2. Click **+ New**
188
+ 3. Configure **General**:
189
+ - **Display Name:** Nox OpenClaw Enforcement
190
+ - **Enabled:** Yes (or No for manual trigger only)
191
+ - **Trigger:** Custom (see below) or Recurring Check-in
192
+ - **Execution Frequency:** Ongoing
193
+ 4. Configure **Scripts**:
194
+ - Add "Nox OpenClaw Enforcement" script
195
+ - Set parameter values as needed
196
+ 5. Configure **Scope**:
197
+ - **Targets:** Smart Group "OpenClaw Detected" (see below)
198
+ 6. Click **Save**
199
+
200
+ ### Self Service Policy (Optional)
201
+
202
+ Allow users or IT to manually run enforcement:
203
+
204
+ 1. Create policy as above
205
+ 2. Set **Trigger:** Self Service
206
+ 3. Configure **Self Service**:
207
+ - **Make the policy available in Self Service:** Yes
208
+ - **Button Name:** Remove OpenClaw
209
+ - **Description:** Removes unauthorized AI agent software
210
+
211
+ ## Smart Groups
212
+
213
+ ### OpenClaw Detected
214
+
215
+ Identify devices with OpenClaw installed:
216
+
217
+ 1. Navigate to **Computers > Smart Computer Groups**
218
+ 2. Click **+ New**
219
+ 3. Configure:
220
+ - **Display Name:** OpenClaw Detected
221
+ - **Criteria:**
222
+
223
+ | And/Or | Criteria | Operator | Value |
224
+ |--------|----------|----------|-------|
225
+ | | Extension Attribute: OpenClaw Status | is | Installed |
226
+ | or | Extension Attribute: OpenClaw Status | is | Running |
227
+
228
+ 4. Click **Save**
229
+
230
+ ### OpenClaw Running
231
+
232
+ Identify devices actively running OpenClaw (high priority):
233
+
234
+ 1. Navigate to **Computers > Smart Computer Groups**
235
+ 2. Click **+ New**
236
+ 3. Configure:
237
+ - **Display Name:** OpenClaw Running
238
+ - **Criteria:**
239
+
240
+ | Criteria | Operator | Value |
241
+ |----------|----------|-------|
242
+ | Extension Attribute: OpenClaw Status | is | Running |
243
+
244
+ 4. Click **Save**
245
+
246
+ ### OpenClaw Clean
247
+
248
+ Identify devices without OpenClaw (for compliance reporting):
249
+
250
+ 1. Create Smart Group with criteria:
251
+
252
+ | Criteria | Operator | Value |
253
+ |----------|----------|-------|
254
+ | Extension Attribute: OpenClaw Status | is | Not Installed |
255
+
256
+ ## Exit Codes
257
+
258
+ Scripts report these exit codes to Jamf:
259
+
260
+ | Code | Detection Meaning | Enforcement Meaning | Jamf Behavior |
261
+ |------|-------------------|---------------------|---------------|
262
+ | 0 | Not detected | Successful removal | Policy marked successful |
263
+ | 1 | Detected | Partial failure | Policy marked failed |
264
+ | 2 | Script error | Script error | Policy marked failed |
265
+ | 3 | N/A | Nothing to remove | Policy marked successful |
266
+
267
+ ## Webhook Integration
268
+
269
+ ### Configure Webhooks in Policy
270
+
271
+ Set webhook parameters in the policy script configuration:
272
+
273
+ - **Parameter 4:** `https://siem.example.com/api/v1/events`
274
+ - **Parameter 5:** `Bearer YOUR_API_TOKEN`
275
+
276
+ ### Webhook Payload
277
+
278
+ Detection events send this payload:
279
+
280
+ ```json
281
+ {
282
+ "event": "openclaw.detection",
283
+ "version": "1.0",
284
+ "timestamp": "2026-02-03T10:30:00Z",
285
+ "status": "detected",
286
+ "severity": "high",
287
+ "host": {
288
+ "hostname": "MacBook-Pro.local",
289
+ "os": "Darwin",
290
+ "arch": "arm64",
291
+ "user": "jsmith"
292
+ },
293
+ "jamf": {
294
+ "computer_name": "MacBook-Pro.local",
295
+ "mount_point": "/",
296
+ "username": "jsmith"
297
+ },
298
+ "details": "CLI found at /usr/local/bin/openclaw; Config directory found",
299
+ "source": {
300
+ "tool": "nox-openclaw-detector",
301
+ "version": "1.0.0",
302
+ "vendor": "Nox Security"
303
+ }
304
+ }
305
+ ```
306
+
307
+ ### SIEM Queries
308
+
309
+ Example Splunk query:
310
+
311
+ ```splunk
312
+ index=security sourcetype=nox_openclaw event=openclaw.detection status=detected
313
+ | stats count by host.hostname, details
314
+ | sort -count
315
+ ```
316
+
317
+ Example Datadog query:
318
+
319
+ ```
320
+ source:nox_openclaw status:detected | count by host
321
+ ```
322
+
323
+ ## Advanced Configurations
324
+
325
+ ### Staged Rollout
326
+
327
+ 1. Create a static group with pilot devices
328
+ 2. Scope detection policy to pilot group first
329
+ 3. Monitor results for 1-2 weeks
330
+ 4. Expand scope to all managed devices
331
+
332
+ ### Automated Remediation Workflow
333
+
334
+ 1. Detection policy runs daily
335
+ 2. Smart Group "OpenClaw Detected" updates automatically
336
+ 3. Enforcement policy scoped to Smart Group runs immediately
337
+ 4. Webhook alerts security team of both events
338
+
339
+ ### Compliance Reporting
340
+
341
+ Create an Advanced Search:
342
+
343
+ 1. Navigate to **Computers > Search Inventory**
344
+ 2. Create criteria: Extension Attribute "OpenClaw Status" is not "Not Installed"
345
+ 3. Save as "OpenClaw Compliance Report"
346
+ 4. Schedule email delivery to security team
347
+
348
+ ## Troubleshooting
349
+
350
+ ### Script Not Running
351
+
352
+ 1. Verify policy scope includes target computers
353
+ 2. Check policy trigger and frequency settings
354
+ 3. Ensure computer is checking in to Jamf
355
+ 4. Review **Management > Logs** on the computer
356
+
357
+ ### Permission Errors
358
+
359
+ 1. Scripts should run as root (default for policies)
360
+ 2. Check for SIP restrictions on certain paths
361
+ 3. Verify MDM profile allows script execution
362
+
363
+ ### Extension Attribute Not Updating
364
+
365
+ 1. Force inventory update: `sudo jamf recon`
366
+ 2. Check extension attribute is enabled
367
+ 3. Verify script syntax is correct
368
+
369
+ ### Webhook Failures
370
+
371
+ 1. Verify URL is accessible from managed devices
372
+ 2. Check firewall rules allow outbound HTTPS
373
+ 3. Validate bearer token
374
+ 4. Add verbose logging to troubleshoot:
375
+ - Set Parameter 6 to `true`
376
+ - Check policy logs in Jamf
377
+
378
+ ### False Negatives
379
+
380
+ If OpenClaw is installed but not detected:
381
+
382
+ 1. Check for non-standard installation paths
383
+ 2. Verify detection script has latest signatures
384
+ 3. Run with verbose mode enabled
385
+ 4. Report to support@nox.security
386
+
387
+ ## Best Practices
388
+
389
+ 1. **Test First**: Deploy to a pilot group before fleet-wide rollout
390
+ 2. **Schedule Off-Hours**: Run detection during low-usage periods
391
+ 3. **Monitor Results**: Review Jamf logs and Smart Group membership regularly
392
+ 4. **Use Webhooks**: Integrate with SIEM for centralized alerting
393
+ 5. **Document Exceptions**: Track any approved OpenClaw installations
394
+ 6. **Regular Updates**: Update scripts when new versions are available
395
+
396
+ ## Support
397
+
398
+ - Email: support@nox.security
399
+ - Documentation: https://docs.nox.security/jamf
400
+ - Jamf Marketplace: [Nox OpenClaw Detector](https://marketplace.jamf.com)