Menu
Dropbox Tech·September 29, 2026

Evolving a Calendar Assistant to be AI-Native: An Agent-Based Architecture

This article discusses Dropbox's approach to integrating AI agents into their Reclaim calendar assistant without a full rewrite. It details the architectural decisions behind building an agent platform that ensures consistency, manageability, and reviewability of AI-driven calendar changes by leveraging existing scheduling logic and a "Preview Mode" for user validation.

Read original on Dropbox Tech

Dropbox evolved its Reclaim calendar assistant to incorporate AI-native capabilities, allowing users to describe scheduling goals in natural language. The core challenge was to integrate AI agents while preserving Reclaim's existing, critical scheduling logic and ensuring consistency and user control over calendar modifications. This involved designing an agent platform that could interpret requests, interact with Reclaim's capabilities, and provide a clear review mechanism for users.

The Agent Platform Architecture

The agent platform acts as an intermediary, providing the AI model with relevant calendar details and controlled access to Reclaim's features. The architecture is built around an "agent loop" where the model interprets user input, the agent manages the process by providing instructions and tools (e.g., to look up information or request actions), and the agent then feeds information back to the model. This iterative exchange allows complex requests to be broken down and processed safely. A key design decision was to build the agent loop, tools, and context-gathering system in-house, directly connecting to model providers, to maintain control and adaptability.

💡

Controlled Access and Subagents

The agent platform provides only relevant calendar information and tools for each request, preventing the agent from accessing all data at once. For more complex requests, a specialized subagent can handle a specific part, ensuring focus and managing complexity.

Ensuring Consistency with Schedule Actions

To prevent fragmentation and ensure consistent behavior, all calendar modifications, whether initiated by a user, the automated scheduler, or an AI agent, are routed through a unified mechanism called Schedule Actions. A Schedule Action represents a standard operation (e.g., creating an event, updating an RSVP). By using a single, shared path with the same validation and commit process, engineers avoid duplicating complex scheduling rules and ensure that all interactions with the calendar adhere to the same logic. This is crucial given that a single calendar change can have cascading effects on other events or attendees.

User Review with Preview Mode

A critical component for user trust and control is Preview Mode. This feature presents users with a temporary version of their calendar, allowing them to review proposed AI suggestions or chat-initiated changes before they are applied. This "what-if" scenario shows the full impact of a change, including effects on other events or attendee availability. To make Preview Mode fast and responsive, the automated scheduler was re-engineered as a pure function, enabling rapid recalculation of proposed schedules without persistence. This temporary calendar state is stored in a fast data store like Redis to ensure quick retrieval and updates of attendee availability.

  • Unified Scheduling Logic: All actors (users, automated scheduler, AI agents) use the same "Schedule Action" for consistency.
  • Controlled Agent Interaction: The agent platform provides targeted information and tools to the AI model, limiting its scope to the immediate task.
  • User-Centric Review: "Preview Mode" allows users to validate AI-suggested changes before commitment, crucial for high-stakes actions like calendar modifications.
  • Performance for Previews: Re-architecting the scheduler as a pure function and using Redis for temporary data ensures fast and responsive previews.
AI agentsnatural language processingcalendar managementsystem architecturesoftware evolutionmicroservicesAPI designconsistency

Comments

Loading comments...