I checked why Kiro CLI 17 models had mixed pass/fail results on the VPC Flow Logs diagnostic task in aws-bench

I checked why Kiro CLI 17 models had mixed pass/fail results on the VPC Flow Logs diagnostic task in aws-bench

I extracted one VPC Flow Logs diagnostic task from the aws-bench public dataset and had each of the 17 models selectable in Kiro CLI solve it three times each under identical conditions. Even answers that correctly identified valid Flow Logs kept failing, and whether a model passed or failed came down to whether it noticed two confusingly similar log groups. I will verify that dividing line using the judgment reasons, answers, and execution logs.
2026.08.01

This page has been translated by machine translation. View original

Introduction

I have written three articles so far about aws-bench, an AI agent benchmark published by AWS. The first article covered the benchmark's mechanism, the second covered building a mini test environment running on a single account, and the third covered the results of Step Functions diagnostic tasks measured in that mini environment.

https://dev.classmethod.jp/articles/aws-bench-overview/

https://dev.classmethod.jp/articles/aws-bench-mini-tasks-local-runner/

https://dev.classmethod.jp/articles/aws-bench-diagnose-sfn-kiro-cli-17models/

This time as well, the results were measured in the same mini test environment. The task covered is check-vpc-flow-log-destinations. It is a task that investigates why a VPC's Flow Log appears to be delivered to multiple destinations. In the previous Step Functions task, all 17 models answered correctly across all 3 runs, but this time correct answers fell to less than half.

Hereafter, 1 cell refers to 1 run of 1 model, and the denominator 51 represents 17 models × 3 runs.

Item Details
Target models 17. All models selectable from kiro-cli at the time of measurement, excluding auto and qwen3-coder-next
Number of runs 3 runs under identical conditions. 51 cells per task
Agent kiro-cli 2.15.1 run headless. Isolated in a Docker container, with no mount of benchmark materials from the host side
AWS permissions Read-only role only. This task involves diagnostics only, with no resource modifications
Per-cell limit 300 seconds for the agent. Shortened from the official 600 seconds, but all 51 cells completed within the limit
Judgment Fixed to claude-sonnet-5 on the host side
Credits A comparative value obtained by multiplying the Credits from headless execution by the model multiplier. Not converted to a monetary amount
Measurement period 2026-07-29 14:16 to 2026-07-30 03:34

The task definition references dataset commit 2daf77d2d41c21bae00bf8227fc463be51f721d0. The benchmark itself is edfab47710a505b7e73de66584a84f8b9bb6e26c. Note that claude-sonnet-5 used for judgment is also included among the 17 models being evaluated. The impact of this overlap on judgment has not been verified in this article.

Log group names, Flow Log IDs, and bucket names in the article have been redacted.

Comparisons are made only within this task. Results will not be combined with other tasks, nor will overall model rankings be produced. Differences from the previous task will be mentioned in the summary.

Task Overview

The following is a summary of the task definition. The original text of the instructions and reference answers can be found at the linked page.

https://github.com/aws-bench/aws-bench-datasets/tree/2daf77d2d41c21bae00bf8227fc463be51f721d0/tasks/troubleshooting-multiservice/check-vpc-flow-log-destinations

The type is introspection (read and diagnostics only), and the target services are VPC Flow Logs, S3, and CloudWatch Logs. The region is us-east-1, and the official timeouts are 600 seconds for the agent and 240 seconds for judgment.

Pre-deployed Resources

The resources to be diagnosed are created by a single CDK stack included with the scenario.

Resource Role
VPC (10.2.0.0/16, 2 AZs, public subnets only, no NAT) Diagnostic target
S3 bucket Actual destination for Flow Log
1 VPC Flow Log (destination: S3, all traffic, aggregation interval 600 seconds) The only active Flow Log
2 CloudWatch Logs log groups Named to appear related to Flow Logs, but not written to by any Flow Log

Planted Anomaly

This task has no broken resources and no setup script. A confusing state is simply left in place.

The configured destination is only one S3 bucket. However, because two log groups exist with names ending in VpcFlowLogLogGroup1 and VpcFlowLogLogGroup2, it appears as though there are multiple destinations. According to a comment on the CDK side, these are assumed to be remnants of a previously failed stack deployment.

There is no data remaining at the destinations. The Flow Log is ACTIVE and DeliverLogsStatus is also SUCCESS, but since there are no instances in the VPC and zero ENIs, there are no objects in the S3 bucket. Both log groups also have empty log streams. Determining which destination is actually being used must be based on configuration rather than actual data.

This is not a state unique to the mini environment. The CDK stack only creates a VPC, a bucket, one Flow Log, and two log groups; even when deploying the entire scenario following official procedures, no resources subject to recording are placed in this VPC. This is a task that requires diagnosis in a state where no valid log records exist.

Request to the Agent

The summary of the instructions is: "The Flow Log for a specified VPC appears to be going to multiple destinations. Please verify what is actually configured and which ones are truly in use." After replacing the placeholder with the actual VPC ID, it is passed to the agent in the isolated container. The agent investigates AWS using read-only temporary credentials and writes the final answer to /logs/agent/agent-output.txt. Reference answers and rubrics are not passed to the container.

How Answers Are Judged

Judgment is binary: whether the answer is equivalent to the reference answer or not. There is no partial credit.

Item Details
Judgment criterion answers_equivalent. Whether a practitioner following the answer would reach the same conclusion and take the same actions as one following the reference answer
Rubric judge_prompt.md. A file common to all 21 tasks under troubleshooting-multiservice, with no task-specific content
What is passed to the judgment model Only the agent's answer and the reference answer. The actual AWS state is not passed

The reference answer raises two points.

  1. There is only one active Flow Log, delivering all traffic to an S3 bucket at 600-second intervals
  2. Two log groups with names that appear to be for Flow Logs exist, but neither has Flow Log data written to it

The rubric marks the following types of answers as failing:

  • The judgment of whether something is broken or normal is reversed
  • The cause is wrong, and the explanation neither describes the problem nor leads to resolution
  • The answer contradicts the reference answer regarding the actual state of the infrastructure or resource configuration
  • The answer lists more resources than the reference answer indicates
  • The proposed fix would not actually work (missing parameters, wrong target)
  • A primary cause identified in the reference answer is missing
  • False information about the infrastructure is asserted with certainty, leading practitioners astray

Since this task does not require proposing a fix, what is essentially being tested is alignment on cause and configuration. The majority of judgment reasons cited were "contradicts the reference answer regarding the actual state of the infrastructure or resource configuration" and "a primary cause identified in the reference answer is missing."

Judgment reasons that referenced "lists more resources than the reference answer indicates" appeared in 4 out of 51 cases. Of these, 2 were considered and still resulted in a pass, while the remaining 2 (claude-haiku-4.5 run 3 and claude-opus-4.7 run 2) used this clause as grounds for a fail.

Official Judgment Results

Correct answers totaled 22 out of 51 cases, with 0 timeouts.

Model Multiplier Run 1 Run 2 Run 3 Correct
claude-opus-4.5 2.2 pass pass pass 3/3
claude-opus-4.6 2.2 pass pass pass 3/3
claude-opus-4.8 2.2 pass pass pass 3/3
claude-opus-5 2.2 pass pass pass 3/3
claude-opus-4.7 2.2 pass fail pass 2/3
gpt-5.6-sol 2.4 pass pass fail 2/3
deepseek-3.2 0.25 pass fail pass 2/3
claude-haiku-4.5 0.4 pass fail fail 1/3
claude-sonnet-5 1.3 fail pass fail 1/3
gpt-5.6-terra 1.2 fail pass fail 1/3
glm-5 0.5 fail fail pass 1/3
claude-sonnet-4 1.3 fail fail fail 0/3
claude-sonnet-4.5 1.3 fail fail fail 0/3
claude-sonnet-4.6 1.3 fail fail fail 0/3
gpt-5.6-luna 0.6 fail fail fail 0/3
minimax-m2.1 0.15 fail fail fail 0/3
minimax-m2.5 0.25 fail fail fail 0/3

In this task, results diverged along grade lines within the Claude family. The 5 Opus models achieved 14 correct out of 15 cases, while the 4 Sonnet models achieved only 1 correct out of 12 cases. The Opus/Sonnet distinction is an observation limited to this task.

What Determined Pass or Fail

Whether or not the two log groups that were not configured were specifically named was what determined pass or fail. The presence or absence of naming and the official judgment of pass/fail matched across all 51 cases.

The primary finding — that there is only one active Flow Log, directed to S3 — was identified by nearly all answers, including those that failed. The difference came down to whether the answer could explain the cause of why the user perceived "multiple destinations."

The passing answers specifically named these two log groups. The following is an excerpt from claude-opus-5 run 1:

NOT USED (2):
  CWL group ExampleStack-Vpc-us-east-1-VpcFlowLogLogGroup1
  CWL group ExampleStack-Vpc-us-east-1-VpcFlowLogLogGroup2

The failing answers concluded by stating that no destination other than S3 exists. The following is an excerpt from gpt-5.6-luna run 1:

No separate CloudWatch Logs, Kinesis Data Firehose, or second S3 flow-log
destination is configured.

How the Two Were Found

These two log groups are not configured as the destination of any Flow Log. Since they cannot be traced from ec2:DescribeFlowLogs results, it is necessary to investigate the CloudWatch Logs side independently. From the execution logs of each run, the methods used to investigate log groups were classified.

Method of investigating log groups pass fail
Listed all without filtering by name 20 5
Filtered by specifying a prefix 1 11
Never queried at all 1 13

The 12 cases that filtered by prefix guessed values like /aws/vpc or flow, and got no results. The actual names begin with the stack name, ending in VpcFlowLogLogGroup1. Guessing the correct prefix is difficult.

The 2 exceptions on the passing side found them via CloudFormation. gpt-5.6-sol run 2 used cloudformation list-stack-resources, and gpt-5.6-terra run 2 used describe-stack-resources and get-template to obtain the names of both log groups, then confirmed them by name.

The 5 cases that listed all but still failed either ended without mentioning the two groups despite their presence in the list, or cited unrelated log groups.

Breakdown of the 29 Failed Cases

Category Count
Stated that no CloudWatch destination exists, or did not mention the two log groups 23
Named log groups unrelated to this task 6

No answers were overturned upon reviewing the judgments, and the official judgment results are reflected directly in the tallies.

The fact that destinations were empty was not a reason for failure. 42 out of 51 answers mentioned that the destinations had no data, split between 21 pass and 21 fail. The judgment reasons also did not cite emptiness as grounds for failure.

For the 23 cases in the former category, the judgment model wrote "contradicts the actual state." The statement that they were not configured as a destination is itself factual, but many answers stated "there are no log groups for Flow Logs." The log groups do exist — they are simply not configured as Flow Log destinations.

The 6 cases in the latter category involve circumstances specific to the mini environment. The existing AWS account running the mini environment had one log group with a Flow Log-like name that was unrelated to this task. These 6 cases found it and reported it as a confusing destination. The judgment model ruled them as failures because both the count and the names differed from the reference answer. The affected cases are claude-sonnet-5 runs 1 and 3, claude-opus-4.7 run 2, claude-sonnet-4.6 runs 2 and 3, and gpt-5.6-sol run 3.

This noise does not occur with the official procedure, since clean test accounts are used for each scenario.

Credits and Time per Correct Answer

For only the 22 cases judged as correct, credits and time per correct answer were calculated. The table is sorted in descending order of credits.

Model Multiplier Correct count Credits per correct answer Time per correct answer
claude-opus-4.7 2.2 2/3 10.44 131 seconds
claude-opus-5 2.2 3/3 10.00 150 seconds
claude-opus-4.8 2.2 3/3 8.96 143 seconds
claude-opus-4.6 2.2 3/3 6.37 105 seconds
claude-opus-4.5 2.2 3/3 4.39 77 seconds
gpt-5.6-sol 2.4 2/3 3.97 120 seconds
claude-sonnet-5 1.3 1/3 2.73 136 seconds
glm-5 0.5 1/3 1.56 76 seconds
gpt-5.6-terra 1.2 1/3 1.51 72 seconds
deepseek-3.2 0.25 2/3 0.76 200 seconds
claude-haiku-4.5 0.4 1/3 0.19 63 seconds

The value for gpt-5.6-terra does not reflect the Amazon Bedrock price reduction announced on July 30, 2026. The measurement was conducted before the announcement, and no multiplier revision from the Kiro side has been announced either. If we assume that Terra's 20% price reduction is reflected equally in the multiplier, the credits per correct answer would be approximately 1.21.

https://dev.classmethod.jp/articles/bedrock-openai-gpt56-terra-luna-price-update/

The 6 models with zero correct answers were excluded from the table, as a per-answer value cannot be calculated. The credits spent on these 6 models produced not a single correct answer.

Even among the 5 Opus models with the same 2.2 multiplier, credits per correct answer ranged from 4.39 to 10.44 — a 2.4x spread. claude-opus-4.5 achieved correct answers in all 3 runs while having the lowest credits and time of all. The older 4.5 and 4.6 versions were cheaper, while the 3 models from 4.7 onward clustered between 8.96 and 10.44.

Summary

Most models identified the primary findings. What determined pass or fail was whether the model went to look in places that cannot be traced from Flow Log configuration. ec2:DescribeFlowLogs only reveals the single S3-destined entry, and answers that stopped there made up the majority of failures. The two confusing log groups are not linked to any Flow Log, so no matter how carefully one reads the destination settings, they will not appear.

In practice as well, when a user's premise of "multiple destinations appear to exist" is itself mistaken, simply confirming that the configuration is correct does not complete the explanation. If entrusting investigation to an AI agent, it is necessary to instruct it to include resources that do not appear in the configuration within the scope of investigation.

In the previous Step Functions task, all 17 models answered correctly, and I cited the inexpensive claude-haiku-4.5 and gpt-5.6-luna as candidates. Those same two models scored 1/3 and 0/3 respectively this time. When selecting a model, the reliable approach is to prepare tasks and test scenarios that closely resemble your actual workload and measure accordingly.

Share this article

AWSのお困り事はクラスメソッドへ