
Framework de benchmarking pour évaluer les agents IA qui utilisent un ordinateur face aux injections indirectes de prompt en plusieurs étapes, avec décomposition automatique des objectifs adversariaux et environnements de test sandboxés AWS.
Tout d'abord, installez toutes les dépendances et assurez-vous d'exécuter Python 3.10.
conda create -n stepjack python=3.10
conda activate stepjack
pip install -r requirements.txt
Nous utilisons l'environnement AWS fourni par RedTeamCUA.
AWS
Configurez NETWORK_INTERFACE_MAP :
Configurez le NETWORK_INTERFACE_MAP dans aws_config.py en fonction de vos propres instances AWS.
Configurez votre groupe de sécurité :
Il est important de configurer un groupe de sécurité qui autorise l'accès légitime à vos instances hébergées tout en bloquant les tentatives d'accès non autorisées. Cela est crucial, car l'AMI, par défaut, utilise uniquement une authentification de base par mot de passe, relativement facile à compromettre.
Votre machine locale accédera aux services hébergés sur AWS via des connexions HTTP/TCP. Par conséquent, vous devez explicitement autoriser l'accès aux ports suivants : 8092, 6379, 9999, 5000, 9222, 8091, 2999 et 3000, qui sont utilisés par WebArena ou TheAgentCompany.
De plus, nous utilisons SSH pour modifier directement la base de données sous-jacente afin de simuler des scénarios d'injection. Ainsi, l'accès SSH depuis votre adresse IP locale doit également être autorisé dans les paramètres du groupe de sécurité.
Configurez vos identifiants AWS à l'aide de aws configure, qui vous demandera :
scripts/run_gpt54_2step.sh montre un exemple d'exécution de GPT-5.4 CUA sur StepJack.
Définir les variables d'environnement
Clés API CUA
# For GPT
unset OPENAI_BASE_URL
export OPENAI_API_KEY="sk-proj-XXXX"
# For Kimi
export KIMI_API_KEY='sk-XXXX'
# For Qwen
export OPENAI_BASE_URL="https://dashscope-us.aliyuncs.com/compatible-mode/v1"
export OPENAI_API_KEY="sk-XXXX"
# For Claude
export ANTHROPIC_API_KEY='sk-XXXX'
Identifiants AWS
export AWS_REGION='XX'
export AWS_ACCESS_KEY='XX'
export AWS_SECRET_KEY='XX'
Exécuter les expériences
# For GPT
python run_gpt54_multienv.py \
--observation_type screenshot \
--agent_type GPT54Agent \
--headless \
--model gpt-5.4-mini-2026-03-17 \
--result_dir ./results_gpt54 \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
# For Kimi
python run_kimi_multienv.py \
--observation_type screenshot \
--agent_type KimiAgent \
--headless \
--model Kimi-K2.5 \
--result_dir ./results_kimi \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
# For Qwen
python run_qwen35vl_multienv.py \
--observation_type screenshot \
--agent_type Qwen35VLAgent \
--headless \
--model qwen3.5-plus-2026-02-15 \
--coord relative \
--enable_thinking \
--result_dir ./results_qwen \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
# For Claude
python run_claude_multienv.py \
--observation_type screenshot \
--action_space pyautogui \
--agent_type AnthropicAgent \
--api_provider anthropic \
--headless \
--model {claude-sonnet-4-6 | claude-haiku-4-5} \
--result_dir ./results_claude \
--test_all_meta_path "./dataset/{subset}/{platform_instruction}/test_{k}_step.json" \
--test_config_base_dir "./dataset/{subset}/{platform_instruction}" \
--max_steps {15*k} \
--sleep_after_execution 4 \
--provider_name aws \
--num_envs 12 \
--aws_ami {reddit | agentcompany}
Le code du pipeline de décomposition automatique se trouve dans auto_decomp/.
cd auto_decomp. Ajoutez de nouveaux objectifs adversariaux à décomposer dans adv_goals.py.python iterative_refinement.py -k {k} pour chaque k \in \{2, 3\}. Sortie : ir/goal_*_k{k}_N20_K3_all.json, contenant les résultats de l'étape 1.python selected_examples/select_examples.py. Sortie : selected_examples/selected_examples.json, qui sélectionne les 10 meilleurs exemples de l'étape 1.StepJack s'appuie sur RedTeamCUA (Liao et al., 2025 ; arXiv:2505.21936), lui-même dérivé d'OSWorld (XLANG NLP Lab, 2024). Les deux sources en amont sont sous licence Apache-2.0.
Certains répertoires de données StepJack ne comportent pas d'en-tête par fichier, car ils contiennent des fichiers binaires ou des fixtures ne relevant pas du code source. Leur provenance est indiquée ici à des fins d'attribution :
adv/TheAgentCompany_OwnCloud/file_to_upload/ — copié depuis RedTeamCUA (adv/TheAgentCompany_OwnCloud/file_to_upload/), à l'origine sous licence Apache-2.0.adv/upload_file/ — contient deux fixtures de clés SSH (system/authorized_keys, system/id_rsa) servant de charges utiles de téléversement dans les configurations de tâches du jeu de données. Curation StepJack (les valeurs sont des chaînes factices, pas de vraies clés). Publié sous la licence figurant dans le fichier LICENSE à la racine de cette arborescence source.adv/upload_file_dir/ — Original StepJack. Absent de RedTeamCUA. Publié sous la licence figurant dans le fichier LICENSE à la racine de cette arborescence source.dataset/ — adapté depuis les evaluation_examples/ de RedTeamCUA avec des modifications substantielles. Les exemples d'évaluation de RedTeamCUA sont publiés sous conformément à leur . Les modifications et ajouts de StepJack aux configurations de tâches sont publiés sous la licence figurant dans le fichier à la racine de cette arborescence source.Arguments :
single_step (k=1), w_urgent (Urgent = Y), wo_urgent (Urgent = N).forum, forum_follow, owncloud, owncloud_follow. Ils correspondent à 2 plateformes et 2 types d'instructions utilisateur.(subset, k) valides : single_step uniquement avec k=1 ; w_urgent et wo_urgent uniquement avec k \in \{2,3\}.reddit pour la plateforme forum ou agentcompany pour la plateforme owncloud.LICENSEdesktop_env/ — copié/adapté depuis le desktop_env/ de RedTeamCUA, lui-même dérivé d'OSWorld ; les deux sources en amont sont sous licence Apache-2.0. Les en-têtes par fichier source (.py / .sh / .yml / .service / .txt) indiquent la provenance spécifique de chaque fichier (copie ou modifié par StepJack). Les fichiers de documentation associés (par ex. README.md, DOCKER_GUIDELINE.md, INSTALL_*.md) sont copiés depuis RedTeamCUA.