feat(caveman): full install — plugin + standalone hooks + MCP scaffold
Wires JuliusBrussee/caveman into the always-on tier alongside
security-guidance and superpowers. Caveman compresses Claude's output
tokens (~75%) by speaking like a caveman while keeping technical
substance. Three layers:
1. Plugin (caveman@caveman, marketplace JuliusBrussee/caveman)
— adds /caveman, /caveman-commit, /caveman-review, /caveman-stats,
/caveman-help, /cavecrew, /compress + 3 cavecrew agents +
SessionStart/UserPromptSubmit hooks from the plugin path.
2. Standalone hooks (statusline + stats badge) deployed by
caveman's own hooks/install.sh into ~/.claude/hooks/. Paths in
settings.json normalized to ~/.claude/hooks/... so this user's
home dir doesn't leak across machines.
3. caveman-shrink MCP proxy — NOT auto-registered. The bare proxy
fails health checks because it requires an upstream MCP server
to wrap. install-plugins.sh STEP 5.5 prints a snippet showing how
to register a wrapped entry (e.g. caveman-shrink-fs) when the user
decides which upstream to compress.
New helper enable_plugin() for explicit always-on activation —
'claude plugin install' only copies into cache, doesn't write
enabledPlugins. Idempotent via Python json check.
doctor.sh adds detect_caveman / detect_caveman_hooks / detect_caveman_shrink
checks plus a 300t passive-cost adder. update-all.sh refreshes hook
files via the upstream installer's --force mode.
.gitignore covers caveman runtime files materialized into hooks/
because ~/.claude/hooks is symlinked to this repo.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
94b79d2ebb
commit
e4f4edc121
@@ -66,6 +66,34 @@ 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.
|
||||
plugin_enabled() {
|
||||
local key="$1"
|
||||
[ -f "$HOME/.claude/settings.json" ] || return 1
|
||||
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 ---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user