Thanks for helping raise dead codebases! 🧟 Issues, ideas, and PRs are all welcome.
- 🐛 Found a bug? Open an issue with the Bug Report template.
- 💡 Have an idea? Open an issue with the Feature Request template, or start a Discussion.
- 🛡️ Security issue? Don't open a public issue — see SECURITY.md.
- 🔧 Want to send a PR? Read on.
This repo is the plugin marketplace. It ships three plugins — the core plugin and two optional siblings:
plugins/lazarus/ # core plugin
├── .claude-plugin/plugin.json # manifest (NO version field — git SHA is the version)
├── skills/ # discover, repair, audit, audit-repair, gitalive, gitalive-repair
├── agents/repo-explorer.md # read-only Haiku exploration subagent
├── hooks/hooks.json # wires the guard as a PreToolUse hook (auto-loaded)
└── scripts/check-destructive.sh # the destructive-command guard
plugins/lazarus-github/ # optional sibling — files an audit's Top 10 as GitHub Issues
├── .claude-plugin/plugin.json
└── skills/issues/SKILL.md
plugins/lazarus-forge/ # optional sibling — pre-build design review for new skills/plugins
├── .claude-plugin/plugin.json
└── skills/design-review/SKILL.md
Sibling-plugin pattern. Anything outward-facing (filing GitHub Issues, posting to Slack, Linear/Jira) ships as a separate opt-in plugin in this same marketplace — never bundled into core — so the core install stays zero-config and a gh/API failure can't reach anyone who didn't opt in. lazarus-github was the first sibling; lazarus-forge the second.
- Clone and edit under
plugins/lazarus/. - Validate:
claude plugin validate ./plugins/lazarusandclaude plugin validate .(the only expected warning is "No version specified" — that's intentional). - Test the guard by piping a payload through it:
echo '{"tool_name":"Bash","tool_input":{"command":"terraform destroy"}}' \ | plugins/lazarus/scripts/check-destructive.sh # should exit 2 (deny) echo '{"tool_name":"Bash","tool_input":{"command":"npm test"}}' \ | plugins/lazarus/scripts/check-destructive.sh # should exit 0 (allow)
- Real install test (catches load-time errors that
validatemisses):claude plugin marketplace add ./. # from the repo root claude plugin install lazarus@cognitivecode claude plugin list # expect: Status ✔ enabled # cleanup: claude plugin uninstall lazarus@cognitivecode && claude plugin marketplace remove cognitivecode
CI runs the JSON checks, shellcheck, and the guard tests on every PR — run them locally first and you'll sail through.
- Keep the guard executable.
scripts/check-destructive.shmust staychmod +x(git mode100755) or it won't run after a clone. - Don't declare
"hooks"inplugin.json. The standardhooks/hooks.jsonis auto-loaded; declaring it again causes "Duplicate hooks file detected" and the plugin fails to load (yetvalidatestill passes — only a real install catches it). - A skill's directory name must match the
name:in itsSKILL.mdfrontmatter. - Don't add a
versionfield unless you intend to bump it on every change — Lazarus uses the git SHA as the version so every push auto-updates for users. - When extending the guard's blocklist, it's one regex (
PATTERN) incheck-destructive.sh. Add a matching test to.github/workflows/ci.yml.
- Branch from
main, keep changes focused, and describe what you changed and how you tested it (the PR template has a checklist). - Be kind — see our Code of Conduct.