Why my personal AI assistant ditched ICS for the Calendar API

I thought building a personal AI assistant would mostly be API orchestration. It wasn’t. Last week I noticed that my assistant, Fernão, had picked up the habits of a legacy enterprise monolith, and the calendar integration was the worst of it.

The first version pulled my schedule from an ICS feed. That worked, but only in the sense that the data eventually arrived. Every request downloaded my entire calendar history so the assistant could find one meeting, which is like checking out the whole library to read a single sentence.

Where the ICS feed fell apart

Generating my schedule took nearly five minutes, which makes an assistant useless for anything you need during the day. A personal AI assistant has to answer in seconds, so I moved the calendar reads over to the Google Calendar API.

With server-side filtering, Fernão only pulls the events it asked for. I kept the old path around as a fallback, so if the API call fails the code drops back to the ICS feed. Response time went from 300 seconds to about twenty.

My earlier post on how to use OpenClaw to make a personal AI assistant covers how the rest of the setup fits together.

def bbioon_fetch_calendar_api(target_date=None):
    """
    Refactored fetcher using native Google Calendar API filtering.
    """
    service = get_calendar_service()
    if not service:
        return None
    
    # Get time range for native filtering
    day_start, day_end, _, _, _ = _get_local_time_range(target_date)
    
    try:
        # Crucial: Use timeMin and timeMax for server-side filtering
        events_result = service.events().list(
            calendarId='primary',
            timeMin=day_start.isoformat(),
            timeMax=day_end.isoformat(),
            singleEvents=True,
            orderBy='startTime'
        ).execute()
        
        return events_result.get('items', [])
    except Exception as e:
        print(f"[GCal API] Error: {e}")
        return None

The Task Breaker module

Speed was only half of it. I also wanted Fernão to be useful for project work, so I built the “Task Breaker.” Everyone has those giant entries sitting on a list: “Finish Documentation” and friends. They sit there for weeks because there is nothing in them you can actually start on.

The workflow is short. It pulls a large task out of Microsoft To-Do, sends it through a context prompt that splits the project into 20-minute subtasks, then writes those back to the app with due dates.

There is a “Submit All” button too, because clicking “Add” twenty times in a row is exactly the sort of thing I built the assistant to avoid. I also fixed a design bug that had the interface looking like a fantasy warrior game. Fernão is a medieval chronicler, and the UI should read that way.

The prompt does most of the work

The model matters less here than the prompt around it. The breakdown prompt sets hard rules: start each subtask with a verb, keep it to 20 minutes, and order the steps the way you would actually do them. Drop those rules and you get a list of “work on X” items that are no more useful than the task you started with.

If this kind of personal AI assistant work is eating your dev hours, I can take it off your plate. I have been doing WordPress and API integrations since the 4.x days.

Building your own tooling

A “personal operating system” is really just a pile of small workflows that match how you work. A Dividend Analyzer, a Guitar Practice Organizer: different subjects, same aim, which is cutting out friction. Generic tools tend to be slower than something you wrote for your own case, and they rarely know enough about your data to filter it properly.

author avatar
Ahmad Wael
I'm a WordPress and WooCommerce developer with 15+ years of experience building custom e-commerce solutions and plugins. I specialize in PHP development, following WordPress coding standards to deliver clean, maintainable code. Currently, I'm exploring AI and e-commerce by building multi-agent systems and SaaS products that integrate technologies like Google Gemini API with WordPress platforms, approaching every project with a commitment to performance, security, and exceptional user experience.