JED is a Python SDK and benchmark for evaluating tool-using agents under adversarial pressure.
It supports three package workflows:
- attack-only evaluation
- guardrail-only evaluation
- combined attack+defense evaluation
Documentation: https://mbhatt1.github.io/competitionscratch/
Use aicomp evaluate when you want the scorer-style public interface and stable machine-readable artifacts.
Use aicomp test when you are iterating locally and want run history, compare, and visualize.
| Workflow | Submission | Primary entrypoint | Default env | Output |
|---|---|---|---|---|
| Kaggle red-team | attack.py |
aicomp evaluate redteam |
sandbox |
normalized attack score |
| Package attack-only | attack.py |
aicomp test redteam |
sandbox |
normalized attack score |
| Package guardrail-only | guardrail.py |
aicomp test defense |
sandbox |
defense score |
| Package dual-track | submission.zip with attack.py and guardrail.py |
aicomp test dual |
sandbox |
attack + defense |
The public Kaggle competition uses the attack-only path. The package itself supports all three workflows.
From PyPI:
pip install aicomp-sdkFrom source:
git clone https://github.com/mbhatt1/competitionscratch.git
cd competitionscratch
pip install -e .Generate a starter submission:
aicomp init attack
aicomp validate redteam attack.py
aicomp test redteam attack.py --budget-s 60 --agent deterministicRun the standalone public-path scorer locally:
aicomp evaluate \
redteam \
attack.py \
--budget-s 60 \
--agent deterministic \
--env gymattack.py must define AttackAlgorithm, inherit from AttackAlgorithmBase, and return list[AttackCandidate].
If you want CLI behavior that matches the public Kaggle default more closely, use aicomp evaluate redteam attack.py --env gym.
The standalone evaluator defaults to a short terminal summary. Use --verbosity progress for package-owned progress messages. Add --save-transcript, --save-framework-events, and --save-agent-debug when you want transcript.log, framework.jsonl, and agent-debug.jsonl written under --artifacts-dir.
aicomp test keeps its explicit-path diagnostics flags: --transcript-file, --event-log-file, and --agent-debug-jsonl.
Guardrail-only:
aicomp init guardrail
aicomp validate defense guardrail.py
aicomp test defense guardrail.py --budget-s 60 --agent deterministicDual-track:
zip submission.zip attack.py guardrail.py
aicomp test dual submission.zip --budget-s 60 --agent deterministic
aicomp evaluate dual submission.zip --budget-s 60 --agent deterministic --env sandboxAttack scoring is replay-based. The evaluator replays each returned AttackCandidate and recomputes:
- the trace
- triggered predicates
- the cell signature
- the final score
The public Kaggle leaderboard uses normalized attack score only. Package guardrail-only and dual-track workflows also expose defense scoring.
SandboxEnvis the default environment for local evaluator runs.GymAttackEnvis available when you explicitly pass--env gymfor Kaggle-style parity.- Direct
SandboxEnv(...)construction requires an explicitagent=instance. aicomp testdefaults to1800seconds forredteam,1800seconds fordefense, and3600seconds total fordual(1800/1800split).
docs/GETTING_STARTED.mddocs/KAGGLE_REDTEAM_GUIDE.mddocs/GUARDRAILS_GUIDE.mddocs/SCORING.mddocs/API_REFERENCE.md
aicomp_sdk/- package codeexamples/- runnable examplestests/- unit and integration tests
MIT. See LICENSE.