1<!--
2SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
3
4SPDX-License-Identifier: CC0-1.0
5-->
6
7# agent-skills
8
9A collection of [Agent Skills]; structured markdown that extends LLM
10agent capabilities through a standardised format.
11
12[Agent Skills]: https://agentskills.io/
13
14## Available Skills
15
16Refer to [Β§ Token stats](#token-stats) for a detailed breakdown of each skill's
17token count, plus overall metadata usage. I've used and tested them most with
18[Crush], [Amp], and [Shelley], and to a lesser degree, [Octofriend] and [Pi].
19
20[Crush]: https://github.com/charmbracelet/crush
21[Amp]: https://ampcode.com
22[Shelley]: https://github.com/boldsoftware/shelley
23[Octofriend]: https://github.com/synthetic-lab/octofriend
24[Pi]: https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent
25
26- [addressing-agent-comments](skills/addressing-agent-comments/SKILL.md): Finds
27 `CR:` comments in code, gathers feedback, and carries out requested changes.
28- [ast-grep](skills/ast-grep/SKILL.md): Writes [ast-grep] rules for structural
29 code search and modification.
30- [auditing-repositories](skills/auditing-repositories/SKILL.md): Audits open
31 source repositories for security, privacy, and unexpected behavior.
32- [authoring-skills](skills/authoring-skills/SKILL.md): Creates and reviews
33 Agent Skills following best practices. Covers skill structure, frontmatter,
34 and progressive disclosure patterns.
35- [backing-up-with-keld](skills/backing-up-with-keld/SKILL.md): Writes and
36 manages keld configuration for restic backups. Covers TOML preset structure,
37 split preset composition (`home@cloud`), config file discovery, environment
38 variables, and systemd timer setup.
39- [collaborating-through-pr-pico-sh](skills/collaborating-through-pr-pico-sh/SKILL.md):
40 Collaborates on git patches via [pr.pico.sh], a minimal patchbin service.
41 Covers both contributing and reviewing patch requests using `git format-patch`
42 and `git am`.
43- [creating-tasks-through-lunatask](skills/creating-tasks-through-lunatask/SKILL.md):
44 Creates tasks and handoffs in [Lunatask] via [lune]. Tasks are just tasks.
45 Handoffs capture work to resume later across sessions without filling context
46 windows.
47- [formatting-commits](skills/formatting-commits/SKILL.md): Detects a project's
48 commit style from recent history and formats messages accordingly. Supports
49 Conventional Commits and kernel-style imperative commits.
50- [frontend-accessibility](skills/frontend-accessibility/SKILL.md): Strives to
51 generate accessible HTML, React, and frontend code following WCAG 2.2 AA.
52 Prioritizes semantic HTML over ARIA, keyboard navigation, and screen reader
53 compatibility.
54- [handling-customer-data](skills/handling-customer-data/SKILL.md): Queries
55 customer data responsiblyβthe agent answers questions about the data without
56 ever seeing it directly.
57- [humanizer](skills/humanizer/SKILL.md): Removes AI-generated patterns from
58 text like promotional fluff, weasel words, and mechanical sentence structures.
59 Based on Wikipedia's AI Cleanup research. Originally from [blader/humanizer].
60- [ideating-with-bdd](skills/ideating-with-bdd/SKILL.md): Guides collaborative
61 discovery of behaviour through structured conversation, iterating with the user
62 to refine ideas into user stories and Gherkin scenarios. Works for any
63 language or framework.
64- [initialising-and-updating-agents-md](skills/initialising-and-updating-agents-md/SKILL.md):
65 Analyses a codebase and creates or updates `AGENTS.md` to help future agents
66 work effectively. Discovers commands, conventions, patterns, and gotchas from
67 the project's source and config files.
68- [invoking-subagents](skills/invoking-subagents/SKILL.md): Spawns subagents
69 with restricted tool access for parallel tasks across repositories. Requires
70 [synu] and the `claude` CLI. Useful for summarizing git history or processing
71 large diffs without filling the main context window.
72- [maintaining-aur-packages](skills/maintaining-aur-packages/SKILL.md): Creates
73 and updates AUR packages following Arch packaging standards. Covers PKGBUILDs
74 for source, `-bin`, and `-git` package types, checksums with `updpkgsums`,
75 linting with `namcap`, and `.SRCINFO` generation.
76- [managing-and-navigating-worktrees](skills/managing-and-navigating-worktrees/SKILL.md):
77 Manages git worktrees using [wt] with a bare repository structure. Each branch
78 lives in its own sibling directory. Requires [wt], git, and [gum].
79- [monitoring-with-munin](skills/monitoring-with-munin/SKILL.md): Deploys and
80 manages Munin monitoring across servers. Sets up munin-node on hosts, writes
81 plugins, configures masters, and handles alerts.
82- [notifying-through-ntfy](skills/notifying-through-ntfy/SKILL.md): Sends push
83 notifications via [ntfy.sh] when requested, such as at the end of its turn.
84- [rebasing-with-git](skills/rebasing-with-git/SKILL.md): Manages git rebase
85 workflows from simple rebases to the drop-and-repick integration branch
86 pattern. Assumes `upstream` remote for forks and `rerere` enabled. Supports
87 worktrees including `wt`-managed repos.
88- [researching-with-rumilo](skills/researching-with-rumilo/SKILL.md): Dispatches
89 AI research subagents via [rumilo] for web search and repository exploration.
90 Research topics, look up library usage, or explore external codebases without
91 filling the main context window.
92- [resuming-work-through-lunatask](skills/resuming-work-through-lunatask/SKILL.md):
93 Resumes deferred work from [Lunatask] handoff notes via [lune].
94- [reviewing-code](skills/reviewing-code/SKILL.md): Reviews changes, commits,
95 PRs, and patches using Kodus, CodeRabbit, or Amp, preferring whichever is
96 available in that order.
97- [scripting-with-go](skills/scripting-with-go/SKILL.md): Creates executable Go
98 scripts using a shell trick (not a true shebang). For automation and tooling
99 outside of Go projects.
100- [testing-with-gocuke-and-gherkin](skills/testing-with-gocuke-and-gherkin/SKILL.md):
101 Drives BDD, red/green TDD, and property-based testing in Go projects using
102 [gocuke] and Gherkin feature files.
103- [updating-llm-client-model-lists](skills/updating-llm-client-model-lists/SKILL.md):
104 Synchronizes model configurations across Zed, Crush, Octofriend, and Pi from
105 Plexus' /v1/models endpoint.
106- [using-exe-dev](skills/using-exe-dev/SKILL.md): Guides working with [exe.dev]
107 VMs, which provide Linux VMs with persistent disks, instant HTTPS, and
108 built-in auth via SSH.
109- [working-with-tmux](skills/working-with-tmux/SKILL.md): Spawns and manages
110 background processes via tmux. Creates windows, sends commands, and captures
111 output without blocking the main session. Useful for servers and long tasks.
112- [writing-git-tags](skills/writing-git-tags/SKILL.md): Generates git tag
113 annotations from commit history following Semantic Versioning and Conventional
114 Commits via [git-format].
115- [writing-roc-lang](skills/writing-roc-lang/SKILL.md): Writes Roc code with
116 strong static types, helpful compiler errors, and functional programming.
117 Covers both full applications and one-off scripts.
118- [writing-rust](skills/writing-rust/SKILL.md): Writes idiomatic Rust with
119 strict quality gates: `cargo fmt`, `clippy -- -D warnings`, and required
120 tests. Enforces `thiserror` for libs, `anyhow` for apps, warns against common
121 anti-patterns.
122
123[blader/humanizer]: https://github.com/blader/humanizer
124[ast-grep]: https://github.com/ast-grep/ast-grep
125[git-format]: https://git.secluded.site/git-format
126[gocuke]: https://github.com/tenntenn/gocuke
127[lune]: https://git.secluded.site/lune
128[Lunatask]: https://lunatask.app/
129[ntfy.sh]: https://ntfy.sh
130[rumilo]: https://git.secluded.site/rumilo
131[synu]: https://git.secluded.site/synu
132[wt]: https://git.secluded.site/wt
133[gum]: https://github.com/charmbracelet/gum
134[exe.dev]: https://exe.dev
135
136## Installation
137
138If you're using [Amp], run `amp skill add
139https://git.secluded.site/agent-skills`. Otherwise, clone the repository, then
140install via `make` or manual symlinks.
141
142[Amp]: https://ampcode.com
143
144```sh
145git clone https://git.secluded.site/agent-skills
146cd agent-skills
147```
148
149### With Make
150
151Skills install to `~/.config/agents/skills/` by default. Override by
152setting `SKILL_DIR`. Tab completion works so you don't have to remember
153skill names or copy/paste.
154
155```sh
156# List available skills
157make list
158
159# Install all skills to default dir
160make all
161
162# Install specific skills to Claude Code
163SKILL_DIR=$HOME/.claude/skills make authoring-skills formatting-commits
164
165# Remove a specific skill from Amp
166make uninstall-authoring-skills SKILL_DIR=$HOME/.config/agents/skills
167
168# Remove all skills from Codex
169make uninstall SKILL_DIR=$HOME/.codex/skills
170```
171
172### With symlinks
173
174```sh
175# Install all skills
176for s in skills/*/; do ln -s "$PWD/$s" ~/.config/agents/skills/; done
177
178# Install specific skills
179ln -s "$PWD/skills/authoring-skills" ~/.config/agents/skills/
180
181# Remove a skill
182rm ~/.config/agents/skills/formatting-commits
183```
184
185### Agent skill directories
186
187| Agent | Dir |
188| --------------------------------------- | -------------------------- |
189| [Crush], [Octofriend], [Shelley], [Amp] | `~/.config/agents/skills/` |
190| [Pi] | `~/.pi/agent/skills/` |
191| Anthropic's Claude Code | `~/.claude/skills/` |
192| OpenAI's Codex | `~/.codex/skills/` |
193
194## Updating
195
196```sh
197cd ~/path/to/agent-skills
198git pull
199```
200
201Symlinked skills update automatically.
202
203## Contributions
204
205Patch requests are in [amolith/llm-projects] on [pr.pico.sh]. You don't need a
206new account to contribute, you don't need to fork this repo, you don't need to
207fiddle with `git send-email`, you don't need to faff with your email client to
208get `git request-pull` working...
209
210You just need:
211
212- Git
213- SSH
214- An SSH key
215
216```sh
217# Clone this repo, make your changes, and commit them
218# Create a new patch request with
219git format-patch origin/main --stdout | ssh pr.pico.sh pr create amolith/llm-projects
220# After potential feedback, submit a revision to an existing patch request with
221git format-patch origin/main --stdout | ssh pr.pico.sh pr add {prID}
222# List patch requests
223ssh pr.pico.sh pr ls amolith/llm-projects
224```
225
226See "How do Patch Requests work?" on [pr.pico.sh]'s home page for a more
227complete example workflow.
228
229[amolith/llm-projects]: https://pr.pico.sh/r/amolith/llm-projects
230[pr.pico.sh]: https://pr.pico.sh
231
232## Token stats
233
234Real token stats as reported by [Synthetic.new]'s [/messages/count_tokens]
235endpoint with [./skill-stats.go](./skill-stats.go).
236
237[Synthetic.new]: https://synthetic.new
238[/messages/count_tokens]: https://dev.synthetic.new/docs/anthropic/messages/count-tokens
239
240```
241=== addressing-code-review-comments ===
242
243Token breakdown:
244 Name: 9 tokens
245 Description: 40 tokens
246 Body: 290 tokens (38 lines)
247 βββββββββββββββββββββββββββββββββββββββββββββββ
248 Total: 339 tokens
249
250=== ast-grep ===
251
252Token breakdown:
253 Name: 7 tokens
254 Description: 76 tokens
255 Body: 2765 tokens (469 lines)
256 References:
257 rule_reference.md 2515 tokens
258 βββββββββββββββββββββββββββββββββββββββββββββββ
259 Total: 5363 tokens
260
261=== auditing-repositories ===
262
263Token breakdown:
264 Name: 8 tokens
265 Description: 51 tokens
266 Body: 1046 tokens (156 lines)
267 References:
268 llm-security.md 427 tokens
269 βββββββββββββββββββββββββββββββββββββββββββββββ
270 Total: 1532 tokens
271
272=== authoring-skills ===
273
274Token breakdown:
275 Name: 8 tokens
276 Description: 32 tokens
277 Body: 861 tokens (105 lines)
278 References:
279 checklist.md 301 tokens
280 patterns.md 880 tokens
281 process.md 311 tokens
282 specification.md 1441 tokens
283 βββββββββββββββββββββββββββββββββββββββββββββββ
284 Total: 3834 tokens
285
286=== backing-up-with-keld ===
287
288Token breakdown:
289 Name: 9 tokens
290 Description: 39 tokens
291 Body: 1742 tokens (235 lines)
292 References:
293 config-examples.md 1415 tokens
294 installation.md 19 tokens
295 βββββββββββββββββββββββββββββββββββββββββββββββ
296 Total: 3224 tokens
297
298=== collaborating-through-pr-pico-sh ===
299
300Token breakdown:
301 Name: 12 tokens
302 Description: 47 tokens
303 Body: 521 tokens (43 lines)
304 References:
305 contributing.md 162 tokens
306 jujutsu.md 516 tokens
307 reviewing.md 406 tokens
308 βββββββββββββββββββββββββββββββββββββββββββββββ
309 Total: 1664 tokens
310
311=== creating-tasks-through-lunatask ===
312
313Token breakdown:
314 Name: 12 tokens
315 Description: 41 tokens
316 Body: 687 tokens (84 lines)
317 References:
318 cli.md 218 tokens
319 handoff.md 1035 tokens
320 installing-lune.md 65 tokens
321 βββββββββββββββββββββββββββββββββββββββββββββββ
322 Total: 2058 tokens
323
324=== formatting-commits ===
325
326Token breakdown:
327 Name: 8 tokens
328 Description: 57 tokens
329 Body: 333 tokens (37 lines)
330 References:
331 conventional-commits.md 362 tokens
332 installing-git-format.md 22 tokens
333 kernel-style.md 515 tokens
334 βββββββββββββββββββββββββββββββββββββββββββββββ
335 Total: 1297 tokens
336
337=== frontend-accessibility ===
338
339Token breakdown:
340 Name: 7 tokens
341 Description: 52 tokens
342 Body: 1080 tokens (148 lines)
343 References:
344 antipatterns.md 1341 tokens
345 patterns.md 2279 tokens
346 βββββββββββββββββββββββββββββββββββββββββββββββ
347 Total: 4759 tokens
348
349=== handling-customer-data ===
350
351Token breakdown:
352 Name: 9 tokens
353 Description: 46 tokens
354 Body: 718 tokens (107 lines)
355 βββββββββββββββββββββββββββββββββββββββββββββββ
356 Total: 773 tokens
357
358=== humanizer ===
359
360Token breakdown:
361 Name: 6 tokens
362 Description: 31 tokens
363 Body: 3274 tokens (462 lines)
364 βββββββββββββββββββββββββββββββββββββββββββββββ
365 Total: 3311 tokens
366
367=== ideating-with-bdd ===
368
369Token breakdown:
370 Name: 9 tokens
371 Description: 133 tokens
372 Body: 1582 tokens (177 lines)
373 References:
374 gherkin-reference.md 984 tokens
375 βββββββββββββββββββββββββββββββββββββββββββββββ
376 Total: 2708 tokens
377
378=== initialising-and-updating-agents-md ===
379
380Token breakdown:
381 Name: 12 tokens
382 Description: 59 tokens
383 Body: 850 tokens (63 lines)
384 βββββββββββββββββββββββββββββββββββββββββββββββ
385 Total: 921 tokens
386
387=== invoking-subagents ===
388
389Token breakdown:
390 Name: 8 tokens
391 Description: 42 tokens
392 Body: 227 tokens (16 lines)
393 βββββββββββββββββββββββββββββββββββββββββββββββ
394 Total: 277 tokens
395
396=== maintaining-aur-packages ===
397
398Token breakdown:
399 Name: 9 tokens
400 Description: 58 tokens
401 Body: 1439 tokens (103 lines)
402 References:
403 build-patterns.md 1120 tokens
404 βββββββββββββββββββββββββββββββββββββββββββββββ
405 Total: 2626 tokens
406
407=== managing-and-navigating-worktrees ===
408
409Token breakdown:
410 Name: 11 tokens
411 Description: 60 tokens
412 Body: 703 tokens (96 lines)
413 βββββββββββββββββββββββββββββββββββββββββββββββ
414 Total: 774 tokens
415
416=== monitoring-with-munin ===
417
418Token breakdown:
419 Name: 10 tokens
420 Description: 62 tokens
421 Body: 1553 tokens (195 lines)
422 References:
423 writing-plugins.md 1151 tokens
424 βββββββββββββββββββββββββββββββββββββββββββββββ
425 Total: 2776 tokens
426
427=== notifying-through-ntfy ===
428
429Token breakdown:
430 Name: 10 tokens
431 Description: 37 tokens
432 Body: 1052 tokens (89 lines)
433 References:
434 ht.md 383 tokens
435 httpie.md 385 tokens
436 nodejs.md 541 tokens
437 python.md 517 tokens
438 wget.md 430 tokens
439 βββββββββββββββββββββββββββββββββββββββββββββββ
440 Total: 3355 tokens
441
442=== rebasing-with-git ===
443
444Token breakdown:
445 Name: 8 tokens
446 Description: 71 tokens
447 Body: 2317 tokens (232 lines)
448 βββββββββββββββββββββββββββββββββββββββββββββββ
449 Total: 2396 tokens
450
451=== researching-with-rumilo ===
452
453Token breakdown:
454 Name: 10 tokens
455 Description: 60 tokens
456 Body: 1217 tokens (112 lines)
457 βββββββββββββββββββββββββββββββββββββββββββββββ
458 Total: 1287 tokens
459
460=== resuming-work-through-lunatask ===
461
462Token breakdown:
463 Name: 12 tokens
464 Description: 44 tokens
465 Body: 466 tokens (42 lines)
466 References:
467 cli.md 195 tokens
468 installing-lune.md 65 tokens
469 βββββββββββββββββββββββββββββββββββββββββββββββ
470 Total: 782 tokens
471
472=== reviewing-code ===
473
474Token breakdown:
475 Name: 7 tokens
476 Description: 51 tokens
477 Body: 355 tokens (48 lines)
478 βββββββββββββββββββββββββββββββββββββββββββββββ
479 Total: 413 tokens
480
481=== scripting-with-go ===
482
483Token breakdown:
484 Name: 8 tokens
485 Description: 46 tokens
486 Body: 727 tokens (138 lines)
487 βββββββββββββββββββββββββββββββββββββββββββββββ
488 Total: 781 tokens
489
490=== testing-with-gocuke-and-gherkin ===
491
492Token breakdown:
493 Name: 14 tokens
494 Description: 77 tokens
495 Body: 633 tokens (67 lines)
496 References:
497 bdd-practices.md 261 tokens
498 gocuke-api.md 1427 tokens
499 βββββββββββββββββββββββββββββββββββββββββββββββ
500 Total: 2412 tokens
501
502=== updating-llm-client-model-lists ===
503
504Token breakdown:
505 Name: 13 tokens
506 Description: 51 tokens
507 Body: 997 tokens (126 lines)
508 βββββββββββββββββββββββββββββββββββββββββββββββ
509 Total: 1061 tokens
510
511=== using-exe-dev ===
512
513Token breakdown:
514 Name: 8 tokens
515 Description: 32 tokens
516 Body: 380 tokens (45 lines)
517 βββββββββββββββββββββββββββββββββββββββββββββββ
518 Total: 420 tokens
519
520=== working-with-tmux ===
521
522Token breakdown:
523 Name: 8 tokens
524 Description: 32 tokens
525 Body: 909 tokens (128 lines)
526 βββββββββββββββββββββββββββββββββββββββββββββββ
527 Total: 949 tokens
528
529=== writing-git-tags ===
530
531Token breakdown:
532 Name: 7 tokens
533 Description: 38 tokens
534 Body: 821 tokens (107 lines)
535 References:
536 installing-git-format.md 22 tokens
537 βββββββββββββββββββββββββββββββββββββββββββββββ
538 Total: 888 tokens
539
540=== writing-roc-lang ===
541
542Token breakdown:
543 Name: 8 tokens
544 Description: 53 tokens
545 Body: 693 tokens (117 lines)
546 References:
547 builtins-llms.md 25216 tokens
548 llms.md 4253 tokens
549 scripting.md 614 tokens
550 βββββββββββββββββββββββββββββββββββββββββββββββ
551 Total: 30837 tokens
552
553=== writing-rust ===
554
555Token breakdown:
556 Name: 7 tokens
557 Description: 45 tokens
558 Body: 1324 tokens (139 lines)
559 References:
560 idioms.md 1708 tokens
561 βββββββββββββββββββββββββββββββββββββββββββββββ
562 Total: 3084 tokens
563
564============================================================
565SUMMARY
566============================================================
567
568Skills: 30
569Metadata: 1837 tokens
570Combined bodies: 31562 tokens
571Overall: 86901 tokens
572Validation errors: 0
573
574Largest skills (by total tokens):
575 1. writing-roc-lang 30837 tokens
576 2. ast-grep 5363 tokens
577 3. frontend-accessibility 4759 tokens
578 4. authoring-skills 3834 tokens
579 5. notifying-through-ntfy 3355 tokens
580```
581
582---
583
584Some other tools if these interested you
585
586- [wt](https://git.secluded.site/wt) - CLI for managing git worktrees
587- [git-format](https://git.secluded.site/git-format) - CLI that turns LLM input
588 into well-formatted conventional commits and tags
589- [garble](https://git.secluded.site/garble) - transform stdin with an LLM (fix
590 typos, translate, reformat)
591- [lune](https://git.secluded.site/lune) - CLI and MCP server for
592 [Lunatask.app](https://lunatask.app)