vdm-comms
claudeMeetings and correspondence discipline for repositories that keep them as files: a configurable contract linter for meetings/<date>-<slug>/ and series files (the contract is a floor distilled from three repositories — a track may resolve as a directory or a single file, index.md is owed only after the meeting has happened), with a project's own conventions switched on by name (comms.meeting-rules); meeting files split by who reads them — the agenda the owner's, the pitch what the counterpart hears, matched by topic name, with plugin templates for agenda, prep, pitch and index; a drift signal for the generated registry and per-track meeting pointers, written as markdown or Obsidian wikilinks with participant, topic and material columns; a PreToolUse guard that refuses to mark an outgoing letter sent — by creating it so or by an edit — without `sent-proof:` — the sending tool's id or that of what the owner sent by hand, checked with the access layer where it is installed, down to who the send went to, or the owner's word — and a PostToolUse check that names one a shell command left so, and a linted attachment checklist the sender can click; the form of an outgoing draft checked per its declared `channel:` (a subject line for email, a separator before the text to send — configurable per project, drafts only), and a draft declared outside comms/ named; each paragraph of a draft's text on one line, on every channel whose receiver keeps line breaks (all but comms.markdown-channels, intercom by default); a PreToolUse guard that keeps the raw .eml out of comms/ and the meetings tree, on Write and on a copy in Bash; who may write to a person and how to address them — `trust`, `addressed_as` and the From pairs in the HQ's people/, which a project without its own finds by asking the access layer for its HQ; and a pending-item summary — who owes what by when, series queues, unsent drafts, meetings without a transcript. The wording of everything it writes into the project is con
4 skills · hooks