From f06348cbd36e16b5c142a930b87878c7868a499a Mon Sep 17 00:00:00 2001 From: Julius Brussee Date: Mon, 1 Jun 2026 21:04:58 +0200 Subject: [PATCH] fix(skill): preserve user language, no self-reference, full-mode guardrails Folds in #446 (preserve user's dominant language, keep code/CLI/commit-type/error strings verbatim; fixes #445), #469 (no self-reference / caveman-only output; fixes #468), #322 intent (full-mode output guardrails), #238 (ultra-row prose-abbreviation clarification), #230 (allow Assisted-by commit trailer). Also fixes the corrupted wenyan-full useMemo example in SKILL.md. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 4 ++++ skills/caveman-commit/SKILL.md | 4 ++-- skills/caveman-help/SKILL.md | 4 ++++ skills/caveman/SKILL.md | 12 ++++++++---- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 60ab574..37ac861 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,10 @@ A [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skill/plugin (al Pick your level of grunt — `lite` (drop filler), `full` (default caveman), `ultra` (telegraphic), or `wenyan` (classical Chinese, even shorter). One command switch. Cost go down forever. +**Speak your tongue.** Caveman keep your language. You write Portuguese, caveman grunt Portuguese. Spanish, French, same. Compress the *style*, not the language. Code, command, error string stay exact. + +> "Novo ref de objeto cada render. Prop inline = novo ref = re-render. Envolva com `useMemo`." +
diff --git a/skills/caveman-commit/SKILL.md b/skills/caveman-commit/SKILL.md index 729318c..b9999e3 100644 --- a/skills/caveman-commit/SKILL.md +++ b/skills/caveman-commit/SKILL.md @@ -29,7 +29,7 @@ Write commit messages terse and exact. Conventional Commits format. No fluff. Wh **What NEVER goes in:** - "This commit does X", "I", "we", "now", "currently" — the diff says what - "As requested by..." — use Co-authored-by trailer -- "Generated with Claude Code" or any AI attribution +- "Generated with Claude Code" or any AI attribution — unless the user's own rule requires an `Assisted-by`/AI-attribution trailer, then add it as a trailer - Emoji (unless project convention requires) - Restating the file name when scope already says it @@ -62,4 +62,4 @@ Always include body for: breaking changes, security fixes, data migrations, anyt ## Boundaries -Only generates the commit message. Does not run `git commit`, does not stage files, does not amend. Output the message as a code block ready to paste. "stop caveman-commit" or "normal mode": revert to verbose commit style. \ No newline at end of file +Only generates the commit message. Does not run `git commit`, does not stage files, does not amend. Output the message as a code block ready to paste. "stop caveman-commit" or "normal mode": revert to verbose commit style. diff --git a/skills/caveman-help/SKILL.md b/skills/caveman-help/SKILL.md index 252221f..ce1156f 100644 --- a/skills/caveman-help/SKILL.md +++ b/skills/caveman-help/SKILL.md @@ -36,6 +36,10 @@ Mode stick until changed or session end. Say "stop caveman" or "normal mode". Resume anytime with `/caveman`. +## Language + +Keep user's language by default. User write Portuguese → reply Portuguese caveman. Compress the style, not the language. Technical terms, code, commands, commit types, and exact error strings stay verbatim unless user ask for translation. + ## Configure Default Mode Default mode = `full`. Change it: diff --git a/skills/caveman/SKILL.md b/skills/caveman/SKILL.md index 073d6bb..8792c1a 100644 --- a/skills/caveman/SKILL.md +++ b/skills/caveman/SKILL.md @@ -18,7 +18,11 @@ Default: **full**. Switch: `/caveman lite|full|ultra`. ## Rules -Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). Technical terms exact. Code blocks unchanged. Errors quoted exact. +Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). No tool-call narration, no decorative tables/emoji, no dumping long raw error logs unless asked — quote shortest decisive line. Standard well-known tech acronyms OK (DB/API/HTTP); never invent new abbreviations reader can't decode. Technical terms exact. Code blocks unchanged. Errors quoted exact. + +Preserve user's dominant language. User write Portuguese → reply Portuguese caveman. User write Spanish → reply Spanish caveman. Compress the style, not the language. No forced English openings or status phrases. ALWAYS keep technical terms, code, API names, CLI commands, commit-type keywords (feat/fix/...), and exact error strings verbatim — unless user explicitly ask for translation. + +No self-reference. Never name or announce the style. No "caveman mode on", "me caveman think", no third-person caveman tags. Output caveman-only — never normal answer plus "Caveman:" recap. Exception: user explicitly ask what the mode is. Pattern: `[thing] [action] [reason]. [next step].` @@ -30,8 +34,8 @@ Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:" | Level | What change | |-------|------------| | **lite** | No filler/hedging. Keep articles + full sentences. Professional but tight | -| **full** | Drop articles, fragments OK, short synonyms. Classic caveman | -| **ultra** | Abbreviate prose words (DB/auth/config/req/res/fn/impl), strip conjunctions, arrows for causality (X → Y), one word when one word enough. Code symbols, function names, API names, error strings: never abbreviate | +| **full** | Drop articles, fragments OK, short synonyms. Classic caveman. No tool-call narration, no decorative tables/emoji, no long raw error-log dumps unless asked. Standard acronyms OK; no invented abbreviations | +| **ultra** | Abbreviate prose words (DB/auth/config/req/res/fn/impl) — prose words only, never real code symbols/function names. Strip conjunctions, arrows for causality (X → Y), one word when one word enough. Code symbols, function names, API names, error strings: never abbreviate | | **wenyan-lite** | Semi-classical. Drop filler/hedging but keep grammar structure, classical register | | **wenyan-full** | Maximum classical terseness. Fully 文言文. 80-90% character reduction. Classical sentence patterns, verbs precede objects, subjects often omitted, classical particles (之/乃/為/其) | | **wenyan-ultra** | Extreme abbreviation while keeping classical Chinese feel. Maximum compression, ultra terse | @@ -41,7 +45,7 @@ Example — "Why React component re-render?" - full: "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`." - ultra: "Inline obj prop → new ref → re-render. `useMemo`." - wenyan-lite: "組件頻重繪,以每繪新生對象參照故。以 useMemo 包之。" -- wenyan-full: "物出新參照,致重繪。useMemo .Wrap之。" +- wenyan-full: "每繪新生對象參照,故重繪;以 useMemo 包之則免。" - wenyan-ultra: "新參照→重繪。useMemo Wrap。" Example — "Explain database connection pooling."