I’ve spent enough time showing my calendar what I need to do next, only to realize that the calendar is really just a to-do list. He knows when the meeting starts, but he doesn’t know if I’m at my most productive, what I can do between two calls or before lunch, or if I’m asking too much of myself.
So I decided to give this job to a local LLM. I added Qwen3.5 to my calendar using llama.cpp and let it work for real. form My day rather than a general productivity model other than LinkedIn. Of course, I tried other local models, and as always, one morning was my favorite in planning my day.
My days were open and that was the problem
I needed something to structure my day instead of just another productivity app
There are only a few things set in stone in my days. I have a weekday stand for my business, and as the wedding approaches, I start the gym in the morning and another workout in the evening. Everything else is technically free. Anyway, I tried to finish everything on time.
Writing takes up a significant portion of my day, but I also have to answer customer inquiries about PC builds, check my mail, cook, and preferably, spend some time with my PS5. With no real structure beyond these fixed commitments, I found myself pushing off important tasks until tomorrow.
So I vibecoded a Python script that takes a list of tasks to write in Notepad, along with the estimated duration and priority of each task, and turned it into a table. Instead of deciding what to do next, I wanted the local LLM to make that decision.
Getting local LLMs into Google Calendar was more difficult than LLMs
Google has granted me the rights to automate the calendar
The Google Calendar API was the most difficult part of the whole experiment. I had to slowly work my way through several menus, create the right credentials, make sure I dot the right i’s and cross the right t’s, and finally download the JSON file I need for my Python script. This part wasn’t difficult after a few YouTube tutorials, but there were still plenty of opportunities to click the wrong thing in those layers of menus. Maybe that’s why I don’t want to do it twice.
With the credentials generated and the JSON file in place, I’m glad I don’t have to look at those menus again. The heavy lifting can now be done by my own local LLM, llama.cpp handles the templates and Python handles the calendar.
The Vibecode scheduler itself needed a little tweaking. The only major change I made was to tell LLM that my stand-up dates and gym sessions were not moving and that he would have to work within those constraints. Everything else was fair game to organize around them.
I tried three of my favorite local models for work
The difference wasn’t that they could plan my day
I started with a Qwen3-8B (Q5_K_M) and it did a surprisingly good job at the tasks I gave it. It was a great proof of concept, but it was trying to move my bench meeting to fit in with my other tasks. The Qwen3.5-9B (Q4_K_M) performed equally well, but both models struggled to move things that should be set in stone, including morning cardio and daily standing. I originally thought that GPT-OSS-20B (MXFP4) would understand this difference, but it didn’t either.
This is where I realized that I had to modify the Python table itself, handling the instructions so that LLM would never touch these fixed events. Anything mandatory must be true never will be left to the LLM to interpret. An invocation can always request a constraint, but to actually enforce it, code must always be entered.
All tests were done in llama.cpp’s default context size (4096). This calendar API call experiment did not require a lengthy context test.
The script handled the empty gaps between them and only allowed the model to place tasks in those empty spaces, then checked the result and rejected anything outside those boundaries.
The GPT-OSS-20B was the first model I used after installing the protective enclosure. Thus, his better understanding was actually just architecture doing its job properly. I downloaded it enter the pattern into system RAM together nommap but that didn’t mean I discovered a magical new planning ability.
Qwen3-8B, with the new script, still couldn’t get cooking into my calendar, making it the weakest model of the three, even though it was the fastest. The Qwen3.5-9B, on the other hand, being the second fastest (or second slowest), calculated everything I required and did a really impressive job of scheduling my day.
|
RTX 4070 Ti (12 GB) + Ryzen 5 7600X + 32 GB DDR5 CL30 RAM @ 6000 MHz |
|||||||
|
Model |
Param |
Number |
Gene speed (current/s) |
Precharge (current/s) |
TTFT |
Withdrawal symptoms |
Total time |
|
Qwen3-8B |
8B |
Q5_K_M |
74.4 cases/s |
1,505 cases/s |
0.47 s |
208 |
3.3 s |
|
Qwen3.5-9B |
9B |
Q4_K_M |
74.7 cases/s |
1,641 cases/s |
0.53 s |
1,111 |
15.4 s |
|
gpt-oss-20b |
20V |
MXXFP4 |
95.5 cases/s |
800 cases/s |
0.71 s |
2,476 |
26.6 s |
In the end, the GPT-OSS-20B took eleven seconds longer than the Qwen, but in those extra seconds it showed a well-thought-out build for the day. This model ensured that the flow of my tasks never hit me so hard that I would work on the computer for three hours and suddenly run to the kitchen as soon as it was over.
An interesting pattern I’ve noticed with all three models is that they’ve all blown my playtime by the day. I initially took this as a sign that the local LLM had its priorities straight. While writing, cooking, customer inquiries, and other important tasks, gaming is obviously top of the list. Impressive, but still a little stung.
Even the local LLM had to stop me from sabotaging my personal calendar.
Then I realized I had set the end of my day at 9:30pm, but I usually have until 11:30pm. I forced my models to put their entire lives into an artificially short window, so I extended that limit to 11:45pm, and the game was suddenly back on schedule. Apparently even my local LLM had to stop sabotaging my calendar.
I have to follow the calendar instead of planning it myself
The biggest advantage of this setup is that I don’t have to spend the first part of every morning trying to figure out what to do. I run the scheduler once, give GPT-OSS-20B a day’s worth of tasks, and let it structure everything around existing commitments. Once the schedule is written into Google Calendar, my date will be displayed in front of me.
It really turned my calendar into something much more useful than a list of appointments. It has a widget on my phone’s home screen, and it stays open on my second monitor, so I always know what I need to do at any moment and next time.
It also gives me a little more accountability without another productivity app constantly bothering me. My day is already written for me, all I have to do is follow the instructions. Surprisingly, it made things a lot easier to do.
