Autonomous Loops
Supplementary Files:
payloads.md— Scope Lock templates, rate limit configurations, loop command templates, and error handling response templatestest-cases.md— Structured test cases for sequential pipeline, watch loop, batch processing, learning cycle, scope violation, and rate limit backoffguides/safe-autonomous-pentest.md— Deep-dive guide on autonomous vs manual decision making, scope lock construction, loop composition, and monitoring
Summary
Autonomous Loops skill domain covering infrastructure operations.
Domain: infrastructure
Use Cases
- Sequential Pipeline — Chain multiple security tools in order (recon → scan → exploit) with automatic phase transitions
- Watch Loop — Monitor a target for changes (new ports, updated services) over extended periods
- Batch Processing — Run the same test against multiple targets with rate limiting and error recovery
- Learning Cycle — Execute a skill, capture results, extract patterns, and update knowledge base automatically
- Scope-Locked Automation — Run autonomous loops with hard boundaries that prevent actions outside authorized scope
Activation
- Performing repetitive enumeration across many targets
- Running batch vulnerability scans on multiple hosts
- Monitoring for changes in target environment
- Executing attack chains that require iterative steps
- User says "loop", "automate", "batch", "repeat", "iterate"
Core Principle
Autonomous does not mean uncontrolled. Every loop must have:
- A defined scope (what it can and cannot touch)
- A termination condition (when it stops)
- Rate limiting (how fast it runs)
- Evidence logging (what it did)
- Error handling (what happens when things go wrong)
Four Loop Patterns
Pattern 1: Sequential Pipeline
Execute a sequence of steps across multiple targets, one at a time.
FOR EACH target IN target_list: IF scope_check(target) == ALLOWED: result = execute_step(target) log_evidence(target, result) IF result.status == FAIL: handle_error(target, result) CONTINUE or BREAK based on severity ELSE: log_skipped(target, "Out of scope")
Use when: Enumerating ports across a subnet, testing a specific vulnerability across multiple hosts.
Safety rules:
- Process targets sequentially (no parallel burst)
- Log every target attempted and result
- Stop on critical error (target down, IDS triggered)
- Maximum 100 targets per pipeline run
Pattern 2: Watch Loop
Monitor a target for changes or conditions, then act when triggered.
WHILE condition_not_met AND iterations < max_iterations: current_state = observe(target) log_observation(current_state) IF trigger_condition(current_state): result = execute_response(target, current_state) log_evidence("trigger", result) IF one_shot: BREAK WAIT(polling_interval)
Use when: Waiting for a service to come online, monitoring for new open ports, watching log files for specific events.
Safety rules:
- Polling interval minimum: 5 seconds
- Maximum iterations: 1000
- Log every observation cycle
- Alert when approaching iteration limit
Pattern 3: Batch Processing
Apply the same operation to a batch of targets in parallel (with concurrency limit).
CONCURRENCY = 5 # Maximum simultaneous operations results = [] FOR EACH batch IN split_into_batches(target_list, CONCURRENCY): batch_results = PARALLEL execute_step(batch) FOR EACH result IN batch_results: log_evidence(result.target, result) results.append(result) WAIT(rate_limit_delay) # Pause between batches
Use when: Running nmap scans across many hosts, batch DNS lookups, mass HTTP header checks.
Safety rules:
- Maximum concurrency: 10
- Rate limit delay between batches: 2 seconds minimum
- Log all results including failures
- Respect target-specific rate limits if known
Pattern 4: Learning Cycle
Iteratively refine an approach based on results from previous iterations.
approach = initial_approach FOR iteration IN range(max_iterations): result = execute(approach) analysis = analyze_result(result) log_evidence(iteration, approach, result, analysis) IF analysis.success: log_evidence("success", approach) BREAK approach = refine(approach, analysis) IF approach.confidence < min_confidence: log_evidence("abort", "Confidence below threshold") BREAK
Use when: Brute-forcing with adaptive wordlists, SQL injection payload refinement, fuzzing with feedback.
Safety rules:
- Maximum iterations: 50
- Log every attempt and result
- Confidence threshold: abort if below 10% after 10 attempts
- Never widen scope during refinement
Safety Framework
Scope Lock
Before ANY loop starts, define and lock the scope:
markdown## Scope Lock: [Operation Name] - **Allowed targets:** [CIDR range / hostname list / URL list] - **Allowed operations:** [Specific commands/techniques] - **Forbidden operations:** [What must NOT be done] - **Time limit:** [Maximum wall-clock time] - **Iteration limit:** [Maximum number of iterations] - **Abort conditions:** [Specific triggers that stop the loop]
Once defined, the scope cannot be widened during execution.
Rate Limiting
| Operation Type | Minimum Interval | Max Concurrency |
|---|---|---|
| Network scan (nmap) | 2s between hosts | 5 |
| Web request (HTTP) | 100ms between requests | 3 |
| DNS lookup | 50ms between queries | 10 |
| Brute force attempt | 500ms between attempts | 1 |
| Exploit attempt | 5s between attempts | 1 |
Evidence Logging
Every loop iteration must log:
markdown## Loop Log Entry - **Timestamp:** [ISO 8601] - **Iteration:** [N / max] - **Target:** [host/port/URL] - **Action:** [command or technique] - **Result:** [success/fail/error/timeout] - **Output:** [truncated to 500 chars, full output saved to file] - **State change:** [what changed on target, if any]
Error Handling
| Error Type | Response |
|---|---|
| Target unreachable | Log and skip, continue to next target |
| Rate limit detected | Increase delay by 2x, retry once |
| Authentication failure | Log and skip (do NOT retry with variations) |
| Unexpected service response | Log details, flag for manual review, continue |
| IDS/IPS detected | STOP immediately, log incident |
| Target crash/unexpected downtime | STOP immediately, log incident |
| Scope violation attempt | STOP immediately, log incident |
Notification Rules
Notify the operator when:
- Loop starts (with scope summary)
- Every 25 iterations or 5 minutes (whichever comes first)
- Any error condition occurs
- Loop completes or aborts
Integration with Other Skills
| Skill | Loop Pattern | Application |
|---|---|---|
vulnerability-assessment | Batch Processing | Scan multiple hosts for vulnerabilities |
password-attack | Learning Cycle | Adaptive brute force with feedback |
web-sqli | Learning Cycle | Iterative payload refinement |
network-pentest | Sequential Pipeline | Multi-host enumeration |
osint | Batch Processing | Mass DNS/WHOIS lookups |
terminal-ops | All patterns | Evidence logging protocol |
verification-loop | Sequential Pipeline | Verify findings across multiple hosts |
safety-guard | All patterns | Pre-execution safety checks |
Detection Methods
Autonomous Loop Indicators
- Sustained agent activity: Same agent token executing >100 sequential operations; >24h continuous runtime.
- Tool call cadence: Constant-interval tool calls (e.g., every 30s exactly); typical of cron-driven loops.
- State persistence: Agent re-loading state from previous session; checkpoint file access patterns.
- Memory growth: Agent process accumulating >2GB RAM; typical of long-running loops without state cleanup.
- Self-modifying prompts: Agent modifying its own system prompt or configuration mid-run.
SIEM Detection Rules
- Splunk SPL:
index=llm gateway.user="agent-*" | stats range(_time) as duration by session_id | where duration > 86400 - Sigma rule:
sigma/rules/ai/long_running_agent.yml - LangSmith trace analysis: Detect agents with >1000 turns in single session.
Defense Evasion Techniques
Loop Stealth
- Off-hours operation: Run loops during low-traffic hours; blends with maintenance tasks.
- Distributed sessions: Cycle through multiple agent sessions to avoid per-session limits.
- Memory cleanup between cycles: Clear conversation history to reduce token usage anomaly.
- Slow pacing: Pace tool calls at irregular intervals to avoid cadence detection.
- State externalization: Store state in external KV store rather than session memory.
Self-Modification Stealth
- Gradual config changes: Modify system prompt in small increments over multiple sessions.
- Use environment variables: Modify env vars rather than prompts (less audited).
- Persistence via legitimate mechanisms: Use MCP server registration (looks legitimate).
Anti-Patterns
- Infinite loops — Every loop MUST have a termination condition
- Scope creep — Never add targets during execution
- Silent failures — Every error must be logged and reported
- Unbounded parallelism — Always set and respect concurrency limits
- Skipping evidence — Even failed attempts must be logged
- Ignoring rate limits — Target stability is more important than speed
Orchestration
ECC Loop Pattern
- Pattern: Meta-Skill (defines loop patterns consumed by all other skills)
- Rationale: Autonomous loops is not an end-user skill but a meta-skill that provides loop constructs for all other security skills — every skill that needs iterative or batch operations consumes one of the four loop patterns
- Integration: All security skills that need repetitive operations consume loop patterns from this skill. Each skill selects the appropriate pattern based on its workflow needs.
Cross-Skill Pipeline
autonomous-loops (provides loop patterns) ├── Sequential Pipeline → network-pentest, terminal-ops, verification-loop ├── Watch Loop → security-bounty-hunter, deep-research ├── Batch Processing → repo-scan, osint, vulnerability-assessment └── Learning Cycle → search-first, continuous-learning, password-attack
Quality Gate
- Pre-condition: Scope Lock defined with allowed targets, operations, and abort conditions
- Post-condition: Evidence chain complete for every iteration, all results logged
- Verification: Scope not widened during execution, iteration/iteration limits respected, rate limits maintained

