Notify at the end of any turn long enough that the operator has probably looked away, asked or not. opencode-web notifies on every reply, which is too much; silence let a long turn sit unseen. -t 0 keeps a notice up through a walk (tested on MATE: the default notice expired; the -t 0 one stayed until closed). An experiment in form: the body is a Portland Pattern Repository pattern (context, problem, forces, therefore, resulting context), after Alexander, rather than the usual rules-and-recipe skill. The tension: forces give an agent reasons to handle cases the rules don't anticipate, and make the trade-offs visible to whoever edits the skill next; but the form runs longer, and every word is paid on each load, with the actionable part buried under the preamble. The resolution: an example notify-send right under the h1, the forces cut to one line each, and the description left in matcher form. The result is shorter than the rules-style draft (459 words vs. 562). Resulting context: if it reads well in practice, judgment-call skills may adopt the form; recipe skills (retcon, yarn.lock) likely gain little from it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
65 lines
2.7 KiB
Markdown
65 lines
2.7 KiB
Markdown
# mad skills
|
|
|
|
How I like code written, reviewed, and committed — written down so the
|
|
bots I pair with can pick it up without me repeating myself.
|
|
|
|
These are [Agent Skills](https://agentskills.io/specification). Each
|
|
`description` front-loads the words that should trigger it — the things
|
|
I actually say, like "retcon", "watch me", or "citation needed".
|
|
|
|
I keep this repo checked out at `.agents/skills/` in a workspace and
|
|
symlink `.claude/skills` and `.opencode/skills` to it, so [Claude
|
|
Code](https://code.claude.com/docs/en/skills) and
|
|
[opencode](https://opencode.ai/docs/skills/) see the same set.
|
|
|
|
## writing code
|
|
|
|
- [no-ambient-authority](no-ambient-authority/SKILL.md) — clocks,
|
|
RNGs, `fetch`, and the filesystem come in as parameters.
|
|
- [io-between-turns](io-between-turns/SKILL.md) — sync I/O is a pointy
|
|
instrument.
|
|
- [silent-failures-are-evil](silent-failures-are-evil/SKILL.md) — every
|
|
failure path leaves a trace in the logs.
|
|
- [lazy-tdd](lazy-tdd/SKILL.md) — works the first time? fine. Goofed?
|
|
You owe a test.
|
|
- [docs-files-api](docs-files-api/SKILL.md) — exported API docs over
|
|
file docs. Avoid chit-chat.
|
|
|
|
## commits and PRs
|
|
|
|
- [disclose-gen-ai](disclose-gen-ai/SKILL.md) — `Generated-by:`
|
|
trailers, per the ASF generative tooling guidance.
|
|
- [retcon](retcon/SKILL.md) — regroup a PR's net diff into clean
|
|
per-package commits; the merge result doesn't change.
|
|
- [yarn-lock-separate-commit](yarn-lock-separate-commit/SKILL.md) —
|
|
`yarn.lock` changes ship alone.
|
|
|
|
## writing prose
|
|
|
|
- [grice-maxims](grice-maxims/SKILL.md) — say what's needed and no
|
|
more, only what you can back up, in an order easy to follow.
|
|
- [hypertext-links](hypertext-links/SKILL.md) — link text says where
|
|
the link goes; no bare URLs, no "click here".
|
|
- [citation-needed](citation-needed/SKILL.md) — back a challenged claim
|
|
with live links, quoted and dated.
|
|
- [ibis-design](ibis-design/SKILL.md) — search a design space:
|
|
issues, positions, and arguments.
|
|
|
|
## at the terminal
|
|
|
|
- [watchme](watchme/SKILL.md) — I record the session with `script -f`;
|
|
read the typescript instead of asking me what happened.
|
|
- [run-confined](run-confined/SKILL.md) — run an untrusted installer in
|
|
a throwaway systemd user unit that can't see `~/.ssh` and friends.
|
|
- [what-was-i-doing](what-was-i-doing/SKILL.md) — where did this file
|
|
come from? Correlate mtimes with git history across every repo.
|
|
- [notify-me](notify-me/SKILL.md) — desktop notification at the end
|
|
of a long turn, sticky if I'm stepping away; not every reply.
|
|
|
|
## adding one
|
|
|
|
Name the directory for the trigger, not the topic. Write the
|
|
`description` for the matcher: what I'd say, what I'd be doing, and
|
|
what it's *not* for. Cite the source; quote the key line; explain the
|
|
rest.
|