Skip to content
Back to skills

Module Scaffold

ASecurity

Use when creating a brand new module file in modules/ for a new tool category. Generates the boilerplate with correct array prefix, install_module_<name>() function, and ensures it integrates with install.sh, profiles, and MCP server. Triggers on "new module", "add a module for X", "scaffold module".

  • 65 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added June 3, 2026
ai-agentspythonrustgorubyshellbashdockergit

Works with

  • mcp

Security analysis

A100/100

Scanned October 1, 2026

npx -y skills add 26zl/cybersec-toolkit --skill module-scaffold --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Module Scaffold?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Module Scaffold
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/26zl-module-scaffold/badge)](https://www.skillsdirectory.com/skills/26zl-module-scaffold)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: module-scaffold
description: Use when creating a brand new module file in modules/ for a new tool category. Generates the boilerplate with correct array prefix, install_module_<name>() function, and ensures it integrates with install.sh, profiles, and MCP server. Triggers on "new module", "add a module for X", "scaffold module".
---

# Scaffold a new module

Adding a module is more invasive than adding a tool — it requires edits in several places.

## 1. Choose name + prefix

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`.

## 2. Create `modules/<name>.sh`

Template:

Mirror an existing module such as `modules/stego.sh`:

```bash
#!/bin/bash
# shellcheck disable=SC2034  # Arrays are consumed by scripts that source this module
# Module: <Title>
# <one-line description>

<PREFIX>_PACKAGES=()
<PREFIX>_PIPX=()
<PREFIX>_GO=()                # "module/path@latest" entries
<PREFIX>_GO_BINS=()           # binary name per <PREFIX>_GO entry
<PREFIX>_CARGO=()
<PREFIX>_GEMS=()
<PREFIX>_GIT=()               # "name=https://github.com/owner/repo.git" entries
<PREFIX>_GIT_NAMES=()         # the names from <PREFIX>_GIT

install_module_<name>() {
    install_apt_batch "<Title> - Packages" "${<PREFIX>_PACKAGES[@]}"
    install_pipx_batch "<Title> - Python" "${<PREFIX>_PIPX[@]}"
    install_go_batch "<Title> - Go" "${<PREFIX>_GO[@]}"
    install_cargo_batch "<Title> - Rust" "${<PREFIX>_CARGO[@]}"
    install_gem_batch "<Title> - Ruby" "${<PREFIX>_GEMS[@]}"
    install_git_batch "<Title> - Git" "${<PREFIX>_GIT[@]}"
}
```

Binary releases go in `BINARY_RELEASES_<MODULE>` in `lib/installers.sh`, installed with
`install_binary_releases "${BINARY_RELEASES_<MODULE>[@]}"`.

Mark executable: `chmod +x modules/<name>.sh`.

## 3. Register the module

### `lib/common.sh` → `ALL_MODULES`

Append the new module name to the `ALL_MODULES` array.

### `lib/common.sh` → `MODULE_DESCRIPTIONS`

Add a one-line description (mirrored to MCP).

### `install.sh`

`install.sh` sources modules conditionally — verify the dispatcher case statement covers `<name>`. Most installers iterate `ALL_MODULES` so no change needed.

## 4. Mirror to MCP server

In `mcp_server/tools_db.py`:

```python
MODULE_DESCRIPTIONS = {
    ...
    "<name>": "<same description as common.sh>",
}
```

Run `python3 scripts/validate_mcp_sync.py` after.

## 5. Add at least one tool

A module with empty arrays is dead code. Use the `add-tool` skill to add ≥1 tool before merging.

## 6. Add a profile (optional)

If the module deserves its own profile (e.g., `myprofile.conf`):

```ini
# Profile: <one-line description>
MODULES="misc <name>"
SKIP_HEAVY=true
ENABLE_DOCKER=false
INCLUDE_C2=false
```

The first-line `# Profile:` header is the description, and the flags must be `true`/`false`.
Mirror the profile in `mcp_server/profiles.py` (`PROFILES`), then run
`bash scripts/validate_profiles.sh` and `python3 scripts/validate_mcp_sync.py`.

## 7. Validate

Use the `validate-all` skill — must show zero errors before merging.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…