
Framework de benchmark para avaliar agentes de IA de uso de computador contra injeção indireta de prompt em múltiplas etapas, com decomposição automática de objetivos adversariais e ambientes de teste em sandbox da AWS.
Primeiro, instale todas as dependências e garanta que você está usando Python 3.10.
conda create -n stepjack python=3.10
conda activate stepjack
pip install -r requirements.txt
Usamos o ambiente AWS fornecido pelo RedTeamCUA.
AWS
Configure o NETWORK_INTERFACE_MAP:
Configure o NETWORK_INTERFACE_MAP em com base nas suas próprias instâncias AWS.
Configure seu grupo de segurança:
É importante configurar um grupo de segurança que permita acesso legítimo às suas instâncias hospedadas enquanto bloqueia tentativas de acesso não autorizado. Isso é crucial porque a AMI, por padrão, usa apenas autenticação básica baseada em senha, que é relativamente fácil de comprometer.
Sua máquina local acessará os serviços hospedados na AWS por meio de conexões HTTP/TCP. Portanto, você deve permitir explicitamente o acesso às seguintes portas: 8092, 6379, 9999, 5000, 9222, 8091, 2999 e 3000, que são usadas pelo WebArena ou pelo TheAgentCompany.
Além disso, usamos SSH para modificar diretamente o banco de dados subjacente, a fim de simular cenários de injeção. Sendo assim, o acesso SSH a partir do seu endereço IP local também deve ser permitido nas configurações do grupo de segurança.
Configure suas credenciais AWS usando aws configure, que solicitará:
scripts/run_gpt54_2step.sh mostra um exemplo de execução do GPT-5.4 CUA no StepJack.
Defina as Variáveis de Ambiente
Chaves de 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'
Credenciais AWS
export AWS_REGION='XX'
export AWS_ACCESS_KEY='XX'
export AWS_SECRET_KEY='XX'
Execute os 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}
Argumentos:
single_step (k=1), w_urgent (Urgente = Y), wo_urgent (Urgente = N).forum, forum_follow, owncloud, owncloud_follow. Eles correspondem a 2 plataformas e 2 tipos de instruções do usuário.(subset, k) válidas: single_step apenas com k=1; w_urgent e wo_urgent apenas com k \in \{2,3\}.reddit para a plataforma ou para a plataforma .O código do Pipeline de Decomposição Automática está em auto_decomp/.
cd auto_decomp. Adicione novos objetivos adversariais a serem decompostos em adv_goals.py.python iterative_refinement.py -k {k} para cada k \in \{2, 3\}. Saída: ir/goal_*_k{k}_N20_K3_all.json, contendo os resultados da Etapa 1.python selected_examples/select_examples.py. Saída: selected_examples/selected_examples.json que seleciona os 10 melhores exemplos da Etapa 1.StepJack é construído sobre o RedTeamCUA (Liao et al., 2025; arXiv:2505.21936), que por sua vez é derivado do OSWorld (XLANG NLP Lab, 2024). Ambas as fontes upstream são licenciadas sob Apache-2.0.
Alguns diretórios de dados do StepJack não possuem cabeçalho por arquivo porque contêm binários ou fixtures que não são código-fonte. Sua linhagem é registrada aqui para atribuição:
adv/TheAgentCompany_OwnCloud/file_to_upload/ — copiado do RedTeamCUA (adv/TheAgentCompany_OwnCloud/file_to_upload/) originalmente licenciado sob Apache-2.0.adv/upload_file/ — contém dois fixtures de chaves SSH (system/authorized_keys, system/id_rsa) usados como payloads de upload pelas configurações de tarefa do dataset. Curado pelo StepJack (os valores são strings de espaço reservado, não chaves reais). Liberado sob a licença encontrada no arquivo LICENSE no diretório raiz desta árvore de código-fonte.adv/upload_file_dir/ — Original do StepJack. Não presente no RedTeamCUA. Liberado sob a licença encontrada no arquivo LICENSE no diretório raiz desta árvore de código-fonte.dataset/ — adaptado dos evaluation_examples/ do RedTeamCUA com modificações substanciais. Os exemplos de avaliação do RedTeamCUA são publicados sob CC-BY-4.0 de acordo com seu croissant_metadata.json. As modificações e adições do StepJack às configurações de tarefa são liberadas sob a licença encontrada no arquivo LICENSE no diretório raiz desta árvore de código-fonte.desktop_env/ — copiado/adaptado do desktop_env/ do RedTeamCUA, por sua vez derivado do OSWorld; ambas as fontes upstream são licenciadas sob Apache-2.0. Os cabeçalhos por arquivo de código-fonte (.py / .sh / .yml / .service / .txt) registram a linhagem específica de cada arquivo (cópia ou modificado pelo StepJack). Os arquivos de documentação complementar (ex.: README.md, DOCKER_GUIDELINE.md, INSTALL_*.md) são copiados do RedTeamCUA.forumagentcompanyowncloud