{"id":50965314,"url":"https://github.com/ruslanlap/cavemenko","last_synced_at":"2026-06-18T19:33:02.930Z","repository":{"id":354184659,"uuid":"1222531609","full_name":"ruslanlap/cavemenko","owner":"ruslanlap","description":"Plugin для Claude Code що вмикає печерний режим — видаляє воду, зберігає суть. −65–90% токенів без втрати точності. Побудований для українських розробників, розуміє обидві мови.","archived":false,"fork":false,"pushed_at":"2026-05-11T18:53:07.000Z","size":118,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-11T20:37:22.892Z","etag":null,"topics":["caveman","claude-code","claude-code-plugin"],"latest_commit_sha":null,"homepage":"https://ruslanlap.github.io/ruslanlap_buymeacoffe/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruslanlap.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-27T13:06:40.000Z","updated_at":"2026-05-11T18:53:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ruslanlap/cavemenko","commit_stats":null,"previous_names":["ruslanlap/cavemenko"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ruslanlap/cavemenko","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruslanlap%2Fcavemenko","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruslanlap%2Fcavemenko/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruslanlap%2Fcavemenko/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruslanlap%2Fcavemenko/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruslanlap","download_url":"https://codeload.github.com/ruslanlap/cavemenko/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruslanlap%2Fcavemenko/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34505419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["caveman","claude-code","claude-code-plugin"],"created_at":"2026-06-18T19:33:00.428Z","updated_at":"2026-06-18T19:33:02.922Z","avatar_url":"https://github.com/ruslanlap.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🦴 cavemenko\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg)](LICENSE)\n[![Version](https://img.shields.io/github/v/release/ruslanlap/cavemenko?label=version\u0026color=blue)](https://github.com/ruslanlap/cavemenko/releases)\n[![Claude Code](https://img.shields.io/badge/Claude_Code-plugin-blueviolet?logo=anthropic\u0026logoColor=white)](https://www.anthropic.com/claude-code)\n[![Token Savings](https://img.shields.io/badge/токени_економія-−65..90%25-brightgreen)](https://github.com/ruslanlap/cavemenko#як-стискається)\n[![Language](https://img.shields.io/badge/мова-🇺🇦_Українська-blue)](https://github.com/ruslanlap/cavemenko)\n[![Node.js](https://img.shields.io/badge/runtime-Node.js-339933?logo=nodedotjs\u0026logoColor=white)](https://nodejs.org)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)](https://github.com/ruslanlap/cavemenko/pulls)\n\n\u003e **Вогонь. Код. Менше слів.**\n\nPlugin для [Claude Code](https://www.anthropic.com/claude-code) що вмикає **печерний режим** — видаляє воду, зберігає суть. −65–90% токенів без втрати точності. Побудований для українських розробників, розуміє обидві мови.\n\n```\n$ /cavemenko\n╔─────────────────────────────────────────────────╗\n│  Режим: FULL  ·  Токени: ↓ ~78%  ·  🦴 Active  │\n╚─────────────────────────────────────────────────╝\n```\n\n\n---\n\n## Зміст\n\n- [Навіщо це](#-навіщо-це)\n- [До vs Після](#-до-vs-після)\n- [Встановлення](#-встановлення)\n- [Використання](#-використання)\n- [Рівні стиснення](#-рівні-стиснення)\n- [Як стискається](#-як-стискається)\n- [Конфігурація](#%EF%B8%8F-конфігурація)\n- [Архітектура](#-архітектура)\n- [Ліцензія](#-ліцензія)\n\n---\n\n## 🎯 Навіщо це\n\nClaude Code за замовчуванням відповідає як академічна стаття: вступ, розвиток, висновок, ввічливість і ще раз ввічливість. Досвідченому розробнику це шум.\n\nCavemenko перемикає стиль на **інженерний**: конкретно, стисло, по суті — так, як говорять між собою в команді. Ніяких «Звичайно, із задоволенням допоможу...».\n\nНазва: *cave* (печерна людина говорила коротко) + *menko* (зменшувальний суфікс). Плагін використовує рідні механізми мови, а не жорстке обрізання — граматика і сенс зберігаються.\n\n---\n\n## ⚡ До vs Після\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cstrong\u003eReact rerender\u003c/strong\u003e\u003c/summary\u003e\n\n**Без cavemenko (~230 символів):**\n\u003e Звичайно! Із задоволенням допоможу вам з цією проблемою. Давайте розберемося, що відбувається з вашим React-компонентом. Проблема, з якою ви зіткнулися, скоріше за все, пов'язана з тим, що при кожному рендерингу компонента створюється нове посилання на об'єкт...\n\n**`full` (~50 символів):**\n\u003e Inline obj = нове ref кожен render → rerender. Оберни в `useMemo`.\n\n**Економія: ~78%**\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eConnection pooling в БД\u003c/strong\u003e\u003c/summary\u003e\n\n| Рівень | Відповідь |\n|--------|----------|\n| *(без плагіна)* | Pool reuse open connections до бази даних замість створення нового з'єднання на кожен запит. Це дозволяє уникнути накладних витрат на встановлення з'єднання та TCP handshake... |\n| `lite` | Pool reuse open connections до БД замість створення нового на кожен request. Skip handshake overhead. |\n| `full` | Pool — reuse open conn до БД. Skip handshake per request. |\n| `ultra` | Pool = reuse conn БД. Skip handshake → fast. |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eFix token expiry bug\u003c/strong\u003e\u003c/summary\u003e\n\n| Рівень | Відповідь |\n|--------|----------|\n| `lite` | Перевірка expiry використовує strict `\u003c`, через що tokens на межі expiry відхиляються. Заміни на `\u003c=`. |\n| `full` | Bug — token expiry check. `\u003c` → `\u003c=`. Межа відкидається. |\n| `ultra` | Bug: token exp, `\u003c` → `\u003c=`. |\n\n\u003c/details\u003e\n\n---\n\n## 📦 Встановлення\n\n### Quick start\n\n```\n/plugin marketplace add ruslanlap/cavemenko\n/plugin install cavemenko@cavemenko\n```\n\n### Інші варіанти\n\n\u003cdetails\u003e\n\u003csummary\u003eGit URL (HTTPS / SSH)\u003c/summary\u003e\n\n```\n/plugin marketplace add https://github.com/ruslanlap/cavemenko.git\n/plugin install cavemenko@cavemenko\n```\n\n```\n/plugin marketplace add git@github.com:ruslanlap/cavemenko.git\n/plugin install cavemenko@cavemenko\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCLI (поза сесією)\u003c/summary\u003e\n\n```bash\nclaude plugin marketplace add ruslanlap/cavemenko\nclaude plugin install cavemenko@cavemenko\n\n# з scope:\nclaude plugin install cavemenko@cavemenko --scope user\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ePin to version\u003c/summary\u003e\n\n```\n/plugin marketplace add https://github.com/ruslanlap/cavemenko.git#v2.0.0\n/plugin install cavemenko@cavemenko\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eLocal dev / fork\u003c/summary\u003e\n\n```bash\ngit clone https://github.com/ruslanlap/cavemenko.git\n```\n\n```\n/plugin marketplace add /path/to/cavemenko\n/plugin install cavemenko@cavemenko\n```\n\nАбо one-shot без install:\n\n```bash\nclaude --plugin-dir /path/to/cavemenko\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eTeam / repo (.claude/settings.json)\u003c/summary\u003e\n\nДодай до `.claude/settings.json` у репо:\n\n```json\n{\n  \"extraKnownMarketplaces\": {\n    \"cavemenko\": {\n      \"source\": { \"source\": \"github\", \"repo\": \"ruslanlap/cavemenko\" }\n    }\n  },\n  \"enabledPlugins\": { \"cavemenko@cavemenko\": true }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ePre-seed для containers / CI\u003c/summary\u003e\n\n```bash\nCLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed \\\n  claude plugin marketplace add ruslanlap/cavemenko\n\nCLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed \\\n  claude plugin install cavemenko@cavemenko\n\n# runtime:\nexport CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed\n```\n\nДеталі: [pre-populate plugins](https://docs.claude.com/en/docs/claude-code/plugin-marketplaces#pre-populate-plugins-for-containers)\n\n\u003c/details\u003e\n\n### Оновлення / видалення\n\n```\n/plugin marketplace update cavemenko       # оновити список\n/plugin update cavemenko@cavemenko         # оновити плагін\n/plugin disable cavemenko@cavemenko        # вимкнути (зберегти)\n/plugin uninstall cavemenko@cavemenko      # видалити\n```\n\n---\n\n## 🕹️ Використання\n\n### Активація / деактивація\n\n| Команда | Дія |\n|---------|-----|\n| `/cavemenko` | Увімкнути (default: `full`) |\n| `/cavemenko lite\\|full\\|ultra` | Вибрати рівень |\n| `/cavemenko off` | Вимкнути |\n| `увімкни печерний`, `менше токенів`, `будь коротким` | Активація українською |\n| `cavemenko on`, `cavemenko mode` | Активація англійською |\n| `стоп печерний`, `вимкни печерний`, `звичайний режим` | Деактивація |\n\n### Спеціальні команди\n\n| Команда | Дія |\n|---------|-----|\n| `/cavemenko-commit` | Короткий commit message у стилі [Conventional Commits](https://www.conventionalcommits.org/) |\n| `/cavemenko-review` | One-line code review comment |\n| `/cavemenko-compress` | Стиснення документа / нотаток / специфікацій (target ≤30%) |\n| `/cavemenko-translate` | Переклад eng документації → стиснена Ukrainian |\n| `/cavemenko-stats` | Статистика сесії: режим, зекономлені токени |\n\n---\n\n## 📊 Рівні стиснення\n\n| Рівень | Стиль | Найкраще для |\n|--------|-------|--------------|\n| `lite` | Повні речення без води і hedging | Документація, пояснення для інших |\n| `full` *(default)* | Фрагменти, наказовий спосіб, short forms | Щоденна розробка |\n| `ultra` | Abbr, arrows (`X → Y`), max eng/ukr mix | Power users, code review, specs |\n\n### Один запит на трьох рівнях\n\n**«Чому React компонент rerender?»**\n\n| Level | Response |\n|-------|----------|\n| `lite` | Компонент перерендерюється, бо при кожному render створюється нове ref на object. Оберніть в `useMemo`, щоб ref стабілізувалося. |\n| `full` | Inline obj = нове ref кожен render. Оберни в `useMemo`. |\n| `ultra` | Inline obj → new ref → rerender. `useMemo`. |\n\n**«Поясни connection pooling в БД»**\n\n| Level | Response |\n|-------|----------|\n| `lite` | Pool reuse open connections до БД замість створення нового на кожен request. Skip handshake overhead. |\n| `full` | Pool — reuse open conn до БД. Skip handshake per request. |\n| `ultra` | Pool = reuse conn БД. Skip handshake → fast. |\n\n---\n\n## 🔬 Як стискається\n\nCavemenko не обрізає текст — він використовує **рідні** механізми української мови та зрозумілі tech-скорочення. Граматика і точність зберігаються.\n\n| Прийом | До → Після | Економія |\n|--------|-----------|----------|\n| Pro-drop | `я думаю` → `думаю` | −1 слово |\n| Тире замість зв'язки | `це є баг` → `баг` | −2 слова |\n| Short forms | `код зламаний` → `код зламано` | −2 символи |\n| Наказовий спосіб | `потрібно обернути` → `оберни` | −1 слово |\n| Орудний відмінок | `за допомогою команди` → `командою` | −2 слова |\n| Drop «що» | `думаю, що баг` → `думаю: баг` | −1 слово |\n| Eng terms | `автентифікація` → `auth` | −10 символів |\n| Eng terms | `програмне забезпечення` → `software` | −14 символів |\n| Abbreviations | `і так далі` → `etc` | −8 символів |\n| Abbreviations | `наприклад` → `eg` | −7 символів |\n| Mix slangs | `виконай` → `do` | −5 символів |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eПовна таблиця абревіатур (ultra mode)\u003c/strong\u003e\u003c/summary\u003e\n\n| Abbr | Повна форма |\n|------|-------------|\n| БД | база даних |\n| ПЗ | software |\n| ОС | operating system |\n| ШІ | AI |\n| фн | function |\n| імпл | implementation |\n| конф | config |\n| auth | автентифікація |\n| env | оточення |\n| dep / deps | залежність / залежності |\n| repo | репозиторій |\n| PR | pull request |\n| CI/CD | continuous integration/delivery |\n| eg | наприклад |\n| etc | і так далі |\n| ASAP | якнайшвидше |\n| API | програмний інтерфейс |\n| UI/UX | user interface / user experience |\n| ТЗ | технічне завдання |\n| MVP | мінімально життєздатний продукт |\n| ORM | object-relational mapping |\n| CLI | command-line interface |\n| SDK | software development kit |\n| JWT | JSON web token |\n| SSR/SSG | server-side rendering / static generation |\n| DRY | don't repeat yourself |\n| CRUD | create, read, update, delete |\n\n\u003c/details\u003e\n\n### Авто-визначення мови\n\nCavemenko читає мову промпту і відповідає відповідно:\n\n- Запит англійською → стиснена англійська відповідь\n- Запит українською → стиснена українська відповідь\n\n### Контекстне стиснення\n\n| Контекст | Рівень стиснення |\n|----------|------------------|\n| Пояснення, документація | Максимальний |\n| Архітектурні рішення | Середній |\n| Помилки, security | Мінімальний (точність важлива) |\n\n---\n\n## ⚙️ Конфігурація\n\n### Пріоритет налаштувань\n\n```\nCAVEMENKO_DEFAULT_MODE (env var)\n  └── .cavemenko.json (root репо)\n        └── ~/.config/cavemenko/config.json\n              └── default: full\n```\n\n### Глобальний конфіг\n\n```json\n// ~/.config/cavemenko/config.json\n{\n  \"defaultMode\": \"ultra\"\n}\n```\n\nАбо через змінну оточення:\n\n```bash\nexport CAVEMENKO_DEFAULT_MODE=ultra\n```\n\n### Per-project конфіг\n\nДодай `.cavemenko.json` у корінь репо:\n\n```json\n{\n  \"defaultMode\": \"ultra\",\n  \"abbreviations\": {\n    \"ТСК\": \"таск-трекер\",\n    \"СПР\": \"спринт\"\n  }\n}\n```\n\n### Custom abbreviations (user-level)\n\nСтвори `~/.config/cavemenko/abbr.json`:\n\n```json\n{\n  \"КБ\": \"кодова база\",\n  \"ФР\": \"фронтенд\",\n  \"БР\": \"бекенд\",\n  \"ТЛ\": \"техлід\",\n  \"СР\": \"сервер\"\n}\n```\n\nProject-level abbr зливаються з user-level і перевизначають їх при конфліктах.\n\n### Statusline\n\nПоказує активний режим і зекономлені токени прямо в UI Claude Code.\n\n**macOS / Linux** — додай до `~/.claude/settings.json`:\n\n```json\n{\n  \"statusLine\": {\n    \"type\": \"command\",\n    \"command\": \"bash ~/.claude/plugins/cavemenko/hooks/cavemenko-statusline.sh\"\n  }\n}\n```\n\n**Windows:**\n\n```json\n{\n  \"statusLine\": {\n    \"type\": \"command\",\n    \"command\": \"powershell -File ~/.claude/plugins/cavemenko/hooks/cavemenko-statusline.ps1\"\n  }\n}\n```\n\nМожливі значення: `[CAVEMENKO]` · `[CAVEMENKO:ULTRA]` · `[CAVEMENKO:ULTRA ↓2k]`\n\n---\n\n## 🏗️ Архітектура\n\n```\nSessionStart hook\n  ├─ Записує .cavemenko-active (statusline читає)\n  ├─ Завантажує SKILL.md → фільтрує по рівню → інджектить\n  ├─ Завантажує custom abbr (user + project) → інджектить\n  ├─ Визначає конфлікти з іншими плагінами → попереджає\n  └─ Перевіряє statusline → пропонує налаштування\n\nUserPromptSubmit hook\n  ├─ Відстежує /cavemenko lite|full|ultra|off\n  ├─ Відстежує /cavemenko-{commit,review,compress,translate,stats}\n  ├─ Парсить фрази активації/деактивації (укр + eng)\n  └─ Надсилає per-turn reinforcement (модель не дрейфує)\n\nStatusline\n  ├─ Читає mode flag → [CAVEMENKO:LEVEL]\n  └─ Читає stats file → token savings counter\n```\n\n### Безпека\n\n- **Flag file** — symlink-safe write/read, `O_NOFOLLOW`, whitelist validation\n- **Statusline** — cap 64 bytes, strip non-`[a-z0-9-]`, whitelist before render\n- **Zero secrets · zero network · zero external deps**\n\n---\n\n## 📄 Ліцензія\n\n[MIT](LICENSE) © [ruslanlap](https://github.com/ruslanlap)\n\nНатхнено [caveman](https://github.com/JuliusBrussee/caveman) by Julius Brussee — побудовано з нуля для Ukrainian dev workflow.\n# cavemenko\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruslanlap%2Fcavemenko","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruslanlap%2Fcavemenko","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruslanlap%2Fcavemenko/lists"}