Build a Calendar-Blocker AI Agent in 30 Minutes
An agent that finds open blocks in your week, protects deep-work time, and pushes back when meetings creep in. Build it today without writing real code.
The build: every Sunday night, an agent reviews your upcoming week, identifies open 2+ hour blocks, and books them as "deep work" with descriptive titles. Meetings that try to overwrite get a polite decline that proposes alternatives.
Total time: 30 minutes.
What you'll need
- Google Calendar (or other major calendar with API access)
- n8n
- AI API key
Step 1: Sunday trigger (2 min)
n8n cron node. Fire every Sunday at 8 PM.
Step 2: Fetch the week (5 min)
Add a Google Calendar node. Action: get events. Range: next Monday through next Friday (or whatever week you protect).
Step 3: Find open blocks (10 min)
Add a Code node that processes the events and finds gaps:
const events = $input.first().json;
const workdays = [/* Monday-Friday next week, as Date objects */];
const blocks = [];
workdays.forEach(day => {
const dayStart = new Date(day); dayStart.setHours(9, 0, 0);
const dayEnd = new Date(day); dayEnd.setHours(17, 0, 0);
const dayEvents = events.filter(e =>
new Date(e.start.dateTime) >= dayStart &&
new Date(e.end.dateTime) <= dayEnd
).sort((a, b) => new Date(a.start.dateTime) - new Date(b.start.dateTime));
let cursor = dayStart;
dayEvents.forEach(e => {
const eventStart = new Date(e.start.dateTime);
const gap = (eventStart - cursor) / (1000 * 60); // minutes
if (gap >= 120) {
blocks.push({ start: new Date(cursor), end: eventStart });
}
cursor = new Date(e.end.dateTime);
});
// Final gap until end of day
if ((dayEnd - cursor) / (1000 * 60) >= 120) {
blocks.push({ start: new Date(cursor), end: dayEnd });
}
});
return [{ json: { blocks } }];Step 4: AI generates titles (5 min)
For each block, generate a meaningful "deep work" title. AI prompt:
Generate a calendar block title for a focused work session.
Duration: {{ duration_minutes }} minutes
Day of week: {{ day }}
Time of day: {{ time }}
My current project priorities: {PROJECT_LIST}
Return ONE specific title (5-10 words) that names a likely focus area. Make it sound like work, not like a break.
Examples of good titles:
- "Deep work: prometheus content batch"
- "Build: card-executor pipeline"
- "Writing: weekly newsletter draft"
NOT acceptable:
- "Deep work"
- "Focus time"
- "Personal"The specificity is the magic. "Deep work: prometheus content batch" makes meetings more likely to schedule around it. "Focus time" gets overwritten.
Step 5: Create the blocks (5 min)
Add a Google Calendar "Create event" node. Loop through the blocks array (Split In Batches node). Create each event with the AI-generated title.
Set the events to "Busy" status. Add a description: "Auto-blocked by calendar agent. Move or delete if needed."
Step 6: Test (3 min)
Run the workflow manually. Check Google Calendar for next week. Verify blocks landed.
Delete any blocks you don't want.
Common gotchas
- Time zones: Google Calendar API expects RFC3339 timestamps with explicit TZ. Use ISO strings with the correct offset.
- Recurring events overlap detection is tricky. The basic version above doesn't handle them perfectly. Refine if you need it.
- The agent will compete with manual blocks you create. That's the point.
What I do with this
Sunday night the agent maps my week. I get a Slack notification with the proposed blocks. I approve or adjust.
Monday morning I have 6-12 hours of deep work already on my calendar, named specifically. When meeting requests come in, I see them next to real work I've already committed to, not next to white space.
Meeting count dropped 35% in the first month. Not because I declined more (the count of meetings I accepted is roughly the same). Because fewer were proposed once the calendar looked busy.
What to add next
- Auto-decline meetings that overlap with blocks, with a polite alternative
- Different block strategies (deep work, admin, meetings, recovery)
- Energy-aware scheduling (deep work in morning if you're a morning person)
- Weekly review of which blocks actually held
Don't over-engineer. The Sunday night auto-block is 80% of the value.
Get the next one.
Field notes from real deployments, written the way this one was. No schedule promised and nothing sold to you. Unsubscribe whenever.