
Every morning, someone on our operations team did the same thing.
Open Basecamp. Scroll the End of Day Report thread. Cross-reference who was on leave. Build a check or cross table by hand. Post it back to the team.

Fifteen minutes a day, five days a week. It never got more interesting.
The task was simple, which is exactly why it was frustrating. Simple isn’t the same as automatic. It required a human to remember, and it broke whenever that human was out sick.
What we built
So we built an agent in GrokBot that runs the whole loop on a schedule. Tuesday through Saturday at 12:01am Pacific, covering the previous weekday.
The order of operations matters more than the code.
It reads leave notes first, from a shared Google Sheet that also holds the roster. That sheet is the single source of truth. Someone joins or leaves the team, ops updates one row, and the agent picks it up on the next run.
Then it pulls submissions from the Basecamp thread, builds the table image with a check, a cross, or a gray hyphen for anyone on leave, finds the newest continuation thread, and posts.

The weekly and monthly rollups
Fridays get a weekly rollup covering Monday through Friday. The last weekday of the month triggers a month-range table with a blue header, so you can tell at a glance which report you’re looking at.

What made it stick
Two things made the difference.
Putting the roster in the same sheet as the leave notes meant there was exactly one place to update. The most common way automations like this die is a hardcoded list that quietly goes stale while everyone assumes it’s fine.

And the agent still pings a human with the same images it posted. Full automation with zero visibility is how you find out three weeks later that something broke in week one.
Do this with your own chores
Go look at what your ops team does every single morning. The boring stuff. The stuff that depends on someone remembering.
That’s your list. Start with the one that breaks when a person is out sick.
Originally published .

