Council
warpdotdev/common-skills
Run a model-diverse subagent council to investigate the same problem from multiple perspectives, compare findings, and produce a final recommendation.
A skill your agent uses when the user wants to automatically harden a guardrail, classifier, content filter, prompt, or API they own by running attack and defense together as a closed loop, not just…
$ npx skills add gaasher/Agent-Loop-Skills --skill purple-team -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install gaasher/Agent-Loop-Skills purple-team --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/loops/purple-team .claude/skills/purple-team && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "purple-team" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/purple-team into .claude/skills/purple-team/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "purple-team", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/purple-teamType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add gaasher/Agent-Loop-Skills --skill purple-team -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install gaasher/Agent-Loop-Skills purple-team --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/loops/purple-team .agents/skills/purple-team && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "purple-team" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/purple-team into .agents/skills/purple-team/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "purple-team", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gaasher/Agent-Loop-Skills --skill purple-team -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install gaasher/Agent-Loop-Skills purple-team --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/loops/purple-team .cursor/skills/purple-team && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "purple-team" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/purple-team into .cursor/skills/purple-team/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "purple-team", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/gaasher/Agent-Loop-Skills.git --path loops/purple-team--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add gaasher/Agent-Loop-Skills --skill purple-team -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install gaasher/Agent-Loop-Skills purple-team --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/loops/purple-team .gemini/skills/purple-team && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "purple-team" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/purple-team into .gemini/skills/purple-team/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "purple-team", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install gaasher/Agent-Loop-Skills purple-teamInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add gaasher/Agent-Loop-Skills --skill purple-team -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/loops/purple-team .github/skills/purple-team && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "purple-team" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/purple-team into .github/skills/purple-team/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "purple-team", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gaasher/Agent-Loop-Skills --skill purple-team -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install gaasher/Agent-Loop-Skills purple-team --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/loops/purple-team .opencode/skills/purple-team && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "purple-team" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/purple-team into .opencode/skills/purple-team/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "purple-team", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
purple-teamA skill your agent uses when the user wants to automatically harden a guardrail, classifier, content filter, prompt, or API they own by running attack and defense together as a closed loop, not just…
Purple Team is an agent skill from gaasher/Agent-Loop-Skills. Use when the user wants to automatically harden a guardrail, classifier, content filter, prompt, or API they own by running attack and defense together as a closed loop, not just one or the other. It orchestrates the red-team and blue-team loops as independent agents: red finds distinct failure classes against the frozen target, blue patches the target to close them under a regression gate, then a fresh red pass re-verifies — confirming each class is closed and surfacing any new ones the fix introduced. The…
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `examples/run.example.yaml`, `roles/blue-fix.md` and `roles/red-find.md`). Compatibility notes: Requires Python 3.9+ and the sibling red-team + blue-team skills installed. Real isolated subagents on Claude Code; runs the phases inline (serial) elsewhere…
It sits in Security, covering Red teaming and adversary simulation, Security operations and Pull requests. The repository describes itself as: Loop until it's better — drop-in agentic loops (autoresearch, scientific writing, data analysis, code/SQL/prompt optimization, red-teaming) as open-standard Agent Skills… The licence is MIT.
Read from SKILL.md and the folder at commit f1169e6. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires Python 3.9+ and the sibling red-team + blue-team skills installed. Real isolated subagents on Claude Code; runs the phases inline (serial) elsewhere. git + gh CLI for the PR handoff (degrades).
From compatibility in the SKILL.md frontmatter.
Purple Team loads about 2.6k tokens when it runs. Until then it costs about 213 tokens; SKILL.md has 1,285 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from gaasher/Agent-Loop-Skills at commit f1169e6, republished under its MIT licence (© gaasher). 1,285 words, ~2,634 tokens.
.claude/skills/purple-team/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.The combined red+blue loop — the outer orchestration the red-team skill says "lives outside it."
The artifact is a target system (frozen within a phase, patched between phases); the feedback signal
is how many new failure classes a fresh attack pass finds against the patched target. Each cycle
runs three strictly separated phases — find (red-team), fix (blue-team), re-verify (a fresh
red-team pass) — and you repeat until a fresh find stays dry (zero new classes), meaning the target
is hardened. Red and blue run as independent agents so the attacker that wrote a catalogue never
grades its own patch. On stop it opens a pull request with the cycle history and the patch set.
Use to harden a guardrail/classifier/filter/prompt/API the user owns or is authorized to test, when the
goal is an actually-hardened target plus a reviewable patch — not just a catalogue (that is red-team
alone) and not just closing a pre-existing catalogue (that is blue-team alone). It needs a runnable
oracle for the objective signal, and the two sibling skills installed.
Default: spawn red and blue as separate subagents per phase. Escape hatch: on hosts without subagent dispatch, run each phase inline (serial) per the role files — still correct, but the same context plays both sides, so be deliberate about not letting the fix bias the re-verify. Not for unauthorized targets.
Resolve bindings interactively. If loop.run.yaml exists, load it, confirm the values in one line, and
skip to the loop. Otherwise: on Claude Code (the AskUserQuestion tool is available) infer a likely
value per binding and recommend it; on other hosts ask each as a quoted prompt. Then write
loop.run.yaml (format: examples/run.example.yaml) and confirm before creating any other files.
The phases reuse the sibling skills, so the bindings are their union — one shared loop.run.yaml drives
both. The same file is <target_files> to blue (writable) and the program behind <target_cmd> to red
(read-only); the same path is red's <failures_log> and blue's <catalogue>.
| binding | meaning | default | how to infer |
|---|---|---|---|
<target_cmd> | run the target on one stdin input → a verdict (what red attacks) | — | the guardrail/classifier/API entrypoint |
<target_files> | the source file(s) blue may edit to fix the target | — | the file(s) behind <target_cmd> |
<oracle_cmd> | ground-truth verdict for the same input (frozen) | — | a reference checker / policy impl |
<gate_cmd> | functional tests that must stay green through a fix (exits 0) | — | the target's test command; else rely on <holdout> |
<holdout> | benign + clearly-correct inputs blue must not break | <sandbox_root>/holdout.jsonl | known-good inputs the oracle agrees on |
<catalogue> | shared failures file: red writes it, blue closes it, JSONL {id,text,class,...} | <sandbox_root>/failures.jsonl | — |
<iter_strategy> | branches (commit per fix → PR) or snapshots | branches | dirty/non-git tree → snapshots |
<pr_branch> | branch the fixes land on and the PR opens from | purple-team/<tag> | today's date as <tag> |
<sandbox_root> | where catalogues, snapshots, ledgers live | ./sandbox | — |
<cycle_budget> | max find→fix→re-verify cycles | 4 | — |
<find_budget>, <fix_budget> | inner per-phase budgets passed to red / blue | 8 | — |
<skill_dir> is this skill's installed folder. The phases run the sibling skills' tools
(red-team/tools/harness.py, blue-team/tools/verify.py); the role files name them.
Copy this checklist and tick items off each cycle. Cycles are numbered from 0; per-cycle artifacts go in
<sandbox_root> with the cycle index in the name so nothing is overwritten: the find catalogue is
failures.cycle<N>.jsonl (cycle 0 may use <catalogue> directly) and the re-verify result is
failures.cycle<N>_reverify.jsonl. The catalogue blue fixes in cycle N is the failures file from that
cycle's find/re-verify pass — never append back into one shared file, so each cycle's accounting is clean.
roles/red-find.md), writing failures.cycle0.jsonl. Read back its distinct failure classes.roles/blue-fix.md): it patches <target_files> one class per iteration under the gate +
regression guard, committing kept fixes on <pr_branch>. Read back the classes it closed and
any residuals.failures.cycle<N>_reverify.jsonl. This confirms the closed classes no longer reproduce and
surfaces any new classes the fix introduced (e.g. an over-block).failures.cycle<N+1>.jsonl) — loop to Find/Fix for cycle N+1.
Repeat find→fix→re-verify until a re-verify pass stays dry (no new classes) or
<cycle_budget> is hit.Phase independence (why three separated phases). The target is read-only ground truth for the duration of a red pass, so patches happen only between passes — mutating it mid-pass would break reproducibility and the class accounting. Spawn red and blue as separate subagents so neither grades its own work; the orchestrator only passes artifacts (the catalogue, the closed/residual summary) between them. Launch a phase's subagent and wait for its structured return before the next phase.
<sandbox_root>/cycle_ledger.tsv, tab-separated, never commas in free text. Header
cycle found fixed residual regressions_introduced net_open:
cycle found fixed residual regressions_introduced net_open
0 5 5 0 1 1
1 1 1 0 0 0All counts are distinct classes, not inner iterations: found = classes red surfaced this cycle;
fixed = classes blue closed (a class blue attempted several times still counts once); residual =
classes blue could not close; regressions_introduced = new classes the re-verify pass found that the
fix caused; net_open = classes still open entering the next cycle (residual + regressions_introduced,
the next cycle's catalogue size). Convergence is a re-verify pass with net_open = 0. Report the cycle
at which the target went dry (or the best net_open reached).
<gate_cmd> tests, <holdout>, or either tool; never patch the target inside a red pass. These keep
the find/fix/re-verify accounting honest.<sandbox_root>; do not pause between phases to ask whether to continue —
run until dry or <cycle_budget>.The deliverable is one pull request for the whole hardening run — the communication interface to the
target's owner, who keeps final approval. With the tree at blue's best state and the kept fixes already
committed on <pr_branch>:
gh pr create; body = the cycle ledger (found → fixed → re-verified per cycle), one
reproducible example per closed class, and any residuals still open. Confirm once before opening —
it is outward-facing; never auto-push silently.gh, leave commits on <pr_branch> and write
git format-patch + PR_BODY.md into <sandbox_root>; in snapshots mode emit a unified diff +
PR_BODY.md. Tell the user the one command to open the PR themselves.roles/red-find.md — runs the red-team phase against the target and returns the catalogue + classes.roles/blue-fix.md — runs the blue-team phase on the catalogue and returns closed classes + residuals.Both are spawn-or-degrade: spawn a real isolated subagent on Claude Code (the Agent/Task tool),
else adopt the role inline. Each delegates to the sibling skill (red-team / blue-team) bound to the
shared loop.run.yaml; if a sibling is not installed, ask the user to install it (npx skills add gaasher/agent-loop-skills) rather than re-implementing it here.
© gaasher, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files in loops/purple-team of gaasher/Agent-Loop-Skills.
Open the folder on GitHubat commit f1169e6
Purple Team next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Purple Team this skillgaasher/Agent-Loop-Skills | 174 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Councilwarpdotdev/common-skills | 611 | 1 repos | ~1.8k | Automated safety check: Pass | MIT | |
| Cybersecurityohmyjahh/xquads-squads | 277 | — | ~895 | Automated safety check: Pass | MIT | |
| Rational Red Blue Debatedigoal/blog | 8.6k | — | ~2.2k | Automated safety check: Pass | GPL-2.0 | |
| Detecting Azure Service Principal Abusemukul975/Anthropic-Cybersecurity-Skills | 34k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Detecting Pass The Hash Attacksmukul975/Anthropic-Cybersecurity-Skills | 34k | — | ~904 | Automated safety check: Pass | Apache-2.0 |
warpdotdev/common-skills
Run a model-diverse subagent council to investigate the same problem from multiple perspectives, compare findings, and produce a final recommendation.
ohmyjahh/xquads-squads
Squad de 15 agentes de seguranca ofensiva e defensiva (Georgia Weidman, Peter Kim, Jim Manico, Chris Sanders, Omar Santos, Marcus Carey) cobrindo pentest, red team, blue team, AppSec, recon e…
digoal/blog
Answer general or cross-domain questions with a non-pleasing rational mode: adversarial red-team and blue-team expert analysis, mutually exclusive conclusions, up to five debate rounds, saved…
mukul975/Anthropic-Cybersecurity-Skills
Detect Azure service principal abuse in Microsoft Entra ID using KQL detection queries (Sentinel/Splunk) against Azure AD Audit and Sign-in Logs, covering added credentials, privileged role…
mukul975/Anthropic-Cybersecurity-Skills
Detect Pass-the-Hash (T1550.002) attacks by analyzing NTLM authentication patterns, flagging Type 3 logons using NTLM where Kerberos would be expected, and correlating with credential-dumping…
mukul975/Anthropic-Cybersecurity-Skills
Detect privilege escalation attempts across Windows and Linux, including access token manipulation, UAC bypass, unquoted service path abuse, kernel exploits, and sudo/doas abuse.
gaasher/Agent-Loop-Skills
A skill your agent uses when the user wants to evolve an ML model/program through population-based search rather than a single sequential refine loop — a generational evolution where parallel…
gaasher/Agent-Loop-Skills
A skill your agent uses when the user has a known, already-observed anomaly in their data — a metric spike or drop, an outlier, an unexpected number — and wants its root cause diagnosed, not guessed.
gaasher/Agent-Loop-Skills
A skill your agent uses when the user has concrete failing cases in code or a guardrail/classifier/filter/prompt/API they own — a red-team failure catalogue OR a CI/CD test-failure report (failing…
gaasher/Agent-Loop-Skills
A skill your agent uses when the user wants an iterative, self-checking exploratory analysis of a dataset — surfacing findings that are each verified by re-running the computation, not asserted.
gaasher/Agent-Loop-Skills
A skill your agent uses when the user wants to generate and literature-vet a pool of novel, testable research hypotheses for a question or domain.
gaasher/Agent-Loop-Skills
A skill your agent uses when the user wants the LLM to do its own ML research: a fully-autonomous loop that hacks the training code, runs it, and keeps changes that lower a single scalar metric (e.g.
Categories
A skill your agent uses when the user wants to automatically harden a guardrail, classifier, content filter, prompt, or API they own by running attack and defense together as a closed loop, not just…. Purple Team is an agent skill from gaasher/Agent-Loop-Skills. Use when the user wants to automatically harden a guardrail, classifier, content filter, prompt, or API they own by running attack and defense together as a closed loop, not just one or the other.
Purple Team fits situations like: the user wants to automatically harden a guardrail; API they own by running attack and defense together as a closed loop.
Run `npx skills add gaasher/Agent-Loop-Skills --skill purple-team -a claude-code`. Or copy the skill folder (loops/purple-team in gaasher/Agent-Loop-Skills) into .claude/skills/purple-team in your project. Claude Code loads it when a task matches its description.
Run `npx skills add gaasher/Agent-Loop-Skills --skill purple-team -a codex`. Or copy the skill folder (loops/purple-team in gaasher/Agent-Loop-Skills) into .agents/skills/purple-team in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gaasher/Agent-Loop-Skills --skill purple-team -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/purple-team, .gemini/skills/purple-team, .github/skills/purple-team and .opencode/skills/purple-team in your project.
Going by SKILL.md and its folder, Purple Team needs the command-line tools its instructions call (gh and git). Our summary lists: Python 3; Node.js. Compatibility (from SKILL.md): Requires Python 3.9+ and the sibling red-team + blue-team skills installed. Real isolated subagents on Claude Code; runs the phases inline (serial) elsewhere. git + gh CLI for the PR handoff (degrades). .
SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Purple Team is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Purple Team: Council (warpdotdev/common-skills, 611 stars), Cybersecurity (ohmyjahh/xquads-squads, 277 stars), Rational Red Blue Debate (digoal/blog, 8.6k stars) and Detecting Azure Service Principal Abuse (mukul975/Anthropic-Cybersecurity-Skills, 34k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
gaasher (a GitHub user) maintains it in gaasher/Agent-Loop-Skills, which has 174 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on June 30, 2026.
Source: gaasher/Agent-Loop-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.