Glossary: Per-Project Terms & Command-Phrases
A project-local dictionary of the definitions, abbreviations, and command-phrases
that matter for this project. Stored in GLOSSARY.md at the project root, so
each project keeps its own. The skill definition is global; the data is
per-project — the same split as pinboard and script-registry.
Three categories:
- Definitions — variable names, dataset/database names, key concepts.
(e.g.
ret = monthly stock return; WellDatabase = the licensed well-level dataset)
- Abbreviations — acronyms and short forms used in the project.
(e.g.
WRDS = Wharton Research Data Services)
- Command-Phrases — phrases the user says that map to an action Claude
should perform. (e.g. "push" = commit and push the paper to its GitHub repo)
Definitions and abbreviations are reference — read to understand the project.
Command-phrases are behavioral — read to act.
How the glossary is used
The glossary is loaded adaptively at session start by /spin-up, so it never
weighs on the context window no matter how big it grows:
- Command-Phrases load eagerly, in full. They are behavioral and won't trigger
the skill on their own (the bare word "push" won't invoke
glossary), so they
must be in context from the start. They're few by design — keep them so.
- Definitions & Abbreviations load lazily. At session start only their term
list (the headwords, not the glosses) is loaded, so you know what's defined.
Read the full line on demand — when one of those terms actually comes up, or
the user asks — by grepping the term in
GLOSSARY.md. Do NOT pull the whole
Definitions section into context up front, and do NOT ask the user what a listed
term means — look it up.
- Small glossary? If the whole file is under ~25 entries,
/spin-up just loads
it whole — the lazy split only earns its keep once the term sections grow.
On demand, always. "What does X mean?", "what does X stand for?", "what's in our
glossary?" → grep/read GLOSSARY.md and answer from it. If the term isn't there,
say so — don't guess.
Command-phrases (behavioral)
When the user uses a phrase defined under Command-Phrases, perform the mapped
action — they have already told you what they want, so don't re-ask "do you want
me to push?". But still honor standing safety rules around the action itself:
- Before any push to a public repo, run the secrets/PII preflight (scan staged
files for keys, names, usernames in paths). The command-phrase is permission to
push, not permission to skip the scan.
- Destructive or irreversible actions (delete, force-push, deploy) still get a
one-line confirmation, even when aliased.
If a command-phrase is ambiguous in the current context (e.g. "push" but there are
two repos), ask which one — briefly.
Adding entries
When explicitly asked ("add to glossary", "glossary: X means Y", "from now on
X means Y"):
- Categorise the entry — a phrase mapping to an action → Command-Phrase; an
acronym/short form → Abbreviation; anything else → Definition.
- Append silently under the right section in
GLOSSARY.md. Don't reorder or
rewrite existing entries.
- Acknowledge in one line — "Added to the glossary." Don't read it back.
Proactively — offer, never auto-add, and only when the term clears the
inclusion bar below:
- The user defines a term in passing ("by
ret I mean monthly returns") → offer:
"Want me to add ret to the glossary?"
- You hit an undefined, project-specific abbreviation or variable in their code/data
→ offer to capture it once you know what it means.
Keep offers to one line and don't nag — if declined, drop it.
What belongs (the inclusion bar)
Add a term only if it is all four: durable (will still matter next month),
non-obvious (not self-explanatory from its name), recurring (comes up more than
once), and project-specific. Same discipline as the memory system: don't store
what's derivable by reading the code.
- Belongs:
ret (terse, non-obvious), WellDatabase (project dataset), "push"
(a command-phrase), a domain acronym a newcomer wouldn't know.
- Doesn't:
monthly_return (self-documenting name), a one-off abbreviation used
once, anything already spelled out in README/CLAUDE.md, general-knowledge
acronyms (CSV, API).
When in doubt, leave it out — the glossary earns its always-on cost only by staying
small and high-signal.
Entry formats
One line per entry: bold headword, em-dash, then a short gloss — aim for under
~12 words. If it needs a paragraph, it belongs in README/CLAUDE.md, not here.
No timestamps. (Command-Phrases sits first because it's the only eagerly-loaded
section — see below.)
## Command-Phrases
- **"push"** — commit and push the paper to its GitHub repo
## Definitions
- **ret** — monthly stock return (CRSP, decimal)
- **WellDatabase** — licensed well-level production dataset
## Abbreviations
- **WRDS** — Wharton Research Data Services
Creating GLOSSARY.md
If it doesn't exist, create it at the project root with this structure.
Command-Phrases comes first — it's the only section loaded eagerly each session,
so keeping it at the top makes the session-start read cheap:
# Glossary
<!-- Project-specific command-phrases, definitions, and abbreviations. -->
<!-- Command-Phrases load eagerly at session start (via /spin-up); Definitions and -->
<!-- Abbreviations load lazily / on demand. Manage with /glossary. -->
## Command-Phrases
## Definitions
## Abbreviations
Add a missing section heading if needed; never drop existing entries.
Showing, editing, removing
- "Show the glossary" / "what's in our glossary" — read
GLOSSARY.md and
present it by section with a count per section. If empty, say so.
- "Change X to Y" / "update the definition of X" — find the entry, edit it in
place, acknowledge in one line.
- "Remove X from glossary" — delete that entry. If it's a command-phrase, note
the alias is no longer active. Never clear the whole file without explicit
confirmation.
Keeping it lean
The glossary is always-on, so it has to stay small and high-signal.
- Size flags.
/spin-up reports the counts and flags for pruning once the
glossary passes ~50 total entries or ~15 command-phrases. Treat those as
soft ceilings, not targets.
- Prune on request. "prune glossary" / "clean up the glossary" → read the file,
surface likely-dead entries (superseded command-phrases, terms that no longer
appear in the code/paper, duplicates), and propose removals. Never bulk-delete
without confirmation.
- One concept per entry. If an entry is growing into a paragraph or listing
several things, it's the wrong tool — move it to
README/CLAUDE.md.
Relationship to other systems
- vs
pinboard — pinboard holds transient tasks/notes/ideas that get done and
cleared; the glossary holds stable terms that persist for the project's life.
- vs memory (
~/.claude/.../memory/) — memory stores cross-project facts about
the user, feedback, and project context; the glossary stores project-specific
terms and phrases, and lives inside the project.
- vs
CLAUDE.md — hard project rules belong in CLAUDE.md; the glossary is the
lighter, user-editable list of what tokens mean and what phrases trigger.
Important rules
- Read
GLOSSARY.md before writing it — append, don't overwrite.
- Per-project — always the
GLOSSARY.md in the current project root, never a
shared global file. Repeat universal phrases like "push" in each project that
needs them.
- Don't editorialize — it's the user's dictionary; capture their wording, don't
"improve" definitions.
- Keep it readable — a human scans this. Consistent formatting, one entry per
line, no timestamps (definitions are stable; they don't age like pinboard notes).
1---2name: glossary3description: Per-project glossary of key definitions, abbreviations, and command-phrases, stored in `GLOSSARY.md` at the project root. Use this skill when the user defines or asks about a project-specific term — variable names, dataset or database names, acronyms — or sets up a command-phrase (a phrase that maps to an action, e.g. "push" = commit and push the paper to GitHub). Triggers include "add to glossary", "glossary: X means Y", "define X for this project", "what does X mean here", "what does X stand for", "from now on X means Y", "show the glossary", "what's in our glossary", and "remove X from glossary". Also use proactively: offer to capture a term when the user defines one in passing, or when you hit an undefined abbreviation or variable name in their code or data. Loaded at session start by `/spin-up` so command-phrases stay active.4---56# Glossary: Per-Project Terms & Command-Phrases78A project-local dictionary of the definitions, abbreviations, and command-phrases9that matter for *this* project. Stored in `GLOSSARY.md` at the project root, so10each project keeps its own. The skill definition is global; the data is11per-project — the same split as `pinboard` and `script-registry`.1213Three categories:1415- **Definitions** — variable names, dataset/database names, key concepts.16 *(e.g. `ret` = monthly stock return; `WellDatabase` = the licensed well-level dataset)*17- **Abbreviations** — acronyms and short forms used in the project.18 *(e.g. `WRDS` = Wharton Research Data Services)*19- **Command-Phrases** — phrases the user says that map to an **action** Claude20 should perform. *(e.g. "push" = commit and push the paper to its GitHub repo)*2122Definitions and abbreviations are **reference** — read to understand the project.23Command-phrases are **behavioral** — read to act.2425## How the glossary is used2627The glossary is loaded **adaptively** at session start by `/spin-up`, so it never28weighs on the context window no matter how big it grows:2930- **Command-Phrases load eagerly, in full.** They are behavioral and won't trigger31 the skill on their own (the bare word "push" won't invoke `glossary`), so they32 must be in context from the start. They're few by design — keep them so.33- **Definitions & Abbreviations load lazily.** At session start only their *term34 list* (the headwords, not the glosses) is loaded, so you know what's defined.35 Read the full line **on demand** — when one of those terms actually comes up, or36 the user asks — by grepping the term in `GLOSSARY.md`. Do NOT pull the whole37 Definitions section into context up front, and do NOT ask the user what a listed38 term means — look it up.39- **Small glossary?** If the whole file is under ~25 entries, `/spin-up` just loads40 it whole — the lazy split only earns its keep once the term sections grow.4142**On demand, always.** "What does X mean?", "what does X stand for?", "what's in our43glossary?" → grep/read `GLOSSARY.md` and answer from it. If the term isn't there,44say so — don't guess.4546## Command-phrases (behavioral)4748When the user uses a phrase defined under **Command-Phrases**, perform the mapped49action — they have already told you what they want, so don't re-ask "do you want50me to push?". But still honor standing safety rules around the action itself:5152- Before any push to a **public** repo, run the secrets/PII preflight (scan staged53 files for keys, names, usernames in paths). The command-phrase is permission to54 push, not permission to skip the scan.55- Destructive or irreversible actions (delete, force-push, deploy) still get a56 one-line confirmation, even when aliased.5758If a command-phrase is ambiguous in the current context (e.g. "push" but there are59two repos), ask which one — briefly.6061## Adding entries6263**When explicitly asked** ("add to glossary", "glossary: X means Y", "from now on64X means Y"):65661. **Categorise** the entry — a phrase mapping to an action → Command-Phrase; an67 acronym/short form → Abbreviation; anything else → Definition.682. **Append silently** under the right section in `GLOSSARY.md`. Don't reorder or69 rewrite existing entries.703. **Acknowledge in one line** — "Added to the glossary." Don't read it back.7172**Proactively** — *offer*, never auto-add, and only when the term clears the73**inclusion bar** below:7475- The user defines a term in passing ("by `ret` I mean monthly returns") → offer:76 "Want me to add `ret` to the glossary?"77- You hit an undefined, project-specific abbreviation or variable in their code/data78 → offer to capture it once you know what it means.7980Keep offers to one line and don't nag — if declined, drop it.8182### What belongs (the inclusion bar)8384Add a term only if it is **all four**: *durable* (will still matter next month),85*non-obvious* (not self-explanatory from its name), *recurring* (comes up more than86once), and *project-specific*. Same discipline as the memory system: don't store87what's derivable by reading the code.8889- **Belongs:** `ret` (terse, non-obvious), `WellDatabase` (project dataset), "push"90 (a command-phrase), a domain acronym a newcomer wouldn't know.91- **Doesn't:** `monthly_return` (self-documenting name), a one-off abbreviation used92 once, anything already spelled out in `README`/`CLAUDE.md`, general-knowledge93 acronyms (`CSV`, `API`).9495When in doubt, leave it out — the glossary earns its always-on cost only by staying96small and high-signal.9798### Entry formats99100One line per entry: bold headword, em-dash, then a **short** gloss — aim for under101~12 words. If it needs a paragraph, it belongs in `README`/`CLAUDE.md`, not here.102No timestamps. (Command-Phrases sits first because it's the only eagerly-loaded103section — see below.)104105```markdown106## Command-Phrases107- **"push"** — commit and push the paper to its GitHub repo108109## Definitions110- **ret** — monthly stock return (CRSP, decimal)111- **WellDatabase** — licensed well-level production dataset112113## Abbreviations114- **WRDS** — Wharton Research Data Services115```116117### Creating GLOSSARY.md118119If it doesn't exist, create it at the project root with this structure.120**Command-Phrases comes first** — it's the only section loaded eagerly each session,121so keeping it at the top makes the session-start read cheap:122123```markdown124# Glossary125126<!-- Project-specific command-phrases, definitions, and abbreviations. -->127<!-- Command-Phrases load eagerly at session start (via /spin-up); Definitions and -->128<!-- Abbreviations load lazily / on demand. Manage with /glossary. -->129130## Command-Phrases131132## Definitions133134## Abbreviations135```136137Add a missing section heading if needed; never drop existing entries.138139## Showing, editing, removing140141- **"Show the glossary" / "what's in our glossary"** — read `GLOSSARY.md` and142 present it by section with a count per section. If empty, say so.143- **"Change X to Y" / "update the definition of X"** — find the entry, edit it in144 place, acknowledge in one line.145- **"Remove X from glossary"** — delete that entry. If it's a command-phrase, note146 the alias is no longer active. Never clear the whole file without explicit147 confirmation.148149## Keeping it lean150151The glossary is always-on, so it has to stay small and high-signal.152153- **Size flags.** `/spin-up` reports the counts and flags for pruning once the154 glossary passes **~50 total entries** or **~15 command-phrases**. Treat those as155 soft ceilings, not targets.156- **Prune on request.** "prune glossary" / "clean up the glossary" → read the file,157 surface likely-dead entries (superseded command-phrases, terms that no longer158 appear in the code/paper, duplicates), and propose removals. Never bulk-delete159 without confirmation.160- **One concept per entry.** If an entry is growing into a paragraph or listing161 several things, it's the wrong tool — move it to `README`/`CLAUDE.md`.162163## Relationship to other systems164165- **vs `pinboard`** — pinboard holds transient tasks/notes/ideas that get done and166 cleared; the glossary holds stable terms that persist for the project's life.167- **vs memory** (`~/.claude/.../memory/`) — memory stores cross-project facts about168 the user, feedback, and project context; the glossary stores project-specific169 *terms* and *phrases*, and lives inside the project.170- **vs `CLAUDE.md`** — hard project rules belong in `CLAUDE.md`; the glossary is the171 lighter, user-editable list of what tokens mean and what phrases trigger.172173## Important rules174175- **Read `GLOSSARY.md` before writing it** — append, don't overwrite.176- **Per-project** — always the `GLOSSARY.md` in the current project root, never a177 shared global file. Repeat universal phrases like "push" in each project that178 needs them.179- **Don't editorialize** — it's the user's dictionary; capture their wording, don't180 "improve" definitions.181- **Keep it readable** — a human scans this. Consistent formatting, one entry per182 line, no timestamps (definitions are stable; they don't age like pinboard notes).