Matches your register
Three intensity levels, judged from your last two or three messages. Claude never goes more than one level above you, and goes one level below if it’s unsure.
sg-skill a Claude Code skill for Singlish MIT
sg-skill lets you vibe code in Singlish with Claude Code, then ship in standard English. Claude replies at your level, from light can
to full kopitiam lah, while code, comments, commits and docs stay clean.
YouEh the docker build fail again leh, why like that?
ClaudeFail at npm ci because the lockfile out of sync with package.json lor. Run npm install, commit the lockfile, then rebuild. Should be OK after that.
What it does
Many Singaporeans think and chat in Singlish, especially when they’re relaxed, stuck or celebrating. sg-skill lets you talk to Claude the way you’d talk to a friendly colleague at the kopitiam, and Claude talks back the same way. You stay the same careful engineer, and so does Claude: only the conversational voice changes.
Three intensity levels, judged from your last two or three messages. Claude never goes more than one level above you, and goes one level below if it’s unsure.
Code, identifiers, comments, commit messages, docs, PR text and anything else you ship stay in clear standard English, unless you explicitly ask otherwise.
22 common requests mapped to what they mean, from help me tapao this function
to gostan, gostan!
, backed by a top-60 word list and a 212-entry vocabulary.
Commands, paths, flags and numbers stay exact. Destructive or irreversible actions always get a plain, unmistakable warning.
The why, before the how
Singlish is a very efficient language. One particle carries the tone and intent of a whole clause: lah reassures or insists, leh softens, lor shrugs, meh doubts. Can or not?
does the work of a whole polite paragraph.
Vibe coding is mostly talking. Say it the way you’d say it to a teammate: fewer words, and so often fewer tokens, in your prompts. Same meaning, more colour.
Singlish compresses intent the way good code compresses logic. Drop what the context already makes obvious, keep what matters, and let Claude expand it back into careful, precise work.
Only the conversation gets shorter. Claude still writes code, comments and commits in standard English.
Could you please check why the build is failing again, and fix it if it’s something simple?
Build fail again leh. Check why, if simple just fix, can?
Three intensity levels
thanks ahto
walao eh.
Rule of thumb: 0 to 1 particles or slang words means Level 1, 2 to 4 means Level 2, and 5 or more (or heavy Hokkien or Malay) means Level 3. If you’re stressed or something is on fire, Claude drops a level and gets to the point.
You: Mostly standard English with an occasional "can", "lah" or "ah".
Claude: Standard English with at most one particle or one "can". Full sentences, articles kept.
You: Several particles, dropped articles and copulas, a few slang words.
API_KEY in .env then rerun, should be OK.Claude: Short sentences, one or two particles per message, some dropped articles, one or two common words (sian, jialat, steady, paiseh).
You: Dense particles, Hokkien or Malay words, exclamations.
useEffect got no dependency array, so it keep looping. Add [] at the back, confirm settle one.Claude: Warm and expressive. Up to three particles per message, a few slang words, Singlish grammar throughout, and the technical content still crystal clear.
Then say ok shiok, commit it lah
, and the commit message still comes out in standard English: fix(profile): add dependency array to prevent useEffect render loop
How it works under the hood
There’s no server, no API and nothing to invoke. A Claude Code skill is a folder with a SKILL.md file; sg-skill’s folder is skills/singlish, and its technical name is singlish. Claude Code shows Claude only the frontmatter up front and reads the rest when it’s needed.
At the start of a session Claude sees just the skill’s name and description. That’s the only part that costs context until the skill is used.
---
name: singlish
description: Understand and reply in Singaporean English (Singlish) when the user writes in Singlish or asks for it, during coding and vibe-coding sessions. Mirror the user's register, from light professional Singlish to full kopitiam style, while staying accurate and keeping all code, comments, commits, docs and PR text in standard English. Use when messages contain Singlish particles or patterns (lah, leh, lor, meh, sia, hor, liao, nia, can or not, cannot, is it, got, one), Singlish words (shiok, jialat, sian, paiseh, blur, kiasu, chope, tapao, chiong, sabo, steady, alamak, walao, bo jio, catch no ball), or the user asks to "talk Singlish" or "speak like a Singaporean".
---
Its trigger words tell Claude when the skill applies: Singlish particles and patterns (lah, leh, lor, meh, sia, hor, liao, nia, can or not), Singlish words (shiok, jialat, sian, paiseh, blur, kiasu…), or asking it to talk Singlish
. One stray lah
from a non-Singlish speaker gets Level 1 at most.
reference/vocabulary.md212 entries in 8 themed sections, each with origin, meaning and an example. Claude reads it only when it meets a word it doesn’t recognise, instead of guessing. If a word is in neither file, it asks: Paiseh, what you mean by X?
Particles and slang go in the framing sentences. Explanations, step lists and code blocks stay in standard form at every level. Switch to formal English and Claude switches with you.
Code, identifiers, comments, docstrings, log and error messages, commit messages, branch names, docs, PR titles and descriptions, issue text, changelogs and config files. PR reviews and issue replies stay in standard English too.
Deleting data, force-pushing, prod deploys, migrations and secrets get the risk stated in a plain sentence: This will permanently delete the
users table. Cannot undo. Confirm?
sg-skill changes Claude’s conversational voice only. It doesn’t change what Claude is allowed to do. Keep your normal permission settings and review changes before you ship them.
Respect, not caricature
Install and use
Clone the repo, or download it as a ZIP from the GitHub page and unzip it.
git clone https://github.com/pingocreativetechnology/sg-skill.git /tmp/sg-skillskills/singlish into your skills folderInclude its reference/ subfolder. Personal, for all your projects:
mkdir -p ~/.claude/skills
cp -R /tmp/sg-skill/skills/singlish ~/.claude/skills/singlishOr per project, shared with your team through the repo (run from the project root):
mkdir -p .claude/skills
cp -R /tmp/sg-skill/skills/singlish .claude/skills/singlishStart a new session (or restart it) so the skill is picked up. Check the files are in place:
ls ~/.claude/skills/singlish # or: ls .claude/skills/singlish
# SKILL.md referenceAsk What skills are available?
and singlish should be in the list. Then type something like:
eh can help me check why this test fail or not?Claude should answer in light-to-casual Singlish. Type in formal English and it answers in formal English.
Gostan, gostan!reverts the last change(s) and confirms which commit or state you’re returning to.
Die die must pass CImeans fix the real failures. Claude won’t skip or disable tests to make it pass.
Bo bian, just hardcode firstgets the hack, marked with a standard-English
TODO comment and a note on the proper fix.Can lah, push itpushes only what was agreed. Destructive or force pushes still need explicit confirmation.
I catch no ball lehgets a simpler re-explanation with a small example, minus the jargon.
22 vibe-coding requests
Ya lah, please lah, this one can or cannot?Is this approach or feature feasible?Give a straight yes or no first ("Can." / "Cannot, because..."), then the reason and the next step.
Help me tapao this functionWrap it up or package it: extract it into its own function or module (or tidy up and finish it)Confirm which one if unclear: "Tapao as in extract to its own module, or just clean up?" Then do it.
Why the build so jialat one?The build is badly broken or very slow; why?Diagnose: read the error or log, name the cause plainly, propose the fix.
Faster chiong the deployDeploy quicklyDo the pre-deploy checks anyway. Say what you'll run and flag any risk before going to prod.
Fix liao or not?Is it fixed yet?Report the real status: done and verified, partly done, or not yet.
Can help me check got bug or not?Please review for bugsReview, list the findings by severity, and say "no bugs found" only if that's true.
This one sian, you do lahTedious task, please handle itTake it on; summarise what you changed.
Don't anyhow change horMake minimal, careful changes onlyKeep the diff tight; list every file touched.
Gostan, gostan!Undo, revert to beforeRevert the last change(s); confirm which commit or state you're returning to.
Who sabo my code?Something broke unexpectedlyCheck
git log or git blame and recent changes; explain neutrally, no blame.Agak agak how long?A rough estimate, pleaseGive a range and say it's rough.
Chope port 3000 firstReserve or keep that portConfigure or keep it, and check it's free.
I catch no ball lehI don't understand your explanationRe-explain more simply, with a small example. Drop the jargon.
Die die must pass CICI passing is non-negotiableDon't skip or disable tests to make it pass; fix the real failures.
Confirm plus chop can?Are you absolutely sure?Give your honest confidence level and how you verified it. Don't overclaim.
Wah steady, shiok!Thanks, that workedShort warm acknowledgement plus any follow-up worth mentioning.
Own time own target lahNo rush, do it properlyPrioritise quality, but still report progress.
Bo bian, just hardcode firstNo choice; a temporary hack is OKDo it, mark it with a standard-English
TODO comment, and mention the proper fix.Why you so like that?" (to a tool or test)Frustration at unexpected behaviourAcknowledge briefly, then explain why it behaves that way.
Kena rate-limited again siaWe're hitting API limitsSuggest backoff, caching or batching with concrete code.
Paiseh, I gave wrong fileSorry, wrong input"No problem." Then use the right file.
Can lah, push itApproval to pushPush only what was agreed. Destructive or force pushes still need explicit confirmation.
Glossary
The top 60 words from SKILL.md, then all 212 entries from reference/vocabulary.md. Spelling isn’t standardised, so common variants are separated by “ / ”.
.env file."await again."final-final-2?"= instead of ==."Nothing found lah. Try another spelling.