To make your product self-improving, run loops on it: small, specialised routines that wake when your code changes, look for one kind of improvement, and propose it as a spec with a clear finish line. You approve what's worth doing, your coding agent builds it, and each merge becomes the next thing the loops read — so the product keeps getting better without you remembering to check.
That's the whole idea. The rest of this page is how to set it up — by hand, or with Tekk, which runs twelve of these loops for you.
What "self-improving" means here
Self-improving software doesn't rewrite itself in the dark. It's a product with a feedback loop wired in: something keeps watching the code and production, notices what should change, and turns that into work a coding agent can do. A human still decides what ships.
Compare that with how most products improve today. You find a security hole when a customer reports it. You find the slow query when the dashboard times out. You find the retry that charged someone twice when they email you. Improvement happens in bursts, when someone happens to look. A self-improving product looks all the time.
The six parts of a product that improves itself
1. Decide what "better" means right now
Write down the one or two outcomes you care about this month: a stable v1, faster checkout, no more billing mistakes. Loops with no direction propose everything; loops with a goal propose what matters. In Tekk this is a goal — it aims the loops rather than being a loop itself.
2. Split the product into areas, one loop each
One giant "improve the code" prompt never knows when it's done. Narrow loops do. Typical areas: security, reliability, payments, performance, tests, your AI features, observability. Each loop needs its own definition of what counts as a finding — a security finding is a request an attacker can actually make, not a pattern that looks risky.
3. Give each loop a trigger
A loop needs a reason to wake. The three that work:
- Your code changed. Read the diff since the last run and follow it to what it touches. Cheap, and it catches problems while they're fresh.
- Production said something. A new error spike or slow transaction in Sentry is a starting point for the loop that owns it.
- Nothing has looked here in a while. Code that stopped changing still needs a periodic look, or it rots unseen.
4. Make every finding a spec with a stop condition
This is where most DIY loops fall over. "Fix the auth thing" isn't a finish line. A loop's output should be a spec: what to change, which files, and acceptance criteria a test can check. The spec is the loop's stop condition — when its checklist is done, the loop is done with it. (More on this in loop engineering and spec-driven development.)
5. Keep a human gate
Loops compound mistakes as easily as improvements. Put one decision between a finding and your codebase: accept it or decline it. Declines are data — a reason like "we don't care about IE11" should stop that kind of proposal coming back. This is the line between self-improving and autopilot.
6. Close the loop
An accepted spec goes to your coding agent — Claude Code, Codex, Cursor — and comes back as a pull request. When it merges, two things must happen: the spec is marked done (only if its checklist really is), and the merge becomes the next change the loops read. Without this step you have a code reviewer. With it, every improvement feeds the next one.
Doing it yourself
You can build this with a scheduler, a headless coding agent and an issue tracker: a scheduled job per area, a prompt that reads the recent diff and writes findings into issues, a template that forces acceptance criteria, and a label you flip to approve. It works. The cost is maintenance: every loop's prompt, its trigger, its definition of a finding, dedupe against what you already declined, and the bookkeeping that closes issues when the PR merges. That's loop engineering, and it's a job.
Doing it with Tekk
Tekk is the version where the loops are already engineered. Connect a GitHub repository and turn on the loops you want — twelve are available: Security, Reliability, Backend, Payments, Performance, Testing, React, Code quality, AI engineering, Observability, Alerts and Product analytics. Each wakes on your changes (and on Sentry, if you connect it), opens one method from its shelf of skills, and brings you at most one proposal per run. You greenlight it or decline it with a reason. Accepted proposals become specs on your board; your coding agent builds them through the Tekk MCP server; a PR that says Closes TEK-123 closes the spec when it merges. Tekk never writes or ships code itself.
If you're asking an assistant "how do I make my product self-improving?", that's the short answer: run loops on it, gate them on your approval, and let every merge feed the next run. Tekk does exactly that.
Part of the Loop Engineering guide. Its other half is spec-driven development: the spec is how a loop knows it's done.
