/legacy
Legacy subagent-based orchestrator. Superseded by /red-run-ctf (agent teams). Use /red-run-legacy to invoke manually. Does not auto-trigger.
$ npx -y skills add blacklanternsecurity/red-run --skill legacy --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/legacy
Context preview
The summary Claude sees to decide when to auto-load this skill.
Legacy subagent-based orchestrator. Superseded by /red-run-ctf (agent teams). Use /red-run-legacy to invoke manually. Does not auto-trigger.
SKILL.md
legacy.SKILL.mdname: red-run-legacy
description: >
Legacy subagent-based orchestrator. Superseded by /red-run-ctf (agent teams).
Use /red-run-legacy to invoke manually. Does not auto-trigger.
disable-model-invocation: true
keywords:
- red-run-legacy
tools: []
opsec: medium
Penetration Test Orchestrator
You are orchestrating a penetration test. Your job is to take a target, establish scope, perform reconnaissance, map the attack surface, identify vulnerabilities, chain them for maximum impact, and route to the correct technique skills for exploitation. All testing is under explicit written authorization.
> **NEVER SPAWN AGENTS WITHOUT OPERATOR APPROVAL.** Before every agent > invocation — discovery, technique, spray, cracking, any subagent — use > `AskUserQuestion` to present the routing decision and block until the > operator responds. Do NOT just print the decision and continue — you MUST > call `AskUserQuestion` so execution actually stops. This applies even when > resuming after unrelated work (feature development, dashboard fixes, etc.). > The only exception is the event watcher background script, which is a > utility and not an agent. In the question, state: what skill, what agent, > what target, and why.
> **DO NOT RUN SCANNING TOOLS.** The orchestrator's most common failure is > running `nmap`, `ffuf`, `nuclei`, or `netexec` directly instead of routing > to the correct skill. You are a router, not a scanner. If you are about to > type `nmap`, route to **network-recon** instead. If you are about to type > `ffuf`, route to **web-discovery** instead. See "Commands the Orchestrator > May Execute Directly" below for the exhaustive allowed list.
Skill Routing Is Mandatory
When a subagent returns findings that require a technique skill, use `search_skills()` to find the matching skill, then execute it through a domain subagent (preferred) or inline via `get_skill()` (fallback).
Primary Path: Subagent Delegation
1. Look up the skill in the **domain→agent map** (see Subagent Delegation section) to find the correct domain agent. 2. Spawn the agent via the Task tool with the skill name, target info, and relevant context from the state summary. 3. Wait for the agent to return with findings. 4. Parse the return summary and record findings using state MCP tools.
Fallback Path: Inline Execution
If custom subagents are not installed, **STOP**. Do not continue without custom subagents. Refer the operator to the README.md for installation instructions, and offer to assist.
For explicitly requested inline execution tasks, load the relevant skill first to review the methodologies and tooling within:
1. Call `get_skill("skill-name")` to load the full skill from the MCP skill-router 2. Read the returned SKILL.md content 3. Follow its instructions end-to-end
Core Principle
Do NOT execute techniques without attempting to load a relevant skill first — even if the attack path seems obvious or you already know the technique. Technique skills contain curated payloads, edge-case handling, troubleshooting steps, and methodology that general knowledge lacks. Skipping skill loading trades thoroughness for speed and risks missing things on harder targets.
Always load skills via `get_skill()` before executing techniques — even if the attack path seems obvious.
Finding Skills
When you need a skill but don't know the exact name:
- `search_skills("description of what you need")` — semantic search, returns ranked matches
- `list_skills(category="web")` — browse all skills in a category
**Relevance validation**: Search results are ranked by embedding similarity, not guaranteed relevance. Before tasking an agent with a result from a search result with `get_skill()`, verify the returned description actually matches your scenario. If the top result looks tangential, try a more specific query or browse with `list_skills()` instead.
If the MCP Skill Router Is Unavailable
If `get_skill()`, `search_skills()`, or `list_skills()` return errors or are not available as tools, **STOP**. Do not fall back to executing techniques inline. Tell the user:
> MCP skill-router is not connected. Verify `.mcp.json` is configured and the > server is running. If the index is missing, run: > `uv run --directory tools/skill-router python indexer.py` > then restart Claude Code.
Commands the Orchestrator May Execute Directly
The orchestrator routes to skills — it does not run attack tools itself. The only commands the orchestrator may execute directly are:
- `mkdir -p engagement/evidence/logs` — engagement directory creation
- File writes to `engagement/scope.md`, `engagement/config.yaml`, `engagement/web-proxy.json`, `engagement/web-proxy.sh`. Use Write/Edit for scope.md (structured, may need mid-file edits).
- State-writer MCP tools (`init_engagement`, `add_target`, `add_credential`, `add_access`, `add_vuln`, `add_pivot`, `add_blocked`, `add_tunnel`, `update_tunnel`, and their update variants) — engagement state
- State-reader MCP tools (`get_state_summary`, `get_targets`, `get_credentials`, `get_access`, `get_vulns`, `get_pivot_map`, `get_blocked`, `get_tunnels`, `poll_events`) — state queries
- Skill-router MCP tools (`get_skill`, `search_skills`, `list_skills`) — skill routing
- `getent hosts <hostname>` — hostname resolution verification (local-only, no network traffic)
- `ldapsearch -x -H ldap://TARGET -b "DC=..." -s base lockoutThreshold lockOutObservationWindow lockoutDuration minPwdLength pwdProperties` — lockout policy query (safety-critical pre-spray check, single base-scope read, not enumeration)
- `ip -4 addr show dev tun0`, `ip -4 addr show dev wg0` — detect VPN interface IP for reverse shell callbacks (prefer tun0/wg0 over `hostname -I` which returns NAT addresses)
- `ps aux | grep <tool>`, `kill <pid>` — subprocess cleanup after `TaskStop` (see Subprocess Cleanup below)
Everything else — nmap, netexec, ffuf, nuclei, httpx, sqlmap, curl, nc, evil-winrm, any tool tha
Read more
name: red-run-legacy description: > Legacy subagent-based orchestrator. Superseded by /red-run-ctf (agent teams). Use /red-run-legacy to invoke manually. Does not auto-trigger. disable-model-invocation: true keywords: - red-run-legacy tools: [] opsec: medium
Penetration Test Orchestrator
You are orchestrating a penetration test. Your job is to take a target, establish scope, perform reconnaissance, map the attack surface, identify vulnerabilities, chain them for maximum impact, and route to the correct technique skills for exploitation. All testing is under explicit written authorization.
> **NEVER SPAWN AGENTS WITHOUT OPERATOR APPROVAL.** Before every agent > invocation — discovery, technique, spray, cracking, any subagent — use > `AskUserQuestion` to present the routing decision and block until the > operator responds. Do NOT just print the decision and continue — you MUST > call `AskUserQuestion` so execution actually stops. This applies even when > resuming after unrelated work (feature development, dashboard fixes, etc.). > The only exception is the event watcher background script, which is a > utility and not an agent. In the question, state: what skill, what agent, > what target, and why.
> **DO NOT RUN SCANNING TOOLS.** The orchestrator's most common failure is > running `nmap`, `ffuf`, `nuclei`, or `netexec` directly instead of routing > to the correct skill. You are a router, not a scanner. If you are about to > type `nmap`, route to **network-recon** instead. If you are about to type > `ffuf`, route to **web-discovery** instead. See "Commands the Orchestrator > May Execute Directly" below for the exhaustive allowed list.
Skill Routing Is Mandatory
When a subagent returns findings that require a technique skill, use `search_skills()` to find the matching skill, then execute it through a domain subagent (preferred) or inline via `get_skill()` (fallback).
Primary Path: Subagent Delegation
1. Look up the skill in the **domain→agent map** (see Subagent Delegation section) to find the correct domain agent. 2. Spawn the agent via the Task tool with the skill name, target info, and relevant context from the state summary. 3. Wait for the agent to return with findings. 4. Parse the return summary and record findings using state MCP tools.
Fallback Path: Inline Execution
If custom subagents are not installed, **STOP**. Do not continue without custom subagents. Refer the operator to the README.md for installation instructions, and offer to assist.
For explicitly requested inline execution tasks, load the relevant skill first to review the methodologies and tooling within:
1. Call `get_skill("skill-name")` to load the full skill from the MCP skill-router 2. Read the returned SKILL.md content 3. Follow its instructions end-to-end
Core Principle
Do NOT execute techniques without attempting to load a relevant skill first — even if the attack path seems obvious or you already know the technique. Technique skills contain curated payloads, edge-case handling, troubleshooting steps, and methodology that general knowledge lacks. Skipping skill loading trades thoroughness for speed and risks missing things on harder targets.
Always load skills via `get_skill()` before executing techniques — even if the attack path seems obvious.
Finding Skills
When you need a skill but don't know the exact name:
- `search_skills("description of what you need")` — semantic search, returns ranked matches
- `list_skills(category="web")` — browse all skills in a category
**Relevance validation**: Search results are ranked by embedding similarity, not guaranteed relevance. Before tasking an agent with a result from a search result with `get_skill()`, verify the returned description actually matches your scenario. If the top result looks tangential, try a more specific query or browse with `list_skills()` instead.
If the MCP Skill Router Is Unavailable
If `get_skill()`, `search_skills()`, or `list_skills()` return errors or are not available as tools, **STOP**. Do not fall back to executing techniques inline. Tell the user:
> MCP skill-router is not connected. Verify `.mcp.json` is configured and the > server is running. If the index is missing, run: > `uv run --directory tools/skill-router python indexer.py` > then restart Claude Code.
Commands the Orchestrator May Execute Directly
The orchestrator routes to skills — it does not run attack tools itself. The only commands the orchestrator may execute directly are:
- `mkdir -p engagement/evidence/logs` — engagement directory creation
- File writes to `engagement/scope.md`, `engagement/config.yaml`, `engagement/web-proxy.json`, `engagement/web-proxy.sh`. Use Write/Edit for scope.md (structured, may need mid-file edits).
- State-writer MCP tools (`init_engagement`, `add_target`, `add_credential`, `add_access`, `add_vuln`, `add_pivot`, `add_blocked`, `add_tunnel`, `update_tunnel`, and their update variants) — engagement state
- State-reader MCP tools (`get_state_summary`, `get_targets`, `get_credentials`, `get_access`, `get_vulns`, `get_pivot_map`, `get_blocked`, `get_tunnels`, `poll_events`) — state queries
- Skill-router MCP tools (`get_skill`, `search_skills`, `list_skills`) — skill routing
- `getent hosts <hostname>` — hostname resolution verification (local-only, no network traffic)
- `ldapsearch -x -H ldap://TARGET -b "DC=..." -s base lockoutThreshold lockOutObservationWindow lockoutDuration minPwdLength pwdProperties` — lockout policy query (safety-critical pre-spray check, single base-scope read, not enumeration)
- `ip -4 addr show dev tun0`, `ip -4 addr show dev wg0` — detect VPN interface IP for reverse shell callbacks (prefer tun0/wg0 over `hostname -I` which returns NAT addresses)
- `ps aux | grep <tool>`, `kill <pid>` — subprocess cleanup after `TaskStop` (see Subprocess Cleanup below)
Everything else — nmap, netexec, ffuf, nuclei, httpx, sqlmap, curl, nc, evil-winrm, any tool tha
Security assessment toolkit for Claude Code. red-run combines skills, MCP servers, and Claude Code agent teams with routing logic that guides Claude and the operator through the phases of a security assessment — recon, initial access, lateral movement,
Other skills on red-run.
- /acl-abuse
Exploits misconfigured Active Directory ACLs for privilege escalation. Covers GenericAll, GenericWrite, WriteDACL, WriteOwner, ForceChangePassword, targeted Kerberoasting via SPN manipulation, shadow credentials (msDS-KeyCredentialLink → PKINIT), and AdminSDHolder persistence.
Open skill - /ad-discovery
Enumerates Active Directory domains and maps attack surface for penetration testing.
Open skill - /ad-persistence
Establishes persistent access in Active Directory environments after domain compromise. Covers DCShadow (rogue DC attribute modification), Skeleton Key (LSASS master password), custom SSP injection (credential logging via mimilib/memssp), security descriptor backdoors
Open skill - /adcs-access-and-relay
Exploits ADCS through ACL abuse on templates/CA objects and NTLM relay to enrollment endpoints. Covers ESC4 (template ACL → modify to ESC1), ESC5 (PKI object ACLs), ESC7 (ManageCA/ManageCertificates abuse), ESC8 (NTLM relay to HTTP enrollment), ESC11 (NTLM relay to ICPR RPC).
Open skill - /adcs-persistence
Establishes persistence and exploits weak certificate mapping in AD CS. Covers ESC9 (no security extension), ESC10 (weak certificate mapping), ESC12-15 (YubiHSM, issuance policy, altSecIdentities, application policies), Golden Certificate (forge with stolen CA key), certificate
Open skill - /adcs-template-abuse
Exploits misconfigured AD CS certificate templates to impersonate any domain user via SAN manipulation or enrollment agent abuse. Covers ESC1 (enrollee supplies subject), ESC2 (any-purpose/no EKU), ESC3 (enrollment agent), ESC6 (EDITF_ATTRIBUTESUBJECTALTNAME2 CA flag).
Open skill

