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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3e8LaH2vymmxyh36h3jFU
This commit is contained in:
Bastien Chanot 2026-06-19 19:08:40 +02:00
parent 7403c658d2
commit d4a5cfec93
18 changed files with 29 additions and 234 deletions

View File

@ -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] 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] 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 - [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

15
.gitignore vendored
View File

@ -72,18 +72,6 @@ skills/find-skills
# Staging area used by lib/toggle-external.sh when disabling a tool # Staging area used by lib/toggle-external.sh when disabling a tool
skills-disabled/ 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) # Local project config (per-machine, not shared)
.claude/* .claude/*
!.claude/tasks/ !.claude/tasks/
@ -95,9 +83,6 @@ hooks/node_modules/
.claude/agent-memory/ .claude/agent-memory/
.claude/gstack/ .claude/gstack/
# Caveman compress backups — generated by /caveman:compress, recoverable via git
*.original.md
# Generated outputs # Generated outputs
graphify-out/ graphify-out/
.ctx7-cache/ .ctx7-cache/

View File

@ -21,7 +21,6 @@ Format follows [Keep a Changelog](https://keepachangelog.com/).
- `frontend-design` and `design-motion-principles` skills (external marketplaces) - `frontend-design` and `design-motion-principles` skills (external marketplaces)
- Project archetype library + detection for `/onboard` - Project archetype library + detection for `/onboard`
- `.claude/{tasks,memory,audits}/` governance layout + 5 memory registries (decisions, learnings, blockers, journal, evals) - `.claude/{tasks,memory,audits}/` governance layout + 5 memory registries (decisions, learnings, blockers, journal, evals)
- Caveman plugin + standalone hooks (output token compression)
### Changed ### Changed
- `/seo` split into parallel `seo` + `geo` agents with shared resources - `/seo` split into parallel `seo` + `geo` agents with shared resources
@ -33,6 +32,7 @@ Format follows [Keep a Changelog](https://keepachangelog.com/).
### Removed ### Removed
- `disable-model-invocation` frontmatter removed repo-wide (aligns skills with CLAUDE.md routing) - `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 ### Fixed
- Numerous skill/agent fixes across darwin optimization rounds (geo-analyzer, onboard, init-project, analyzer, plugin-check, prune-memory, …) - Numerous skill/agent fixes across darwin optimization rounds (geo-analyzer, onboard, init-project, analyzer, plugin-check, prune-memory, …)

View File

@ -104,8 +104,8 @@ quoted exact, IDs (BDR/LRN/BLK/EVAL-XXX) + dates unchanged. Pattern:
`[thing] [action] [reason]. [next step].` Rationale: registries load `[thing] [action] [reason]. [next step].` Rationale: registries load
every session — caveman cuts ~40% input tokens, zero substance loss. every session — caveman cuts ~40% input tokens, zero substance loss.
Applies to direct writes AND skill CAPITALIZE steps (close, ship-feature, Applies to direct writes AND skill CAPITALIZE steps (close, ship-feature,
feat, bugfix, hotfix, commit-change). Existing entries: compress via feat, bugfix, hotfix, commit-change). Legacy entries (pre-format-rule):
`/caveman-compress <file>`. compress manually or via claude.ai on demand.
**Routing — what goes where:** **Routing — what goes where:**
- Choice with tradeoffs you'd defend → `decisions.md`. - Choice with tradeoffs you'd defend → `decisions.md`.

View File

@ -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/) | | **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) | | **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/) | | **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`. Versions are pinned in `plugins.lock.json`. To update: edit the file, then re-run `install-plugins.sh`.

View File

@ -160,7 +160,7 @@ Tu veux...
## Les plugins — décision rapide ## 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 Design élaboré/system → ui-ux-pro-max ON
Deploy + QA browser → gstack ON Deploy + QA browser → gstack ON

View File

@ -376,7 +376,7 @@ gstack + managed plugins — sessions stay focused and passive token cost drops.
`profile set <name>` actually toggles plugins (`claude plugin enable|disable`) `profile set <name>` actually toggles plugins (`claude plugin enable|disable`)
and MCPs (delegates to `lib/toggle-external.sh` for `magic`) — not just 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: are protected. Managed plugins that `set` may toggle:
`ui-ux-pro-max@ui-ux-pro-max-skill`, `plugin-dev@claude-code-plugins`, `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. `pr-review-toolkit@claude-code-plugins`. Other plugins are never auto-toggled.

View File

@ -182,22 +182,6 @@ else
info "Graphifyy not installed (optional — codebase knowledge graph: pipx install graphifyy)" info "Graphifyy not installed (optional — codebase knowledge graph: pipx install graphifyy)"
fi 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 "" 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_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_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_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)) TOTAL_TOKENS=$((CLAUDE_MD_TOKENS + SKILL_DESC_TOKENS + PLUGIN_TOKENS))
SESSION_BUDGET=11000 SESSION_BUDGET=11000

View File

@ -131,7 +131,6 @@ ALWAYS_ON=()
detect_rtk &>/dev/null && ALWAYS_ON+=("rtk") detect_rtk &>/dev/null && ALWAYS_ON+=("rtk")
plugin_enabled "security-guidance@claude-code-plugins" && ALWAYS_ON+=("security-guidance") plugin_enabled "security-guidance@claude-code-plugins" && ALWAYS_ON+=("security-guidance")
plugin_enabled "superpowers@superpowers-marketplace" && ALWAYS_ON+=("superpowers") plugin_enabled "superpowers@superpowers-marketplace" && ALWAYS_ON+=("superpowers")
plugin_enabled "caveman@caveman" && ALWAYS_ON+=("caveman")
ALWAYS_ON_STR="${ALWAYS_ON[*]:-none}" ALWAYS_ON_STR="${ALWAYS_ON[*]:-none}"
# Same 40-char-width split policy as the toggle row below — keeps the # Same 40-char-width split policy as the toggle row below — keeps the
# right border aligned when 4 always-on plugins overflow the field. # right border aligned when 4 always-on plugins overflow the field.

View File

@ -372,7 +372,7 @@ install_plugin() {
# copies the plugin into ~/.claude/plugins/cache — it does NOT register # copies the plugin into ~/.claude/plugins/cache — it does NOT register
# it in settings.json's enabledPlugins map. Without an explicit enable, # it in settings.json's enabledPlugins map. Without an explicit enable,
# the plugin sits dormant. Use this for plugins that should be ALWAYS ON # 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. # present in enabledPlugins.
enable_plugin() { enable_plugin() {
local name="$1" local name="$1"
@ -429,107 +429,11 @@ install_plugin "ui-ux-pro-max" "ui-ux-pro-max-skill"
echo "" echo ""
# ============================================================ # Caveman plugin removed (cleanup/caveman-always-on, v3.5.0): on a
# STEP 5.5 — CAVEMAN (full: plugin + standalone hooks + MCP shrink) # subscription plan its ~75% output-token compression has no cost benefit,
# ============================================================ # and the plugin's always-on SessionStart/UserPromptSubmit hooks added
# Caveman compresses output tokens (~75%) via caveman-speak. The "full" # friction on validation gates and client deliverables. The unrelated
# install layers three things on top of each other: # memory-registry terse-format convention (CLAUDE.md) is kept.
# 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 ""
# ============================================================ # ============================================================
# STEP 6 — CONTEXT7 CLI (ctx7) # 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 " ✅ security-guidance — PreToolUse security hook (0 tokens) [claude-code-plugins]"
echo " ✅ rtk — token compression hook (0 tokens)" echo " ✅ rtk — token compression hook (0 tokens)"
echo " ✅ superpowers — brainstorm/plan/implement/debug workflow" echo " ✅ superpowers — brainstorm/plan/implement/debug workflow"
echo " ✅ caveman — output compression (~75%) + caveman-shrink MCP (input)"
echo "" echo ""
echo " TOGGLE (installed but start OFF — /plugin-check recommends when needed):" echo " TOGGLE (installed but start OFF — /plugin-check recommends when needed):"
echo " 🔄 gstack — disabled by default (toggle: lib/toggle-external.sh enable gstack)" echo " 🔄 gstack — disabled by default (toggle: lib/toggle-external.sh enable gstack)"

View File

@ -66,12 +66,6 @@ detect_graphifyy() {
command -v graphify &>/dev/null 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 # True if a plugin is registered as enabled in settings.json's
# enabledPlugins map. Filesystem only (no subprocess to claude CLI). # enabledPlugins map. Filesystem only (no subprocess to claude CLI).
# Argument is the full "name@marketplace" key. # Argument is the full "name@marketplace" key.
@ -81,19 +75,6 @@ plugin_enabled() {
grep -qE "\"${key}\"[[:space:]]*:[[:space:]]*true" "$HOME/.claude/settings.json" 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 --- # --- Plan detection ---

View File

@ -15,7 +15,7 @@
# advisory otherwise # advisory otherwise
# - CLIs: advisory only (rtk, gsd, ctx7, graphify — installed externally) # - 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 # superpowers + rtk hook + .claude internal. The script refuses to disable
# anything in PROTECTED_PLUGINS. # 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) 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 # 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 # superpowers) and unrelated user plugins. Add a plugin here only when its
# enabled state is meaningfully driven by task type. # enabled state is meaningfully driven by task type.
MANAGED_PLUGINS=( MANAGED_PLUGINS=(
@ -62,7 +62,6 @@ MANAGED_PLUGINS=(
# they're not in the profile. (Defensive: belt-and-suspenders alongside # they're not in the profile. (Defensive: belt-and-suspenders alongside
# MANAGED_PLUGINS allowlist.) # MANAGED_PLUGINS allowlist.)
PROTECTED_PLUGINS=( PROTECTED_PLUGINS=(
"caveman@caveman"
"security-guidance@claude-code-plugins" "security-guidance@claude-code-plugins"
"superpowers@superpowers-marketplace" "superpowers@superpowers-marketplace"
) )

View File

@ -31,14 +31,5 @@
"path": "skills/emil-design-eng/SKILL.md", "path": "skills/emil-design-eng/SKILL.md",
"managed_by": "curl", "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." "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."
} }
} }

View File

@ -195,16 +195,6 @@
"command": "bash ~/.claude/hooks/session-start.sh" "command": "bash ~/.claude/hooks/session-start.sh"
} }
] ]
},
{
"hooks": [
{
"type": "command",
"command": "node ~/.claude/hooks/caveman-activate.js",
"timeout": 5,
"statusMessage": "Loading caveman mode..."
}
]
} }
], ],
"PreToolUse": [ "PreToolUse": [
@ -219,16 +209,6 @@
} }
], ],
"UserPromptSubmit": [ "UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "node ~/.claude/hooks/caveman-mode-tracker.js",
"timeout": 5,
"statusMessage": "Tracking caveman mode..."
}
]
},
{ {
"hooks": [ "hooks": [
{ {
@ -248,7 +228,6 @@
"enabledPlugins": { "enabledPlugins": {
"example-skills@anthropic-agent-skills": false, "example-skills@anthropic-agent-skills": false,
"ui-ux-pro-max@ui-ux-pro-max-skill": true, "ui-ux-pro-max@ui-ux-pro-max-skill": true,
"caveman@caveman": true,
"security-guidance@claude-code-plugins": true, "security-guidance@claude-code-plugins": true,
"superpowers@superpowers-marketplace": true, "superpowers@superpowers-marketplace": true,
"pr-review-toolkit@claude-code-plugins": true "pr-review-toolkit@claude-code-plugins": true
@ -277,12 +256,6 @@
"source": "github", "source": "github",
"repo": "anthropics/skills" "repo": "anthropics/skills"
} }
},
"caveman": {
"source": {
"source": "github",
"repo": "JuliusBrussee/caveman"
}
} }
}, },
"effortLevel": "xhigh", "effortLevel": "xhigh",

View File

@ -56,7 +56,7 @@ lists items + types:
| `mcp` (other) | advisory — prints manual `claude mcp add …` command | | `mcp` (other) | advisory — prints manual `claude mcp add …` command |
| `cli` | advisory only — reports installed/not-installed | | `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. protected — `set` will refuse to disable them even if the profile omits them.
**Managed plugins** that `set` may disable when not in profile: **Managed plugins** that `set` may disable when not in profile:
`ui-ux-pro-max@ui-ux-pro-max-skill`, `plugin-dev@claude-code-plugins`, `ui-ux-pro-max@ui-ux-pro-max-skill`, `plugin-dev@claude-code-plugins`,

View File

@ -43,7 +43,6 @@ Operates on `.claude/memory/` in the current project (CWD). Curates the
| When | Use | | When | Use |
|------|-----| |------|-----|
| Add new entry this session | `/close` | | Add new entry this session | `/close` |
| Token-compress one file (not curating) | `/caveman:compress <file>` |
| Curate: obsolete + merge + caveman | `/prune-memory` (this skill) | | Curate: obsolete + merge + caveman | `/prune-memory` (this skill) |
## STEP 0 — PRECHECK ## 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. | | 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. | | 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). | | 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 ## Rules

View File

@ -271,36 +271,6 @@ else
info "design-motion-principles not installed — skipping" info "design-motion-principles not installed — skipping"
fi 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) ── # ── 7.5. Update external skills (npx skills) ──
echo "" echo ""
echo "── Updating external skills (npx skills)..." echo "── Updating external skills (npx skills)..."

View File

@ -1 +1 @@
3.4.0 3.5.0