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.
@@ -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
+ ]
@@ -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.