main
audit-code install-tools.sh:
- Buffer the opengrep release JSON before grep -m1; curl died with (23)
under pipefail when grep quit early.
- Use ${m}: in the PowerShell block; $m: parsed as a scope-qualified var.
- On Arch, skip paru/yay when pacman -Q shows every package installed,
since --needed still invokes sudo.
- Add --check-only (fast, installs nothing, non-zero naming missing tools)
and --user-only (no system package managers, no sudo).
log-run.py (both skills): put the skill dir on sys.path so running it as
a script from any cwd no longer raises ModuleNotFoundError.
audit-terraform: move deps from requirements.txt into pyproject
dependency groups and add scripts/install-tools.sh (uv sync --group tools,
then check trivy, tflint, tofu, terragrunt, gh).
Both SKILL.md files gain a 0.5 Preflight step and call scripts through
uv run --project ${SKILL_DIR}. tools_unavailable is now a map of tool to
exact install command; audit-terraform skips trivy when absent and stops
with an install hint instead of crashing when tofu/terragrunt is missing.
mroberts — Claude Code plugin marketplace
Personal marketplace hosting multiple Claude Code plugins.
Install
claude plugin marketplace add ssh://[email protected]/mroberts/claude-plugin.git
claude plugin install guards@mroberts
Layout
.claude-plugin/marketplace.json # index — every plugin must be listed here
plugins/
guards/
.claude-plugin/plugin.json
hooks/hooks.json
hooks/bash-guard.mjs
Adding a plugin
mkdir -p plugins/<name>/.claude-plugin- Write
plugins/<name>/.claude-plugin/plugin.jsonwithname,version,description. - Add components:
hooks/hooks.json,commands/,agents/,skills/as needed. - Append an entry to
plugins[]in.claude-plugin/marketplace.json:
{ "name": "<name>", "source": "./plugins/<name>", "description": "...", "category": "productivity" }
A plugin absent from plugins[] is not installable, regardless of its directory.
- Push, then
claude plugin marketplace update mroberts.
Plugins
| Plugin | Purpose |
|---|---|
guards |
Enforces the hard constraints in ~/.claude/CLAUDE.md — jj-only VCS, no Claude attribution, build+test gate before push/tag, secret scrubbing on writes. |
Note on guards
hooks/bash-guard.mjs is referenced via ${CLAUDE_PLUGIN_ROOT} and travels with the
plugin. shush is referenced by absolute path (/home/mroberts/.local/bin/shush)
because it is a separately installed binary, not a repo file — that path is
machine-specific and will need changing on another host.
Languages
Python
91.6%
JavaScript
5.6%
Shell
2.8%