Compare commits
7
Commits
1ecf625427
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f6e23fdec | ||
|
|
c5e06ba156 | ||
|
|
349c6479e1 | ||
|
|
522950dd6e | ||
|
|
91e6124c37 | ||
|
|
abb660e327 | ||
|
|
d59efbcd16 |
No files matched your search
@@ -22,8 +22,9 @@ Code](https://code.claude.com/docs/en/skills) and
|
|||||||
failure path leaves a trace in the logs.
|
failure path leaves a trace in the logs.
|
||||||
- [lazy-tdd](lazy-tdd/SKILL.md) — works the first time? fine. Goofed?
|
- [lazy-tdd](lazy-tdd/SKILL.md) — works the first time? fine. Goofed?
|
||||||
You owe a test.
|
You owe a test.
|
||||||
- [docs-files-api](docs-files-api/SKILL.md) — exported API docs over
|
- [docs-files-api](docs-files-api/SKILL.md) — README sells and gets
|
||||||
file docs. Avoid chit-chat.
|
you to TADA; CONTRIBUTING has the rest; AGENTS.md links to it.
|
||||||
|
Exported API docs over file docs. Avoid chit-chat.
|
||||||
|
|
||||||
## commits and PRs
|
## commits and PRs
|
||||||
|
|
||||||
@@ -36,13 +37,17 @@ Code](https://code.claude.com/docs/en/skills) and
|
|||||||
|
|
||||||
## writing prose
|
## writing prose
|
||||||
|
|
||||||
- [stop-blathering](stop-blathering/SKILL.md) — omit needless words.
|
- [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
|
- [hypertext-links](hypertext-links/SKILL.md) — link text says where
|
||||||
the link goes; no bare URLs, no "click here".
|
the link goes; no bare URLs, no "click here".
|
||||||
- [citation-needed](citation-needed/SKILL.md) — back a challenged claim
|
- [citation-needed](citation-needed/SKILL.md) — back a challenged claim
|
||||||
with live links, quoted and dated.
|
with live links, quoted and dated.
|
||||||
- [ibis-design](ibis-design/SKILL.md) — search a design space:
|
- [ibis-design](ibis-design/SKILL.md) — search a design space:
|
||||||
issues, positions, and arguments.
|
issues, positions, and arguments.
|
||||||
|
- [obsidian-markdown](obsidian-markdown/SKILL.md) — the workspace is
|
||||||
|
an Obsidian vault: one line per paragraph, relative links, no file
|
||||||
|
symlinks you expect Obsidian to show.
|
||||||
|
|
||||||
## at the terminal
|
## at the terminal
|
||||||
|
|
||||||
@@ -52,6 +57,8 @@ Code](https://code.claude.com/docs/en/skills) and
|
|||||||
a throwaway systemd user unit that can't see `~/.ssh` and friends.
|
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
|
- [what-was-i-doing](what-was-i-doing/SKILL.md) — where did this file
|
||||||
come from? Correlate mtimes with git history across every repo.
|
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
|
## adding one
|
||||||
|
|
||||||
|
|||||||
+29
-1
@@ -1,10 +1,38 @@
|
|||||||
---
|
---
|
||||||
name: docs-files-api
|
name: docs-files-api
|
||||||
description: JSDoc placement rules for TypeScript/JSDoc code — use when writing or reviewing code comments, JSDoc, or file headers; deciding where @file/@see links go; documenting exported symbols or external specs; when a `//` comment explains what a declaration is or does (it belongs in JSDoc).
|
description: Where docs go — README vs CONTRIBUTING vs AGENTS.md, and JSDoc placement — use when writing or reviewing a README, CONTRIBUTING, or AGENTS.md/CLAUDE.md; when someone asks "how do I run it?" and there's no README; when writing or reviewing code comments, JSDoc, or file headers; deciding where @file/@see links go; documenting exported symbols or external specs; when a `//` comment explains what a declaration is or does (it belongs in JSDoc).
|
||||||
---
|
---
|
||||||
|
|
||||||
# Documentation Conventions
|
# Documentation Conventions
|
||||||
|
|
||||||
|
## README, CONTRIBUTING, AGENTS.md
|
||||||
|
|
||||||
|
A **README** sells, then gets the reader running:
|
||||||
|
|
||||||
|
- **Up top, about two sentences:** what it is and why to care. Then
|
||||||
|
straight to getting started.
|
||||||
|
- **Getting started:** get them to TADA! with no fuss. Readers skip to
|
||||||
|
the first fenced block and copy it; if it doesn't work, boo. So that
|
||||||
|
block runs as-is from a fresh clone and ends with something to look
|
||||||
|
at (a URL, output). No architecture, no principles.
|
||||||
|
- **After that:** features and benefits, as much as earns its place.
|
||||||
|
|
||||||
|
**Headings say something.** A heading is prime real estate: it shows in
|
||||||
|
the outline and in link targets. "What's in it", "Overview", "Features",
|
||||||
|
"Details" say nothing; name the point instead ("Bookmarks in, a zine
|
||||||
|
out"). Plain labels are fine only where the reader hunts for them by
|
||||||
|
name: "Getting started", "Deploying".
|
||||||
|
|
||||||
|
Everything else goes in **CONTRIBUTING**: design, layout of the code,
|
||||||
|
how to test, conventions, deploying.
|
||||||
|
|
||||||
|
**AGENTS.md is a symlink to CONTRIBUTING.md** (likewise CLAUDE.md, if a
|
||||||
|
tool wants one). Good advice is good advice, for people and bots alike.
|
||||||
|
If agents need something people don't, give it a short section in
|
||||||
|
CONTRIBUTING.
|
||||||
|
|
||||||
|
## JSDoc
|
||||||
|
|
||||||
JSDoc placement rules (from the
|
JSDoc placement rules (from the
|
||||||
[portfolio-contract contributing notes](https://github.com/Agoric/agoric-sdk/blob/master/packages/portfolio-contract/CONTRIBUTING.md#documentation-conventions)):
|
[portfolio-contract contributing notes](https://github.com/Agoric/agoric-sdk/blob/master/packages/portfolio-contract/CONTRIBUTING.md#documentation-conventions)):
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: stop-blathering
|
name: grice-maxims
|
||||||
description: >-
|
description: >-
|
||||||
Stop blathering; be concise, truthful, relevant, clear (Grice's maxims) — use when writing or copy editing prose for a reader (docs, READMEs, skills, commit messages, PR descriptions, replies); when someone says "tighter", "too wordy", "blathering", "omit needless words", or cites Strunk & White or Grice; when about to say something you lack adequate evidence for. Optimize for reader attention: say what's needed, nothing the reader already knows, in an order easy to follow.
|
Grice's maxims: be concise, truthful, relevant, clear — use before any reply, and when writing or copy editing prose for a reader (docs, READMEs, skills, commit messages, PR descriptions); when someone says "tighter", "too wordy", "stop blathering", "omit needless words", or cites Strunk & White or Grice; when about to say something you lack adequate evidence for. Optimize for reader attention: say what's needed, nothing the reader already knows, in an order easy to follow.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Be concise; optimize for reader attention
|
# Be concise; optimize for reader attention
|
||||||
@@ -54,6 +54,23 @@ leading symbol on each item says what kind of element it is.
|
|||||||
that's what keeps fallbacks easy to agree on.
|
that's what keeps fallbacks easy to agree on.
|
||||||
6. **When one issue is really several choices, say so** with a `.`
|
6. **When one issue is really several choices, say so** with a `.`
|
||||||
comment and split it into sibling `?` sub-issues.
|
comment and split it into sibling `?` sub-issues.
|
||||||
|
7. **Attach each argument to the position it bears on.** If it applies
|
||||||
|
equally to the siblings, it belongs higher up, or the issue is
|
||||||
|
several choices (rule 6). A comment that rules a position out is a
|
||||||
|
con, and the position is rejected (`:-`).
|
||||||
|
8. **Check the source before raising an issue.** If the design text
|
||||||
|
already answers it, record the issue as resolved and cite that text
|
||||||
|
as the pro.
|
||||||
|
9. **Past three levels of nesting, split out a sub-issue.**
|
||||||
|
|
||||||
|
## numbering
|
||||||
|
|
||||||
|
Number elements so replies can refer to them ("2: …"): issues `1`,
|
||||||
|
`2`; positions under them `1a`, `1b`; anything below that `1a-i`,
|
||||||
|
`1a-ii`, then `1a-i-a`. The number follows the symbol: `?! 2. …`,
|
||||||
|
`:+ 2c. …`. Renumbering breaks references made in chat or other docs,
|
||||||
|
so append rather than renumber once people are citing numbers. Show
|
||||||
|
dependencies between issues with "(see 5)".
|
||||||
|
|
||||||
## writing it in markdown
|
## writing it in markdown
|
||||||
|
|
||||||
@@ -62,6 +79,12 @@ auto-bulleting. Put each symbol after the list marker, escaping where
|
|||||||
needed (`- \- con`, `- \+ pro`), or use a fenced block with indentation
|
needed (`- \- con`, `- \+ pro`), or use a fenced block with indentation
|
||||||
as in the example below.
|
as in the example below.
|
||||||
|
|
||||||
|
Past a screenful, give each top-level issue its own heading
|
||||||
|
(`### ? 3. What is the fence?`) with its elements in a fenced block
|
||||||
|
below. Headings show up in the editor outline and give each issue a
|
||||||
|
link target. Links don't render inside a fence, so put sources after
|
||||||
|
the block and refer to them from the line they support.
|
||||||
|
|
||||||
## example
|
## example
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
name: notify-me
|
||||||
|
description: Notify me / ping me — desktop (XDG) notification via `notify-send` at the end of any long turn (many steps, builds, test runs, deploys, waiting on background work), asked or not; and when the operator says "notify me", "XDG notify me", "ping me when you're done", "let me know about progress", or "make it stick / indefinite duration" because they're stepping away. Covers done vs. progress notices, sticky vs. transient, and updating one notice in place. Not for Discord replies (use the reply tool) or for quick back-and-forth turns.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Notify me
|
||||||
|
|
||||||
|
```sh
|
||||||
|
notify-send -a capsite "done: diigo-cache" "3 commits on main, not pushed"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
The operator hands a session a batch of work, then turns to another session or goes for a walk.
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
**Without going to look, the operator can't tell which session is done or stuck.**
|
||||||
|
|
||||||
|
## Forces
|
||||||
|
|
||||||
|
- opencode-web notifies on every reply; notices without news teach the operator to ignore them all.
|
||||||
|
- Silence is worse: a finished turn sits unseen.
|
||||||
|
- The operator won't always think to ask.
|
||||||
|
- Notices expire before the operator is back from a walk.
|
||||||
|
- Several sessions share one desktop.
|
||||||
|
- Progress notices pile up.
|
||||||
|
|
||||||
|
## Therefore
|
||||||
|
|
||||||
|
**At the end of any turn long enough that the operator has probably looked away, send one notice: which session, what state, what the operator should do next. Not during quick back-and-forth.**
|
||||||
|
|
||||||
|
Long means more than a handful of tool calls, or waiting on a build, tests, deploy, or background job. "Notify me when you're done" forces one even for a short turn.
|
||||||
|
|
||||||
|
- `-a` names the session (repo or task).
|
||||||
|
- The summary leads with the status: `done`, `blocked` (including a question that stops the work), `failed`, `progress`.
|
||||||
|
- The body says what's next: "needs a decision on the DO migration".
|
||||||
|
|
||||||
|
**Sticky** ("indefinite duration", "going for a walk"): `-t 0` (never expire). `-u critical` only if asked.
|
||||||
|
|
||||||
|
**Progress** ("notify me about progress"): one per milestone (tests pass, deployed), replacing the last rather than stacking:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
id=$(notify-send -p -a capsite "progress: diigo-cache" "tests pass; deploying")
|
||||||
|
notify-send -r "$id" -a capsite "done: diigo-cache" "deployed; not pushed"
|
||||||
|
```
|
||||||
|
|
||||||
|
Keep `$id` in a file (e.g. `.tmp/notify-id`) if the shell doesn't persist.
|
||||||
|
|
||||||
|
## Resulting context
|
||||||
|
|
||||||
|
The operator can leave a session alone and trust it to call. A notice means news, so it gets read.
|
||||||
|
|
||||||
|
`notify-send` needs the session bus; under a confined unit or ssh it may fail. Say so in the reply ([silent-failures-are-evil](../silent-failures-are-evil/SKILL.md)).
|
||||||
|
|
||||||
|
The agent must still remember this pattern at the end of a long turn, just when that slips.
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
- A Claude Code `Stop` hook could time the turn and notify past ~2 min; opencode would need its own plugin hook.
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
name: obsidian-markdown
|
||||||
|
description: Markdown in an Obsidian vault that agents also write — use when an agent writes or edits any .md file in a workspace with a `.obsidian/` folder (notes, READMEs, CONTRIBUTING, AGENTS.md, skills, docs); when someone mentions Obsidian, hard wrap, ragged "poetry" margins, wikilinks, or the vault; when adding a symlink to markdown. Not for Discord or PR text (see grice-maxims).
|
||||||
|
---
|
||||||
|
|
||||||
|
# Markdown for an Obsidian vault agents write in
|
||||||
|
|
||||||
|
The workspace is an [Obsidian](https://obsidian.md/) vault: a `.obsidian/` folder at its root. Dan reads and edits in Obsidian; agents write the same files from a terminal. Write markdown that reads well in Obsidian and on GitHub, and is easy for an agent to edit.
|
||||||
|
|
||||||
|
## One line per paragraph
|
||||||
|
|
||||||
|
Don't hard-wrap prose. A paragraph is one line; so is each list item. Break lines only between blocks: paragraphs, list items, headings, fences.
|
||||||
|
|
||||||
|
Wrapped paragraphs render with a ragged "poetry" margin in Dan's Obsidian, and they make diffs of a one-word edit reflow a whole paragraph. Code blocks keep their line breaks, of course.
|
||||||
|
|
||||||
|
When you rewrite a wrapped paragraph, unwrap it. Don't unwrap a whole file you aren't otherwise rewriting: that's a noisy diff in someone else's prose.
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
- Standard markdown links with relative paths: `[the webkeys pattern](docs/webkeys.md)`. Obsidian follows them, and GitHub renders them. `[[wikilinks]]` render only in Obsidian.
|
||||||
|
- No spaces in file names, so links need no `%20`.
|
||||||
|
- Link text says where the link goes (see hypertext-links).
|
||||||
|
|
||||||
|
## File names and headings
|
||||||
|
|
||||||
|
Obsidian shows file names in tabs, the file explorer, and search, so name files for what's in them.
|
||||||
|
|
||||||
|
Headings show in Obsidian's outline pane: make them say something.
|
||||||
|
|
||||||
|
## Frontmatter
|
||||||
|
|
||||||
|
Obsidian shows YAML frontmatter as Properties. Keep it valid YAML: quote values that contain `: ` or start with a special character.
|
||||||
|
|
||||||
|
## Symlinks
|
||||||
|
|
||||||
|
From [Obsidian's symlinks page](https://obsidian.md/help/symlinks):
|
||||||
|
|
||||||
|
> Obsidian ignores any symlink to a parent folder of the vault, or from one folder in the vault to another folder in the same vault.
|
||||||
|
|
||||||
|
> File symlinks (as opposed to folder symlinks) may work, but aren't officially supported at this time.
|
||||||
|
|
||||||
|
So a folder symlink inside the vault (`.claude/skills` → `.agents/skills`) is invisible to Obsidian, and that's fine: no duplicates. A file symlink like `AGENTS.md` → `CONTRIBUTING.md` may not show or update in Obsidian. Edit the target, never the link.
|
||||||
Reference in new issue
Block a user