bopomofo-rescue Skill Review: 8,800 Bytes That Call a Script the ok-skills Copy Doesn't Ship

The bopomofo-rescue SKILL.md inside mxyhi/ok-skills is 8,800 bytes, and its core rule is "還原這一步一定要用 scripts/decode_bopomofo.py,不要自己心算" (always use the script for the restore step, don't work it out in your head). The folder it sits in holds four files: SKILL.md, a LICENSE and two reference pages. There is no scripts/ directory.

The skill rescues Traditional Chinese typed on a Taiwanese Bopomofo (注音) keyboard while the input method was stuck in English mode, so 你好嗎 arrives as su3cl3a8. The author is OliLin (Oliviaiii), MIT licensed. ok-skills, an Apache-2.0 collection with 508 stars, vendors a copy. I read the vendored folder in full, plus the original repo's hook, plugin files and installer, and grep-scanned its decoder. I ran none of it. Token figures are file bytes ÷ 4, arithmetic you can redo.

TL;DR / Key Takeaways

  • The bopomofo-rescue SKILL.md in mxyhi/ok-skills is 8,800 bytes, roughly 2,200 estimated tokens (bytes ÷ 4); with its two reference files the set is 13,767 bytes, roughly 3,442 estimated tokens. The text is mostly Traditional Chinese, so ÷4 probably understates.
  • Its frontmatter description is 1,349 characters (roughly 349 estimated tokens, always loaded), 325 characters over the 1,024-character maximum in the Agent Skills specification.
  • The ok-skills copy ships 4 files and omits the 32,442-byte decoder and the 4,953,956-byte dictionary that SKILL.md tells the agent to use; both exist only in the original Oliviaiii/bopomofo-rescue repository (MIT).
  • On 2026-10-31 the original repository had 0 stars, 0 forks, 0 issues and 7 commits, all created and pushed on 2026-07-24; ok-skills has 508 stars and 36 SKILL.md files in 32 top-level folders.
  • skills.sh showed 1 install for bopomofo-rescue against 4.1K total for the ok-skills pack, and Hacker News search returned 0 hits across 8 queries.

What the skill actually says

The problem is narrow and real: the IME is in English mode, a Taiwanese developer types a Chinese request, and the agent receives literal keystrokes on the standard Dachen (大千) layout. The workflow: run the decoder with --brief on the whole message, let it skip technical strings, then check its best-guess Chinese against context.

Behavior hangs on a confidence tier: high (0.90 or above) restores silently, medium (0.65 to 0.89) gets a one-sentence note, and low is ignored unless context makes it obvious. Letters-only tokens like npm and git are capped at 0.60, so they never trigger silently. Two lines show the tone:

"LLM 自己硬猜按鍵映射經常出錯" (LLMs guessing the key mapping on their own often get it wrong)

"誤把 npm run dev 當中文會造成實際傷害" (mistaking npm run dev for Chinese does real harm)

That's a sound split: key to symbol is a lookup table, and picking among homophones is judgment the model is good at. I rebuilt the 41-key map from the layout table in references/keyboard-layout.md and decoded its nine validation rows plus the transposition example. dj94 gives ㄎㄨㄞˋ (快); gji gives ㄕㄨㄛ (說). All matched. That checks the file against its own table, not an independent source.

Security gate: the vendored folder is markdown only, and I read all of it. The frontmatter pre-approves one command: allowed-tools: Bash(python "${CLAUDE_SKILL_DIR}/scripts/decode_bopomofo.py" *). My grep of the decoder found no subprocess, socket, urllib, requests, eval or exec; it reads a local dictionary (path overridable via BOPOMOFO_DICT). I did not read it line by line.

What it costs you in context

File-size arithmetic, not a session measurement: bytes ÷ 4.

FileBytesEst. tokens (bytes ÷ 4)When it's in context
Frontmatter description (ok-skills copy)1,395349Always (trigger text)
bopomofo-rescue/SKILL.md (ok-skills copy)8,8002,200When the skill runs
references/keyboard-layout.md2,645661Only if the agent opens it
references/exclusion-rules.md2,322581Only if the agent opens it
Set shipped in ok-skills (SKILL.md + 2 references)13,7673,442Upper bound if all three are read
Original repo only: scripts/decode_bopomofo.py32,4428,111Executed, not read into context
Original repo only: hooks/bopomofo_hook.py3,727932Executed per prompt; prints only on a high-tier match
Original repo only: data/bopomofo_dict.tsv4,953,956n/aRead by Python, never by the model

Two caveats. ÷4 is tuned for English and CJK text usually costs more tokens per byte, so treat 2,200 as a floor. And everyone pays for the description: about 349 estimated tokens per session, even if you never type Zhuyin.

What the community reports

Public discussion is close to nonexistent. Hacker News (Algolia, stories and comments) had nothing for "bopomofo-rescue", "bopomofo claude code", "mxyhi ok-skills" or "zhuyin keyboard garbled". Web search surfaced only the repo's own pages and standalone decoders; I found no user write-up. What exists:

SourceDateWhat was reportedLink
GitHub PR #12, mxyhi/ok-skills (merged)Opened 2026-07-24, merged 2026-10-18 (86 days)The author's own PR: 7 files, +302 lines. Its commit message says the script and ~5 MB dictionary stay in the original repo. One approval with no text, 0 comments.PR 12
GitHub PR #19, mxyhi/ok-skills (open)Opened 2026-10-24; checked 2026-10-31jack-reson8 reports the description is 1,349 characters against the spec's 1,024 and proposes a 951-character version, found with an audit script from their own project (skill-skill). 0 comments after 7 days.PR 19
Original repo, Oliviaiii/bopomofo-rescueChecked 2026-10-310 stars, 0 forks, 0 watchers, 0 issues, 7 commits. The latest three CI runs, all dated 2026-07-24, succeeded. Nothing since.repo
skills.sh listing2026-10-31ok-skills pack: 4.1K total installs. bopomofo-rescue: 1 install, against 248 for planning-with-files and 98 for tdd. The original repo's own skills.sh page returns 404.skills.sh

No real dissent exists. PR #19 is the only critical signal; its author has a stake in audit tooling, but I counted 1,349 characters myself and the spec page says "Max 1024 characters".

How to install it

From the original README (line 58) and the ok-skills README. I did not run either.

# full skill: SKILL.md + decoder + dictionary + hook (original repo)
git clone https://github.com/Oliviaiii/bopomofo-rescue.git ~/.claude/skills/bopomofo-rescue

# SKILL.md only, as part of the collection (ok-skills README)
mkdir -p ~/.agents/skills
cd ~/.agents/skills
git clone https://github.com/mxyhi/ok-skills.git ok-skills

You need Python 3 with python on PATH; with only python3, the README says to edit hooks/hooks.json. Deleting .claude-plugin/ drops the automatic hook. The skills.sh page's npx skills add mxyhi/ok-skills gives you the copy without the decoder.

Where it earns its keep, and where it doesn't

It earns its keep for one person: a Taiwanese developer who prompts in Traditional Chinese on a Zhuyin IME and sometimes forgets to switch. The decoder-plus-judgment design is right, and the exclusion rules skip uppercase, URLs, paths, flags, versions and filenames. The README says 27 of its 72 tests guard against false positives; tests/cases.tsv has 72 non-comment lines (not run). It earns nothing if you don't type Zhuyin, and the README's related-projects table lists a Windows hotkey tool that needs no model. The criticisms:

FAQ

What does bopomofo-rescue do?

It recovers Traditional Chinese typed on a Bopomofo (Zhuyin) keyboard while the input method was in English mode, such as su3cl3a8 for 你好嗎. A Python decoder maps keystrokes to symbols and proposes Chinese, and the agent confirms from context. SKILL.md is 8,800 bytes; only the Dachen layout is supported.

Does the ok-skills copy work on its own?

No. It has 4 files and omits the 32,442-byte decoder and 4,953,956-byte dictionary that SKILL.md tells the agent to use. Its prerequisite section says to clone Oliviaiii/bopomofo-rescue.

How much context does bopomofo-rescue use?

By file-size arithmetic (bytes ÷ 4, an estimate, not a measured session cost): about 2,200 tokens for SKILL.md, 3,442 with both references, and 349 for the always-loaded description. The text is mostly Chinese, so ÷4 likely understates.

Does the description meet the Agent Skills spec?

Not by my count: 1,349 characters against a 1,024 maximum. PR #19 on mxyhi/ok-skills proposes a 951-character version and had no replies after 7 days. I did not test whether a loader rejects it.

Skill by OliLin (@Oliviaiii), MIT licensed (LICENSE file: "Copyright (c) 2026 OliLin (@Oliviaiii)"). Source: github.com/Oliviaiii/bopomofo-rescue, commit 2ac7d52 (2026-07-24). The reviewed copy comes from github.com/mxyhi/ok-skills (Apache-2.0 collection), commit 91108cf (2026-10-29). Review date October 31, 2026. Quoted lines are short excerpts for review purposes. Star counts, install counts and pull request states are as of this date, and community reception shifts over time. Token figures are estimates from file size.