5.3 KiB
name, description
| name | description |
|---|---|
| notes | Manage the project's local .notes/ dir (design docs, work handoffs, parked questions). Use whenever writing a design doc, plan, proposal, research or review for local use; starting, handing off or closing out work that spans sessions (brief, plan, report); parking something for later, out of scope or a follow-up; picking up or settling a parked question; preparing a document for someone else; or when the user mentions .notes, handoffs, open questions or asks what is pending. |
Notes
The policy is ~/.config/claude/rules/notes.md: layout, numbering, status lines, close-out, what doesn't belong. This skill holds the procedures. Every step that changes .notes/ ends with commit, which also regenerates index.html, notes.css, the markdown pages under _pages/ and the portable copies under _out/. Change the look only in this skill's notes.css, never in a project.
N=~/.config/claude/skills/notes/notes.py
python3 $N init # create .notes/ if missing (idempotent)
python3 $N next d|w|q # next free id, counts deleted items too
python3 $N commit "<subject>" # regenerate the generated pages, commit all of .notes/
python3 $N index # regenerate index.html, notes.css, _pages/ and _out/ only
python3 $N serve # every project's notes on http://127.0.0.1:8765/: hub filters projects, each project page searches its notes (the user runs this)
All commands take --root <project>; the default is the git toplevel of the current dir. Never pick an id by hand or from ls; deleted ids live only in git history.
New doc
-
init, thennext d -
write
docs/dNNN-slug.html(ordocs/dNNN-slug/index.htmlwith its assets next to it, then every../below becomes../../) on this skeleton, using only the components documented at the top ofnotes.css(callout, tag, cards, grid-2, table, figure.diagram with its svg classes); no<style>, no font links:<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Short name</title> <link rel="stylesheet" href="../notes.css"> </head> <body> <main class="page"> <nav class="back"><a href="../index.html">← notes</a></nav> <header> <p class="eyebrow">dNNN · plan · 2026-10-14</p> <h1>Title</h1> <p class="status current">status: current</p> <p class="lede">What this doc decides, in one or two sentences.</p> </header> <section> <h2>…</h2> </section> </main> </body> </html> -
if it replaces an older doc, set the older one's status line to
<p class="status superseded">status: superseded by <a href="dNNN-slug.html">dNNN</a> (<date>)</p>; mind the relative path when either doc is a folder -
look at it: a headless browser screenshot in light and dark, or
serve -
commit "dNNN: <slug>"
New work item
Only for work that will span sessions.
init, thennext w, creatework/wNNN-slug/brief.md, starting with# wNNN <title>: goal, done when, scope, verification, decisions to ask, prerequisites to read- add
plan.html(the proposal, on the doc skeleton with../../notes.cssand../../index.html) and research files as the work goes;report.mdat the end: what was built, what differs from the plan, leftovers commit "wNNN: <what changed>"
Close-out
When the work's branch is merged or the work is dropped, in that same session:
- lasting design → new doc or a status line on an existing one (see above)
- each leftover → a question with
origin: wNNN rm -r work/wNNN-slug, thencommit "wNNN: closed, <merged as <sha>|dropped>"
When index shows a work folder untouched for weeks with no open branch in the project, tell the user; don't close it yourself.
Park a question
-
init, thennext q -
write
questions/qNNN-slug.md:--- created: 2026-10-14 origin: w009 status: open --- # <one-line question or follow-up> What is open and why it matters. What is known so far, with paths, commits and ids. Where to start looking. -
commit "qNNN: <slug>"
Write it so a session with no memory of today can act on it.
Settle a question
- check the repo first: it may already be done or moot
- fold the outcome into a doc or a work item if it is worth keeping
rm questions/qNNN-slug.md,commit "qNNN: settled, <how: done in <sha> | moot because ... | moved to wNNN>"
Other
other/in/: the user's files; read only when pointed atother/out/: documents for someone else, written for that reader; no ids, no status line- html follows the doc skeleton and components like any doc, with
../../notes.cssand../../index.html; the eyebrow names the reader and date instead of an id (for the team · 2026-10-14) - what gets sent is the generated
_out/<file>:notes.cssinlined, back link dropped, other files copied; the index links it as "to send" - look at the
_out/copy too before handing it over, thencommit "other: <file>"
- html follows the doc skeleton and components like any doc, with
Never
- stage
.notes/from the project repo (git add .,git add -A); stage project paths explicitly - reference
.notes/paths from committed project files - keep archives or dated copies; delete, git keeps it
- push
.notes/or add a remote