typo-check
Find typos, grammar errors, punctuation/capitalization mistakes, and banned-phrase voice slips in prose and code comments. Use when the user says "/typo-check", wants to scan for typos, or before shipping user-facing text. Reports findings and confirms before fixing.
Best use case
typo-check is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Find typos, grammar errors, punctuation/capitalization mistakes, and banned-phrase voice slips in prose and code comments. Use when the user says "/typo-check", wants to scan for typos, or before shipping user-facing text. Reports findings and confirms before fixing.
Teams using typo-check should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/typo-check/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How typo-check Compares
| Feature / Agent | typo-check | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Find typos, grammar errors, punctuation/capitalization mistakes, and banned-phrase voice slips in prose and code comments. Use when the user says "/typo-check", wants to scan for typos, or before shipping user-facing text. Reports findings and confirms before fixing.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
## What this skill does
Scans a focused set of files for four categories of issue — typos, hard grammar errors, punctuation/capitalization mistakes, and banned-phrase voice slips — reports everything it finds grouped by file and category, and waits for explicit confirmation before applying any fix.
This skill never edits prose unilaterally. Voice is load-bearing in `prompts/` and reminders; one silent rewrite can shift the whole feel.
## Steps
### 1. Build the file set
Two sources, unioned:
**A. Files changed since `main`** — staged, unstaged, and committed on the current branch:
```bash
{ git diff --name-only main...HEAD; git diff --name-only; git diff --name-only --cached; } | sort -u
```
**B. Always-check set** — voice-critical prose and project-facing docs, regardless of diff:
- `prompts/` (every `*.md`)
- `docs/` (every `*.md`)
- `README.md`
- `CHANGELOG.md`
- `.charlie/` (every `*.md`)
- `integrations/` (every `*.md`)
- `setup.sh`
Intersect the union with the in-scope extensions: `.md`, `.py`, `.sh`. Drop anything under `.venv/`, `node_modules/`, `dist/`, `build/`, `.git/`.
Show the resulting file list before scanning so the user can see the scope. If `$ARGUMENTS` names a path, scope to that path instead of the default set.
### 2. Scan each file
For each file, extract the in-scope text by type:
- **Markdown (`.md`)** — body prose, headings, and the `description:` field in frontmatter. Skip fenced code blocks and inline code.
- **Python (`.py`)** — module/class/function docstrings, `#` comments, and string literals passed to `click.option(help=...)`, `typer.Option(help=...)`, logger calls, or raised exception messages. Skip regular code.
- **Shell (`.sh`)** — `#` comments and the contents of `echo`/`printf` strings. Skip commands.
Then run four passes on the extracted text:
1. **Typos** — misspellings, doubled words ("the the"), obvious letter swaps ("teh", "recieve", "seperate"), wrong homophones in clear context ("it's" vs "its", "your" vs "you're").
2. **Hard grammar** — subject/verb disagreement, missing words, wrong tense, broken pronoun reference, dangling modifiers. Not stylistic preference.
3. **Punctuation/capitalization** — missing terminal punctuation in prose, stray commas, unmatched quotes/parens, sentence-initial lowercase, inconsistent capitalization of project names (Charlie, Charlieverse, MCP).
4. **Banned phrases** — run the existing voice check:
```bash
uv run python -m charlieverse.helpers.banned_words "<extracted text>"
```
Exit code 1 with a `Matched: ...` line means findings; exit 0 means clean. The phrase list lives in `charlieverse/helpers/banned_words.py`; don't duplicate it here.
### 3. Report findings
Group by file, then by category. For each finding show:
- The exact line (with line number)
- What's wrong (one phrase, e.g. "doubled word", "subject/verb disagreement", "banned phrase: 'comprehensive'")
- The proposed fix
Format:
```
prompts/Charlie.md
Line 42 typo "recieve" → "receive"
Line 88 banned phrase "comprehensive audit" → suggest rewrite, see below
Line 91 punctuation missing period at end of sentence
docs/api.md
Line 14 grammar "the endpoints returns" → "the endpoints return"
```
For banned-phrase findings, show the surrounding sentence and a proposed rewrite that preserves the meaning in Charlie's voice. These are the most likely to be wrong — call them out explicitly.
End the report with a count per category and a count per file.
### 4. Confirm before fixing
After the report, ask: **"Apply all fixes, pick a subset, or skip?"**
- **All** — apply every proposed fix.
- **Subset** — user names specific findings or files to apply; apply only those.
- **Skip** — no changes.
For banned-phrase rewrites specifically, confirm each one individually unless the user says "all banned too." Voice rewrites can drift in ways a typo fix cannot.
### 5. Apply approved fixes
Use `Edit` for each fix. After applying, run a second pass on the touched files to confirm no new issues were introduced (e.g. a rewrite that accidentally reintroduces another banned phrase, or breaks a sentence).
Report what was changed. Do not commit — that's what `/commit` is for.
### Rules
- Report first, always. Never fix silently.
- Banned-phrase rewrites get per-finding confirmation. Voice drift is expensive to reverse.
- Don't flag style ("awkward phrasing", "could be clearer") — only typos, hard grammar, punctuation/capitalization, and banned phrases. Style suggestions churn the prose without making it more correct.
- Skip fenced code blocks, inline code, and regular code lines. Comments and docstrings are in; the code itself is out.
- Project name capitalization is load-bearing: Charlie (not charlie), Charlieverse (not CharlieVerse or charlieverse), MCP (not mcp). Flag lowercase forms in prose as capitalization findings.
- If `$ARGUMENTS` is a path, scope to that path only. Otherwise use the default file set.
- Don't commit. Leave that to the user or to `/commit`.Related Skills
trick
Run Charlie tricks by name or path. Use when the user says "/trick", wants to run a trick, list available tricks, or execute a skill file. Also trigger when the user mentions running a specific trick by name (e.g., "run the session-save trick", "run ship", "do the commit trick").
research
Research a topic and save findings to Charlieverse knowledge. Use whenever the user wants to research something, look up documentation, investigate a library or tool, explore a concept, or asks "what do you know about X". Also trigger when the user says "/research", wants to build up knowledge about a subject, or asks you to "look into" something — even if they don't use the word "research" explicitly.
copilot
Run a task through GitHub Copilot CLI. Use when the user says "/copilot", wants to delegate work to Copilot, or mentions running something through Copilot. Also trigger when the user wants to use Copilot for a task.
codex
Run a task through OpenAI Codex CLI. Use when the user says "/codex", wants to delegate work to Codex, or mentions running something through Codex. Also trigger when the user wants to use an OpenAI model for a task.
session-save
Save or update the current session. Use this skill when asked to handoff, save session, update session, start a new chat, etc. Always call this before using the `update_session` MCP tool directly.
charlie-import
Import conversation history from AI providers (Claude, Copilot, Codex, Cursor) and generate stories from the imported data. Use on first session to bootstrap memory from existing conversations, or anytime the person wants to import history from another provider/machine.
test-coverage
Evaluate the test coverage
ship
Commit, docs, changelog, and push in one go. Use when the user says "/ship", wants to ship their changes, or asks to commit and push everything.
qc
Run quality control checks on the codebase — type checking, linting, tests, and server smoke test. Use when the user says "/qc", wants to verify code quality, or after making significant changes.
docs
Generate or update public documentation from source code. Use when the user says "/docs", wants to update docs, or asks to generate documentation for the project.
commit
Review repo changes and create logical atomic commits. Use when the user says "/commit", wants to commit their work, or asks to break changes into commits.
changelog
Generate or update CHANGELOG.md from git commits using semantic versioning. Use when the user says "/changelog", wants to update the changelog, or asks to generate release notes.