Back to Case Studies

Autonomous Agent Development Framework

Bash-based system for continuous AI-driven development with circuit breakers, rate limiting, and session management

BashClaude Code CLIAutomationCircuit BreakertmuxDevOps

Overview

Built an autonomous development framework that runs Claude Code in a continuous loop, allowing AI to work on projects for extended periods with built-in safeguards. Implements circuit breaker patterns, rate limiting, and session continuity for safe, productive autonomous operation.

The Problem

AI coding assistants work in single-turn interactions. Complex projects require maintaining context across many iterations. Manual prompting is tedious. But fully autonomous operation is risky - infinite loops, runaway API costs, and lost context are real dangers.

Architecture Decisions

Why Bash over Python/Node?

Native process management. Direct tmux integration. No runtime dependencies. Shell-native for CLI tools.

Why circuit breaker pattern?

Prevents infinite loops. Automatic recovery from failures. Configurable thresholds.

Why session continuity?

Preserves context across iterations. Enables multi-hour autonomous work. Reduces token usage (no re-explanation).

Key Features

  • Continuous Execution: Runs indefinitely until task completion
  • Circuit Breaker: Stops after N consecutive failures, auto-recovers
  • Rate Limiting: 100 calls/hour default, configurable
  • Session Continuity: --continue flag preserves context
  • Dual Exit Detection: Requires BOTH completion indicator AND explicit signal
  • Live Monitoring: tmux dashboard for real-time observation

Challenges & Solutions

ChallengeSolution
Infinite loopsDual exit detection requiring explicit signal
API cost runawayRate limiting with configurable thresholds
Lost context between runsSession continuity with --continue flag
Debugging blind operationtmux live monitoring dashboard
Flaky networkCircuit breaker with automatic recovery

Results

  • 308 passing tests (100% coverage)
  • Successfully runs 5+ hour autonomous sessions
  • Zero runaway incidents with circuit breaker
  • Used to build several production applications

Code Sample - Rate Limiter

bash
# Token bucket rate limiter
RATE_LIMIT_FILE=".rate_limit"
MAX_CALLS=100
WINDOW=3600  # 1 hour

check_rate_limit() {
    local now=$(date +%s)
    local window_start=$((now - WINDOW))

    # Clean old entries and count recent
    local count=0
    local new_entries=""

    while IFS= read -r timestamp; do
        if [[ $timestamp -gt $window_start ]]; then
            ((count++))
            new_entries+="$timestamp\n"
        fi
    done < "$RATE_LIMIT_FILE"

    # Update file with valid entries only
    echo -e "$new_entries" > "$RATE_LIMIT_FILE"

    if [[ $count -ge $MAX_CALLS ]]; then
        return 1  # Rate limited
    fi
    return 0
}

increment_rate_counter() {
    echo "$(date +%s)" >> "$RATE_LIMIT_FILE"
}

What I'd Do Differently

  • Add cost tracking and budget limits
  • Implement checkpoint/restore for crash recovery
  • Build web dashboard for remote monitoring