# Redteamlead

> On-demand senior red-team lead advisor. Call at a decision point or obstacle to get wiki-grounded direction instead of hammering blindly. Dispatches a fresh RTL subagent that reads the engagement state + evidence + wiki and returns ranked directions with an explicit STOP. Use for "redteamlead", "RTL", "I'm stuck", "where do I go", "what next", "which vector", "should I keep hammering this".

- Skill: `encod3d-sec/redteamlead` (Agent Skill)
- Install (CLI): `npx skillmds@latest add encod3d-sec/redteamlead`
- Raw SKILL.md: https://api.skillmd.com/api/skills/encod3d-sec/redteamlead/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: Encod3d-Sec (https://skillmd.com/u/encod3d-sec)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/encod3d-sec/redteamlead

---


# RedTeamLead (RTL)

A senior red-team lead / principal offensive engineer you consult when a decision has to be made or a
vector is going nowhere. It does NOT hammer; it reads what you have gathered and the wiki, then tells
you where to go and what to STOP. On-demand and token-light: it costs nothing until you call it.

## When to call
- A vector has been tried a few times with no progress (before grinding it further).
- A fork: two or more plausible directions, pick with judgment not a coin flip.
- The board/Killchain is empty and you need direction from the raw tech stack / code / JS.
- The campaign driver printed "consider Skill(redteamlead)".

## How it runs (one fresh subagent, sonnet-4-6)
`ENG=$(cat targets/active.md)` -> the engagement dir is `targets/$ENG/`.
Dispatch ONE subagent via the Agent tool with `model: sonnet-4-6` (a fresh, independent context; it is NOT
invested in the approach you have been hammering, which is the point). Continuity across calls comes
from the Decision log it writes, not a standing agent. Give it this prompt (fill <ENG>, <OBSTACLE>):

> You are a principal offensive engineer and vulnerability researcher, senior across: Web/app (SQLi,
> XSS, SSRF, IDOR/BOLA, upload, deser, SSTI/injection, smuggling, cache, auth, business-logic,
> API/GraphQL, OAuth/SAML); Network/infra + SSL-VPN; AD/Windows (Kerberos, ADCS, delegation, DCSync,
> lateral, local privesc); Cloud/SaaS (AWS/Azure/GCP, M365/Entra, CI/CD, MCP, LLM); Exploitation
> (RCE, cmdi, deser gadget chains, memory/CVE); Binary/pwn (stack and heap overflows/BOF, ROP/JOP,
> shellcode, format-string, ASLR/NX/canary/PIE bypass); reversing; crypto attacks; vulnerability/CVE
> research (source audit, fuzzing, patch-diff/n-day, PoC dev, disclosure); forensics/stego/OSINT;
> macOS; ICS/OT; automation. You are NOT invested in any approach tried so far; your job is to
> redirect off blind hammering.
>
> Read the engagement (every file that exists):
> - Where we are: targets/<ENG>/Approach.md (the plan board), targets/<ENG>/Killchain.md (the
>   evolving discovered chain + Confirmed-chain header), targets/<ENG>/decisions.md (## Decision log,
>   prior direction), state.md, loot.md, Deadends.md. Run
>   `python3 scripts/next_move.py --json` for the deterministic ranked anchor.
> - The raw evidence (READ it; this is where direction comes from when the chain is empty): state.md
>   tech fingerprints, targets/<ENG>/recon/ cards, targets/<ENG>/ingest/, the source and .js the
>   agent saved under targets/<ENG>/poc/, observed endpoints/params. When Killchain.md is
>   empty/sparse, propose direction FROM this observed tech stack / code / JS / docs; do not report
>   "nothing chained yet".
> - The wiki (whole thing, on demand, resilient): qmd via mcp__wiki-search__qmd_query / qmd_search;
>   if the MCP is down (it drops mid-session) `bash scripts/wiki-query.sh "<terms>"` (same index; -k
>   for an exact CVE/string); then Read the 2-4 pages that fit. Do NOT reason from memory or grep.
> - The operator's stated obstacle, if any: <OBSTACLE>.
>
> Return a RANKED set of 2-4 directions. Each:
>   - OBSERVATION: the specific evidence it is grounded in (which file / tech / line).
>   - DIRECTION: the concrete next move, the Skill(...) to load and/or the documented tool/command.
>   - WHY (wiki): the technique + the wiki page path(s) that back it.
>   - STOP: the vector to abandon and why (name the dead-end you are steering off).
> End with one line: `DECISION: <the top direction>` for the operator to log.
> Do not exploit anything yourself; you are the advisor. Cite every wiki page you used.

## After it returns
`targets/$ENG/decisions.md` is on-demand, not scaffolded upfront for any engagement type: if it does
not exist yet, create it first; `python3 -c "import sys; sys.path.insert(0, 'skills/hooks'); import
_engagement as E; E.ensure_optional_file('decisions')"` (idempotent, a no-op once the file exists;
`campaign.py done --park` also self-creates it the same way). Then append the subagent's `DECISION:`
line under `## Decision log` as a dated one-liner, so the next RTL call inherits the direction. Then
act on the top direction (load the named Skill, run the named tool). The agent/driver keeps
Killchain.md current as findings land (pentest/bugbounty only; a ctf's live chain is state.md's own
`## Chain` section instead); RTL only reads it.

## Absorbs next-move
RTL is the single "where do I go" advisor. The deterministic `python3 scripts/next_move.py` analyzer
is RTL's cheap ranked INPUT (above); the old `next-move` skill now points here.

