Jakub Tkaczyk

AI Agents

Multi-agent orchestration

I’ve been interested in AI/LLMs since the early days of OpenAI’s GPT-3, and I remember really clearly when I ran my first API request to an LLM provider - it fascinated me that machine learning had evolved in a way that anyone could run it cheaply and unlock a huge range of possibilities. At that moment, it made me think there were lots of things I could apply it to - automating tasks and saving time. From there on, I started to explore the possibilities of using LLMs with simple automations.

Over the years, the tools became even more impressive. Early this year, with multi-agent systems becoming a real thing, I sat down and came to the conclusion that every evening I do the same thing: I stitch tomorrow together in my head.

What’s on the calendar, which chores are overdue, what tomorrow’s workout looks like, how I’ll fit it into my schedule - what the day’s actually going to ask of me. Nothing hard on its own, just a number of small lookups across several places.

I handed the stitching to a team of agents. They run once a night, read everything I’d read myself, and have a short brief ready before I turn in. It all lives on my Home Lab Cluster. The only thing that ever leaves the house is the model call itself, sent through OpenRouter under strict Zero Data Retention.

System of agents

There are four agents, and each owns one domain.

The orchestrator doesn’t perform actions - it decides who does. It glances at tomorrow, reads the shape of it, and wakes only the specialists the next day actually needs: sometimes it’s just one, another time all of them.

The calendar agent tracks where I have to be. Everything funnels into Google Calendar: personal plans, work meetings, even the workouts my own app Muscle Up writes back as events. From there it fills in what a calendar leaves out: the weather, and how I’ll actually get there. For that it reads a public transport app, and over time it’s learned the routes I prefer and the stops I’d rather walk to. It also knows public transport runs late, so it proposes options with a little margin built in that works for me (I like running).

The chore agent lives in my notes on Obsidian. It watches recurring duties, keeps them from piling up, and quietly slides the ones that plainly won’t fit.

The briefing agent writes the thing I actually read. It takes what the others surface, settles the small conflicts, and turns the pile into a paragraph. It also keeps a working memory, so my preferences stick over time: the calls I make once become the defaults it reaches for later.

Most of the time that’s the whole story. The crew only interrupts when it genuinely can’t decide: two commitments overlapping with no clear winner, or a due chore with nowhere to go. Then it asks, otherwise it just decides.

How it’s wired

The agents are built with Mastra: the orchestrator delegates to a set of chosen subagents. Inngest runs the nightly job and keeps it durable.

Obsidian is the brain, so the agents read it straight, and write their own state back the same way, as plain notes, so what ran and what it learned stays readable next to everything else.

The evening brief

The brief lands the night before on SimpleX Chat. A couple of sentences on the shape of tomorrow, then a few flags for whatever needs a second look. And it goes both ways: I can text back to defer a chore, ask a follow-up, or answer the one thing the crew couldn’t settle on its own.

How it’s going

I’ve been using it for a few months now (August 2026). It really works, and it’s legitimately handy. I don’t have to follow the plan the agents lay out, and some evenings I don’t. But having tomorrow already stitched together and waiting for me takes a small weight off the end of every day. It’s less a schedule I obey than a reminder and an organiser, so I don’t have to hold it all in my head.