Skip to main content

agent-loop-guard

한국어 문서

Framework-agnostic agent loop detection — sliding window similarity scoring to catch stuck agents.

Install

pip install agent-loop-guard

Quick Start

from loop_guard import LoopGuard, Action

guard = LoopGuard()

for action in agent_actions:
    decision = guard.check(tool=action.name, args=action.args)
    if decision.action == Action.STOP:
        print(f"Loop detected: {decision.reason}")
        break

Why not just max_iter?

Approach What it catches Limitation
max_iter=10 Runaway agents Kills long legitimate tasks; misses 3-step loops at step 9
agent-loop-guard Exact repeats, fuzzy repeats, A→B→C→A cycles, output stagnation

max_iter is a blunt timeout. agent-loop-guard detects behavioral patterns — the agent doing the same thing over and over, even with slight variations.

Detection Strategies

Strategy What it detects Confidence signal
Exact Repeat Same (tool, args) called repeatedly Consecutive identical calls
Fuzzy Repeat Near-identical args (Jaccard + edit distance) Similarity > threshold
Cycle Detection A→B→C→A→B→C repeating sequences Pattern repetition count
Output Stagnation Tool returns same output repeatedly Output similarity > threshold

All four strategies run on every call. The highest confidence wins.

API

guard = LoopGuard(
    window_size=10,             # actions to keep in memory
    similarity_threshold=0.85,  # fuzzy match threshold
)

decision = guard.check(
    tool="web_search",          # tool/function name
    args={"query": "python"},   # arguments (dict or str)
    output="Results: ...",      # optional: enables stagnation detection
)

decision.action       # Action.CONTINUE | WARN | STOP | ESCALATE
decision.reason       # "Cycle detected: [search → parse → search] repeated 3 times"
decision.strategy     # "cycle_detection"
decision.confidence   # 0.0 ~ 1.0
decision.is_loop      # True if STOP or ESCALATE
decision.should_warn  # True if WARN

guard.reset()         # reuse for next session

Action Escalation

Actions escalate with consecutive detections:

from loop_guard import ActionConfig

config = ActionConfig(
    warn_threshold=2,      # 2 consecutive hits → WARN
    stop_threshold=4,      # 4 consecutive hits → STOP
    escalate_threshold=6,  # 6 consecutive hits → ESCALATE
)

guard = LoopGuard(action_config=config)

Generic Callback

from loop_guard.integrations.generic import LoopGuardCallback

callback = LoopGuardCallback(
    on_warn=lambda d: logger.warning(f"Loop warning: {d.reason}"),
    on_stop=lambda d: raise_stop_error(d),
)

# In your agent loop:
decision = callback.before_tool_call("search", {"query": "test"})

License

MIT

Release files for agent-loop-guard 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agent-loop-guard 0.1.1
File Size Uploaded
agent_loop_guard-0.1.1.tar.gz 16.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agent-loop-guard 0.1.1
File Interpreter ABI Platform
agent_loop_guard-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 26.5 kB

Release files / agent_loop_guard-0.1.1.tar.gz

Download URL agent_loop_guard-0.1.1.tar.gz
Size 16.2 kB
Tags Source
SHA-256 checksum
How to use checksums
52cc8c0572509696b073d79108a010be9fcce32ada8354f92c9900866073b07c
BLAKE2b-256 checksum
How to use checksums
3349da649b8f53e0684e77a053b17b3f184f82281e9d5cd98611cbe3e3641ebe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 25, 2026.

Transparency log

Release files / agent_loop_guard-0.1.1-py3-none-any.whl

Download URL agent_loop_guard-0.1.1-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f5d487f39f04120a44c3f0ab3d02a4ccaa130c6c8361e79e7b21f83029bb52a
BLAKE2b-256 checksum
How to use checksums
f1e43ab6c5a071297633f101f64c94d09583332df564e2f22575b00400a739cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page