Help us improve
Share bugs, ideas, or general feedback.
From cybersec-toolkit
Generates boilerplate for a new module file in modules/, including array prefix, install function, and integration with install.sh, profiles, and MCP server.
npx claudepluginhub 26zl/cybersec-toolkit --plugin cybersec-toolkitHow this skill is triggered — by the user, by Claude, or both
Slash command
/cybersec-toolkit:module-scaffoldThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Adding a module is more invasive than adding a tool — it requires edits in several places.
Walks through adding a new cybersecurity tool to the installer: selecting the module, choosing an install method, editing config files, and running validators.
Plans, ideates, scaffolds, and validates BMad modules from ideas to installable packages with setup skills and structural checks.
Scaffold a new Marko Composer package with composer.json, namespaced src/, Pest tests, and optional module.php.
Share bugs, ideas, or general feedback.
Adding a module is more invasive than adding a tool — it requires edits in several places.
Pick a short module name and a SCREAMING_SNAKE prefix. Examples already used:
misc/MISC, networking/NET, recon/RECON, web/WEB, crypto/CRYPTO, pwn/PWN, reversing/RE, forensics/FORENSICS, enterprise/ENTERPRISE, wireless/WIRELESS, cracking/CRACKING, stego/STEGO, cloud/CLOUD, containers/CONTAINER, blueteam/BLUETEAM, mobile/MOBILE, blockchain/BLOCKCHAIN, llm/LLM.
modules/<name>.shTemplate:
#!/usr/bin/env bash
# Module: <name>
# Description: <one-line description>
# shellcheck disable=SC2034
<PREFIX>_PACKAGES=()
# shellcheck disable=SC2034
<PREFIX>_PIPX=()
# shellcheck disable=SC2034
<PREFIX>_GO=()
# shellcheck disable=SC2034
<PREFIX>_GO_BINS=()
# shellcheck disable=SC2034
<PREFIX>_CARGO=()
# shellcheck disable=SC2034
<PREFIX>_GEMS=()
# shellcheck disable=SC2034
<PREFIX>_GIT=()
# shellcheck disable=SC2034
<PREFIX>_GIT_NAMES=()
install_module_<name>() {
log_info "Installing <name> module..."
install_apt_packages "${<PREFIX>_PACKAGES[@]}"
install_pipx_packages "${<PREFIX>_PIPX[@]}"
install_go_packages "${<PREFIX>_GO[@]}"
install_cargo_packages "${<PREFIX>_CARGO[@]}"
install_gem_packages "${<PREFIX>_GEMS[@]}"
install_git_repos "${<PREFIX>_GIT[@]}"
log_success "<name> module install complete"
}
Mark executable: chmod +x modules/<name>.sh.
lib/common.sh → ALL_MODULESAppend the new module name to the ALL_MODULES array.
lib/common.sh → MODULE_DESCRIPTIONSAdd a one-line description (mirrored to MCP).
install.shinstall.sh sources modules conditionally — verify the dispatcher case statement covers <name>. Most installers iterate ALL_MODULES so no change needed.
In mcp_server/tools_db.py:
MODULE_DESCRIPTIONS = {
...
"<name>": "<same description as common.sh>",
}
Run python3 scripts/validate_mcp_sync.py after.
A module with empty arrays is dead code. Use the add-tool skill to add ≥1 tool before merging.
If the module deserves its own profile (e.g., myprofile.conf):
# profiles/<name>.conf
PROFILE_DESC="..."
MODULES="misc <name>"
SKIP_HEAVY=0
ENABLE_DOCKER=1
INCLUDE_C2=0
Profile validator (scripts/validate_profiles.sh / CI job) checks every name in MODULES= against ALL_MODULES.
Use the validate-all skill — must show zero errors before merging.