## TL;DR
Stop the loop by making repetition visible and expensive. Log a hash of the step inputs and the tool result, abort when the same call repeats with the same result beyond a small budget, and require the agent to read back the Metabase state before attempting the step again. Loops during pull Metabase query results almost always mean a success signal the agent cannot see, so it retries a step that already worked or can never work.

```text
agent loop detected: agent kept repeating the same pull Metabase query results step and failed with error
```

## Use this when
- The run log shows the same tool call and near identical arguments repeated many times.
- The Metabase content shows repeated partial attempts or many duplicate objects from one run.
- The run ends by budget exhaustion rather than by a step error.

## Not for this skill when
- The agent is slow but each step differs and progress is visible. That is a performance problem, not a loop.
- The agent failed once on a clear API error and stopped. Handle that error directly.

## Steps
1. Freeze the run and extract its tool call sequence, counting repeats of the pull Metabase query results step and comparing their arguments. Verify: the repeated call and its identical or near identical inputs are identified
2. Inspect the Metabase state the step was trying to change and compare it with what the agent believed, using the API to read the current card and dashboard definitions plus the query result payloads. Verify: you can state whether the step had already succeeded, was failing permanently, or was aimed at the wrong target
3. Fix the root mismatch, such as pointing verification at the object the build actually creates, or teaching the step to treat an already exists result as success. Verify: a single manual pass of the step now reports success correctly
4. Add a repetition guard to the agent, hashing each tool call with its result and stopping the run after a small number of identical repeats with a clear loop error. Verify: a test run with a forced failure stops at the guard instead of exhausting its budget
5. Add a per step attempt budget and a run level step budget sized for the dashboard build, with the budget breach reported as its own failure type. Verify: the run summary separates loop aborts from ordinary step failures
6. Rerun the full pull Metabase query results task and confirm the agent completes in a normal step count. Verify: the run finishes and the dashboard opens in Metabase

## Why it happens
Loops are a state recognition failure. The agent acts, the world changes or refuses to change, and the agent cannot tell the difference from its observations, so its planner rationally chooses the same action again. Retries feel safe to a planner because they are reversible, which is exactly why an external guard has to count them. Progress detection, where each step must change an observable state marker, is the general fix across agent frameworks.

Dashboard building agents plan, call the Metabase API, observe the result, and plan again. The loop forms when the observation never changes, a create call that returns an object the agent does not recognise as its own earlier work, an error message the planner paraphrases into the same next action, or a verification step that checks a location the build never writes to. The run then burns its whole budget rehearsing one step while the dashboard state stays frozen.

Operational notes for loop failures in agent pipelines. Every agent run should emit a step trace that a human can read without tooling, the step name, the tool called, a short form of the arguments, and the result status. Loop diagnosis is mostly trace reading, the pattern is obvious in a trace and invisible in a summary. Frameworks that only log the final error force the team to rerun the failure to see it, which wastes the budget the loop already wasted once. Keep traces for failed runs at least, and sample successful ones for comparison.
## Variants and edge cases
### agent stuck repeating pull Metabase query results step loop detection
The detection phrasing for runaway repetition in the logs.
### agent loop same tool call no progress abort budget
The guard design variant focused on budgets and hashing.
### agent retries step that already succeeded Metabase state check
The already succeeded variant where verification looked in the wrong place.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_9x45jJjcTHrkrFQmjicZlQ
