TL;DR:
Demo: https://danilqa.github.io/kombinat
Github: https://github.com/Danilqa/kombinat
Long story:
In September, our team went through a reorg, and we didn't have enough people for all the work. I was overwhelmed by on-call and a huge number of tasks.
At the same time, I had a newborn daughter at home, so I spent a lot of nights awake. One of those nights, I asked myself: why do I handle all of this by hand? Why can't it run at night, while everyone sleeps?
In this post, I'll share how that question grew into background AI agents that 6 teams at my company use today, what they do every night, and what I learned along the way.
The first version ran on my MacBook Air
So I set up my first Claude routines on my MacBook Air: a few prompts on a schedule to take some of the load off me.
For about a month, my laptop was the whole setup. It worked, and it showed me the idea was real. But it did not scale. The routines lived in an app on my laptop, and nobody else on the team could read, review or change them.
Moving everything to git
After that first month, I rebuilt it so that everything lives in a git repo. Each routine became a markdown file. The frontmatter says when it runs, and the body is the prompt:
--- name: fix-e2e-tests description: "Finds the failing e2e test and fixes it" schedule: '30 11 * * *' cwd: ~/projects/app agent: claude effort: high --- 1. Open the latest failed e2e run on GitHub ... A small daemon checks every 30 seconds which routines are due and starts the agent. It pulls the repo every 5 minutes, so a merged PR goes live on its own. launchd keeps it running after a reboot. Today, it runs on a Mac mini that stays on.
Now anyone on the team can add a routine with a pull request.
What runs now
This is a typical weeknight:
During the day, the agents keep going:
- Every hour, an agent takes the first look at new escalations. It checks the data, the logs and the code, writes what it found in the ticket and drafts a PR when the bug is obvious.
- Every morning, agents read yesterday's support chats and post what matters for product and sales in Slack. Another one checks a monitoring dashboard and files a ticket for each real issue.
- Every Friday, an agent drafts project updates from Linear, deploys and Slack.
Not all routines are about code. Some just save people an hour of reading.
The results so far
Today, 6 teams use it. In one month, the agents helped close 73 escalation tickets and 10 accessibility issues, and proactively fixed 5 bugs.
Our mornings now start with a Slack reminder to review the PRs the agents opened overnight.
What I learned
- One small job per run. One feature flag, one accessibility issue, one PR. Small PRs get reviewed. Big ones sit.
- Write the prompt as if nobody will answer. Because nobody will. At 3 am, there is no one to ask.
- Stay quiet when there is nothing to say. Our monitoring routines post only when they find something. Otherwise, people stop reading.
- Keep people in the loop. Agents open draft PRs and tickets. People review and merge.
- Use what you already pay for. The agents run on our normal Claude subscription, not on API keys, so there is no surprise token bill.
- Let agents use your real setup. On a real Mac, an agent has the same skills, MCP servers and CLI tools as you, plus read-only access to the data it needs.
Kombinat, the open-source version
The engine had nothing company-specific in it, so I pulled it out into an open-source project and called it Kombinat.
Like the first version, I built and launched it at night, while looking after my daughter. The agents work the night shift, and for a while, so did I.
The name comes from the Soviet kombinat, a giant factory that runs day and night. That is what I wanted: a small factory of agents that works around the clock.
What you get:
- Routines as markdown files in your repo, on a schedule or a webhook
- Claude Code, Codex or any other CLI agent
- Your own skills, MCP servers and subscription, with no API keys
- A dashboard you can open from your phone over Tailscale, and a terminal UI that works over SSH
To try it, add it to the repo that will hold your routines:
pnpm add @danilqa/kombinat pnpm kombinat install Then put your routines in a routines/ folder and open the dashboard at http://localhost:7433.
It runs on macOS only for now, and only while the Mac is awake and someone is logged in.
- GitHub: https://github.com/Danilqa/kombinat
- Demo of the dashboard with sample data: https://danilqa.github.io/kombinat/
If you try it, I'd love to hear what you give your agents to do at night.


