{"slug": "the-110-month-self-improving-pipeline", "title": "The $110/month self-improving pipeline", "summary": "A developer has built an autonomous software pipeline called autoloop that files its own issues, implements them, and opens pull requests, running on a $110/month infrastructure. The system achieved 27 autonomous merges in two weeks with a 97% success rate, averaging $1.61 per implemented issue. It has been running in production since July 1, 2026, and is open source.", "body_md": "# The $110/month self-improving pipeline\n\n27 autonomous merges in two weeks. 97% success rate. One failed run out of 42. Average implementation time: 4 minutes per issue.\n\nI 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.\n\nThis isn't a demo. It's been running in production since July 1, 2026.\n\n## The stack\n\n``` bash\n$100.00/month  Claude Max 5x (triage + implementation via Claude Code CLI)\n$  9.99/month  VPS (Hostinger, 2 vCPU, 8GB RAM, Ubuntu)\n$  0.00/month  GitHub\n─────────\n$109.99/month  Total\n```\n\nThe system is called [autoloop](https://github.com/Sanctum-Origo-Systems/autoloop). It's open source. The entire configuration for a repository fits in one file:\n\n```\n# autoloop.toml\nrepo = \"your-org/your-repo\"\ntriage_model = \"sonnet\"\nimpl_model = \"claude-opus-4-6\"\nverify_cmd = \"uv run pytest\"\nmax_retries = 3\nprotected_paths = [\"autoloop/\", \"autoloop.toml\"]\n```\n\nThree systemd timers. No Kubernetes. No orchestration framework. No queue service.\n\n```\nOnCalendar=*-*-* 00:00:00 UTC   # triage\nOnCalendar=*-*-* 02:00:00 UTC   # implement\nOnCalendar=*-*-* 04:00:00 UTC   # changelog\n```\n\n## How a feature ships while I sleep\n\nA GitHub issue enters the queue. Here's what happens, unattended:\n\n**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.\n\nIf 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.\n\n**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`\n\n(tests must pass), runs lint, checks that test files were added, and opens a PR.\n\n**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`\n\nand moves on.\n\n**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.\n\n## When it fails\n\n[Run #14](https://github.com/Sanctum-Origo-Systems/patina/issues/40) 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`\n\nand moved on to the next item in the queue. I reworked the issue, re-labeled it `ready`\n\n, and it succeeded on the next cycle.\n\nThe system doesn't pretend to be infallible. It fails, labels the failure, and gets out of the way. That's the right behavior.\n\n## The constraint that makes it work\n\nThe system cannot modify itself.\n\n```\nprotected_paths = [\"autoloop/\", \"autoloop.toml\"]\n```\n\nIf an issue targets files under `protected_paths`\n\n, triage routes it to `needs-human`\n\ninstead of `ready`\n\n. The builder never touches its own triage logic, implementation pipeline, or configuration. This is checked at both triage (primary gate) and implementation (safety net).\n\n** Self-improvement without self-modification.** The system improves the\n\n*product*. It cannot improve the\n\n*process*. That boundary is what makes it safe to run unattended.\n\n## What it actually produced\n\n[Patina](https://github.com/Sanctum-Origo-Systems/patina) is a cognitive assistant: 7,200 lines of Python, 9,200 lines of tests, 31 MCP tools, v0.9.0.\n\nI 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.\n\nThe pipeline itself is 3,500 lines. It was originally embedded in Patina's repo, then [extracted into a standalone package](https://github.com/Sanctum-Origo-Systems/autoloop) that can be applied to any repository with one command:\n\n```\nautoloop init --repo your-org/your-repo --verify-cmd \"pytest\"\nautoloop triage\nautoloop implement\n```\n\n## Boundaries\n\nI want to be honest about where this applies.\n\n**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.\n\n**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.\n\n**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.\n\n## The shift\n\nEvery platform shift democratized something that previously required scale:\n\n- \"You need a data center.\" After AWS: No, you don't.\n- \"You need bank relationships.\" After Stripe: No, you don't.\n- \"You need a DevOps team.\" After Vercel: No, you don't.\n\nThis is the same shift for software development itself. Self-improving software is no longer a funded-startup problem. It's a solo-builder problem. The bottleneck isn't compute cost or infrastructure complexity. It's taste, knowing what to build, what constraints to enforce, and when to let the system run.\n\nThe tools are available tonight. The only question is what you'd point them at.\n\n*The code is open source at github.com/Sanctum-Origo-Systems/autoloop. I intentionally separated observation from implementation because systems that evaluate themselves should not simultaneously modify themselves. Patina runs as two separated instances: one observes the human operator, the other builds code. That architecture will be in a future post. Next on the roadmap: scaffolding greenfield projects from spec to MVP. andywidjaja.com*", "url": "https://wpnews.pro/news/the-110-month-self-improving-pipeline", "canonical_source": "https://andywidjaja.com/blog/110-pipeline", "published_at": "2026-07-15 12:30:37+00:00", "updated_at": "2026-07-15 12:48:23.868844+00:00", "lang": "en", "topics": ["artificial-intelligence", "developer-tools", "ai-agents", "ai-products", "ai-tools"], "entities": ["Claude", "GitHub", "Hostinger", "Sanctum-Origo-Systems", "autoloop", "Patina", "Sonnet", "Opus"], "alternates": {"html": "https://wpnews.pro/news/the-110-month-self-improving-pipeline", "markdown": "https://wpnews.pro/news/the-110-month-self-improving-pipeline.md", "text": "https://wpnews.pro/news/the-110-month-self-improving-pipeline.txt", "jsonld": "https://wpnews.pro/news/the-110-month-self-improving-pipeline.jsonld"}}