Autonomous Agent Development Framework
Bash-based system for continuous AI-driven development with circuit breakers, rate limiting, and session management
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
| Challenge | Solution |
|---|---|
| Infinite loops | Dual exit detection requiring explicit signal |
| API cost runaway | Rate limiting with configurable thresholds |
| Lost context between runs | Session continuity with --continue flag |
| Debugging blind operation | tmux live monitoring dashboard |
| Flaky network | Circuit 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
# 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