91e6124c376e033de8589f2c41dbd4a92df2d52b
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>
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. 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 and
opencode see the same set.
writing code
- no-ambient-authority — clocks,
RNGs,
fetch, and the filesystem come in as parameters. - io-between-turns — sync I/O is a pointy instrument.
- silent-failures-are-evil — every failure path leaves a trace in the logs.
- lazy-tdd — works the first time? fine. Goofed? You owe a test.
- docs-files-api — exported API docs over file docs. Avoid chit-chat.
commits and PRs
- disclose-gen-ai —
Generated-by:trailers, per the ASF generative tooling guidance. - retcon — regroup a PR's net diff into clean per-package commits; the merge result doesn't change.
- yarn-lock-separate-commit —
yarn.lockchanges ship alone.
writing prose
- grice-maxims — say what's needed and no more, only what you can back up, in an order easy to follow.
- hypertext-links — link text says where the link goes; no bare URLs, no "click here".
- citation-needed — back a challenged claim with live links, quoted and dated.
- ibis-design — search a design space: issues, positions, and arguments.
at the terminal
- watchme — I record the session with
script -f; read the typescript instead of asking me what happened. - run-confined — run an untrusted installer in
a throwaway systemd user unit that can't see
~/.sshand friends. - what-was-i-doing — where did this file come from? Correlate mtimes with git history across every repo.
- notify-me — 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.
Languages
Shell
100%