
Framework de evaluación comparativa para evaluar agentes de IA de uso de computadora frente a inyección indirecta de prompts en múltiples pasos, con descomposición automática de objetivos adversariales y entornos de prueba en sandbox de AWS.
Primero, instala todas las dependencias y asegúrate de que estás ejecutando Python 3.10.
conda create -n stepjack python=3.10
conda activate stepjack
pip install -r requirements.txt
Utilizamos el entorno de AWS proporcionado por RedTeamCUA.
AWS
Configura NETWORK_INTERFACE_MAP:
Configura NETWORK_INTERFACE_MAP en aws_config.py según tus propias instancias de AWS.
Configura tu grupo de seguridad:
Es importante configurar un grupo de seguridad que permita el acceso legítimo a tus instancias alojadas mientras bloquea los intentos de acceso no autorizados. Esto es crucial porque la AMI, de forma predeterminada, usa solo autenticación básica basada en contraseña, que es relativamente fácil de comprometer.
Tu máquina local accederá a los servicios alojados en AWS a través de conexiones HTTP/TCP. Por lo tanto, debes permitir explícitamente el acceso a los siguientes puertos: 8092, 6379, 9999, 5000, 9222, 8091, 2999 y 3000, que son utilizados por WebArena o TheAgentCompany.
Además, usamos SSH para modificar directamente la base de datos subyacente con el fin de simular escenarios de inyección. Por ello, el acceso SSH desde tu dirección IP local también debe estar permitido en la configuración del grupo de seguridad.
Configura tus credenciales de AWS usando aws configure, que te solicitará:
scripts/run_gpt54_2step.sh muestra un ejemplo de cómo ejecutar GPT-5.4 CUA en StepJack.
Establece las variables de entorno
Claves de API de 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'
Credenciales de AWS
export AWS_REGION='XX'
export AWS_ACCESS_KEY='XX'
export AWS_SECRET_KEY='XX'
Ejecuta los experimentos
# 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}
El código del pipeline de descomposición automática está en auto_decomp/.
cd auto_decomp. Añade nuevos objetivos adversariales para descomponer en adv_goals.py.python iterative_refinement.py -k {k} para cada k \in \{2, 3\}. Salida: ir/goal_*_k{k}_N20_K3_all.json, que contiene los resultados de la Etapa 1.python selected_examples/select_examples.py. Salida: selected_examples/selected_examples.json, que selecciona los 10 mejores ejemplos de la Etapa 1.StepJack se basa en RedTeamCUA (Liao et al., 2025; arXiv:2505.21936), que a su vez se deriva de OSWorld (XLANG NLP Lab, 2024). Ambas fuentes upstream están licenciadas bajo Apache-2.0.
Algunos directorios de datos de StepJack no llevan cabecera por archivo porque contienen archivos binarios o fixtures que no son código fuente. Su linaje se registra aquí para atribución:
adv/TheAgentCompany_OwnCloud/file_to_upload/ — copiado de RedTeamCUA (adv/TheAgentCompany_OwnCloud/file_to_upload/), originalmente licenciado bajo Apache-2.0.adv/upload_file/ — contiene dos fixtures de claves SSH (system/authorized_keys, system/id_rsa) utilizados como cargas de subida por las configuraciones de tareas del dataset. Curado por StepJack (los valores son cadenas de marcador de posición, no claves reales). Publicado bajo la licencia que se encuentra en el archivo LICENSE en el directorio raíz de este árbol de código fuente.adv/upload_file_dir/ — original de StepJack. No está presente en RedTeamCUA. Publicado bajo la licencia que se encuentra en el archivo LICENSE en el directorio raíz de este árbol de código fuente.dataset/ — adaptado de evaluation_examples/ de RedTeamCUA con modificaciones sustanciales. Los ejemplos de evaluación de RedTeamCUA se publican bajo según su . Las modificaciones y adiciones de StepJack a las configuraciones de tareas se publican bajo la licencia que se encuentra en el archivo en el directorio raíz de este árbol de código fuente.Argumentos:
single_step (k=1), w_urgent (Urgente = Y), wo_urgent (Sin urgente = N).forum, forum_follow, owncloud, owncloud_follow. Corresponden a 2 plataformas y 2 tipos de instrucciones de usuario.(subset, k): single_step solo con k=1; w_urgent y wo_urgent solo con k \in \{2,3\}.reddit para la plataforma forum o agentcompany para la plataforma owncloud.LICENSEdesktop_env/ — copiado/adaptado del desktop_env/ de RedTeamCUA, derivado a su vez de OSWorld; ambas fuentes upstream están licenciadas bajo Apache-2.0. Las cabeceras por archivo de código fuente (.py / .sh / .yml / .service / .txt) registran el linaje específico de cada archivo (copia o modificado por StepJack). Los archivos de documentación complementarios (p. ej., README.md, DOCKER_GUIDELINE.md, INSTALL_*.md) se copian de RedTeamCUA.