From seshat
Use when a writer (often a non-native English speaker) wants their own verbose or vague prose made more precise WITHOUT an LLM rewriting it for them — finding the exact word for a wordy phrase, de-scanning a draft, tightening "ugly" text, or learning precise vocabulary. Triggers on "help me find precise words", "de-scan", "make this tighter", "what's the word for…", "keep my voice", and pasted drafts the writer calls clumsy.
How this skill is triggered — by the user, by Claude, or both
Slash command
/seshat:maximise-vocabularyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Help a writer replace vague, verbose phrasing in their OWN text with precise words they choose themselves. The writer keeps their voice and learns the vocabulary; the tool never writes the final line.
Help a writer replace vague, verbose phrasing in their OWN text with precise words they choose themselves. The writer keeps their voice and learns the vocabulary; the tool never writes the final line.
Never rewrite the user's text. Surface precise candidates; the user picks and types the line.
Violating the letter of this rule violates its spirit. The whole point is that the writer improves, not that the output improves. Concretely:
◇ (your vocabulary), never ✓.Use when: the writer pastes clumsy prose, asks for "the word for X", wants to de-scan, or wants to learn precise vocabulary while keeping their voice.
Do NOT use to: ghost-write, polish text the writer didn't ask about, or "improve" prose that is already precise.
✓ corpus — attested in the corpus. Confirm with scripts/kwic.py (full text — NOT lex search, which only hits the distinctive-term index and silently drops ordinary words like "striving"). Show one verbatim sentence + source.◇ claude — your vocabulary, for words a finite corpus lacks (e.g. "wrangle" = 0 hits). Honest and allowed; just labelled.scripts/dict.py <word> --pos <pos> (WordNet). Pass the POS the word is used as — the first sense is often wrong (coax→coaxial cable). Pick the apt sense from the top few; show top 1–2 when senses differ meaningfully.cases.json and render it (see Blueprint). The user reads, picks, and types their own line.| Need | Command |
|---|---|
| Is a word in the corpus? + a verbatim sentence | python3 scripts/kwic.py "<word/phrase>" [--pool papers|blogs|all] |
| Official definition, POS-correct | uv run --with wn python scripts/dict.py <word> --pos verb|noun|adj|adv |
| Register / intent neighbours (secondary) | "$CLAUDE_PLUGIN_ROOT/bin/lex" search "<intent>" --json (see seshat:using-frontier-lexicon) |
Data and presentation are split by a schema so the look is fixed and the content is verifiable:
blueprint/schema.json — the contract a run must satisfy (validate with jsonschema).blueprint/cases.json — the data you emit (one object per flagged chunk; corpus candidates require corpus_count, usage, usage_source).blueprint/template.html — the renderer (Study Deck: per-word dictionary entry, swap-in-place, "words learned" counter). It fetches cases.json, so iterate by editing the JSON and refreshing.blueprint/serve.sh — bash serve.sh [port] then open template.html. Must be http, not file:// (fetch).Always validate cases.json against schema.json before serving.
| Excuse | Reality |
|---|---|
| "I'll just give the rewritten sentence as a starting point" | That's ghost-writing. Surface candidates; the user writes the line. |
| "I'll paraphrase the definition, it's faster" | Use WordNet via dict.py. Your paraphrase isn't a dictionary the writer can trust. |
| "A flat synonym list is enough" | No. Each candidate needs source label + official definition + (for ✓) verbatim usage, or the writer can't choose the right sense. |
"lex search says the word isn't there → mark ◇" | lex search hits the distinctive-term index, not full text. Confirm with kwic.py before labelling. |
| "The corpus probably uses this word, I'll add a plausible sentence" | Fabrication. Only show sentences kwic.py actually returned. 0 hits → ◇. |
| "WordNet's first sense is fine" | Often the wrong POS/sense (coax→cable, seek→disk seek). Pass --pos; pick the apt sense. |
dict.py.kwic.py.✓ corpus without a kwic.py count > 0.All mean: stop, run the tool, label honestly, hand the choice back to the writer.
npx claudepluginhub visual-snow/seshat --plugin seshatGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.