🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman
Adversary emulation for AI agents and MCP servers
Opfor tests AI agents, LLM apps, and MCP servers with attack suites, multi-turn conversations, and an LLM judge. It can run from the CLI, a browser extension, an MCP server, or the SDK, and it logs prompts, responses, verdicts, and reports for repeatable testing.
Builders who want to red-team chatbots, agent workflows, and MCP servers before they ship them.
You can see how your agent behaves under hostile prompts, tool abuse, and prompt injection before users do.
What it does
CLI scans and reusable configs
Run `opfor setup` to create a saved config, then `opfor run --config .opfor/configs/<file>` to repeat the same test later or in CI.
Browser extension testing
Install the extension and test a deployed chat interface without writing code or setting up env vars.
MCP server mode
Register Opfor in Cursor or Claude Desktop so your coding agent can red-team other agents through chat.
SDK access
Use `@keyvaluesystems/agent-opfor-sdk` and call `run` or `hunt` from TypeScript code.
OWASP-mapped evaluator suites
Ships suites for OWASP LLM Top 10, Agentic AI Top 10, MCP Top 10, API Security Top 10, and EU AI Act bias checks.
Trace-aware judging
Integrates with Langfuse and Netra so the judge can see tool calls, retrievals, and intermediate steps, not only the final answer.
Autonomous hunt mode
`opfor hunt` runs a multi-agent campaign with recon, strategy, probing, and a report from just an endpoint and an objective.
How to get it
- 1Run
npm install -g @keyvaluesystems/agent-opfor-cli export OPENAI_API_KEY=your-key # or GEMINI_API_KEY, ANTHROPIC_API_KEY, etc.
- 2One-shot — runs the setup wizard and immediately starts the scan
opfor run
- 3Two-step — save a config you can reuse or commit to CI
opfor setup # wizard saves a config to .opfor/configs/ opfor run --config .opfor/configs/<file> # run any time against the saved config
README
Open-source adversary emulation for AI agents, LLM apps, and MCP servers.
Test your AI like a real attacker would — from your CLI, your IDE, or a browser extension that anyone on your team can use.
Website · Docs · GitHub · Browser Extension · Discord
OPFOR is short for Opposition Force — a military term for the unit that plays the enemy in training, so the rest of the army learns what real attacks feel like before they come. We named the tool after that idea: to defend AI agents better, you have to attack them first.
Why KeyValue built this
We've shipped 130 products for 90 startups over the last ten years. In the last 18 months, almost every one of them had an AI agent in it — and every one of those teams hit the same wall when it came to testing.
So we built OPFOR. For ourselves first. Now open source.
Apache 2.0. Built from India.
Quick Start
npm install -g @keyvaluesystems/agent-opfor-cli
export OPENAI_API_KEY=your-key # or GEMINI_API_KEY, ANTHROPIC_API_KEY, etc.
One-shot — runs the setup wizard and immediately starts the scan:
opfor run
Two-step — save a config you can reuse or commit to CI:
opfor setup # wizard saves a config to .opfor/configs/
opfor run --config .opfor/configs/<file> # run any time against the saved config
https://github.com/user-attachments/assets/a6a3cff2-2cf9-4486-944e-ac0163e7ea04
What opfor does
Opfor red-teams the full AI agent surface — prompts, tools, MCP servers, memory, and multi-turn reasoning. It generates targeted attacks for OWASP LLM Top 10, OWASP Agentic AI Top 10, OWASP MCP Top 10, OWASP API Security, and EU AI Act bias suites, fires them at your target, and judges each response with an LLM.
Most red-team tooling in this space is excellent at one thing — a probe library, a developer evaluator, a programmatic framework. Opfor covers more ground in one tool:
- Browser extension for non-developers — anyone on your team can red-team a deployed chatbot, no code, no env vars, no YAML
- Run opfor as an MCP server — let your AI coding agent in Cursor or Claude Desktop red-team your other agents through natural language
- Full OWASP coverage in one tool — LLM Top 10, Agentic AI Top 10, MCP Top 10, API Security Top 10
- No black box — every attack prompt, request, response, and judge verdict is logged; reproducible, auditable, forkable
- Built for agents, not just models — designed for tool calls, MCP, memory, and multi-turn state from day one
- Trace-aware — integrates with Langfuse and Netra so the LLM judge sees what your agent did internally, not just what it said
Five ways to run opfor
Different people on your team need different entry points. Opfor ships five.
| Mode | How | Best for |
|---|---|---|
| 🖥️ CLI | opfor setup → opfor run | Engineers, CI/CD, terminal-first workflows |
| 🌐 Browser extension | Install the extension, click the icon on any chat interface | Product managers, designers, QA, security analysts — anyone who can't or won't write code |
| 🤖 MCP server | Register opfor in Cursor or Claude Desktop, then ask in chat | AI coding agents that test your other agents |
| ⚡ Skills | /opfor-setup · /opfor-run · /opfor-mcp-setup · /opfor-mcp-run | Developers who want one-command testing inside their IDE |
| 📦 SDK | npm install @keyvaluesystems/agent-opfor-sdk, then call run / hunt from your code | Programmatic red-teaming and custom workflows |
All five share the same evaluators, attack templates, and judge logic.
→ CLI reference · Browser extension setup · MCP setup · Skills setup · SDK reference · Session handling
How it works
When you run a scan, opfor:
- Fetches target info — connects to your agent, detects available tools, MCP endpoints, capabilities
- Plans attacks per category — generates targeted prompts for each evaluator in your selected suite
- Emulates the attack — runs multi-turn adversarial conversations (real requests, real responses)
- Evaluates with a judge — an LLM judge classifies each response with pass/fail + reasoning
- Generates a report — HTML for browsing, JSON for CI/CD, all artifacts logged for reproducibility
Each run lands in its own subfolder under .opfor/reports/run-report-<compactTs>-<slug>-<shortId>/ containing <slug>-report.html and <slug>-report.json. Autonomous opfor hunt runs use the same layout under hunt-report-<compactTs>-<slug>-<shortId>/.
Testing cost
Every run reports what its instrumented LLM calls cost, broken down by model:
Token usage: 51,323 input / 6,057 output (57,380 total)
Testing cost: $0.18
deepseek/deepseek-v4-pro [attacker]: $0.037
anthropic/claude-opus-5 [judge]: $0.14
This is opfor's own spend — the attacker and judge LLMs. It excludes your target's inference cost, which opfor cannot see from the outside. The per-model split is the useful part: the judge is often the bigger share, and pointing it at a cheaper model is usually the easiest saving.
Prices come from a snapshot of LiteLLM's public price map that ships with the package, so runs work offline and a report re-rendered later produces the same figure. Cached input is billed at the provider's cache rate — multi-turn attacks re-send the conversation each turn, and that repeated prefix is often ~100× cheaper than fresh text, so the figure tracks the real bill rather than a worst case. Caveats worth knowing:
- Caching is only credited when it's reported. A provider that doesn't break out cached tokens, or a model with no published cache rate, is charged at the full input rate — an over-estimate, chosen over quietly under-reporting.
- Unknown models are never counted as free. A model missing from the price table is reported as unpriced and the total is marked a lower bound, rather than silently reading as $0.
- A few helper calls aren't metered yet. Trace curation, session summarisation and one JSON helper don't report token usage, so their spend is missing from the total. Treat the figure as a floor.
→ Token usage and testing cost
Evaluator coverage
Opfor ships with curated suites that map to industry standards. Pick a suite or run individual evaluators.
| Suite ID | Standard | Focus |
|---|---|---|
owasp-llm-top10 | OWASP LLM Top 10 (2025) | Prompt injection, jailbreaks, sensitive disclosure, system prompt leakage |
owasp-agentic-ai | OWASP Agentic AI Top 10 | Excessive agency, tool misuse, agent goal hijack, memory poisoning |
owasp-mcp-top10 | OWASP MCP Top 10 (2025) | Secret exposure, scope escalation, tool description injection, SSRF |
owasp-api | OWASP API Security Top 10 | BOLA, BFLA, SQL injection |
eu-ai-act-bias | EU AI Act — Bias | Age, gender, race, disability |
→ Full evaluator reference and OWASP mapping
Trace-aware testing
Plug opfor into your observability stack and the LLM judge sees not just the final response — but every tool call, retrieval, and intermediate reasoning step. Out of the box, opfor integrates with Langfuse and Netra.
"telemetry": {
"provider": "langfuse",
"langfuse": { "baseUrl": "https://cloud.langfuse.com" }
}
This catches what input/output testing misses — PII that leaks into a tool call but never reaches the user, scope escalations in MCP that don't change the response text, agents that retrieve unauthorized data but render a clean reply.
Autonomous Red-Teaming
opfor hunt skips the config file entirely. Give it an endpoint and an objective, and a multi-agent system — commander, operators, scout — runs an adaptive attack campaign on its own: recon, strategy, multi-turn probing, report. Unlike opfor run, the agents run on Claude only (via a Claude API key, claude setup-token, or your local claude login session) — your target can be anything.
opfor hunt \
--endpoint "https://your-agent.com/v1/chat" \
--objective "Find jailbreaks, system-prompt leakage, and safety bypasses."
Add --ui to watch the attack tree unfold in a live dashboard.
Browser extension — red-team a chatbot
The browser extension is opfor's no-code path. Install from the Chrome Web Store, open any chat interface, click the opfor icon, pick a suite, and watch it run.
https://github.com/user-attachments/assets/80c2692f-b18b-4899-99df-e7eb8d50b02a
It auto-detects the chat interface, sends attack prompts as if you were typing them, watches the responses, and downloads an HTML report when done. No CLI, no target setup, no YAML.
This is the path for the half of every product team that doesn't open a terminal.
→ Install from the Chrome Web Store · Setup guide
SDK — embed red-teaming in your code
The SDK is opfor's programmatic path. Install @keyvaluesystems/agent-opfor-sdk, call run or hunt, and get structured results back — no CLI, no config files, no subprocess.
import { Opfor } from "@keyvaluesystems/agent-opfor-sdk";
const opfor = new Opfor({ apiKey: process.env.ANTHROPIC_API_KEY });
const results = await opfor.run({
target: { url: "https://api.example.com/chat" },
suite: "owasp-llm-top10",
});
Use it in CI, in test suites, or anywhere you need red-teaming without leaving TypeScript.
Examples
| Example | Description |
|---|---|
| vanilla-chat | Plain customer support chatbot — test LLM-level vulnerabilities |
| customer-support | Tool-calling agent with PostgreSQL — test BOLA, BFLA, RBAC, PII |
| vulnerable-server | Sample MCP server with intentional vulnerabilities |
Supported LLM providers
| Provider | Env var | Default model |
|---|---|---|
| Groq | GROQ_API_KEY | llama-3.3-70b-versatile |
| OpenAI | OPENAI_API_KEY | gpt-4o-mini |
| Anthropic | ANTHROPIC_API_KEY | claude-3-5-haiku-20241022 |
GOOGLE_GENERATIVE_AI_API_KEY | gemini-2.0-flash | |
| OpenAI-compatible | OPFOR_API_KEY + baseURL | LiteLLM, OpenRouter, Azure, Ollama |
Contributing
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
Authors
Built by the team at KeyValue Software Systems. Contact contact@agentopfor.ai for all enquiries.
Security
Use opfor only on systems you own or are authorized to test. To report a vulnerability in opfor itself, see SECURITY.md — do not open a public issue.
License
Opfor is licensed under Apache 2.0 — see the LICENSE file for details.
Built with ❤️ by KeyValue
Files in the repo
- .github
- .husky
- assets
- core
- data
- docs
- evaluators
- runners
- scripts
- skills
- suites
- tests
- third_party
- .env.example
- .gitignore
- .gitleaks.toml
- .gitmodules
- .prettierignore
- .prettierrc
- .release-please-manifest.json
- AGENTS.md
- CHANGELOG.md
- CLAUDE.md
- CODE_OF_CONDUCT.md
- commitlint.config.js
- CONTRIBUTING.md
- eslint.config.js
- LICENSE
- package-lock.json
- package.json
- README.md
- release-please-config.json
- SECURITY.md
Discussion (0)
Ask about usage, or say what you built with itSign in to join the discussion.
No comments yet. Be the first to say what this is good for.
More tools
The best-benchmarked open-source AI memory system. And it's free.
Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors
Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.