Strands-based agents and harnesses for agentic benchmarks.
See the codeA repository for Strands-based agents and harnesses for agentic benchmarks. It is a uv workspace: the repository root coordinates one or more member packages. Setup, configuration, and usage live in each agent's README.
A lean autonomous-coding agent achieving state-of-the-art performance across software engineering benchmarks.
For more details, see the technical report.
For a summary of the work, see the post on Amazon-Science.
Simple Strands Agent (SSA) is a minimal, hackable harness for autonomous software engineering. It pairs frontier LLMs (Claude, GPT, Gemini, and open-weight models via Bedrock/LiteLLM/vLLM) with bash and file-editing tools inside isolated Docker environments to analyze codebases, diagnose bugs, write patches, and verify solutions.
The harness is built for rapid experimentation — swap models, tune prompts, adjust tool behavior, and benchmark all in a single config change. Despite its simplicity, SSA delivers SOTA-level results on widely-used coding benchmarks including SWE-Bench Verified, SWE-Bench Pro, and Terminal Bench 2.
bash, str_replace_editor, think, and submit primitives with per-tool output clipping and timeout controls.git clone https://github.com/strands-labs/benchmark-harnesses.git
cd benchmark-harnesses
# Recommended: sync the workspace (creates .venv with this package + its deps)
uv sync
source .venv/bin/activate
# Or install just this package with pip
pip install -e .
uv run python -m ssa.run \
--config-name=default.yaml \
dataset.name=sbv \
dataset.identifier=django__django-15987 \
env.env_type=docker \
env.docker.workdir="/testbed"
We provide simple scripts for running instances from SWE-Bench Verified, SWE-Bench Pro, and Terminal-Bench-2 (and see this for running Terminal-Bench-2 with SSA's harbor plugin).
SSA uses Hydra for configuration. All configs live in src/ssa/configs/, and any parameter can be overridden from the command line. Start from src/ssa/configs/default.yaml for the full schema, then mix in a model-specific config as needed.
SSA's design and execution loop is summarized in the following figure:
SWE-Bench Verified:
SWE-Bench Pro:
Terminal Bench 2:
The code is structured as follows:
src/ssa/
├── agent.py / agent_runner.py # Core agent loop
├── models/ # Model adapters (Anthropic, OpenAI, Bedrock, ...)
├── tools/ # bash, str_replace_editor, think, submit
├── environments/ # Docker-backed sandbox
├── conversation_manager/ # Context management & truncation
├── hooks/ • callbacks/ • metrics/ # Observability and instrumentation
├── prompts/ • configs/ # System prompts and Hydra configs
└── run.py # Entry point
scripts/
├── swe_verified/ • swe_pro/ • tb2/
Please consider citing as follows, if you find SSA useful!
@misc{2026simplestrandsagent,
title={Dissecting model behavior through agent trajectories},
author={Gaurav Gupta and Vatshank Chaturvedi and Jun Huan and Anoop Deoras},
year={2026},
eprint={2606.17454},
archivePrefix={arXiv},
url={https://arxiv.org/abs/2606.17454},
}
A long-horizon agent that learns unfamiliar interactive environments from its own logs — 99.95% on the public ARC-AGI-3 game set.
ARC-AGI-3 is a set of interactive games that ship with no instructions: to win one, an agent has to work out what the controls do, what it is looking at, and what counts as progress — by playing. The benchmark exists to measure learning from experience.
This harness pairs the Strands Agents SDK with Amazon Bedrock to play those games from a blank slate. The board is never pasted into the prompt. Instead the runner appends every observation to an append-only logs.txt and hands the agent the path to that file; the agent writes and runs its own code against the log to extract what it needs, forms hypotheses about the mechanics, tests them, and keeps the scripts that prove useful. Context stays small while history grows without bound, and the agent's accumulated scripts become its memory.
It is built on PRO-LONG, which contributes the game loop and the append-only log.
ACTION1..ACTION6 with no meaning attached, cell values are unnamed, and no game structure is asserted. One prompt serves all 25 games.read_file, write_file, edit_file, grep, glob_files, bash) execute inside bubblewrap with no network and no cloud credentials; the only channel back to the runner is actions.json.Claude Opus 5 (High) on Amazon Bedrock, public game set, competition mode:
| score | 99.95% |
| levels | 183 / 183 |
| environments | 25 / 25 |
| scorecard | 8a10b024-3560-448f-ac31-becc48affe5b |
All 25 games rendered from the run's own logs (animation, 4 MB).
prolong_agent/
├── agent/ # Strands + Bedrock agent, sandboxed tools, orchestrator, prompts
├── environment/ # ARC-AGI-3 game loop and API wrapper
└── metrics/ • utils/
Setup, flags, cost guidance and a breakdown of what is new versus PRO-LONG are in the agent README.
Note: this agent is a standalone uv project rather than a workspace member, because it pins
strands-agents==1.50.1and the workspace's single lockfile already pins==1.45.0forsimple-strands-agent. It has its ownuv.lock— the one used for the run above — so build it withcd arc-agi-3-agent && uv sync --frozen.
Agents in this repository are given access to shell tools. In practice, this means the model can run commands in the environment where the agent is started.
This is useful for experiments and benchmarking, but it also means you should treat the agent like you would treat any program with shell access: it may read files, modify files, delete data, install packages, or accidentally expose information from the environment.
For normal use, we recommend running agents in an isolated environment rather than directly on your machine. Our experiments and benchmarks are run inside Docker containers. You should avoid running agents in an environment that contains secrets, credentials, personal files, production data, or anything you would not want the model to access.
A good default setup is:
Agents will usually behave as instructed, but shell access is powerful. Use the same caution you would use when running code from an automated system.
Python
99.4%
Strands-based agents and harnesses for agentic benchmarks.
See the codeA repository for Strands-based agents and harnesses for agentic benchmarks. It is a uv workspace: the repository root coordinates one or more member packages. Setup, configuration, and usage live in each agent's README.
A lean autonomous-coding agent achieving state-of-the-art performance across software engineering benchmarks.
For more details, see the technical report.
For a summary of the work, see the post on Amazon-Science.
Simple Strands Agent (SSA) is a minimal, hackable harness for autonomous software engineering. It pairs frontier LLMs (Claude, GPT, Gemini, and open-weight models via Bedrock/LiteLLM/vLLM) with bash and file-editing tools inside isolated Docker environments to analyze codebases, diagnose bugs, write patches, and verify solutions.
The harness is built for rapid experimentation — swap models, tune prompts, adjust tool behavior, and benchmark all in a single config change. Despite its simplicity, SSA delivers SOTA-level results on widely-used coding benchmarks including SWE-Bench Verified, SWE-Bench Pro, and Terminal Bench 2.
bash, str_replace_editor, think, and submit primitives with per-tool output clipping and timeout controls.git clone https://github.com/strands-labs/benchmark-harnesses.git
cd benchmark-harnesses
# Recommended: sync the workspace (creates .venv with this package + its deps)
uv sync
source .venv/bin/activate
# Or install just this package with pip
pip install -e .
uv run python -m ssa.run \
--config-name=default.yaml \
dataset.name=sbv \
dataset.identifier=django__django-15987 \
env.env_type=docker \
env.docker.workdir="/testbed"
We provide simple scripts for running instances from SWE-Bench Verified, SWE-Bench Pro, and Terminal-Bench-2 (and see this for running Terminal-Bench-2 with SSA's harbor plugin).
SSA uses Hydra for configuration. All configs live in src/ssa/configs/, and any parameter can be overridden from the command line. Start from src/ssa/configs/default.yaml for the full schema, then mix in a model-specific config as needed.
SSA's design and execution loop is summarized in the following figure:
SWE-Bench Verified:
SWE-Bench Pro:
Terminal Bench 2:
The code is structured as follows:
src/ssa/
├── agent.py / agent_runner.py # Core agent loop
├── models/ # Model adapters (Anthropic, OpenAI, Bedrock, ...)
├── tools/ # bash, str_replace_editor, think, submit
├── environments/ # Docker-backed sandbox
├── conversation_manager/ # Context management & truncation
├── hooks/ • callbacks/ • metrics/ # Observability and instrumentation
├── prompts/ • configs/ # System prompts and Hydra configs
└── run.py # Entry point
scripts/
├── swe_verified/ • swe_pro/ • tb2/
Please consider citing as follows, if you find SSA useful!
@misc{2026simplestrandsagent,
title={Dissecting model behavior through agent trajectories},
author={Gaurav Gupta and Vatshank Chaturvedi and Jun Huan and Anoop Deoras},
year={2026},
eprint={2606.17454},
archivePrefix={arXiv},
url={https://arxiv.org/abs/2606.17454},
}
A long-horizon agent that learns unfamiliar interactive environments from its own logs — 99.95% on the public ARC-AGI-3 game set.
ARC-AGI-3 is a set of interactive games that ship with no instructions: to win one, an agent has to work out what the controls do, what it is looking at, and what counts as progress — by playing. The benchmark exists to measure learning from experience.
This harness pairs the Strands Agents SDK with Amazon Bedrock to play those games from a blank slate. The board is never pasted into the prompt. Instead the runner appends every observation to an append-only logs.txt and hands the agent the path to that file; the agent writes and runs its own code against the log to extract what it needs, forms hypotheses about the mechanics, tests them, and keeps the scripts that prove useful. Context stays small while history grows without bound, and the agent's accumulated scripts become its memory.
It is built on PRO-LONG, which contributes the game loop and the append-only log.
ACTION1..ACTION6 with no meaning attached, cell values are unnamed, and no game structure is asserted. One prompt serves all 25 games.read_file, write_file, edit_file, grep, glob_files, bash) execute inside bubblewrap with no network and no cloud credentials; the only channel back to the runner is actions.json.Claude Opus 5 (High) on Amazon Bedrock, public game set, competition mode:
| score | 99.95% |
| levels | 183 / 183 |
| environments | 25 / 25 |
| scorecard | 8a10b024-3560-448f-ac31-becc48affe5b |
All 25 games rendered from the run's own logs (animation, 4 MB).
prolong_agent/
├── agent/ # Strands + Bedrock agent, sandboxed tools, orchestrator, prompts
├── environment/ # ARC-AGI-3 game loop and API wrapper
└── metrics/ • utils/
Setup, flags, cost guidance and a breakdown of what is new versus PRO-LONG are in the agent README.
Note: this agent is a standalone uv project rather than a workspace member, because it pins
strands-agents==1.50.1and the workspace's single lockfile already pins==1.45.0forsimple-strands-agent. It has its ownuv.lock— the one used for the run above — so build it withcd arc-agi-3-agent && uv sync --frozen.
Agents in this repository are given access to shell tools. In practice, this means the model can run commands in the environment where the agent is started.
This is useful for experiments and benchmarking, but it also means you should treat the agent like you would treat any program with shell access: it may read files, modify files, delete data, install packages, or accidentally expose information from the environment.
For normal use, we recommend running agents in an isolated environment rather than directly on your machine. Our experiments and benchmarks are run inside Docker containers. You should avoid running agents in an environment that contains secrets, credentials, personal files, production data, or anything you would not want the model to access.
A good default setup is:
Agents will usually behave as instructed, but shell access is powerful. Use the same caution you would use when running code from an automated system.
Python
99.4%