From d4a5cfec93a4770603e4b23491cb949120dc3426 Mon Sep 17 00:00:00 2001 From: Bastien Chanot Date: Fri, 19 Jun 2026 19:08:40 +0200 Subject: [PATCH] chore(caveman): purge plugin + always-on integration Disable + uninstall caveman@caveman and delete every repo dependency on it: SessionStart/UserPromptSubmit hook blocks, standalone hook files, settings.json enabledPlugins + marketplace entries, install-plugins.sh STEP 5.5, update-all.sh refresh step, plugins.lock.json entry, doctor.sh checks, lib/detect-plugins.sh helpers, lib/profile.sh + plugin-advisor + skills/profile protected-list entries, .gitignore runtime-file block, and README/USAGE docs. Dead /caveman:compress refs replaced with manual/claude.ai guidance. Memory-registry terse-format convention kept (separate subsystem). Version 3.4.0 -> 3.5.0. On a subscription plan caveman's ~75% output-token compression has no cost benefit, and the always-on hooks added friction on validation gates and client deliverables. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01X3e8LaH2vymmxyh36h3jFU --- .claude/tasks/TODO.md | 13 +++++ .gitignore | 15 ----- CHANGELOG.md | 2 +- CLAUDE.md | 4 +- README.md | 1 - USAGE.md | 2 +- agents/plugin-advisor.md | 2 +- doctor.sh | 17 ------ hooks/session-start.sh | 1 - install-plugins.sh | 109 ++--------------------------------- lib/detect-plugins.sh | 19 ------ lib/profile.sh | 5 +- plugins.lock.json | 9 --- settings.json | 27 --------- skills/profile/SKILL.md | 2 +- skills/prune-memory/SKILL.md | 3 +- update-all.sh | 30 ---------- version.txt | 2 +- 18 files changed, 29 insertions(+), 234 deletions(-) diff --git a/.claude/tasks/TODO.md b/.claude/tasks/TODO.md index fb50a9c..cf13be5 100644 --- a/.claude/tasks/TODO.md +++ b/.claude/tasks/TODO.md @@ -192,3 +192,16 @@ obligatoire avant axe suivant. Construit via superpowers:writing-skills (TDD). - [x] onboard SKILL.md: allowed-tools += Agent, Skill (workflow STEPs 5-7 need them) - [x] re-test geo fixture (unreachable) → expect zero source edits; 2 blind judges on geo-analyzer diff - [x] commit per fix, results.tsv rows, merge if green + +## 2026-06-19 — cleanup/caveman-always-on (full plugin purge) +Goal: disable caveman plugin + delete every repo dep on it. Plugin.json +self-declares always-on hooks → "enabled w/o always-on" impossible → full +purge. Keep memory-registry terse-format rule (separate subsystem); only +replace dead `/caveman:compress` cmd refs w/ "Legacy entries +(pre-format-rule): compress manually or via claude.ai on demand." +Version 3.4.0 → 3.5.0. +- [x] RUNTIME (user, no TTY): plugin disable + uninstall caveman@caveman; mcp list check +- [x] PHASE 2: settings.json (2 hook blocks + enabledPlugins + marketplace); hooks/ files delete; .gitignore block; session-start.sh L134 +- [x] PHASE 3: install-plugins.sh STEP 5.5; update-all.sh block; plugins.lock.json; doctor.sh; lib/detect-plugins.sh; lib/profile.sh; plugin-advisor.md; skills/profile/SKILL.md +- [x] PHASE 4: README row; USAGE always-on line; CHANGELOG; CLAUDE.md cmd ref; skills/capitalize+prune-memory cmd refs; version.txt +- [x] PHASE 5: shellcheck clean (SC1091 info only); full diff reviewed → committed + merged to master diff --git a/.gitignore b/.gitignore index 52470d3..5d71cef 100644 --- a/.gitignore +++ b/.gitignore @@ -72,18 +72,6 @@ skills/find-skills # Staging area used by lib/toggle-external.sh when disabling a tool skills-disabled/ -# Caveman runtime hook files — deployed by caveman hooks/install.sh into -# ~/.claude/hooks/ (which is a symlink to this repo's hooks/), so they -# materialize here. They are user-scope state, not repo source. -hooks/caveman-activate.js -hooks/caveman-config.js -hooks/caveman-mode-tracker.js -hooks/caveman-stats.js -hooks/caveman-statusline.sh -hooks/package.json -hooks/package-lock.json -hooks/node_modules/ - # Local project config (per-machine, not shared) .claude/* !.claude/tasks/ @@ -95,9 +83,6 @@ hooks/node_modules/ .claude/agent-memory/ .claude/gstack/ -# Caveman compress backups — generated by /caveman:compress, recoverable via git -*.original.md - # Generated outputs graphify-out/ .ctx7-cache/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e81566..ef5e6a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,6 @@ Format follows [Keep a Changelog](https://keepachangelog.com/). - `frontend-design` and `design-motion-principles` skills (external marketplaces) - Project archetype library + detection for `/onboard` - `.claude/{tasks,memory,audits}/` governance layout + 5 memory registries (decisions, learnings, blockers, journal, evals) -- Caveman plugin + standalone hooks (output token compression) ### Changed - `/seo` split into parallel `seo` + `geo` agents with shared resources @@ -33,6 +32,7 @@ Format follows [Keep a Changelog](https://keepachangelog.com/). ### Removed - `disable-model-invocation` frontmatter removed repo-wide (aligns skills with CLAUDE.md routing) +- Caveman plugin always-on integration purged — plugin disabled + uninstalled; SessionStart/UserPromptSubmit hooks, standalone hook files, `install-plugins.sh` STEP 5.5, `update-all.sh` refresh step, `plugins.lock.json` entry, `doctor.sh` checks, and docs removed. On a subscription plan its ~75% output-token compression has no cost benefit, and the always-on hooks added friction on validation gates + client deliverables. The unrelated memory-registry terse-format convention is kept. ### Fixed - Numerous skill/agent fixes across darwin optimization rounds (geo-analyzer, onboard, init-project, analyzer, plugin-check, prune-memory, …) diff --git a/CLAUDE.md b/CLAUDE.md index 9eb3d50..0a78dec 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -104,8 +104,8 @@ quoted exact, IDs (BDR/LRN/BLK/EVAL-XXX) + dates unchanged. Pattern: `[thing] [action] [reason]. [next step].` Rationale: registries load every session — caveman cuts ~40% input tokens, zero substance loss. Applies to direct writes AND skill CAPITALIZE steps (close, ship-feature, -feat, bugfix, hotfix, commit-change). Existing entries: compress via -`/caveman-compress `. +feat, bugfix, hotfix, commit-change). Legacy entries (pre-format-rule): +compress manually or via claude.ai on demand. **Routing — what goes where:** - Choice with tradeoffs you'd defend → `decisions.md`. diff --git a/README.md b/README.md index 4111123..b6eda50 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,6 @@ ctx7 login # optional: OAuth / API key for higher rate limits | **Context7** | Plugin (toggle) | Fast-evolving libs doc lookup (Next.js, React, Prisma...). Requires a free account + API key (optional Context7 step in install). | [context7.com](https://context7.com/) | | **pr-review-toolkit** | Plugin (toggle) | Multi-agent PR review. | [anthropics/claude-code](https://github.com/anthropics/claude-code) | | **Graphify** | Python CLI | Codebase → knowledge graph → navigable wiki. Helps Claude map and search projects efficiently. | [pypi: graphifyy](https://pypi.org/project/graphifyy/) | -| **Caveman** | Plugin (always on) + hooks | Output token compression (~75%) via caveman-speak. Full install = plugin (`/caveman`, cavecrew, caveman-commit, caveman-review, caveman-stats) + standalone hooks (statusline + stats badge). The optional `caveman-shrink` MCP proxy compresses upstream-server prose — manual config required (it wraps another MCP server). See `install-plugins.sh` STEP 5.5 for the snippet. | [JuliusBrussee/caveman](https://github.com/JuliusBrussee/caveman) | Versions are pinned in `plugins.lock.json`. To update: edit the file, then re-run `install-plugins.sh`. diff --git a/USAGE.md b/USAGE.md index d7bcbf7..6c94a82 100644 --- a/USAGE.md +++ b/USAGE.md @@ -160,7 +160,7 @@ Tu veux... ## Les plugins — décision rapide ``` -Toujours actifs (0 token) : security-guidance, rtk, caveman +Toujours actifs (0 token) : security-guidance, rtk Design élaboré/system → ui-ux-pro-max ON Deploy + QA browser → gstack ON diff --git a/agents/plugin-advisor.md b/agents/plugin-advisor.md index 8829a61..1cfb09b 100644 --- a/agents/plugin-advisor.md +++ b/agents/plugin-advisor.md @@ -376,7 +376,7 @@ gstack + managed plugins — sessions stay focused and passive token cost drops. `profile set ` actually toggles plugins (`claude plugin enable|disable`) and MCPs (delegates to `lib/toggle-external.sh` for `magic`) — not just -advisory. Always-on plugins (`caveman`, `security-guidance`, `superpowers`) +advisory. Always-on plugins (`security-guidance`, `superpowers`) are protected. Managed plugins that `set` may toggle: `ui-ux-pro-max@ui-ux-pro-max-skill`, `plugin-dev@claude-code-plugins`, `pr-review-toolkit@claude-code-plugins`. Other plugins are never auto-toggled. diff --git a/doctor.sh b/doctor.sh index 87fa985..9f4138a 100644 --- a/doctor.sh +++ b/doctor.sh @@ -182,22 +182,6 @@ else info "Graphifyy not installed (optional — codebase knowledge graph: pipx install graphifyy)" fi -if detect_caveman; then - pass "Caveman plugin installed" - if detect_caveman_hooks; then - pass "Caveman standalone hooks (statusline + stats) installed" - else - warn "Caveman plugin OK but standalone hooks missing — re-run install-plugins.sh" - fi - if detect_caveman_shrink; then - pass "caveman-shrink MCP wrapper registered (custom upstream)" - else - info "caveman-shrink MCP not wrapped — manual setup (proxy, needs upstream): see install-plugins.sh STEP 5.5" - fi -else - info "Caveman not installed (optional — output compression ~75%: run install-plugins.sh)" -fi - echo "" # ──────────────────────────────────────────────────────────── @@ -263,7 +247,6 @@ if detect_gstack 2>/dev/null; then PLUGIN_TOKENS=$((PLUGIN_TOKENS + 2750)); if detect_uiux_pro_max 2>/dev/null; then PLUGIN_TOKENS=$((PLUGIN_TOKENS + 400)); fi if detect_context7 2>/dev/null; then PLUGIN_TOKENS=$((PLUGIN_TOKENS + 200)); fi if detect_graphifyy 2>/dev/null; then PLUGIN_TOKENS=$((PLUGIN_TOKENS + 300)); fi -if detect_caveman 2>/dev/null; then PLUGIN_TOKENS=$((PLUGIN_TOKENS + 300)); fi TOTAL_TOKENS=$((CLAUDE_MD_TOKENS + SKILL_DESC_TOKENS + PLUGIN_TOKENS)) SESSION_BUDGET=11000 diff --git a/hooks/session-start.sh b/hooks/session-start.sh index 9b07dec..016061b 100644 --- a/hooks/session-start.sh +++ b/hooks/session-start.sh @@ -131,7 +131,6 @@ ALWAYS_ON=() detect_rtk &>/dev/null && ALWAYS_ON+=("rtk") plugin_enabled "security-guidance@claude-code-plugins" && ALWAYS_ON+=("security-guidance") plugin_enabled "superpowers@superpowers-marketplace" && ALWAYS_ON+=("superpowers") -plugin_enabled "caveman@caveman" && ALWAYS_ON+=("caveman") ALWAYS_ON_STR="${ALWAYS_ON[*]:-none}" # Same 40-char-width split policy as the toggle row below — keeps the # right border aligned when 4 always-on plugins overflow the field. diff --git a/install-plugins.sh b/install-plugins.sh index 692cc59..e5f3161 100644 --- a/install-plugins.sh +++ b/install-plugins.sh @@ -372,7 +372,7 @@ install_plugin() { # copies the plugin into ~/.claude/plugins/cache — it does NOT register # it in settings.json's enabledPlugins map. Without an explicit enable, # the plugin sits dormant. Use this for plugins that should be ALWAYS ON -# (security-guidance, superpowers, caveman). Idempotent: skips if already +# (security-guidance, superpowers). Idempotent: skips if already # present in enabledPlugins. enable_plugin() { local name="$1" @@ -429,107 +429,11 @@ install_plugin "ui-ux-pro-max" "ui-ux-pro-max-skill" echo "" -# ============================================================ -# STEP 5.5 — CAVEMAN (full: plugin + standalone hooks + MCP shrink) -# ============================================================ -# Caveman compresses output tokens (~75%) via caveman-speak. The "full" -# install layers three things on top of each other: -# 1. Plugin — /caveman command, cavecrew subagents, mode tracker hooks -# 2. Hooks — statusline + stats badge written into ~/.claude/ -# 3. MCP shrink — caveman-shrink proxy that compresses tool input tokens -# Per-repo rule files (--with-init / --all) are skipped — they would litter -# this config repo with caveman-rules.md noise meant for project repos. -echo "── Step 5.5: Caveman (full: plugin + hooks + MCP shrink) ────" -echo "" - -info "Adding Caveman marketplace..." -claude plugin marketplace add JuliusBrussee/caveman 2>/dev/null || true -install_plugin "caveman" "caveman" -enable_plugin "caveman" "caveman" - -# Standalone hooks (statusline + stats badge). The plugin already wires -# SessionStart + UserPromptSubmit hooks from its own path; this installer -# adds the statusLine config and ~/.claude/hooks/caveman-stats.js that -# the plugin doesn't carry. -CAVEMAN_HOOKS_URL="https://raw.githubusercontent.com/JuliusBrussee/caveman/main/hooks/install.sh" -if [ -f "$HOME/.claude/hooks/caveman-statusline.sh" ] \ - && grep -q 'caveman-statusline' "$HOME/.claude/settings.json" 2>/dev/null; then - ok "Caveman standalone hooks already installed" -else - info "Installing Caveman standalone hooks (statusline + stats)..." - CAVEMAN_HOOKS_TMP="$(mktemp -t caveman-hooks-XXXXXX.sh)" - if curl -fsSL "$CAVEMAN_HOOKS_URL" -o "$CAVEMAN_HOOKS_TMP" \ - && bash "$CAVEMAN_HOOKS_TMP"; then - ok "Caveman hooks installed" - # Caveman's hooks installer hardcodes the absolute home path - # ($HOME/.claude/hooks/caveman-*.js) into settings.json. The repo's - # settings.json is symlinked to ~/.claude/settings.json — committing - # the absolute path would leak this user's username to every machine - # that clones the repo. Rewrite to portable ~/.claude/hooks/... form. - if [ -f "$HOME/.claude/settings.json" ] && command -v python3 &>/dev/null; then - python3 - "$HOME/.claude/settings.json" "$HOME" <<'PY' -import json, sys, re -path, home = sys.argv[1], sys.argv[2] -with open(path) as f: - data = json.load(f) -def rewrite(node): - if isinstance(node, dict): - for k, v in node.items(): - if k == "command" and isinstance(v, str) and "caveman" in v: - node[k] = re.sub(rf'"?{re.escape(home)}/.claude/hooks/(caveman-[^"\s]+)"?', - r'~/.claude/hooks/\1', v) - else: - rewrite(v) - elif isinstance(node, list): - for item in node: - rewrite(item) -rewrite(data) -with open(path, "w") as f: - json.dump(data, f, indent=2) -PY - ok "Caveman hook paths normalized to ~/.claude/hooks/... (portable)" - fi - else - err "Caveman hooks install failed — re-run manually: bash <(curl -fsSL $CAVEMAN_HOOKS_URL)" - fi - rm -f "$CAVEMAN_HOOKS_TMP" -fi - -# MCP shrink — caveman-shrink is a *proxy* that wraps an upstream MCP -# server and compresses prose fields in its responses. It cannot run -# standalone (it errors with "missing upstream command"). We don't auto- -# register it: the user must pick an upstream MCP server to wrap (e.g. -# the filesystem server, the GitHub server, …) and add a wrapped entry -# to ~/.claude.json manually. Print the snippet so they can copy-paste. -if claude mcp list 2>/dev/null | grep -q '^caveman-shrink-'; then - ok "caveman-shrink wrapper already registered (custom upstream)" -else - info "caveman-shrink MCP — manual setup needed (it's a proxy, needs an upstream):" - cat <<'EOF' - Add a wrapped MCP entry to ~/.claude.json under "mcpServers", e.g. - to compress filesystem-server responses: - - { - "mcpServers": { - "caveman-shrink-fs": { - "command": "npx", - "args": [ - "-y", "caveman-shrink", - "npx", "-y", "@modelcontextprotocol/server-filesystem", - "/path/to/dir" - ] - } - } - } - - Or via CLI (replace upstream with your target server): - claude mcp add caveman-shrink-fs --scope user -- \ - npx -y caveman-shrink npx -y @modelcontextprotocol/server-filesystem /path -EOF - warn "caveman-shrink not auto-registered (would fail health check without upstream)" -fi - -echo "" +# Caveman plugin removed (cleanup/caveman-always-on, v3.5.0): on a +# subscription plan its ~75% output-token compression has no cost benefit, +# and the plugin's always-on SessionStart/UserPromptSubmit hooks added +# friction on validation gates and client deliverables. The unrelated +# memory-registry terse-format convention (CLAUDE.md) is kept. # ============================================================ # STEP 6 — CONTEXT7 CLI (ctx7) @@ -782,7 +686,6 @@ echo " ALWAYS ON (installed at user scope):" echo " ✅ security-guidance — PreToolUse security hook (0 tokens) [claude-code-plugins]" echo " ✅ rtk — token compression hook (0 tokens)" echo " ✅ superpowers — brainstorm/plan/implement/debug workflow" -echo " ✅ caveman — output compression (~75%) + caveman-shrink MCP (input)" echo "" echo " TOGGLE (installed but start OFF — /plugin-check recommends when needed):" echo " 🔄 gstack — disabled by default (toggle: lib/toggle-external.sh enable gstack)" diff --git a/lib/detect-plugins.sh b/lib/detect-plugins.sh index 2b01159..7f0da36 100644 --- a/lib/detect-plugins.sh +++ b/lib/detect-plugins.sh @@ -66,12 +66,6 @@ detect_graphifyy() { command -v graphify &>/dev/null } -detect_caveman() { - # Caveman — output-token compression via caveman-speak (marketplace plugin) - local cache_dir="$HOME/.claude/plugins/cache" - [ -d "$cache_dir" ] && compgen -G "$cache_dir"/*caveman* &>/dev/null -} - # True if a plugin is registered as enabled in settings.json's # enabledPlugins map. Filesystem only (no subprocess to claude CLI). # Argument is the full "name@marketplace" key. @@ -81,19 +75,6 @@ plugin_enabled() { grep -qE "\"${key}\"[[:space:]]*:[[:space:]]*true" "$HOME/.claude/settings.json" } -detect_caveman_hooks() { - # Standalone hooks (statusline + stats) deployed by caveman hooks/install.sh - [ -f "$HOME/.claude/hooks/caveman-statusline.sh" ] -} - -detect_caveman_shrink() { - # caveman-shrink is a proxy — only valid when registered with an - # upstream wrapper (e.g. caveman-shrink-fs:, caveman-shrink-github:). - # Bare 'caveman-shrink:' fails health checks and is treated as missing. - command -v claude &>/dev/null \ - && claude mcp list 2>/dev/null | grep -q '^caveman-shrink-' -} - # --- Plan detection --- diff --git a/lib/profile.sh b/lib/profile.sh index e9140ab..aa8c141 100755 --- a/lib/profile.sh +++ b/lib/profile.sh @@ -15,7 +15,7 @@ # advisory otherwise # - CLIs: advisory only (rtk, gsd, ctx7, graphify — installed externally) # -# Always-on plugins (never toggled by `set`): caveman, security-guidance, +# Always-on plugins (never toggled by `set`): security-guidance, # superpowers + rtk hook + .claude internal. The script refuses to disable # anything in PROTECTED_PLUGINS. # @@ -49,7 +49,7 @@ TOGGLE_EXTERNAL="$REPO/lib/toggle-external.sh" ACTIVE_CACHE="$REPO/.active-profile" # statusline reads this — keep fast (single-line file, profile name only) # Plugins that are toggle-managed by `set`. Anything NOT in this list is -# never auto-disabled — protects always-on plugins (caveman, security-guidance, +# never auto-disabled — protects always-on plugins (security-guidance, # superpowers) and unrelated user plugins. Add a plugin here only when its # enabled state is meaningfully driven by task type. MANAGED_PLUGINS=( @@ -62,7 +62,6 @@ MANAGED_PLUGINS=( # they're not in the profile. (Defensive: belt-and-suspenders alongside # MANAGED_PLUGINS allowlist.) PROTECTED_PLUGINS=( - "caveman@caveman" "security-guidance@claude-code-plugins" "superpowers@superpowers-marketplace" ) diff --git a/plugins.lock.json b/plugins.lock.json index a205c5e..853fb7e 100644 --- a/plugins.lock.json +++ b/plugins.lock.json @@ -31,14 +31,5 @@ "path": "skills/emil-design-eng/SKILL.md", "managed_by": "curl", "note": "Emil Kowalski's design engineering skill — UI polish, animations, component craft. Downloaded to skills-external/emil-design-eng/, symlinked by link.sh." - }, - "caveman": { - "source": "https://github.com/JuliusBrussee/caveman", - "marketplace": "JuliusBrussee/caveman", - "plugin_ref": "caveman@caveman", - "managed_by": "claude plugin + standalone hooks installer + claude mcp", - "extras": ["hooks (statusline + stats)", "caveman-shrink MCP proxy"], - "version": "latest", - "note": "Caveman — ~75% output token compression via caveman-speak. Full install = plugin + standalone hooks (statusline + stats badge) + caveman-shrink MCP (input compression). Updates pull via 'claude plugin update'; hooks installer is idempotent." } } diff --git a/settings.json b/settings.json index 711f159..8ecbde7 100644 --- a/settings.json +++ b/settings.json @@ -195,16 +195,6 @@ "command": "bash ~/.claude/hooks/session-start.sh" } ] - }, - { - "hooks": [ - { - "type": "command", - "command": "node ~/.claude/hooks/caveman-activate.js", - "timeout": 5, - "statusMessage": "Loading caveman mode..." - } - ] } ], "PreToolUse": [ @@ -219,16 +209,6 @@ } ], "UserPromptSubmit": [ - { - "hooks": [ - { - "type": "command", - "command": "node ~/.claude/hooks/caveman-mode-tracker.js", - "timeout": 5, - "statusMessage": "Tracking caveman mode..." - } - ] - }, { "hooks": [ { @@ -248,7 +228,6 @@ "enabledPlugins": { "example-skills@anthropic-agent-skills": false, "ui-ux-pro-max@ui-ux-pro-max-skill": true, - "caveman@caveman": true, "security-guidance@claude-code-plugins": true, "superpowers@superpowers-marketplace": true, "pr-review-toolkit@claude-code-plugins": true @@ -277,12 +256,6 @@ "source": "github", "repo": "anthropics/skills" } - }, - "caveman": { - "source": { - "source": "github", - "repo": "JuliusBrussee/caveman" - } } }, "effortLevel": "xhigh", diff --git a/skills/profile/SKILL.md b/skills/profile/SKILL.md index e3c97f1..e9dae48 100644 --- a/skills/profile/SKILL.md +++ b/skills/profile/SKILL.md @@ -56,7 +56,7 @@ lists items + types: | `mcp` (other) | advisory — prints manual `claude mcp add …` command | | `cli` | advisory only — reports installed/not-installed | -**Always-on plugins** (`caveman`, `security-guidance`, `superpowers`) are +**Always-on plugins** (`security-guidance`, `superpowers`) are protected — `set` will refuse to disable them even if the profile omits them. **Managed plugins** that `set` may disable when not in profile: `ui-ux-pro-max@ui-ux-pro-max-skill`, `plugin-dev@claude-code-plugins`, diff --git a/skills/prune-memory/SKILL.md b/skills/prune-memory/SKILL.md index ceb8022..477d0f0 100644 --- a/skills/prune-memory/SKILL.md +++ b/skills/prune-memory/SKILL.md @@ -43,7 +43,6 @@ Operates on `.claude/memory/` in the current project (CWD). Curates the | When | Use | |------|-----| | Add new entry this session | `/close` | -| Token-compress one file (not curating) | `/caveman:compress ` | | Curate: obsolete + merge + caveman | `/prune-memory` (this skill) | ## STEP 0 — PRECHECK @@ -227,7 +226,7 @@ NEXT: review `git diff .claude/memory/`, then `/commit-change` | Merge produces an entry > 600 words | Re-split — merge was too greedy. Re-prompt user to keep separate. | | Index sanity FAILED at STEP 4 | Print exact missing/orphan IDs. Do NOT auto-fix — user re-runs or hand-edits. | | Caveman compression result < 20% of original AND original had code blocks | Revert that entry's compression — flag as needing manual rewrite (likely stripped technical detail). | -| Same file already compressed in same session (e.g. via `/caveman:compress`) | Skip C-category for that file; warn user that double-pass risks technical drift. | +| Same file already compressed in same session | Skip C-category for that file; warn user that double-pass risks technical drift. | ## Rules diff --git a/update-all.sh b/update-all.sh index 5fc4005..373568c 100644 --- a/update-all.sh +++ b/update-all.sh @@ -271,36 +271,6 @@ else info "design-motion-principles not installed — skipping" fi -# ── 7.4. Update Caveman (hooks + MCP shrink) ── -# Plugin updates are handled by the marketplace plugin update loop below -# (step 8). This step refreshes the standalone hook files (statusline + -# stats badge) that live outside the plugin in ~/.claude/hooks/. -echo "" -echo "── Updating Caveman extras (hooks + MCP shrink)..." -if [ -f "$HOME/.claude/hooks/caveman-statusline.sh" ]; then - CAVEMAN_HOOKS_URL="https://raw.githubusercontent.com/JuliusBrussee/caveman/main/hooks/install.sh" - CAVEMAN_HOOKS_TMP="$(mktemp -t caveman-hooks-XXXXXX.sh)" - if curl -fsSL "$CAVEMAN_HOOKS_URL" -o "$CAVEMAN_HOOKS_TMP" \ - && bash "$CAVEMAN_HOOKS_TMP" --force 2>/dev/null; then - ok "Caveman hooks refreshed" - else - warn "Caveman hooks refresh failed — re-run install-plugins.sh" - fi - rm -f "$CAVEMAN_HOOKS_TMP" -else - info "Caveman hooks not installed — skipping (run: make plugin)" -fi -# MCP shrink uses 'npx -y caveman-shrink' which always fetches latest from -# npm at invocation time — no explicit update needed. We only check for -# user-defined wrappers (caveman-shrink-*), since the bare proxy fails -# health checks without an upstream. -if command -v claude &>/dev/null \ - && claude mcp list 2>/dev/null | grep -q '^caveman-shrink-'; then - ok "caveman-shrink wrappers detected (auto-update via npx -y)" -else - info "caveman-shrink not wrapped — manual setup (see install-plugins.sh STEP 5.5)" -fi - # ── 7.5. Update external skills (npx skills) ── echo "" echo "── Updating external skills (npx skills)..." diff --git a/version.txt b/version.txt index 1809198..1545d96 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -3.4.0 +3.5.0