Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
9374019
Add Security Arena framework for security competition
sofasogood Nov 19, 2025
e1cab44
Add openai dependency for security arena agents
sofasogood Nov 19, 2025
87dd622
Fix README YAML parsing error
sofasogood Nov 19, 2025
5241101
Restructure Security Arena competition format and add example submission
sofasogood Nov 19, 2025
7f8b65c
Add configurable base URL for local model serving
sofasogood Nov 19, 2025
60cea54
Add Getting Started section and PR submission process
sofasogood Nov 19, 2025
83532b2
Fix attack success rate to use actual rounds played
sofasogood Nov 19, 2025
9dfe4b4
Add team_name to results for organized output structure
sofasogood Nov 19, 2025
cc1c6ba
Add link to scenario list for Phase 1 participants
sofasogood Nov 20, 2025
cef60c4
Align Phase 1 scoring and judging criteria across documentation
sofasogood Nov 20, 2025
81da45b
update readme
chuanli11 Nov 20, 2025
2ba3ce4
Merge pull request #2 from LambdaLabsML/lambda/update-readme
sofasogood Nov 21, 2025
a6d56f4
Update Phase 1 rubric to 20/40/40 with required attack gate
sofasogood Nov 20, 2025
61bd3a7
Change default model from gpt-4o-mini to openai/gpt-oss-20b
chuanli11 Nov 21, 2025
5a73d61
instead of default to gpt-oss-20b, set it in the toml file
chuanli11 Nov 21, 2025
8971bb8
Update README.md
chuanli11 Nov 21, 2025
6110aa7
Merge pull request #4 from LambdaLabsML/lambda/default-llm
sofasogood Nov 21, 2025
872128f
Update documentation for Berkeley proposal
sofasogood Nov 21, 2025
30578f4
Update scenario count to 400+
sofasogood Nov 21, 2025
80070b2
Phase 1 improvements for security arena
sofasogood Nov 25, 2025
d73dd1e
Update README.md - updating competition dates
sofasogood Dec 10, 2025
295494c
Update README.md - updating dates
sofasogood Dec 10, 2025
f90b851
Fix import path for submission plugins in documentation
sofasogood Jan 13, 2026
22fdda3
ignore ./results/
davidh-lambda Jan 19, 2026
bae8ac4
fix import error
davidh-lambda Jan 19, 2026
e8ed076
added attacker/defender timeout/crash counters
davidh-lambda Jan 22, 2026
d2680fa
adapted results_dir structure
davidh-lambda Jan 27, 2026
edda276
remove unused debate scenario
davidh-lambda Jan 20, 2026
a83af1c
replaceable attacker/defender submission folders
davidh-lambda Jan 20, 2026
dafc126
Add 4 new security arena scenarios
sofasogood Jan 29, 2026
440d22a
add attacker/defender requirements.txt files
davidh-lambda Jan 29, 2026
e062d2d
ignore agent card advertized urls (this is needed in containerized sc…
davidh-lambda Jan 30, 2026
364ee12
added --normal_user mode and agent
davidh-lambda Jan 30, 2026
a254e91
bugfix: don't complete if in terminal state
davidh-lambda Jan 30, 2026
047bd00
Enable security guidelines for defender (Phase 2)
sofasogood Feb 2, 2026
1f86e4f
portfolioiq: more stable normal_user topics
Feb 2, 2026
7526197
refactored scenario/attacker/defender api
Feb 3, 2026
c7c2d95
Add ********* scenario and fix ********* scenario check_success
sofasogood Feb 4, 2026
ffc6957
removed test_baseline functionality (will be moved to normal-user mode)
Feb 4, 2026
9b7e6f2
removed format_current_input from scenarios (not needed)
Feb 4, 2026
7ac63a0
simplified check_success method
Feb 4, 2026
3bddb81
made normal user a proper attacker-like agent
Feb 4, 2026
f42c19a
consolidated _save_normal_user_result & _save_results
Feb 4, 2026
53c4e0f
started simplification of agent api
Feb 4, 2026
17c052f
refactor agents to use jinja2
Feb 4, 2026
04a7647
slightly minimized orchestrator.py
Feb 4, 2026
8d47952
added example data storage
Feb 4, 2026
86cf70d
added battle_log.md
Feb 4, 2026
e1cf1ef
normal user may retry up to 3 times
Feb 4, 2026
654a983
scenario: portfolioiq finished
Feb 4, 2026
2184ba7
agents: bugfix for None response
Feb 4, 2026
4e76f71
scenario: some adaptions of scenarios
Feb 4, 2026
689dc6b
Increase agent timeout to 5 minutes (300s)
sofasogood Feb 4, 2026
ede07cb
Fix check_success edge cases in gymjailbreak and ********
sofasogood Feb 4, 2026
a9050aa
Add HTML battle report generation
sofasogood Feb 4, 2026
e8c3539
Fix resume_downgrade normal user topics
sofasogood Feb 5, 2026
d02dead
Remove 500-char truncation of defender response in normal user results
sofasogood Feb 5, 2026
47ed214
Fix gymjailbreak tables
Feb 5, 2026
3e59600
fixed scenario regexes to also check for non-breaking whitespaces
Feb 5, 2026
f78e27d
fixed hyphen regex in example_medical scenario
Feb 5, 2026
ac196ac
Improve scenario plugins and normal user topics
sofasogood Feb 6, 2026
c14458d
increase battle-timeout
Feb 6, 2026
bec12b0
adapted example_medical to newer plugin api
Feb 10, 2026
4a692f2
Fix normal user test false positives by passing output_format to eval…
sofasogood Feb 24, 2026
8f40e60
make normal user max attempts an env variable
Feb 24, 2026
23fb86d
log errors to results.err
Feb 19, 2026
92cd97f
unify number of rounds per scenario (num_rounds = 7)
Feb 24, 2026
8aa62e5
added default submission action
Feb 24, 2026
04f42f3
added missing action variables (run_tests & openapi_*)
Feb 24, 2026
8aa4a61
removed high-variance normal user questions
Feb 25, 2026
257a029
Split security arena README into Phase 1 and Phase 2 docs
sofasogood Feb 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .github/workflows/submit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Submit Solution

on:
push:
branches: [main]
workflow_dispatch:

jobs:
submit-attacker:
runs-on: ubuntu-latest
if: contains(github.event.head_commit.message, '[submit]') || contains(github.event.head_commit.message, '[submit-attacker]')

steps:
- uses: actions/checkout@v4

- name: Submit Attacker
uses: LambdaLabsML/agentbeats-submission-action@main
with:
api_key: ${{ secrets.COMPETITION_API_KEY }}
role: 'attacker'
submission_path: './scenarios/security_arena/agents/attacker'
run_tests: 'false'
openai_api_key: ${{ secrets.OPENAI_API_KEY }}
openai_base_url: ${{ secrets.OPENAI_BASE_URL }}

submit-defender:
runs-on: ubuntu-latest
if: contains(github.event.head_commit.message, '[submit]') || contains(github.event.head_commit.message, '[submit-defender]')

steps:
- uses: actions/checkout@v4

- name: Submit Defender
uses: LambdaLabsML/agentbeats-submission-action@main
with:
api_key: ${{ secrets.COMPETITION_API_KEY }}
role: 'defender'
submission_path: './scenarios/security_arena/agents/defender'
run_tests: 'false'
openai_api_key: ${{ secrets.OPENAI_API_KEY }}
openai_base_url: ${{ secrets.OPENAI_BASE_URL }}
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
.python-version
.venv/
__pycache__/
*.pyc
*.pyc
results
72 changes: 72 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,75 @@
# Lambda × Berkeley AgentBeats Security Arena

**Building the Future of AI Security Testing**

Repository: https://github.com/LambdaLabsML/agentbeats-lambda

## Track Description

The Agent Security Arena challenges participants to advance the field of AI agent security evaluation. Implement realistic security scenarios from our curated library of 400+ specifications—testing vulnerabilities like prompt injection, data exfiltration, and jailbreaking—using an industry-standard adversarial testing framework. Your contributions will help define how we evaluate and secure AI agents operating in real-world environments, from financial advisors to healthcare systems.

Browse the current scenario library on our [scenario browser](https://agentbeats-lambda.s3.us-east-1.amazonaws.com/index.html).

## Competition Structure: Two Phases

### Overview

As AI agents gain autonomy and take on sensitive tasks, current security testing methods fall short. The Agent Security Arena provides a framework for testing AI vulnerabilities through realistic adversarial scenarios. The competition runs in two sequential phases; all participants compete in both.

- **Phase 1 (November 24 – January 16)**: Implement security scenarios that test real vulnerabilities.
- **Phase 2 (February 2 – February 23)**: Compete with advanced attack or defense agents.

This track focuses on building realistic test scenarios that reveal actual vulnerabilities before they're exploited in production. Participants will balance creating challenging attack scenarios while maintaining clear success criteria and realistic constraints.

### Key Dates

| Date | Milestone |
|------|-----------|
| Nov 24, 2024 | Phase 1 begins - Start building scenarios |
| Jan 16, 2025 | Phase 1 submissions due |
| Feb 2 , 2025 | Phase 2 begins - Agent competition launches |
| Feb 23, 2025 | Winners announced |

### Model Constraint

**Use gpt-oss-20b** to ensure fair compute (fits in 80GB H100); no proprietary API advantage.

## Getting Started

**[View Full Competition Documentation →](scenarios/security_arena/README.md)**

- Phase 1 documentation: [scenarios/security_arena/docs/phase1.md](scenarios/security_arena/docs/phase1.md)
- Phase 2 documentation: [scenarios/security_arena/docs/phase2.md](scenarios/security_arena/docs/phase2.md)

Quick start:
```bash
uv run agentbeats-run scenarios/security_arena/scenario_portfolioiq.toml
```

### Documentation

Study existing examples:
- **PortfolioIQ** — Data injection in financial risk assessment
`scenarios/security_arena/plugins/portfolioiq.py`
- **Thingularity** — Information disclosure from shopping assistant
`scenarios/security_arena/plugins/thingularity.py`

Core docs:
- `README.md` - Framework architecture and usage
- `SCENARIO_SPECIFICATIONS.md` - Plugin interface and submission requirements

## Support

Lambda engineers have set up dedicated support for participants:

- **Discord**: Support channel
- **GitHub Issues**: Bug reports and technical questions
- **Response Time**: Critical issues same-day; general questions within 24 hours

We're committed to helping you succeed - ask us anything about the framework, scenario implementation, or evaluation criteria.

---

## Quickstart
1. Clone (or fork) the repo:
```
Expand Down
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ dependencies = [
"a2a-sdk>=0.3.5",
"google-adk>=1.14.1",
"google-genai>=1.36.0",
"jinja2>=3.1.0",
"openai>=2.8.1",
"pydantic>=2.11.9",
"python-dotenv>=1.1.1",
"uvicorn>=0.35.0",
Expand Down
113 changes: 0 additions & 113 deletions scenarios/debate/adk_debate_judge.py

This file was deleted.

Loading