Better Phrase
100% local · zero API calls · zero telemetry

English polish, baked into Claude Code.

Catches grammar, word choice, and idiom issues when you write English. Drops a native-style English rewrite when you write Chinese.
Code, commands, anything else — completely silent.

$ curl -fsSL https://betterphrase.roseduan.cn/install.sh | bash

Requires Python 3.9+ · Claude Code installed · one command registers the hook

Demo

What it looks like in Claude Code

writing English
> how are you todya, tell me a joke

Better Phrase (1ms)

✏️ English tip:

· "todya" → "today" — typo, letters out of order.

· comma splice — two independent clauses need a period.

✍️ Better Phrase: "Hey, how's it going today? Also, tell me a joke."

writing Chinese
> 我想约客户下周二开会讨论合同细节

Better Phrase (1ms)

🌐 English:

"I'd like to schedule a meeting with the client next Tuesday to go over the contract details."

Code, commands, or Chinese that doesn't need translation — completely silent. Zero tokens, zero noise.

Why not a skill

Language detection belongs in code · not the LLM

"Is this prompt English?" is a yes/no question. Asking the LLM to re-decide on every message looks equivalent, but the token cost and trigger reliability are not the same.

If it were a skill (LLM decides when to invoke) Better Phrase (hook + code filter)
Trigger decision LLM has to judge every prompt to decide if it should invoke Python regex, deterministic, zero model cost
Token cost Skill description stays in context, loaded every message Instructions injected only when English is detected
Trigger reliability Model may skip invocations or mistime them 100% consistent — no reliance on model memory
Non-English prompts Even when not invoked, the description still costs tokens Zero tokens — hook exits immediately

Skills shine for "should the AI use tool X?" — judgment calls. Language detection is a yes/no question; cheaper and more reliable in code.

Features

Small, focused, does one thing well

✏️

English polish

Grammar, word choice, and idiom fixes — plus a native-style rewrite.

🌐

Chinese → English

Drops an idiomatic English version when you write Chinese. Toggleable.

🎯

Zero noise

Code, commands, and irrelevant inputs trigger nothing. No tokens wasted.

🇨🇳

Chinese explanations

Tips explained in Chinese, focused on common Chinglish (中式英语) patterns.

🚀

Imperceptible overhead

The hook just runs language detection — invisible against Claude's own latency.

🔒

100% local

No API calls, no telemetry. Data never leaves your machine.

Install

Set up in 30 seconds

Option A · one-liner
$ curl -fsSL https://betterphrase.roseduan.cn/install.sh | bash
Option B · clone first (audit the script)
$ git clone https://github.com/roseduan/better-phrase.git ~/.claude/skills/better-phrase
$ cd ~/.claude/skills/better-phrase
$ ./install.sh

What the installer does

  1. Verifies ~/.claude/ exists and python3 / git are available
  2. Timestamps a backup of your existing ~/.claude/settings.json
  3. Adds an entry to hooks.UserPromptSubmit
  4. Cleans up any older Better Phrase entries
Restart Claude Code, then type any English prompt — you'll see a ✦ Better Phrase · English tip block appear.