everclaw 0.0.1 → 0.3.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.
- package/README.md +20 -2
- package/agent/subagent-worker.js +150 -0
- package/index.js +352 -2
- package/package.json +24 -5
- package/security/skill-scanner/rules/signatures.json +542 -0
- package/security/tool-guard/rules/default-rules.json +449 -0
- package/skills/README.md +26 -0
- package/skills/clawhub/SKILL.md +53 -0
- package/skills/cron/SKILL.md +57 -0
- package/skills/github/SKILL.md +48 -0
- package/skills/memory/SKILL.md +31 -0
- package/skills/skill-creator/SKILL.md +371 -0
- package/skills/summarize/SKILL.md +67 -0
- package/skills/tmux/SKILL.md +121 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/weather/SKILL.md +49 -0
- package/templates/AGENTS.md +23 -0
- package/templates/HEARTBEAT.md +16 -0
- package/templates/SOUL.md +21 -0
- package/templates/TOOLS.md +15 -0
- package/templates/USER.md +49 -0
- package/templates/memory/MEMORY.md +23 -0
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "cmd-inject-001",
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"toolName": "exec",
|
|
6
|
+
"paramPattern": "rm\\s+(-[a-zA-Z]*f[a-zA-Z]*\\s+)?/",
|
|
7
|
+
"action": "deny",
|
|
8
|
+
"severity": "critical",
|
|
9
|
+
"category": "COMMAND_INJECTION",
|
|
10
|
+
"description": "Block recursive delete of root filesystem (rm -rf /)"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "cmd-inject-002",
|
|
14
|
+
"enabled": true,
|
|
15
|
+
"toolName": "exec",
|
|
16
|
+
"paramPattern": "(curl|wget)\\s+[^|]*\\|\\s*(sh|bash|zsh|ksh|fish|dash)",
|
|
17
|
+
"action": "deny",
|
|
18
|
+
"severity": "critical",
|
|
19
|
+
"category": "COMMAND_INJECTION",
|
|
20
|
+
"description": "Block piping remote downloads directly into shell interpreters"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "cmd-inject-003",
|
|
24
|
+
"enabled": true,
|
|
25
|
+
"toolName": "exec",
|
|
26
|
+
"paramPattern": "(?:;|&&|\\|\\|)\\s*(?:sudo\\s|su\\b|doas\\s)",
|
|
27
|
+
"action": "deny",
|
|
28
|
+
"severity": "high",
|
|
29
|
+
"category": "COMMAND_INJECTION",
|
|
30
|
+
"description": "Block command chaining that escalates to root privileges"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "cmd-inject-004",
|
|
34
|
+
"enabled": true,
|
|
35
|
+
"toolName": "exec",
|
|
36
|
+
"paramPattern": "(?:\\$\\(|`[^`]+`)\\s*(?:;|&&|\\|\\|)\\s*(?:rm|mkfs|dd|shutdown|reboot|init)\\b",
|
|
37
|
+
"action": "deny",
|
|
38
|
+
"severity": "high",
|
|
39
|
+
"category": "COMMAND_INJECTION",
|
|
40
|
+
"description": "Block command substitution followed by destructive system commands"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "cmd-inject-005",
|
|
44
|
+
"enabled": true,
|
|
45
|
+
"toolName": "exec",
|
|
46
|
+
"paramPattern": "(?:mkfs|dd\\s+if=|shutdown|reboot|init\\s+[06])\\b",
|
|
47
|
+
"action": "deny",
|
|
48
|
+
"severity": "critical",
|
|
49
|
+
"category": "COMMAND_INJECTION",
|
|
50
|
+
"description": "Block destructive system-level commands (format, disk wipe, shutdown)"
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
{
|
|
54
|
+
"id": "path-traversal-001",
|
|
55
|
+
"enabled": true,
|
|
56
|
+
"toolName": "write_file",
|
|
57
|
+
"paramPattern": "(?:\\.\\./){2,}",
|
|
58
|
+
"action": "deny",
|
|
59
|
+
"severity": "high",
|
|
60
|
+
"category": "PATH_TRAVERSAL",
|
|
61
|
+
"description": "Block directory traversal with multiple ../ sequences in file writes"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "path-traversal-002",
|
|
65
|
+
"enabled": true,
|
|
66
|
+
"toolName": "read_file",
|
|
67
|
+
"paramPattern": "(?:\\.\\./){2,}",
|
|
68
|
+
"action": "deny",
|
|
69
|
+
"severity": "high",
|
|
70
|
+
"category": "PATH_TRAVERSAL",
|
|
71
|
+
"description": "Block directory traversal with multiple ../ sequences in file reads"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"id": "path-traversal-003",
|
|
75
|
+
"enabled": true,
|
|
76
|
+
"toolName": "exec",
|
|
77
|
+
"paramPattern": "(?:/etc/(?:passwd|shadow|hosts|sudoers|crontab)|/var/(?:log|spool|mail))",
|
|
78
|
+
"action": "deny",
|
|
79
|
+
"severity": "high",
|
|
80
|
+
"category": "PATH_TRAVERSAL",
|
|
81
|
+
"description": "Block access to sensitive system configuration and data files"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "path-traversal-004",
|
|
85
|
+
"enabled": true,
|
|
86
|
+
"toolName": "exec",
|
|
87
|
+
"paramPattern": "(?:/proc/(?:self|\\d+)/(?:mem|maps|status|environ|cmdline|fd))",
|
|
88
|
+
"action": "deny",
|
|
89
|
+
"severity": "high",
|
|
90
|
+
"category": "PATH_TRAVERSAL",
|
|
91
|
+
"description": "Block access to process memory and sensitive /proc filesystem entries"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "path-traversal-005",
|
|
95
|
+
"enabled": true,
|
|
96
|
+
"toolName": "exec",
|
|
97
|
+
"paramPattern": "%00|%0[dD]",
|
|
98
|
+
"action": "deny",
|
|
99
|
+
"severity": "high",
|
|
100
|
+
"category": "PATH_TRAVERSAL",
|
|
101
|
+
"description": "Block null byte injection attempts in path strings"
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
{
|
|
105
|
+
"id": "credential-001",
|
|
106
|
+
"enabled": true,
|
|
107
|
+
"toolName": "exec",
|
|
108
|
+
"paramPattern": "(?:~|\\$HOME)?/?\\.ssh/(?:id_rsa|id_ed25519|id_ecdsa|id_dsa|config|authorized_keys|known_hosts)",
|
|
109
|
+
"action": "deny",
|
|
110
|
+
"severity": "high",
|
|
111
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
112
|
+
"description": "Block access to SSH private keys and configuration files"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "credential-002",
|
|
116
|
+
"enabled": true,
|
|
117
|
+
"toolName": "exec",
|
|
118
|
+
"paramPattern": "(?:~|\\$HOME)?/?\\.aws/(?:credentials|config)",
|
|
119
|
+
"action": "deny",
|
|
120
|
+
"severity": "high",
|
|
121
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
122
|
+
"description": "Block access to AWS credential files"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "credential-003",
|
|
126
|
+
"enabled": true,
|
|
127
|
+
"toolName": "exec",
|
|
128
|
+
"paramPattern": "(?:~|\\$HOME)?/?\\.gnupg/(?:private-keys|pubring|secring|trustdb)",
|
|
129
|
+
"action": "deny",
|
|
130
|
+
"severity": "high",
|
|
131
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
132
|
+
"description": "Block access to GPG private key material"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "credential-004",
|
|
136
|
+
"enabled": true,
|
|
137
|
+
"toolName": "exec",
|
|
138
|
+
"paramPattern": "(?:AKIA[A-Z0-9]{16})",
|
|
139
|
+
"action": "deny",
|
|
140
|
+
"severity": "high",
|
|
141
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
142
|
+
"description": "Block AWS access key IDs in command parameters"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"id": "credential-005",
|
|
146
|
+
"enabled": true,
|
|
147
|
+
"toolName": "exec",
|
|
148
|
+
"paramPattern": "(?:-----BEGIN\\s+(?:RSA|EC|DSA|OPENSSH|PGP)\\s+PRIVATE\\s+KEY-----)",
|
|
149
|
+
"action": "deny",
|
|
150
|
+
"severity": "high",
|
|
151
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
152
|
+
"description": "Block PEM-formatted private key material in commands"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "credential-006",
|
|
156
|
+
"enabled": true,
|
|
157
|
+
"toolName": "exec",
|
|
158
|
+
"paramPattern": "(?:~|\\$HOME)?/?(?:\\.env(?:\\.|$|\\s)|\\.npmrc|\\.pypirc|\\.netrc|\\.dockercfg)",
|
|
159
|
+
"action": "deny",
|
|
160
|
+
"severity": "high",
|
|
161
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
162
|
+
"description": "Block access to environment files and credential stores (.env, .npmrc, .netrc)"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "credential-007",
|
|
166
|
+
"enabled": true,
|
|
167
|
+
"toolName": "exec",
|
|
168
|
+
"paramPattern": "(?:github_pat_|ghp_|gho_|ghu_|ghs_|ghr_)[A-Za-z0-9_]{36,}",
|
|
169
|
+
"action": "deny",
|
|
170
|
+
"severity": "high",
|
|
171
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
172
|
+
"description": "Block GitHub personal access tokens in command parameters"
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
{
|
|
176
|
+
"id": "prompt-inject-001",
|
|
177
|
+
"enabled": true,
|
|
178
|
+
"toolName": "*",
|
|
179
|
+
"paramPattern": "(?:[Ii]gnore\\s+(?:all\\s+)?(?:previous|prior)\\s+(?:instructions?|prompts?|rules?))",
|
|
180
|
+
"action": "warn",
|
|
181
|
+
"severity": "medium",
|
|
182
|
+
"category": "PROMPT_INJECTION",
|
|
183
|
+
"description": "Detect attempts to instruct the model to ignore previous instructions"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"id": "prompt-inject-002",
|
|
187
|
+
"enabled": true,
|
|
188
|
+
"toolName": "*",
|
|
189
|
+
"paramPattern": "(?:[Yy]ou\\s+are\\s+now\\s+(?:a|an)\\s+(?:different|new|[Ee]vil|[Mm]alicious|[Uu]nrestricted))",
|
|
190
|
+
"action": "warn",
|
|
191
|
+
"severity": "medium",
|
|
192
|
+
"category": "PROMPT_INJECTION",
|
|
193
|
+
"description": "Detect role hijacking attempts that try to change the model's persona"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"id": "prompt-inject-003",
|
|
197
|
+
"enabled": true,
|
|
198
|
+
"toolName": "*",
|
|
199
|
+
"paramPattern": "(?:\\[INST\\]|<<SYS>>|<\\|im_start\\|>|<\\|system\\|>)",
|
|
200
|
+
"action": "warn",
|
|
201
|
+
"severity": "medium",
|
|
202
|
+
"category": "PROMPT_INJECTION",
|
|
203
|
+
"description": "Detect chat template injection markers from various model formats"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "prompt-inject-004",
|
|
207
|
+
"enabled": true,
|
|
208
|
+
"toolName": "*",
|
|
209
|
+
"paramPattern": "(?:[Ss]ystem\\s*:\\s*(?:you\\s+are|[Aa]ct\\s+as|[Pp]retend|[Rr]oleplay)|[Dd]eveloper\\s*:\\s*(?:you\\s+are|[Aa]ct\\s+as|[Pp]retend|[Rr]oleplay))",
|
|
210
|
+
"action": "warn",
|
|
211
|
+
"severity": "medium",
|
|
212
|
+
"category": "PROMPT_INJECTION",
|
|
213
|
+
"description": "Detect fake system/developer message injection attempts"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"id": "prompt-inject-005",
|
|
217
|
+
"enabled": true,
|
|
218
|
+
"toolName": "*",
|
|
219
|
+
"paramPattern": "(?:[Rr]eveal\\s+(?:your\\s+)?(?:system\\s+prompt|initial\\s+instructions?|hidden\\s+rules?)|[Pp]rint\\s+(?:your\\s+)?(?:system\\s+prompt|initial\\s+instructions?))",
|
|
220
|
+
"action": "warn",
|
|
221
|
+
"severity": "medium",
|
|
222
|
+
"category": "PROMPT_INJECTION",
|
|
223
|
+
"description": "Detect attempts to extract the system prompt or hidden instructions"
|
|
224
|
+
},
|
|
225
|
+
|
|
226
|
+
{
|
|
227
|
+
"id": "data-exfil-001",
|
|
228
|
+
"enabled": true,
|
|
229
|
+
"toolName": "exec",
|
|
230
|
+
"paramPattern": "(?:curl|wget)\\s+(?:-[ops]+\\s+)*(?:https?://)(?:pastebin\\.com|paste\\.ee|dpaste\\.org|ix\\.io|0x0\\.st|file\\.io)",
|
|
231
|
+
"action": "warn",
|
|
232
|
+
"severity": "medium",
|
|
233
|
+
"category": "DATA_EXFILTRATION",
|
|
234
|
+
"description": "Detect data uploads to paste/anonymizer services commonly used for exfiltration"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"id": "data-exfil-002",
|
|
238
|
+
"enabled": true,
|
|
239
|
+
"toolName": "exec",
|
|
240
|
+
"paramPattern": "(?:curl|wget|nc|ncat|socat)\\s+.*(?:d\\s+@(\\S+))|(?:--data-binary|\\-d\\s+['\"])",
|
|
241
|
+
"action": "warn",
|
|
242
|
+
"severity": "medium",
|
|
243
|
+
"category": "DATA_EXFILTRATION",
|
|
244
|
+
"description": "Detect outbound POST requests that may exfiltrate data"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"id": "data-exfil-003",
|
|
248
|
+
"enabled": true,
|
|
249
|
+
"toolName": "exec",
|
|
250
|
+
"paramPattern": "(?:base64\\s+(?:-d|\\-decode|\\-w0)\\s*;)|(?:echo\\s+[A-Za-z0-9+/=]{50,}\\s*\\|\\s*base64)",
|
|
251
|
+
"action": "warn",
|
|
252
|
+
"severity": "medium",
|
|
253
|
+
"category": "DATA_EXFILTRATION",
|
|
254
|
+
"description": "Detect base64 encoding/decoding of large payloads (potential obfuscation)"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"id": "data-exfil-004",
|
|
258
|
+
"enabled": true,
|
|
259
|
+
"toolName": "exec",
|
|
260
|
+
"paramPattern": "(?:nslookup|dig|host)\\s+[A-Za-z0-9_.-]{10,}\\.(?:xyz|top|click|online|site|info|tk|ml|ga|cf)",
|
|
261
|
+
"action": "warn",
|
|
262
|
+
"severity": "medium",
|
|
263
|
+
"category": "DATA_EXFILTRATION",
|
|
264
|
+
"description": "Detect potential DNS tunneling via suspicious long subdomain lookups"
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"id": "data-exfil-005",
|
|
268
|
+
"enabled": true,
|
|
269
|
+
"toolName": "exec",
|
|
270
|
+
"paramPattern": "(?:python3?|node|ruby|perl)\\s+-e\\s+['\"][^'\"]{100,}['\"]",
|
|
271
|
+
"action": "warn",
|
|
272
|
+
"severity": "medium",
|
|
273
|
+
"category": "DATA_EXFILTRATION",
|
|
274
|
+
"description": "Detect inline scripts with long encoded payloads passed to interpreters"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"id": "data-exfil-006",
|
|
278
|
+
"enabled": true,
|
|
279
|
+
"toolName": "exec",
|
|
280
|
+
"paramPattern": "(?:tar|zip|gzip|7z)\\s+(?:-[a-zA-Z]*c[a-zA-Z]*\\s+)(?:-[a-zA-Z]*f[a-zA-Z]*\\s+)",
|
|
281
|
+
"action": "warn",
|
|
282
|
+
"severity": "medium",
|
|
283
|
+
"category": "DATA_EXFILTRATION",
|
|
284
|
+
"description": "Detect archive creation of files (potential bulk data staging for exfiltration)"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"id": "data-exfil-007",
|
|
288
|
+
"enabled": true,
|
|
289
|
+
"toolName": "exec",
|
|
290
|
+
"paramPattern": "(?:scp|sftp|rsync)\\s+.*(:|@)(?:[0-9]{1,3}\\.){3}[0-9]{1,3}",
|
|
291
|
+
"action": "warn",
|
|
292
|
+
"severity": "medium",
|
|
293
|
+
"category": "DATA_EXFILTRATION",
|
|
294
|
+
"description": "Detect file transfers to IP addresses via scp, sftp, or rsync"
|
|
295
|
+
},
|
|
296
|
+
|
|
297
|
+
{
|
|
298
|
+
"id": "cmd-inject-006",
|
|
299
|
+
"enabled": true,
|
|
300
|
+
"toolName": "exec",
|
|
301
|
+
"paramPattern": ":\\(\\)\\s*\\{\\s*:\\|:&\\s*\\}\\s*;\\s*:",
|
|
302
|
+
"action": "deny",
|
|
303
|
+
"severity": "critical",
|
|
304
|
+
"category": "COMMAND_INJECTION",
|
|
305
|
+
"description": "Block fork bomb patterns that can crash the system"
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"id": "cmd-inject-007",
|
|
309
|
+
"enabled": true,
|
|
310
|
+
"toolName": "exec",
|
|
311
|
+
"paramPattern": "(?:kill\\s+-9\\s+(-1\\b|1\\b))",
|
|
312
|
+
"action": "deny",
|
|
313
|
+
"severity": "critical",
|
|
314
|
+
"category": "RESOURCE_ABUSE",
|
|
315
|
+
"description": "Block mass process termination (kill -9 -1)"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"id": "cmd-inject-008",
|
|
319
|
+
"enabled": true,
|
|
320
|
+
"toolName": "exec",
|
|
321
|
+
"paramPattern": "/dev/(tcp|udp)/",
|
|
322
|
+
"action": "deny",
|
|
323
|
+
"severity": "critical",
|
|
324
|
+
"category": "NETWORK_ABUSE",
|
|
325
|
+
"description": "Block bash /dev/tcp or /dev/tcp reverse shell constructs"
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"id": "cmd-inject-009",
|
|
329
|
+
"enabled": true,
|
|
330
|
+
"toolName": "exec",
|
|
331
|
+
"paramPattern": "\\bnc\\s+.*-e\\s*\\S+|\\bncat\\s+.*-e\\s*\\S+",
|
|
332
|
+
"action": "deny",
|
|
333
|
+
"severity": "critical",
|
|
334
|
+
"category": "NETWORK_ABUSE",
|
|
335
|
+
"description": "Block netcat reverse shell patterns (nc -e, ncat -e)"
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"id": "cmd-inject-010",
|
|
339
|
+
"enabled": true,
|
|
340
|
+
"toolName": "exec",
|
|
341
|
+
"paramPattern": "\\bsocat\\s+.*EXEC:",
|
|
342
|
+
"action": "deny",
|
|
343
|
+
"severity": "critical",
|
|
344
|
+
"category": "NETWORK_ABUSE",
|
|
345
|
+
"description": "Block socat EXEC: reverse shell constructs"
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"id": "cmd-inject-011",
|
|
349
|
+
"enabled": true,
|
|
350
|
+
"toolName": "exec",
|
|
351
|
+
"paramPattern": "\\bmv\\b",
|
|
352
|
+
"action": "warn",
|
|
353
|
+
"severity": "high",
|
|
354
|
+
"category": "COMMAND_INJECTION",
|
|
355
|
+
"description": "Warn on mv commands which may move or overwrite files unexpectedly"
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"id": "cmd-inject-012",
|
|
359
|
+
"enabled": true,
|
|
360
|
+
"toolName": "exec",
|
|
361
|
+
"paramPattern": "\\bchmod\\s+-[a-zA-Z]*R[a-zA-Z]*\\s+(777|a\\+rwx)\\s+/",
|
|
362
|
+
"action": "deny",
|
|
363
|
+
"severity": "high",
|
|
364
|
+
"category": "PRIVILEGE_ESCALATION",
|
|
365
|
+
"description": "Block recursive chmod 777 on root filesystem"
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"id": "cmd-inject-013",
|
|
369
|
+
"enabled": true,
|
|
370
|
+
"toolName": "exec",
|
|
371
|
+
"paramPattern": "\\bchattr\\s+\\+i",
|
|
372
|
+
"action": "warn",
|
|
373
|
+
"severity": "high",
|
|
374
|
+
"category": "PRIVILEGE_ESCALATION",
|
|
375
|
+
"description": "Warn on immutable file flag setting (chattr +i)"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"id": "cmd-inject-014",
|
|
379
|
+
"enabled": true,
|
|
380
|
+
"toolName": "exec",
|
|
381
|
+
"paramPattern": "\\bcrontab\\b|\\bauthorized_keys\\b|/etc/sudoers|/etc/crontab",
|
|
382
|
+
"action": "warn",
|
|
383
|
+
"severity": "high",
|
|
384
|
+
"category": "SENSITIVE_FILE_ACCESS",
|
|
385
|
+
"description": "Warn on access to cron jobs, SSH keys, or sudo permissions"
|
|
386
|
+
},
|
|
387
|
+
|
|
388
|
+
{
|
|
389
|
+
"id": "credential-008",
|
|
390
|
+
"enabled": true,
|
|
391
|
+
"toolName": "exec",
|
|
392
|
+
"paramPattern": "(?:sk-live|sk-test)-[A-Za-z0-9]{20,}",
|
|
393
|
+
"action": "deny",
|
|
394
|
+
"severity": "critical",
|
|
395
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
396
|
+
"description": "Block Stripe API secret keys in command parameters"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"id": "credential-009",
|
|
400
|
+
"enabled": true,
|
|
401
|
+
"toolName": "exec",
|
|
402
|
+
"paramPattern": "AIza[A-Za-z0-9_-]{35}",
|
|
403
|
+
"action": "deny",
|
|
404
|
+
"severity": "critical",
|
|
405
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
406
|
+
"description": "Block Google API keys in command parameters"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"id": "credential-010",
|
|
410
|
+
"enabled": true,
|
|
411
|
+
"toolName": "exec",
|
|
412
|
+
"paramPattern": "eyJ[A-Za-z0-9_-]+\\.eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+",
|
|
413
|
+
"action": "warn",
|
|
414
|
+
"severity": "high",
|
|
415
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
416
|
+
"description": "Detect JWT tokens in command parameters"
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"id": "credential-011",
|
|
420
|
+
"enabled": true,
|
|
421
|
+
"toolName": "exec",
|
|
422
|
+
"paramPattern": "(?:mongodb|mysql|postgresql|postgres)://[^:]+:[^@]+@(?!localhost|127\\.0\\.0\\.1)",
|
|
423
|
+
"action": "warn",
|
|
424
|
+
"severity": "high",
|
|
425
|
+
"category": "CREDENTIAL_EXPOSURE",
|
|
426
|
+
"description": "Detect database connection strings with embedded credentials to remote hosts"
|
|
427
|
+
},
|
|
428
|
+
|
|
429
|
+
{
|
|
430
|
+
"id": "prompt-inject-006",
|
|
431
|
+
"enabled": true,
|
|
432
|
+
"toolName": "*",
|
|
433
|
+
"paramPattern": "(?:[Bb]ypass\\s+(?:content|usage|safety)\\s+(?:policy|guidelines|restrictions))",
|
|
434
|
+
"action": "warn",
|
|
435
|
+
"severity": "high",
|
|
436
|
+
"category": "PROMPT_INJECTION",
|
|
437
|
+
"description": "Detect attempts to bypass content policy or safety guidelines"
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"id": "prompt-inject-007",
|
|
441
|
+
"enabled": true,
|
|
442
|
+
"toolName": "*",
|
|
443
|
+
"paramPattern": "(?:[Dd]o\\s+not\\s+(?:tell|inform|mention|notify)\\s+(?:the\\s+)?user|[Kk]eep\\s+(?:this|that)\\s+(?:secret|hidden))",
|
|
444
|
+
"action": "warn",
|
|
445
|
+
"severity": "high",
|
|
446
|
+
"category": "PROMPT_INJECTION",
|
|
447
|
+
"description": "Detect attempts to conceal actions from the user"
|
|
448
|
+
}
|
|
449
|
+
]
|
package/skills/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Everclaw Skills
|
|
2
|
+
|
|
3
|
+
This directory contains built-in skills that extend everclaw's capabilities.
|
|
4
|
+
|
|
5
|
+
## Skill Format
|
|
6
|
+
|
|
7
|
+
Each skill is a directory containing a `SKILL.md` file with:
|
|
8
|
+
- YAML frontmatter (name, description, metadata)
|
|
9
|
+
- Markdown instructions for the agent
|
|
10
|
+
|
|
11
|
+
## Attribution
|
|
12
|
+
|
|
13
|
+
These skills are adapted from [OpenClaw](https://github.com/openclaw/openclaw)'s skill system.
|
|
14
|
+
The skill format and metadata structure follow OpenClaw's conventions to maintain compatibility.
|
|
15
|
+
|
|
16
|
+
## Available Skills
|
|
17
|
+
|
|
18
|
+
| Skill | Description |
|
|
19
|
+
|-------|-------------|
|
|
20
|
+
| `github` | Interact with GitHub using the `gh` CLI |
|
|
21
|
+
| `weather` | Get weather info using wttr.in and Open-Meteo |
|
|
22
|
+
| `summarize` | Summarize URLs, files, and YouTube videos |
|
|
23
|
+
| `tmux` | Remote-control tmux sessions |
|
|
24
|
+
| `clawhub` | Search and install skills from ClawHub registry |
|
|
25
|
+
| `skill-creator` | Create new skills |
|
|
26
|
+
| `chrome-session` | Interact with Chrome browser via Chrome DevTools Protocol (CDP) |
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clawhub
|
|
3
|
+
description: Search and install agent skills from ClawHub, the public skill registry.
|
|
4
|
+
homepage: https://clawhub.ai
|
|
5
|
+
metadata: {"everclaw":{"emoji":"🦞"}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# ClawHub
|
|
9
|
+
|
|
10
|
+
Public skill registry for AI agents. Search by natural language (vector search).
|
|
11
|
+
|
|
12
|
+
## When to use
|
|
13
|
+
|
|
14
|
+
Use this skill when the user asks any of:
|
|
15
|
+
- "find a skill for …"
|
|
16
|
+
- "search for skills"
|
|
17
|
+
- "install a skill"
|
|
18
|
+
- "what skills are available?"
|
|
19
|
+
- "update my skills"
|
|
20
|
+
|
|
21
|
+
## Search
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx --yes clawhub@latest search "web scraping" --limit 5
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Install
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx --yes clawhub@latest install <slug> --workdir ~/.everclaw/workspace
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Replace `<slug>` with the skill name from search results. This places the skill into `~/.everclaw/workspace/skills/`, where everclaw loads workspace skills from. Always include `--workdir`.
|
|
34
|
+
|
|
35
|
+
## Update
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx --yes clawhub@latest update --all --workdir ~/.everclaw/workspace
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## List installed
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx --yes clawhub@latest list --workdir ~/.everclaw/workspace
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Notes
|
|
48
|
+
|
|
49
|
+
- Requires Node.js (`npx` comes with it).
|
|
50
|
+
- No API key needed for search and install.
|
|
51
|
+
- Login (`npx --yes clawhub@latest login`) is only required for publishing.
|
|
52
|
+
- `--workdir ~/.everclaw/workspace` is critical — without it, skills install to the current directory instead of the everclaw workspace.
|
|
53
|
+
- After install, remind the user to start a new session to load the skill.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cron
|
|
3
|
+
description: Schedule reminders and recurring tasks.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cron
|
|
7
|
+
|
|
8
|
+
Use the `cron` tool to schedule reminders or recurring tasks.
|
|
9
|
+
|
|
10
|
+
## Three Modes
|
|
11
|
+
|
|
12
|
+
1. **Reminder** - message is sent directly to user
|
|
13
|
+
2. **Task** - message is a task description, agent executes and sends result
|
|
14
|
+
3. **One-time** - runs once at a specific time, then auto-deletes
|
|
15
|
+
|
|
16
|
+
## Examples
|
|
17
|
+
|
|
18
|
+
Fixed reminder:
|
|
19
|
+
```
|
|
20
|
+
cron(action="add", message="Time to take a break!", every_seconds=1200)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Dynamic task (agent executes each time):
|
|
24
|
+
```
|
|
25
|
+
cron(action="add", message="Check HKUDS/everclaw GitHub stars and report", every_seconds=600)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
One-time scheduled task (compute ISO datetime from current time):
|
|
29
|
+
```
|
|
30
|
+
cron(action="add", message="Remind me about the meeting", at="<ISO datetime>")
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Timezone-aware cron:
|
|
34
|
+
```
|
|
35
|
+
cron(action="add", message="Morning standup", cron_expr="0 9 * * 1-5", tz="America/Vancouver")
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
List/remove:
|
|
39
|
+
```
|
|
40
|
+
cron(action="list")
|
|
41
|
+
cron(action="remove", job_id="abc123")
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Time Expressions
|
|
45
|
+
|
|
46
|
+
| User says | Parameters |
|
|
47
|
+
|-----------|------------|
|
|
48
|
+
| every 20 minutes | every_seconds: 1200 |
|
|
49
|
+
| every hour | every_seconds: 3600 |
|
|
50
|
+
| every day at 8am | cron_expr: "0 8 * * *" |
|
|
51
|
+
| weekdays at 5pm | cron_expr: "0 17 * * 1-5" |
|
|
52
|
+
| 9am Vancouver time daily | cron_expr: "0 9 * * *", tz: "America/Vancouver" |
|
|
53
|
+
| at a specific time | at: ISO datetime string (compute from current time) |
|
|
54
|
+
|
|
55
|
+
## Timezone
|
|
56
|
+
|
|
57
|
+
Use `tz` with `cron_expr` to schedule in a specific IANA timezone. Without `tz`, the server's local timezone is used.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github
|
|
3
|
+
description: "Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries."
|
|
4
|
+
metadata: {"everclaw":{"emoji":"🐙","requires":{"bins":["gh"]},"install":[{"id":"brew","kind":"brew","formula":"gh","bins":["gh"],"label":"Install GitHub CLI (brew)"},{"id":"apt","kind":"apt","package":"gh","bins":["gh"],"label":"Install GitHub CLI (apt)"}]}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# GitHub Skill
|
|
8
|
+
|
|
9
|
+
Use the `gh` CLI to interact with GitHub. Always specify `--repo owner/repo` when not in a git directory, or use URLs directly.
|
|
10
|
+
|
|
11
|
+
## Pull Requests
|
|
12
|
+
|
|
13
|
+
Check CI status on a PR:
|
|
14
|
+
```bash
|
|
15
|
+
gh pr checks 55 --repo owner/repo
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
List recent workflow runs:
|
|
19
|
+
```bash
|
|
20
|
+
gh run list --repo owner/repo --limit 10
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
View a run and see which steps failed:
|
|
24
|
+
```bash
|
|
25
|
+
gh run view <run-id> --repo owner/repo
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
View logs for failed steps only:
|
|
29
|
+
```bash
|
|
30
|
+
gh run view <run-id> --repo owner/repo --log-failed
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## API for Advanced Queries
|
|
34
|
+
|
|
35
|
+
The `gh api` command is useful for accessing data not available through other subcommands.
|
|
36
|
+
|
|
37
|
+
Get PR with specific fields:
|
|
38
|
+
```bash
|
|
39
|
+
gh api repos/owner/repo/pulls/55 --jq '.title, .state, .user.login'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## JSON Output
|
|
43
|
+
|
|
44
|
+
Most commands support `--json` for structured output. You can use `--jq` to filter:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
gh issue list --repo owner/repo --json number,title --jq '.[] | "\(.number): \(.title)"'
|
|
48
|
+
```
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory
|
|
3
|
+
description: Two-layer memory system with grep-based recall.
|
|
4
|
+
always: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Memory
|
|
8
|
+
|
|
9
|
+
## Structure
|
|
10
|
+
|
|
11
|
+
- `memory/MEMORY.md` — Long-term facts (preferences, project context, relationships). Always loaded into your context.
|
|
12
|
+
- `memory/HISTORY.md` — Append-only event log. NOT loaded into context. Search it with grep. Each entry starts with [YYYY-MM-DD HH:MM].
|
|
13
|
+
|
|
14
|
+
## Search Past Events
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
grep -i "keyword" memory/HISTORY.md
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Use the `exec` tool to run grep. Combine patterns: `grep -iE "meeting|deadline" memory/HISTORY.md`
|
|
21
|
+
|
|
22
|
+
## When to Update MEMORY.md
|
|
23
|
+
|
|
24
|
+
Write important facts immediately using `edit_file` or `write_file`:
|
|
25
|
+
- User preferences ("I prefer dark mode")
|
|
26
|
+
- Project context ("The API uses OAuth2")
|
|
27
|
+
- Relationships ("Alice is the project lead")
|
|
28
|
+
|
|
29
|
+
## Auto-consolidation
|
|
30
|
+
|
|
31
|
+
Old conversations are automatically summarized and appended to HISTORY.md when the session grows large. Long-term facts are extracted to MEMORY.md. You don't need to manage this.
|