The $110/month self-improving pipeline

andywidjaja1 pts0 comments

The $110/month self-improving pipeline | Andy Widjaja27 autonomous merges in two weeks. 97% success rate. One failed run out of 42. Average implementation time: 4 minutes per issue.<br>I run a software system that files its own issues, decomposes large tasks into buildable units, implements them with tests, opens PRs, and waits for me to merge. It runs on a $9/month VPS and a Claude subscription. The total infrastructure cost is $110/month. Average cost per implemented issue: $1.61.<br>This isn't a demo. It's been running in production since July 1, 2026.<br>The stack<br>$100.00/month Claude Max 5x (triage + implementation via Claude Code CLI)<br>$ 9.99/month VPS (Hostinger, 2 vCPU, 8GB RAM, Ubuntu)<br>$ 0.00/month GitHub<br>─────────<br>$109.99/month TotalThe system is called autoloop. It's open source. The entire configuration for a repository fits in one file:<br># autoloop.toml<br>repo = "your-org/your-repo"<br>triage_model = "sonnet"<br>impl_model = "claude-opus-4-6"<br>verify_cmd = "uv run pytest"<br>max_retries = 3<br>protected_paths = ["autoloop/", "autoloop.toml"]Three systemd timers. No Kubernetes. No orchestration framework. No queue service.<br>OnCalendar=*-*-* 00:00:00 UTC # triage<br>OnCalendar=*-*-* 02:00:00 UTC # implement<br>OnCalendar=*-*-* 04:00:00 UTC # changelogHow a feature ships while I sleep

A GitHub issue enters the queue. Here's what happens, unattended:<br>Triage (Sonnet, ~$0.10): The system reads the issue, validates the template, estimates story points, and assigns priority. If the template is incomplete, it rewrites the issue body to fix it and re-triages.<br>If an issue is too large, the system decomposes it into sub-issues with dependency ordering, files them, and triages each one. This is recursive. A 5-point issue becomes three 2-point issues. If one of those is still too large, it splits again. The system keeps decomposing until every piece is buildable.<br>Implement (Opus, ~$1.50): The system picks the top ready issue respecting dependency order, creates a branch, invokes Claude with the issue spec and repo context, runs verify_cmd (tests must pass), runs lint, checks that test files were added, and opens a PR.<br>Verification gate : If tests fail or no test files were added, it retries up to 3 times, feeding the errors back into the next attempt. If all retries fail, it labels the issue needs-human and moves on.<br>I review PRs on my phone via Claude Code remote control (a persistent session running in tmux on the VPS) and merge. When the queue is deep, I trigger the next implementation on-demand from the same session. If there's a merge conflict, I resolve it from the phone too. That's my entire contribution to the process.<br>When it fails<br>Run #14 targeted a GitHub Actions workflow file with assumptions about its structure that didn't match reality. The system retried 3 times, each time failing verification, then labeled the issue needs-human and moved on to the next item in the queue. I reworked the issue, re-labeled it ready, and it succeeded on the next cycle.<br>The system doesn't pretend to be infallible. It fails, labels the failure, and gets out of the way. That's the right behavior.<br>The constraint that makes it work<br>The system cannot modify itself.<br>protected_paths = ["autoloop/", "autoloop.toml"]If an issue targets files under protected_paths, triage routes it to needs-human instead of ready. The builder never touches its own triage logic, implementation pipeline, or configuration. This is checked at both triage (primary gate) and implementation (safety net).<br>Self-improvement without self-modification. The system improves the product. It cannot improve the process. That boundary is what makes it safe to run unattended.<br>What it actually produced<br>Patina is a cognitive assistant: 7,200 lines of Python, 9,200 lines of tests, 31 MCP tools, v0.9.0.<br>I built the initial core architecture interactively with Claude Code. Once the foundation was solid, autoloop took over the backlog. Of the last 40 merged PRs, 27 were implemented autonomously.<br>The pipeline itself is 3,500 lines. It was originally embedded in Patina's repo, then extracted into a standalone package that can be applied to any repository with one command:<br>autoloop init --repo your-org/your-repo --verify-cmd "pytest"<br>autoloop triage<br>autoloop implementBoundaries<br>I want to be honest about where this applies.<br>This works for: solo builders, indie hackers, small teams. Repos where one person holds full context. Non-critical-path systems where a 24-hour fix cycle is acceptable.<br>This requires caution for: regulated environments that need stronger human gates. Multi-team codebases that need more than one reviewer. Customer-facing production with SLAs that need rollback mechanisms this setup doesn't provide.<br>The principle scales. The implementation doesn't. A Fortune 500 company shouldn't run this exact setup. But the pattern (observe, decompose, implement, verify, gate) applies at any scale with appropriate controls.<br>The shift<br>Every platform shift democratized something that previously...

issue system autoloop month claude triage

Related Articles