mirror of
https://github.com/JuliusBrussee/caveman.git
synced 2026-08-11 13:21:09 +02:00
Marketplace fix (#712, #705): Claude Desktop rejects plugins containing a top-level bin/ directory, and .claude-plugin/marketplace.json packages the repo root, so the installer directory is now cli/. Every reference updated (package.json bin entry + files, shims, docs, tests, caveman-init require path). Supersedes PR #726. Security (PR #717 verified): quoteWinArg only quoted on whitespace/quotes, leaving cmd.exe metacharacters (& | ^ < > % parens) unescaped on the shell:true Windows spawn path. Attacker-influenced arguments (--with-init cwd, --with-mcp-shrink value) could chain commands. Trigger regex now covers the metacharacter set; quoting logic split into a platform- independent, unit-tested helper. Also: - uninstall removes .caveman-active.prev, .caveman-mode-log.jsonl, .caveman-statusline-suffix, .caveman-nudge-shown; keeps .caveman-history.jsonl with a printed note; dry-run now says 'would remove' instead of lying (#635, supersedes PRs #693 #636) - Array.isArray guard in rewriteLegacyManagedHookCommands — malformed hook event no longer crashes the installer mid-run (supersedes PR #646) - gemini extensions install --consent: the security prompt hung every piped/non-interactive install forever (#676, part of PR #664) - OpenClaw skill stamps the real PINNED_REF version instead of hardcoded 1.0.0; new --no-always flag for load-on-demand installs (supersedes PR #720) - shims scope NPM_CONFIG_ALLOW_GIT=all to the npx call — npm >=12 defaults allow-git to none and EALLOWGITs github: installs (#698) - .codex/config.toml ships hooks + codex_hooks keys so auto-activation works on both sides of the codex-cli rename (#617) - caveman-help card shows the Windows config path (%APPDATA%) (#723) - caveman-parse.js added to HOOK_FILES, opencode payload (.cjs), and the regenerated checksums.sha256; manifest now matches shipped hook contents — release must bump PINNED_REF to a tag containing these files Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016ySX6TBWZuvFze4ajf7Hpf
60 lines
2.8 KiB
Markdown
60 lines
2.8 KiB
Markdown
# Windows install fallback
|
|
|
|
If `irm https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.ps1 | iex` fails on Windows (issues #249, #199, #72), set up plugin-skill activation by hand. This does **not** install the standalone hooks or the statusline — for those, run the unified Node installer afterwards: `npx -y github:JuliusBrussee/caveman -- --only claude` (or `node cli/install.js --only claude` from a clone).
|
|
|
|
```powershell
|
|
$ClaudeDir = if ($env:CLAUDE_CONFIG_DIR) { $env:CLAUDE_CONFIG_DIR } else { Join-Path $HOME ".claude" }
|
|
$PluginSkillDir = Join-Path $ClaudeDir ".agents\plugins\caveman\skills\caveman"
|
|
$MarketplaceDir = Join-Path $ClaudeDir ".agents\plugins"
|
|
$MarketplaceFile = Join-Path $MarketplaceDir "marketplace.json"
|
|
|
|
# Copy SKILL.md into the plugin path (run from a clone of the repo)
|
|
New-Item -ItemType Directory -Path $PluginSkillDir -Force | Out-Null
|
|
Copy-Item ".\skills\caveman\SKILL.md" "$PluginSkillDir\SKILL.md" -Force
|
|
|
|
# Create or update marketplace.json with the caveman entry
|
|
New-Item -ItemType Directory -Path $MarketplaceDir -Force | Out-Null
|
|
if (Test-Path $MarketplaceFile) {
|
|
$marketplace = Get-Content $MarketplaceFile -Raw | ConvertFrom-Json
|
|
} else {
|
|
$marketplace = [pscustomobject]@{}
|
|
}
|
|
if (-not ($marketplace.PSObject.Properties.Name -contains "plugins")) {
|
|
$marketplace | Add-Member -NotePropertyName plugins -NotePropertyValue ([pscustomobject]@{})
|
|
}
|
|
$plugins = [ordered]@{}
|
|
foreach ($p in $marketplace.plugins.PSObject.Properties) { $plugins[$p.Name] = $p.Value }
|
|
$plugins["caveman"] = [ordered]@{ name = "caveman"; source = "JuliusBrussee/caveman"; version = "main" }
|
|
$marketplace.plugins = [pscustomobject]$plugins
|
|
$marketplace | ConvertTo-Json -Depth 10 | Set-Content -Path $MarketplaceFile -Encoding UTF8
|
|
```
|
|
|
|
Verify: `Test-Path "$PluginSkillDir\SKILL.md"` should print `True`. Restart Claude Code, then run `/caveman` to confirm the skill loads.
|
|
|
|
## Codex on Windows
|
|
|
|
1. Enable symlinks first: `git config --global core.symlinks true` (requires Developer Mode or admin).
|
|
2. Clone repo → Open VS Code → Codex Settings → Plugins → find "Caveman" under the local marketplace → Install → Reload Window.
|
|
3. Codex hooks are currently disabled on Windows, so use `$caveman` to start the mode manually each session.
|
|
|
|
## `npx skills` symlink fallback
|
|
|
|
`npx skills` uses symlinks by default. If symlinks fail, add `--copy`:
|
|
|
|
```powershell
|
|
npx skills add JuliusBrussee/caveman --copy
|
|
```
|
|
|
|
## Want it always on (any agent)?
|
|
|
|
Paste this into the agent's system prompt or rules file:
|
|
|
|
```
|
|
Terse like caveman. Technical substance exact. Only fluff die.
|
|
Drop: articles, filler (just/really/basically), pleasantries, hedging.
|
|
Fragments OK. Short synonyms. Code unchanged.
|
|
Pattern: [thing] [action] [reason]. [next step].
|
|
ACTIVE EVERY RESPONSE. No revert after many turns. No filler drift.
|
|
Code/commits/PRs: normal. Off: "stop caveman" / "normal mode".
|
|
```
|