ForgetText

Inspiration

The idea for ForgetText came from a simple observation: we rarely forget what we want to say, but we often forget when we need to say it.

Birthday wishes, follow-ups, reminders, and check-ins usually come to mind at inconvenient times. Existing solutions rely on calendar reminders or manual scheduling forms, which add friction and still require users to return later and complete the task themselves.

We wanted to create an AI agent that removes that friction entirely. Instead of remembering a message at the right time, users can simply express their intent in natural language and let the system handle the rest.

What it does

ForgetText is an AI-powered message scheduling agent for Facebook Messenger.

Users type instructions such as:

Send Minh Ngoc "Happy Birthday!" tomorrow at 9 AM

The system understands the recipient, message content, and delivery time, schedules the task, and automatically sends the message through Messenger when the time arrives.

The platform can also enrich messages with external context. For example:

Check my GitLab issues and send a summary to Hanh Trang at 5 PM

In this case, the agent retrieves live GitLab data, generates a summary with Gemini, and delivers the result automatically.

How we built it

Our architecture combines several Google Cloud services and agentic components:

  • Gemini 2.5 Flash on Vertex AI parses natural language into structured scheduling instructions.
  • FastAPI serves the chat interface and orchestration layer.
  • APScheduler manages future message execution.
  • Playwright automates a real Messenger browser session to send messages.
  • Google Cloud Storage persists browser session data across container restarts.
  • Cloud Run hosts the application with warm instances to support scheduled execution.
  • Artifact Registry stores deployment images.

Workflow

User
  ↓
Gemini on Vertex AI
  ↓
Scheduler
  ↓
Playwright Browser Automation
  ↓
Facebook Messenger

This allows users to interact naturally while the system performs the execution autonomously at a later time.

Challenges we ran into

The biggest challenge was building reliable browser automation in a serverless environment.

Cloud Run containers are stateless by design, while Messenger automation requires persistent authenticated browser sessions. We solved this by archiving browser session data to Google Cloud Storage and restoring it whenever a container starts.

Another challenge was ensuring safe automation. Messenger's interface changes frequently, and incorrect selectors could cause messages to be sent to the wrong location. We implemented guardrails that verify the real Messenger composer before any automated action is executed.

Finally, scheduling future jobs inside a cloud-hosted application required careful Cloud Run configuration, including warm instances and disabled CPU throttling to ensure tasks could execute reliably after users disconnected.

What we learned

This project taught us that building an AI agent is much more than calling an LLM.

We learned how to combine reasoning, scheduling, persistence, and browser automation into a complete workflow that performs real-world actions. We also gained hands-on experience deploying agentic systems on Google Cloud using Vertex AI, Cloud Run, Cloud Storage, and Artifact Registry.

Most importantly, we learned that the gap between user intent and execution can often be eliminated entirely. Users shouldn't need to manage forms, reminders, or workflows when they can simply state what they want to happen and let an AI agent carry it out.

Future plans

We currently support Facebook Messenger as our first communication channel.

Future work includes:

  • Slack, WhatsApp, and SMS integrations
  • Durable database-backed scheduling
  • Contact disambiguation and recipient verification
  • Preview and approval workflows
  • Additional agent integrations for external data sources

Vision

Turn intentions into actions, delivered exactly when they matter.

Built With

Share this project:

Updates