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